Revision ed757e14 hw/virtio-pci.c

b/hw/virtio-pci.c
364 364
static void virtio_write_config(PCIDevice *pci_dev, uint32_t address,
365 365
                                uint32_t val, int len)
366 366
{
367
    VirtIOPCIProxy *proxy = DO_UPCAST(VirtIOPCIProxy, pci_dev, pci_dev);
368

  
369
    if (PCI_COMMAND == address) {
370
        if (!(val & PCI_COMMAND_MASTER)) {
371
            proxy->vdev->status &= !VIRTIO_CONFIG_S_DRIVER_OK;
372
        }
373
    }
374

  
367 375
    pci_default_write_config(pci_dev, address, val, len);
368
    msix_write_config(pci_dev, address, val, len);
376
    if(proxy->vdev->nvectors)
377
        msix_write_config(pci_dev, address, val, len);
369 378
}
370 379

  
371 380
static const VirtIOBindings virtio_pci_bindings = {
......
407 416
                         msix_bar_size(&proxy->pci_dev),
408 417
                         PCI_ADDRESS_SPACE_MEM,
409 418
                         msix_mmio_map);
410
        proxy->pci_dev.config_write = virtio_write_config;
411 419
        proxy->pci_dev.unregister = msix_uninit;
412 420
    } else
413 421
        vdev->nvectors = 0;
414 422

  
423
    proxy->pci_dev.config_write = virtio_write_config;
424

  
415 425
    size = VIRTIO_PCI_REGION_SIZE(&proxy->pci_dev) + vdev->config_len;
416 426
    if (size & (size-1))
417 427
        size = 1 << qemu_fls(size);

Also available in: Unified diff