Revision 1129714f

b/hw/virtio-pci.c
27 27
#include "kvm.h"
28 28
#include "blockdev.h"
29 29
#include "virtio-pci.h"
30
#include "range.h"
30 31

  
31 32
/* from Linux's linux/virtio_pci.h */
32 33

  
......
516 517
{
517 518
    VirtIOPCIProxy *proxy = DO_UPCAST(VirtIOPCIProxy, pci_dev, pci_dev);
518 519

  
519
    if (PCI_COMMAND == address) {
520
        if (!(val & PCI_COMMAND_MASTER)) {
521
            if (!(proxy->flags & VIRTIO_PCI_FLAG_BUS_MASTER_BUG)) {
522
                virtio_pci_stop_ioeventfd(proxy);
523
                virtio_set_status(proxy->vdev,
524
                                  proxy->vdev->status & ~VIRTIO_CONFIG_S_DRIVER_OK);
525
            }
526
        }
520
    pci_default_write_config(pci_dev, address, val, len);
521

  
522
    if (range_covers_byte(address, len, PCI_COMMAND) &&
523
        !(pci_dev->config[PCI_COMMAND] & PCI_COMMAND_MASTER) &&
524
        !(proxy->flags & VIRTIO_PCI_FLAG_BUS_MASTER_BUG)) {
525
        virtio_pci_stop_ioeventfd(proxy);
526
        virtio_set_status(proxy->vdev,
527
                          proxy->vdev->status & ~VIRTIO_CONFIG_S_DRIVER_OK);
527 528
    }
528 529

  
529
    pci_default_write_config(pci_dev, address, val, len);
530 530
    msix_write_config(pci_dev, address, val, len);
531 531
}
532 532

  

Also available in: Unified diff