On 14.09.2009, at 15:31, Yan Vugenfirer wrote: > Signed-off-by: Yan Vugenfirer <yvuge...@redhat.com> > > --- > hw/virtio-pci.c | 14 ++++++++++++-- > 1 files changed, 12 insertions(+), 2 deletions(-) > > diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c > index f812ab7..a0a22c4 100644 > --- a/hw/virtio-pci.c > +++ b/hw/virtio-pci.c > @@ -364,8 +364,17 @@ static void virtio_map(PCIDevice *pci_dev, int > region_num, > static void virtio_write_config(PCIDevice *pci_dev, uint32_t address, > uint32_t val, int len) > { > + VirtIOPCIProxy *proxy = DO_UPCAST(VirtIOPCIProxy, pci_dev, pci_dev); > + > + if (PCI_COMMAND == address) { > + if (!(val & PCI_COMMAND_MASTER)) { > + proxy->vdev->status &= ~VIRTIO_CONFIG_S_DRIVER_OK;
This part breaks PCI hotplug with Linux guests. What happens is the following: (qemu) pci_add auto nic model=virtio,vlan=0 - Virtio dev 1 -> write config (0) - Virtio dev 1 -> write config (0x3) - Virtio dev 1 -> set status explicitly to OK (qemu) pci_add auto storage file=/tmp/image.raw,if=virtio - Virtio dev 1 -> write config (0x3) -> Unset DRIVER_OK bit -> network device becomes unresponsive - Virtio dev 2 -> write config (0) - Virtio dev 2 -> write config (0x3) - Virtio dev 2 -> set status explicitly to OK Please either revert this patch or provide a proper fix. Alex