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