[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v1] piix: fix regression during unplug in Xen HVM domUs
On 3/16/21 11:44 PM, Olaf Hering wrote: > Commit ee358e919e385fdc79d59d0d47b4a81e349cd5c9 causes a regression in > Xen HVM domUs which run xenlinux based kernels. > > If the domU has an USB device assigned, for example with > "usbdevice=['tablet']" in domU.cfg, the late unplug of devices will > kill the emulated USB host. As a result the khubd thread hangs, and as > a result the entire boot process. > > For some reason this does not affect pvops based kernels. This is > most likely caused by the fact that unplugging happens very early > during boot. > > Signed-off-by: Olaf Hering <olaf@xxxxxxxxx> > --- > hw/ide/piix.c | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/hw/ide/piix.c b/hw/ide/piix.c > index b9860e35a5..2a380a90e9 100644 > --- a/hw/ide/piix.c > +++ b/hw/ide/piix.c > @@ -34,6 +34,7 @@ > #include "hw/ide/pci.h" > #include "trace.h" > > +static bool pci_piix3_xen_ide_unplug_done; This field belongs to the device state (PCIIDEState or BMDMAState). > static uint64_t bmdma_read(void *opaque, hwaddr addr, unsigned size) > { > BMDMAState *bm = opaque; > @@ -109,6 +110,8 @@ static void piix_ide_reset(DeviceState *dev) > uint8_t *pci_conf = pd->config; > int i; > > + if (pci_piix3_xen_ide_unplug_done == true) > + return; > for (i = 0; i < 2; i++) { > ide_bus_reset(&d->bus[i]); > } > @@ -169,6 +172,7 @@ int pci_piix3_xen_ide_unplug(DeviceState *dev, bool aux) > IDEBus *idebus; > BlockBackend *blk; > > + pci_piix3_xen_ide_unplug_done = true; > pci_ide = PCI_IDE(dev); > > for (i = aux ? 1 : 0; i < 4; i++) { > @@ -259,6 +263,7 @@ static const TypeInfo piix4_ide_info = { > > static void piix_ide_register_types(void) > { > + pci_piix3_xen_ide_unplug_done = false; > type_register_static(&piix3_ide_info); > type_register_static(&piix3_ide_xen_info); > type_register_static(&piix4_ide_info); >
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |