6d3351
From 363d20b7336faeb280bf583d9d148e441d4286be Mon Sep 17 00:00:00 2001
6d3351
Message-Id: <363d20b7336faeb280bf583d9d148e441d4286be@dist-git>
6d3351
From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
6d3351
Date: Tue, 16 May 2017 10:44:50 +0200
6d3351
Subject: [PATCH] qemu: allow conditional device property probing
6d3351
MIME-Version: 1.0
6d3351
Content-Type: text/plain; charset=UTF-8
6d3351
Content-Transfer-Encoding: 8bit
6d3351
6d3351
Do not probe for devices that QEMU does not know
6d3351
when probing for device options.
6d3351
6d3351
(cherry picked from commit 4ae59411fa3f16e18e16cc4db7894fe5fd6404ce)
6d3351
Signed-off-by: Ján Tomko <jtomko@redhat.com>
6d3351
6d3351
https://bugzilla.redhat.com/show_bug.cgi?id=1427005
6d3351
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
6d3351
---
6d3351
 src/qemu/qemu_capabilities.c | 99 ++++++++++++++++++++++++++++++--------------
6d3351
 1 file changed, 68 insertions(+), 31 deletions(-)
6d3351
6d3351
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
6d3351
index b76b79342..49fb52e03 100644
6d3351
--- a/src/qemu/qemu_capabilities.c
6d3351
+++ b/src/qemu/qemu_capabilities.c
6d3351
@@ -1728,71 +1728,103 @@ struct virQEMUCapsObjectTypeProps {
6d3351
     const char *type;
6d3351
     struct virQEMUCapsStringFlags *props;
6d3351
     size_t nprops;
6d3351
+    int capsCondition;
6d3351
 };
6d3351
 
6d3351
 static struct virQEMUCapsObjectTypeProps virQEMUCapsObjectProps[] = {
6d3351
     { "virtio-blk-pci", virQEMUCapsObjectPropsVirtioBlk,
6d3351
-      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVirtioBlk) },
6d3351
+      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVirtioBlk),
6d3351
+      -1 },
6d3351
     { "virtio-net-pci", virQEMUCapsObjectPropsVirtioNet,
6d3351
-      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVirtioNet) },
6d3351
+      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVirtioNet),
6d3351
+      -1 },
6d3351
     { "virtio-scsi-pci", virQEMUCapsObjectPropsVirtioSCSI,
6d3351
-      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVirtioSCSI) },
6d3351
+      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVirtioSCSI),
6d3351
+      -1 },
6d3351
     { "virtio-blk-ccw", virQEMUCapsObjectPropsVirtioBlk,
6d3351
-      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVirtioBlk) },
6d3351
+      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVirtioBlk),
6d3351
+      -1 },
6d3351
     { "virtio-net-ccw", virQEMUCapsObjectPropsVirtioNet,
6d3351
-      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVirtioNet) },
6d3351
+      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVirtioNet),
6d3351
+      -1 },
6d3351
     { "virtio-scsi-ccw", virQEMUCapsObjectPropsVirtioSCSI,
6d3351
-      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVirtioSCSI) },
6d3351
+      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVirtioSCSI),
6d3351
+      -1 },
6d3351
     { "virtio-blk-s390", virQEMUCapsObjectPropsVirtioBlk,
6d3351
-      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVirtioBlk) },
6d3351
+      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVirtioBlk),
6d3351
+      -1 },
6d3351
     { "virtio-net-s390", virQEMUCapsObjectPropsVirtioNet,
6d3351
-      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVirtioNet) },
6d3351
+      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVirtioNet),
6d3351
+      -1 },
6d3351
     { "pci-assign", virQEMUCapsObjectPropsPCIAssign,
6d3351
-      ARRAY_CARDINALITY(virQEMUCapsObjectPropsPCIAssign) },
6d3351
+      ARRAY_CARDINALITY(virQEMUCapsObjectPropsPCIAssign),
6d3351
+      -1 },
6d3351
     { "kvm-pci-assign", virQEMUCapsObjectPropsPCIAssign,
6d3351
-      ARRAY_CARDINALITY(virQEMUCapsObjectPropsPCIAssign) },
6d3351
+      ARRAY_CARDINALITY(virQEMUCapsObjectPropsPCIAssign),
6d3351
+      -1 },
6d3351
     { "vfio-pci", virQEMUCapsObjectPropsVfioPCI,
6d3351
-      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVfioPCI) },
6d3351
+      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVfioPCI),
6d3351
+      -1 },
6d3351
     { "scsi-disk", virQEMUCapsObjectPropsSCSIDisk,
6d3351
-      ARRAY_CARDINALITY(virQEMUCapsObjectPropsSCSIDisk) },
6d3351
+      ARRAY_CARDINALITY(virQEMUCapsObjectPropsSCSIDisk),
6d3351
+      -1 },
6d3351
     { "ide-drive", virQEMUCapsObjectPropsIDEDrive,
6d3351
-      ARRAY_CARDINALITY(virQEMUCapsObjectPropsIDEDrive) },
6d3351
+      ARRAY_CARDINALITY(virQEMUCapsObjectPropsIDEDrive),
6d3351
+      -1 },
6d3351
     { "PIIX4_PM", virQEMUCapsObjectPropsPiix4PM,
6d3351
-      ARRAY_CARDINALITY(virQEMUCapsObjectPropsPiix4PM) },
6d3351
+      ARRAY_CARDINALITY(virQEMUCapsObjectPropsPiix4PM),
6d3351
+      -1 },
6d3351
     { "usb-redir", virQEMUCapsObjectPropsUSBRedir,
6d3351
-      ARRAY_CARDINALITY(virQEMUCapsObjectPropsUSBRedir) },
6d3351
+      ARRAY_CARDINALITY(virQEMUCapsObjectPropsUSBRedir),
6d3351
+      -1 },
6d3351
     { "usb-host", virQEMUCapsObjectPropsUSBHost,
6d3351
-      ARRAY_CARDINALITY(virQEMUCapsObjectPropsUSBHost) },
6d3351
+      ARRAY_CARDINALITY(virQEMUCapsObjectPropsUSBHost),
6d3351
+      -1 },
6d3351
     { "scsi-generic", virQEMUCapsObjectPropsSCSIGeneric,
6d3351
-      ARRAY_CARDINALITY(virQEMUCapsObjectPropsSCSIGeneric) },
6d3351
+      ARRAY_CARDINALITY(virQEMUCapsObjectPropsSCSIGeneric),
6d3351
+      -1 },
6d3351
     { "i440FX-pcihost", virQEMUCapsObjectPropsI440FXPCIHost,
6d3351
-      ARRAY_CARDINALITY(virQEMUCapsObjectPropsI440FXPCIHost) },
6d3351
+      ARRAY_CARDINALITY(virQEMUCapsObjectPropsI440FXPCIHost),
6d3351
+      -1 },
6d3351
     { "q35-pcihost", virQEMUCapsObjectPropsQ35PCIHost,
6d3351
-      ARRAY_CARDINALITY(virQEMUCapsObjectPropsQ35PCIHost) },
6d3351
+      ARRAY_CARDINALITY(virQEMUCapsObjectPropsQ35PCIHost),
6d3351
+      -1 },
6d3351
     { "usb-storage", virQEMUCapsObjectPropsUSBStorage,
6d3351
-      ARRAY_CARDINALITY(virQEMUCapsObjectPropsUSBStorage) },
6d3351
+      ARRAY_CARDINALITY(virQEMUCapsObjectPropsUSBStorage),
6d3351
+      -1 },
6d3351
     { "kvm-pit", virQEMUCapsObjectPropsKVMPit,
6d3351
-      ARRAY_CARDINALITY(virQEMUCapsObjectPropsKVMPit) },
6d3351
+      ARRAY_CARDINALITY(virQEMUCapsObjectPropsKVMPit),
6d3351
+      -1 },
6d3351
     { "VGA", virQEMUCapsObjectPropsVGA,
6d3351
-      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVGA) },
6d3351
+      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVGA),
6d3351
+      -1 },
6d3351
     { "vmware-svga", virQEMUCapsObjectPropsVmwareSvga,
6d3351
-      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVmwareSvga) },
6d3351
+      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVmwareSvga),
6d3351
+      -1 },
6d3351
     { "qxl", virQEMUCapsObjectPropsQxl,
6d3351
-      ARRAY_CARDINALITY(virQEMUCapsObjectPropsQxl) },
6d3351
+      ARRAY_CARDINALITY(virQEMUCapsObjectPropsQxl),
6d3351
+      -1 },
6d3351
     { "virtio-gpu-pci", virQEMUCapsObjectPropsVirtioGpu,
6d3351
-      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVirtioGpu) },
6d3351
+      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVirtioGpu),
6d3351
+      -1 },
6d3351
     { "virtio-gpu-device", virQEMUCapsObjectPropsVirtioGpu,
6d3351
-      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVirtioGpu) },
6d3351
+      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVirtioGpu),
6d3351
+      -1 },
6d3351
     { "ICH9-LPC", virQEMUCapsObjectPropsICH9,
6d3351
-      ARRAY_CARDINALITY(virQEMUCapsObjectPropsICH9) },
6d3351
+      ARRAY_CARDINALITY(virQEMUCapsObjectPropsICH9),
6d3351
+      -1 },
6d3351
     { "virtio-balloon-pci", virQEMUCapsObjectPropsVirtioBalloon,
6d3351
-      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVirtioBalloon) },
6d3351
+      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVirtioBalloon),
6d3351
+      -1 },
6d3351
     { "virtio-balloon-ccw", virQEMUCapsObjectPropsVirtioBalloon,
6d3351
-      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVirtioBalloon) },
6d3351
+      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVirtioBalloon),
6d3351
+      -1 },
6d3351
     { "virtio-balloon-device", virQEMUCapsObjectPropsVirtioBalloon,
6d3351
-      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVirtioBalloon) },
6d3351
+      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVirtioBalloon),
6d3351
+      -1 },
6d3351
     { "nec-usb-xhci", virQEMUCapsObjectPropsUSBNECXHCI,
6d3351
-      ARRAY_CARDINALITY(virQEMUCapsObjectPropsUSBNECXHCI) },
6d3351
+      ARRAY_CARDINALITY(virQEMUCapsObjectPropsUSBNECXHCI),
6d3351
+      -1 },
6d3351
 };
6d3351
 
6d3351
 struct virQEMUCapsPropTypeObjects {
6d3351
@@ -2767,6 +2799,11 @@ virQEMUCapsProbeQMPObjects(virQEMUCapsPtr qemuCaps,
6d3351
 
6d3351
     for (i = 0; i < ARRAY_CARDINALITY(virQEMUCapsObjectProps); i++) {
6d3351
         const char *type = virQEMUCapsObjectProps[i].type;
6d3351
+        int cap = virQEMUCapsObjectProps[i].capsCondition;
6d3351
+
6d3351
+        if (cap >= 0 && !virQEMUCapsGet(qemuCaps, cap))
6d3351
+            continue;
6d3351
+
6d3351
         if ((nvalues = qemuMonitorGetObjectProps(mon,
6d3351
                                                  type,
6d3351
                                                  &values)) < 0)
6d3351
-- 
6d3351
2.13.0
6d3351