]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: introduce vfio-ccw capability
authorShalini Chellathurai Saroja <shalini@linux.vnet.ibm.com>
Mon, 7 May 2018 14:41:12 +0000 (16:41 +0200)
committerJohn Ferlan <jferlan@redhat.com>
Mon, 14 May 2018 16:12:02 +0000 (12:12 -0400)
Let us introduce the capability vfio-ccw for supporting the basic
channel I/O passthrough, which have been introduced in QEMU 2.10. The
current focus is to support dasd-eckd (cu_type/dev_type = 0x3990/0x3390)
as the target device.

Let us also introduce the capability QEMU_CAPS_CCW_CSSID_UNRESTRICTED
for virtual-css-bridge. This capability is based on the
cssid-unrestricted property which exists if QEMU no longer enforces
cssid restrictions based on ccw device types.

Vfio-ccw capability is dependent on the hidden virtual-css-bridge, so
that we are able to probe for the cssid-unrestriced property to make
sure the devices are visible to non-mcss-e enabled guests.

Signed-off-by: Shalini Chellathurai Saroja <shalini@linux.vnet.ibm.com>
Reviewed-by: Bjoern Walk <bwalk@linux.ibm.com>
Reviewed-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
14 files changed:
src/qemu/qemu_capabilities.c
src/qemu/qemu_capabilities.h
tests/qemucapabilitiesdata/caps_2.10.0.s390x.replies
tests/qemucapabilitiesdata/caps_2.10.0.s390x.xml
tests/qemucapabilitiesdata/caps_2.11.0.s390x.replies
tests/qemucapabilitiesdata/caps_2.11.0.s390x.xml
tests/qemucapabilitiesdata/caps_2.12.0.s390x.replies
tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml
tests/qemucapabilitiesdata/caps_2.7.0.s390x.replies
tests/qemucapabilitiesdata/caps_2.7.0.s390x.xml
tests/qemucapabilitiesdata/caps_2.8.0.s390x.replies
tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml
tests/qemucapabilitiesdata/caps_2.9.0.s390x.replies
tests/qemucapabilitiesdata/caps_2.9.0.s390x.xml

index 7be5d2000be7ec6d51bb82063692f5c5fe826161..e08fefbc129fac51d0d0defb2f513c419ab35151 100644 (file)
@@ -481,6 +481,8 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
               "qom-list-properties",
               "memory-backend-file.discard-data",
               "virtual-css-bridge",
+              "virtual-css-bridge.cssid-unrestricted",
+              "vfio-ccw",
     );
 
 
@@ -1110,6 +1112,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = {
     { "pcie-pci-bridge", QEMU_CAPS_DEVICE_PCIE_PCI_BRIDGE },
     { "pr-manager-helper", QEMU_CAPS_PR_MANAGER_HELPER },
     { "virtual-css-bridge", QEMU_CAPS_CCW },
+    { "vfio-ccw", QEMU_CAPS_DEVICE_VFIO_CCW },
 };
 
 static struct virQEMUCapsStringFlags virQEMUCapsDevicePropsVirtioBalloon[] = {
@@ -1251,6 +1254,10 @@ static struct virQEMUCapsStringFlags virQEMUCapsDevicePropsIntelIOMMU[] = {
     { "device-iotlb", QEMU_CAPS_INTEL_IOMMU_DEVICE_IOTLB },
 };
 
+static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsVirtualCSSBridge[] = {
+    { "cssid-unrestricted", QEMU_CAPS_CCW_CSSID_UNRESTRICTED },
+};
+
 /* see documentation for virQEMUQAPISchemaPathGet for the query format */
 static struct virQEMUCapsStringFlags virQEMUCapsQMPSchemaQueries[] = {
     { "blockdev-add/arg-type/options/+gluster/debug-level", QEMU_CAPS_GLUSTER_DEBUG_LEVEL},
@@ -1376,6 +1383,9 @@ static virQEMUCapsObjectTypeProps virQEMUCapsDeviceProps[] = {
     { "virtio-gpu-ccw", virQEMUCapsDevicePropsVirtioGpu,
       ARRAY_CARDINALITY(virQEMUCapsDevicePropsVirtioGpu),
       QEMU_CAPS_DEVICE_VIRTIO_GPU_CCW },
+    { "virtual-css-bridge", virQEMUCapsObjectPropsVirtualCSSBridge,
+      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVirtualCSSBridge),
+      QEMU_CAPS_CCW },
 };
 
 static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsMemoryBackendFile[] = {
@@ -3937,6 +3947,8 @@ virQEMUCapsInitQMPMonitor(virQEMUCapsPtr qemuCaps,
         if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_CCW) &&
             virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_CCW))
             virQEMUCapsSet(qemuCaps, QEMU_CAPS_CCW);
+        if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_CCW_CSSID_UNRESTRICTED))
+            virQEMUCapsClear(qemuCaps, QEMU_CAPS_DEVICE_VFIO_CCW);
     }
 
     ret = 0;
index a810a27519436cdcfbca192a23a2d0e168c3c633..baff5cb1182e1f727a8298989da52d54971bda76 100644 (file)
@@ -465,6 +465,8 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
     QEMU_CAPS_QOM_LIST_PROPERTIES, /* qom-list-properties monitor command */
     QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD, /* -object memory-backend-file,discard-data */
     QEMU_CAPS_CCW, /* -device virtual-css-bridge */
+    QEMU_CAPS_CCW_CSSID_UNRESTRICTED, /* virtual-css-bridge.cssid-unrestricted= */
+    QEMU_CAPS_DEVICE_VFIO_CCW, /* -device vfio-ccw */
 
     QEMU_CAPS_LAST /* this must always be the last item */
 } virQEMUCapsFlags;
index 534756f0b386e28c5ce58846cff33a1200f76507..3e19ac67dac1810169e49abaf7871268a0593c8b 100644 (file)
   "id": "libvirt-33"
 }
 
+{
+  "return": [
+    {
+      "name": "css_dev_path",
+      "type": "bool"
+    }
+  ],
+  "id": "libvirt-34"
+}
+
 {
   "return": [
     {
       "cpu-max": 248
     }
   ],
-  "id": "libvirt-34"
+  "id": "libvirt-35"
 }
 
 {
       "migration-safe": true
     }
   ],
-  "id": "libvirt-35"
+  "id": "libvirt-36"
 }
 
 {
   "return": [
   ],
-  "id": "libvirt-36"
+  "id": "libvirt-37"
 }
 
 {
   "return": [
   ],
-  "id": "libvirt-37"
+  "id": "libvirt-38"
 }
 
 {
       "option": "drive"
     }
   ],
-  "id": "libvirt-38"
+  "id": "libvirt-39"
 }
 
 {
       "capability": "return-path"
     }
   ],
-  "id": "libvirt-39"
+  "id": "libvirt-40"
 }
 
 {
       "meta-type": "object"
     }
   ],
-  "id": "libvirt-40"
+  "id": "libvirt-41"
 }
 
 {
       }
     }
   },
-  "id": "libvirt-41"
+  "id": "libvirt-42"
 }
 
 {
-  "id": "libvirt-42",
+  "id": "libvirt-43",
   "error": {
     "class": "GenericError",
     "desc": "Property '.migratable' not found"
index 24bd8e810baaf4851ed071e3e336971e7fc7f940..cb7b35c0dc1f7d9a5e8f12d9197fd5f2d5304b27 100644 (file)
   <flag name='virtual-css-bridge'/>
   <version>2010000</version>
   <kvmVersion>0</kvmVersion>
-  <microcodeVersion>303326</microcodeVersion>
+  <microcodeVersion>303434</microcodeVersion>
   <package></package>
   <arch>s390x</arch>
   <hostCPU type='kvm' model='z14-base' migratability='no'>
index 2de256009e11e1923e7a85d432012bb1d7f2eb54..21fede318b5fdc92263d65c6fb28f635aa24759e 100644 (file)
   "id": "libvirt-34"
 }
 
+{
+  "return": [
+    {
+      "name": "css_dev_path",
+      "type": "bool"
+    }
+  ],
+  "id": "libvirt-35"
+}
+
 {
   "return": [
     {
       "cpu-max": 248
     }
   ],
-  "id": "libvirt-35"
+  "id": "libvirt-36"
 }
 
 {
       "migration-safe": true
     }
   ],
-  "id": "libvirt-36"
+  "id": "libvirt-37"
 }
 
 {
   "return": [
   ],
-  "id": "libvirt-37"
+  "id": "libvirt-38"
 }
 
 {
   "return": [
     "emulator"
   ],
-  "id": "libvirt-38"
+  "id": "libvirt-39"
 }
 
 {
       "option": "drive"
     }
   ],
-  "id": "libvirt-39"
+  "id": "libvirt-40"
 }
 
 {
       "capability": "x-multifd"
     }
   ],
-  "id": "libvirt-40"
+  "id": "libvirt-41"
 }
 
 {
       "meta-type": "object"
     }
   ],
-  "id": "libvirt-41"
+  "id": "libvirt-42"
 }
 
 {
       }
     }
   },
-  "id": "libvirt-42"
+  "id": "libvirt-43"
 }
 
 {
-  "id": "libvirt-43",
+  "id": "libvirt-44",
   "error": {
     "class": "GenericError",
     "desc": "Property '.migratable' not found"
index 530f6dc7b48410b9df370f3301cbd430a4806280..497adb8efd6406d8b1e605c6f2a6f129548aacc2 100644 (file)
   <flag name='virtual-css-bridge'/>
   <version>2011000</version>
   <kvmVersion>0</kvmVersion>
-  <microcodeVersion>342058</microcodeVersion>
+  <microcodeVersion>342166</microcodeVersion>
   <package></package>
   <arch>s390x</arch>
   <hostCPU type='kvm' model='z14-base' migratability='no'>
index 726a5fb2c8ecbb3b486393ccdf2064340bb98a4d..a93e5984c6d95c271c2e25ba2f3c035778777bb6 100644 (file)
   "id": "libvirt-34"
 }
 
+{
+  "return": [
+    {
+      "name": "cssid-unrestricted",
+      "description": "A css device can use any cssid, regardless whether virtual or not (read only, always true)",
+      "type": "bool"
+    },
+    {
+      "name": "css_dev_path",
+      "type": "bool"
+    }
+  ],
+  "id": "libvirt-35"
+}
+
 {
   "return": [
     {
       "type": "string"
     }
   ],
-  "id": "libvirt-35"
+  "id": "libvirt-36"
 }
 
 {
       "alias": "s390-ccw-virtio"
     }
   ],
-  "id": "libvirt-36"
+  "id": "libvirt-37"
 }
 
 {
       "migration-safe": true
     }
   ],
-  "id": "libvirt-37"
+  "id": "libvirt-38"
 }
 
 {
   "return": [
   ],
-  "id": "libvirt-38"
+  "id": "libvirt-39"
 }
 
 {
   "return": [
     "emulator"
   ],
-  "id": "libvirt-39"
+  "id": "libvirt-40"
 }
 
 {
       "option": "drive"
     }
   ],
-  "id": "libvirt-40"
+  "id": "libvirt-41"
 }
 
 {
       "capability": "dirty-bitmaps"
     }
   ],
-  "id": "libvirt-41"
+  "id": "libvirt-42"
 }
 
 {
       "meta-type": "object"
     }
   ],
-  "id": "libvirt-42"
+  "id": "libvirt-43"
 }
 
 {
-  "id": "libvirt-43",
+  "id": "libvirt-44",
   "error": {
     "class": "GenericError",
     "desc": "The CPU definition 'max' is unknown."
index 76740673da387d764e1e03fdd473d77938a1fa6a..607274ebb799b0cf8303b308639b8b82035850e2 100644 (file)
   <flag name='qom-list-properties'/>
   <flag name='memory-backend-file.discard-data'/>
   <flag name='virtual-css-bridge'/>
+  <flag name='virtual-css-bridge.cssid-unrestricted'/>
+  <flag name='vfio-ccw'/>
   <version>2011090</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>0</microcodeVersion>
index 61fbd9a6671617b5d1386a269473c1618bb6a9c8..fe2aecd2b605821bc4e4964266f299d0c73f1149 100644 (file)
   "id": "libvirt-33"
 }
 
+{
+  "return": [
+    {
+      "name": "css_dev_path",
+      "type": "bool"
+    }
+  ],
+  "id": "libvirt-34"
+}
+
 {
   "return": [
     {
       "cpu-max": 248
     }
   ],
-  "id": "libvirt-34"
+  "id": "libvirt-35"
 }
 
 {
       "name": "host"
     }
   ],
-  "id": "libvirt-35"
+  "id": "libvirt-36"
 }
 
 {
   "return": [
   ],
-  "id": "libvirt-36"
+  "id": "libvirt-37"
 }
 
 {
   "return": [
   ],
-  "id": "libvirt-37"
+  "id": "libvirt-38"
 }
 
 {
       "option": "drive"
     }
   ],
-  "id": "libvirt-38"
+  "id": "libvirt-39"
 }
 
 {
       "capability": "postcopy-ram"
     }
   ],
-  "id": "libvirt-39"
+  "id": "libvirt-40"
 }
 
 {
       "meta-type": "object"
     }
   ],
-  "id": "libvirt-40"
+  "id": "libvirt-41"
 }
 
 {
index 10ce4268b367bf2e302eed74408d3b8b2f212b71..3c5601cc36266b3e0d5e1d5270c8128a0cb3f69e 100644 (file)
   <flag name='virtual-css-bridge'/>
   <version>2007000</version>
   <kvmVersion>0</kvmVersion>
-  <microcodeVersion>216732</microcodeVersion>
+  <microcodeVersion>216840</microcodeVersion>
   <package></package>
   <arch>s390x</arch>
   <cpu type='kvm' name='host'/>
index 818118caf2c848a2232bb3136950d718ce0b7ad5..34734ec19bf98c6dfcac22db6ce39c677593a8f9 100644 (file)
   "id": "libvirt-33"
 }
 
+{
+  "return": [
+    {
+      "name": "css_dev_path",
+      "type": "bool"
+    }
+  ],
+  "id": "libvirt-34"
+}
+
 {
   "return": [
     {
       "alias": "s390-ccw-virtio"
     }
   ],
-  "id": "libvirt-34"
+  "id": "libvirt-35"
 }
 
 {
       "migration-safe": true
     }
   ],
-  "id": "libvirt-35"
+  "id": "libvirt-36"
 }
 
 {
   "return": [
   ],
-  "id": "libvirt-36"
+  "id": "libvirt-37"
 }
 
 {
   "return": [
   ],
-  "id": "libvirt-37"
+  "id": "libvirt-38"
 }
 
 {
       "option": "drive"
     }
   ],
-  "id": "libvirt-38"
+  "id": "libvirt-39"
 }
 
 {
       "capability": "x-colo"
     }
   ],
-  "id": "libvirt-39"
+  "id": "libvirt-40"
 }
 
 {
       "meta-type": "object"
     }
   ],
-  "id": "libvirt-40"
+  "id": "libvirt-41"
 }
 
 {
       }
     }
   },
-  "id": "libvirt-41"
+  "id": "libvirt-42"
 }
 
 {
-  "id": "libvirt-42",
+  "id": "libvirt-43",
   "error": {
     "class": "GenericError",
     "desc": "Property '.migratable' not found"
index 800fcc504455bc58a782229be6ab140383b52671..55c2c5bc1a5696b3ba4c819148753ac4c6fcc0a8 100644 (file)
   <flag name='virtual-css-bridge'/>
   <version>2007093</version>
   <kvmVersion>0</kvmVersion>
-  <microcodeVersion>241633</microcodeVersion>
+  <microcodeVersion>241741</microcodeVersion>
   <package></package>
   <arch>s390x</arch>
   <hostCPU type='kvm' model='zEC12.2-base' migratability='no'>
index cbacec6d0258021583335efd72d0ca05d7818be3..967148a022f0466c09c6214af5f7dde2e66b1d71 100644 (file)
   "id": "libvirt-33"
 }
 
+{
+  "return": [
+    {
+      "name": "css_dev_path",
+      "type": "bool"
+    }
+  ],
+  "id": "libvirt-34"
+}
+
 {
   "return": [
     {
       "cpu-max": 248
     }
   ],
-  "id": "libvirt-34"
+  "id": "libvirt-35"
 }
 
 {
       "migration-safe": true
     }
   ],
-  "id": "libvirt-35"
+  "id": "libvirt-36"
 }
 
 {
   "return": [
   ],
-  "id": "libvirt-36"
+  "id": "libvirt-37"
 }
 
 {
   "return": [
   ],
-  "id": "libvirt-37"
+  "id": "libvirt-38"
 }
 
 {
       "option": "drive"
     }
   ],
-  "id": "libvirt-38"
+  "id": "libvirt-39"
 }
 
 {
       "capability": "release-ram"
     }
   ],
-  "id": "libvirt-39"
+  "id": "libvirt-40"
 }
 
 {
       "meta-type": "object"
     }
   ],
-  "id": "libvirt-40"
+  "id": "libvirt-41"
 }
 
 {
       }
     }
   },
-  "id": "libvirt-41"
+  "id": "libvirt-42"
 }
 
 {
-  "id": "libvirt-42",
+  "id": "libvirt-43",
   "error": {
     "class": "GenericError",
     "desc": "Property '.migratable' not found"
index f8aee8379cba8b04da251200608831b197070b77..497e02d3bf6b6cea7946b06bb84a8625aa1bc95c 100644 (file)
   <flag name='virtual-css-bridge'/>
   <version>2009000</version>
   <kvmVersion>0</kvmVersion>
-  <microcodeVersion>265051</microcodeVersion>
+  <microcodeVersion>265159</microcodeVersion>
   <package></package>
   <arch>s390x</arch>
   <hostCPU type='kvm' model='z13.2-base' migratability='no'>