]> xenbits.xensource.com Git - libvirt.git/commitdiff
Introduce QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY
authorJán Tomko <jtomko@redhat.com>
Mon, 8 Aug 2016 14:05:27 +0000 (16:05 +0200)
committerJán Tomko <jtomko@redhat.com>
Wed, 17 Aug 2016 16:13:06 +0000 (18:13 +0200)
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

src/qemu/qemu_capabilities.c
src/qemu/qemu_capabilities.h
tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml
tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml
tests/qemucapabilitiesdata/caps_2.6.0-gicv2.aarch64.xml
tests/qemucapabilitiesdata/caps_2.6.0-gicv3.aarch64.xml
tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml
tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml
tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml

index 148321764938d9ed9fdac23e216fa8b35cefc56b..8efb8fbc9a98e92d30509d5deea2ad755805b4ae 100644 (file)
@@ -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);
     }
 
index d249e2e1f4efb3849f7d816cb9837c27d8735618..776a0f3a541fd8645fc6e58d82a74b63924e3df7 100644 (file)
@@ -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;
index 339ee1fe145e3286979f2e154e2b69a1357b44c9..db778ef4c92c2dc6afd915f6b7c395f88d239efd 100644 (file)
   <flag name='display'/>
   <flag name='intel-iommu'/>
   <flag name='smm'/>
+  <flag name='virtio-pci-disable-legacy'/>
   <version>2004000</version>
   <kvmVersion>0</kvmVersion>
   <package></package>
index c1a68d085a77701dec7734cdcf8f21fdfb491b98..fc915ad254794308320b7ba3c74b0d67a884eb13 100644 (file)
   <flag name='display'/>
   <flag name='intel-iommu'/>
   <flag name='smm'/>
+  <flag name='virtio-pci-disable-legacy'/>
   <version>2005000</version>
   <kvmVersion>0</kvmVersion>
   <package></package>
index 85d7d3fbf9edb88778bcc4e42b4e2d364fe3b333..fd14665d53974791942dd687ebffbbe64a1ec918 100644 (file)
   <flag name='tls-creds-x509'/>
   <flag name='display'/>
   <flag name='smm'/>
+  <flag name='virtio-pci-disable-legacy'/>
   <version>2005094</version>
   <kvmVersion>0</kvmVersion>
   <package></package>
index deb12577e34133429fd02779311188dbcacb40cb..eb708f8a983ac820d65259931e79a22d9d890e4c 100644 (file)
   <flag name='tls-creds-x509'/>
   <flag name='display'/>
   <flag name='smm'/>
+  <flag name='virtio-pci-disable-legacy'/>
   <version>2005094</version>
   <kvmVersion>0</kvmVersion>
   <package></package>
index 2b7ea0e8cc8c42ea259ca8c49d777df9119521b4..482b3849b50f1917b480e7735542bb20a545669d 100644 (file)
   <flag name='tls-creds-x509'/>
   <flag name='display'/>
   <flag name='smm'/>
+  <flag name='virtio-pci-disable-legacy'/>
   <version>2005094</version>
   <kvmVersion>0</kvmVersion>
   <package></package>
index 495c1140b177426e3fd64287790dec3b9a43c4da..60f1fcfe85d5f2253e8611bca0b76ae6b5f3e969 100644 (file)
   <flag name='display'/>
   <flag name='intel-iommu'/>
   <flag name='smm'/>
+  <flag name='virtio-pci-disable-legacy'/>
   <version>2006000</version>
   <kvmVersion>0</kvmVersion>
   <package></package>
index fafffa62f70751948f1ae2f7fac28b897134b827..ccb190b14dc5fd45b746a0a45b756ed47c50c289 100644 (file)
   <flag name='display'/>
   <flag name='intel-iommu'/>
   <flag name='smm'/>
+  <flag name='virtio-pci-disable-legacy'/>
   <version>2006091</version>
   <kvmVersion>0</kvmVersion>
   <package> (v2.7.0-rc1-52-g42e0d60)</package>