From: Ján Tomko Date: Mon, 8 Aug 2016 14:05:27 +0000 (+0200) Subject: Introduce QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=41f5c2ca27762770a40187fe63459c10a74c79f9;p=libvirt.git Introduce QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY Check whether the disable-legacy property is present on the following devices: virtio-balloon-pci virtio-blk-pci virtio-scsi-pci virtio-serial-pci virtio-9p-pci virtio-net-pci virtio-rng-pci virtio-gpu-pci virtio-input-host-pci virtio-keyboard-pci virtio-mouse-pci virtio-tablet-pci Assuming that if QEMU knows other virtio devices where this property is applicable, it will have at least one of these devices. Added in QEMU by: commit e266d421490e0ae83044bbebb209b2d3650c0ba6 virtio-pci: add flags to enable/disable legacy/modern --- diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 1483217649..8efb8fbc9a 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -340,6 +340,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST, "display", /* 230 */ "intel-iommu", "smm", + "virtio-pci-disable-legacy", ); @@ -1741,6 +1742,34 @@ static struct virQEMUCapsObjectTypeProps virQEMUCapsObjectProps[] = { ARRAY_CARDINALITY(virQEMUCapsObjectPropsUSBNECXHCI) }, }; +struct virQEMUCapsPropTypeObjects { + const char *prop; + int flag; + const char **objects; +}; + +static const char *virQEMUCapsVirtioPCIDisableLegacyObjects[] = { + "virtio-balloon-pci", + "virtio-blk-pci", + "virtio-scsi-pci", + "virtio-serial-pci", + "virtio-9p-pci", + "virtio-net-pci", + "virtio-rng-pci", + "virtio-gpu-pci", + "virtio-input-host-pci", + "virtio-keyboard-pci", + "virtio-mouse-pci", + "virtio-tablet-pci", + NULL +}; + +static struct virQEMUCapsPropTypeObjects virQEMUCapsPropObjects[] = { + { "disable-legacy", + QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY, + virQEMUCapsVirtioPCIDisableLegacyObjects } +}; + static void virQEMUCapsProcessStringFlags(virQEMUCapsPtr qemuCaps, @@ -1761,6 +1790,31 @@ virQEMUCapsProcessStringFlags(virQEMUCapsPtr qemuCaps, } +static void +virQEMUCapsProcessProps(virQEMUCapsPtr qemuCaps, + size_t nprops, + struct virQEMUCapsPropTypeObjects *props, + const char *object, + size_t nvalues, + char *const*values) +{ + size_t i, j; + + for (i = 0; i < nprops; i++) { + if (virQEMUCapsGet(qemuCaps, props[i].flag)) + continue; + + for (j = 0; j < nvalues; j++) { + if (STREQ(values[j], props[i].prop)) { + if (virStringArrayHasString(props[i].objects, object)) + virQEMUCapsSet(qemuCaps, props[i].flag); + break; + } + } + } +} + + static void virQEMUCapsFreeStringList(size_t len, char **values) @@ -2470,6 +2524,10 @@ virQEMUCapsProbeQMPObjects(virQEMUCapsPtr qemuCaps, virQEMUCapsObjectProps[i].nprops, virQEMUCapsObjectProps[i].props, nvalues, values); + virQEMUCapsProcessProps(qemuCaps, + ARRAY_CARDINALITY(virQEMUCapsPropObjects), + virQEMUCapsPropObjects, type, + nvalues, values); virQEMUCapsFreeStringList(nvalues, values); } diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index d249e2e1f4..776a0f3a54 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -373,6 +373,7 @@ typedef enum { QEMU_CAPS_DISPLAY, /* -display */ QEMU_CAPS_DEVICE_INTEL_IOMMU, /* -device intel-iommu */ QEMU_CAPS_MACHINE_SMM_OPT, /* -machine xxx,smm=on/off/auto */ + QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY, /* virtio-*pci.disable-legacy */ QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; diff --git a/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml index 339ee1fe14..db778ef4c9 100644 --- a/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml @@ -184,6 +184,7 @@ + 2004000 0 diff --git a/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml index c1a68d085a..fc915ad254 100644 --- a/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml @@ -189,6 +189,7 @@ + 2005000 0 diff --git a/tests/qemucapabilitiesdata/caps_2.6.0-gicv2.aarch64.xml b/tests/qemucapabilitiesdata/caps_2.6.0-gicv2.aarch64.xml index 85d7d3fbf9..fd14665d53 100644 --- a/tests/qemucapabilitiesdata/caps_2.6.0-gicv2.aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_2.6.0-gicv2.aarch64.xml @@ -158,6 +158,7 @@ + 2005094 0 diff --git a/tests/qemucapabilitiesdata/caps_2.6.0-gicv3.aarch64.xml b/tests/qemucapabilitiesdata/caps_2.6.0-gicv3.aarch64.xml index deb12577e3..eb708f8a98 100644 --- a/tests/qemucapabilitiesdata/caps_2.6.0-gicv3.aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_2.6.0-gicv3.aarch64.xml @@ -158,6 +158,7 @@ + 2005094 0 diff --git a/tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml b/tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml index 2b7ea0e8cc..482b3849b5 100644 --- a/tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml +++ b/tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml @@ -152,6 +152,7 @@ + 2005094 0 diff --git a/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml index 495c1140b1..60f1fcfe85 100644 --- a/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml @@ -195,6 +195,7 @@ + 2006000 0 diff --git a/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml index fafffa62f7..ccb190b14d 100644 --- a/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml @@ -192,6 +192,7 @@ + 2006091 0 (v2.7.0-rc1-52-g42e0d60)