Commit a1e0fea58746d26fea95c94fde1449b684651fd1
Committed by
Anthony Liguori
1 parent
8ad12514
qdev/compat: virtio-net-pci 0.10 compatibility.
Add vectors property, allowing to turn off msi by setting vectors=0. Add compat property to pc-0.10 disabling msi. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Showing
2 changed files
with
28 additions
and
3 deletions
hw/pc.c
@@ -1533,6 +1533,10 @@ static QEMUMachine pc_machine_v0_10 = { | @@ -1533,6 +1533,10 @@ static QEMUMachine pc_machine_v0_10 = { | ||
1533 | .driver = "virtio-console-pci", | 1533 | .driver = "virtio-console-pci", |
1534 | .property = "class", | 1534 | .property = "class", |
1535 | .value = stringify(PCI_CLASS_DISPLAY_OTHER), | 1535 | .value = stringify(PCI_CLASS_DISPLAY_OTHER), |
1536 | + },{ | ||
1537 | + .driver = "virtio-net-pci", | ||
1538 | + .property = "vectors", | ||
1539 | + .value = stringify(0), | ||
1536 | }, | 1540 | }, |
1537 | { /* end of list */ } | 1541 | { /* end of list */ } |
1538 | }, | 1542 | }, |
hw/virtio-pci.c
@@ -19,6 +19,7 @@ | @@ -19,6 +19,7 @@ | ||
19 | #include "pci.h" | 19 | #include "pci.h" |
20 | //#include "sysemu.h" | 20 | //#include "sysemu.h" |
21 | #include "msix.h" | 21 | #include "msix.h" |
22 | +#include "net.h" | ||
22 | 23 | ||
23 | /* from Linux's linux/virtio_pci.h */ | 24 | /* from Linux's linux/virtio_pci.h */ |
24 | 25 | ||
@@ -87,6 +88,7 @@ typedef struct { | @@ -87,6 +88,7 @@ typedef struct { | ||
87 | VirtIODevice *vdev; | 88 | VirtIODevice *vdev; |
88 | uint32_t addr; | 89 | uint32_t addr; |
89 | uint32_t class_code; | 90 | uint32_t class_code; |
91 | + uint32_t nvectors; | ||
90 | } VirtIOPCIProxy; | 92 | } VirtIOPCIProxy; |
91 | 93 | ||
92 | /* virtio device */ | 94 | /* virtio device */ |
@@ -486,11 +488,21 @@ static void virtio_net_init_pci(PCIDevice *pci_dev) | @@ -486,11 +488,21 @@ static void virtio_net_init_pci(PCIDevice *pci_dev) | ||
486 | VirtIODevice *vdev; | 488 | VirtIODevice *vdev; |
487 | 489 | ||
488 | vdev = virtio_net_init(&pci_dev->qdev); | 490 | vdev = virtio_net_init(&pci_dev->qdev); |
491 | + | ||
492 | + /* set nvectors from property, unless the user specified something | ||
493 | + * via -net nic,model=virtio,vectors=n command line option */ | ||
494 | + if (pci_dev->qdev.nd->nvectors == NIC_NVECTORS_UNSPECIFIED) | ||
495 | + if (proxy->nvectors != NIC_NVECTORS_UNSPECIFIED) | ||
496 | + vdev->nvectors = proxy->nvectors; | ||
497 | + | ||
489 | virtio_init_pci(proxy, vdev, | 498 | virtio_init_pci(proxy, vdev, |
490 | PCI_VENDOR_ID_REDHAT_QUMRANET, | 499 | PCI_VENDOR_ID_REDHAT_QUMRANET, |
491 | PCI_DEVICE_ID_VIRTIO_NET, | 500 | PCI_DEVICE_ID_VIRTIO_NET, |
492 | PCI_CLASS_NETWORK_ETHERNET, | 501 | PCI_CLASS_NETWORK_ETHERNET, |
493 | 0x00); | 502 | 0x00); |
503 | + | ||
504 | + /* make the actual value visible */ | ||
505 | + proxy->nvectors = vdev->nvectors; | ||
494 | } | 506 | } |
495 | 507 | ||
496 | static void virtio_balloon_init_pci(PCIDevice *pci_dev) | 508 | static void virtio_balloon_init_pci(PCIDevice *pci_dev) |
@@ -520,9 +532,18 @@ static PCIDeviceInfo virtio_info[] = { | @@ -520,9 +532,18 @@ static PCIDeviceInfo virtio_info[] = { | ||
520 | {/* end of list */} | 532 | {/* end of list */} |
521 | }, | 533 | }, |
522 | },{ | 534 | },{ |
523 | - .qdev.name = "virtio-net-pci", | ||
524 | - .qdev.size = sizeof(VirtIOPCIProxy), | ||
525 | - .init = virtio_net_init_pci, | 535 | + .qdev.name = "virtio-net-pci", |
536 | + .qdev.size = sizeof(VirtIOPCIProxy), | ||
537 | + .init = virtio_net_init_pci, | ||
538 | + .qdev.props = (Property[]) { | ||
539 | + { | ||
540 | + .name = "vectors", | ||
541 | + .info = &qdev_prop_uint32, | ||
542 | + .offset = offsetof(VirtIOPCIProxy, nvectors), | ||
543 | + .defval = (uint32_t[]) { NIC_NVECTORS_UNSPECIFIED }, | ||
544 | + }, | ||
545 | + {/* end of list */} | ||
546 | + }, | ||
526 | },{ | 547 | },{ |
527 | .qdev.name = "virtio-console-pci", | 548 | .qdev.name = "virtio-console-pci", |
528 | .qdev.size = sizeof(VirtIOPCIProxy), | 549 | .qdev.size = sizeof(VirtIOPCIProxy), |