Detect if QEMU was compiled with IOMMUFD.

Signed-off-by: Pavel Hrdina <[email protected]>
---
 src/qemu/qemu_capabilities.c                              | 2 ++
 src/qemu/qemu_capabilities.h                              | 1 +
 src/qemu/qemu_validate.c                                  | 8 ++++++++
 tests/qemucapabilitiesdata/caps_10.0.0_aarch64.xml        | 1 +
 tests/qemucapabilitiesdata/caps_10.0.0_s390x.xml          | 1 +
 tests/qemucapabilitiesdata/caps_10.0.0_x86_64+amdsev.xml  | 1 +
 tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml         | 1 +
 tests/qemucapabilitiesdata/caps_10.1.0_s390x.xml          | 1 +
 .../qemucapabilitiesdata/caps_10.1.0_x86_64+inteltdx.xml  | 1 +
 tests/qemucapabilitiesdata/caps_10.1.0_x86_64.xml         | 1 +
 tests/qemucapabilitiesdata/caps_10.2.0_aarch64.xml        | 1 +
 tests/qemucapabilitiesdata/caps_10.2.0_x86_64+mshv.xml    | 1 +
 tests/qemucapabilitiesdata/caps_10.2.0_x86_64.xml         | 1 +
 tests/qemucapabilitiesdata/caps_11.0.0_aarch64.xml        | 1 +
 tests/qemucapabilitiesdata/caps_11.0.0_x86_64.xml         | 1 +
 tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml          | 1 +
 tests/qemucapabilitiesdata/caps_9.1.0_s390x.xml           | 1 +
 tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml          | 1 +
 tests/qemucapabilitiesdata/caps_9.2.0_s390x.xml           | 1 +
 tests/qemucapabilitiesdata/caps_9.2.0_x86_64+amdsev.xml   | 1 +
 tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml          | 1 +
 21 files changed, 29 insertions(+)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 67c60a3912..5a1545c727 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -759,6 +759,7 @@ VIR_ENUM_IMPL(virQEMUCaps,
 
               /* 490 */
               "scsi-block.migrate-pr", /* 
QEMU_CAPS_DEVICE_SCSI_BLOCK_MIGRATE_PR */
+              "iommufd", /* QEMU_CAPS_OBJECT_IOMMUFD */
     );
 
 
@@ -1466,6 +1467,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = {
     { "tpm-emulator", QEMU_CAPS_DEVICE_TPM_EMULATOR },
     { "tpm-passthrough", QEMU_CAPS_DEVICE_TPM_PASSTHROUGH },
     { "acpi-generic-initiator", QEMU_CAPS_ACPI_GENERIC_INITIATOR },
+    { "iommufd", QEMU_CAPS_OBJECT_IOMMUFD },
 };
 
 
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index 86ebe16b50..8d5c5cc94c 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -734,6 +734,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for 
syntax-check */
 
     /* 490 */
     QEMU_CAPS_DEVICE_SCSI_BLOCK_MIGRATE_PR, /* persistent reservation 
migration support */
+    QEMU_CAPS_OBJECT_IOMMUFD, /* -object iommufd */
 
     QEMU_CAPS_LAST /* this must always be the last item */
 } virQEMUCapsFlags;
diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c
index 2ca38db9f1..18700b5a9b 100644
--- a/src/qemu/qemu_validate.c
+++ b/src/qemu/qemu_validate.c
@@ -2722,6 +2722,14 @@ qemuValidateDomainDeviceDefHostdev(const 
virDomainHostdevDef *hostdev,
                                    _("VFIO PCI device assignment is not 
supported by this version of qemu"));
                     return -1;
                 }
+
+                if (hostdev->source.subsys.u.pci.driver.iommufd == 
VIR_TRISTATE_BOOL_YES) {
+                    if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_IOMMUFD)) {
+                        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                                       _("IOMMUFD is not supported by this 
version of qemu"));
+                        return -1;
+                    }
+                }
             }
 
             if (hostdev->writeFiltering != VIR_TRISTATE_BOOL_ABSENT) {
diff --git a/tests/qemucapabilitiesdata/caps_10.0.0_aarch64.xml 
b/tests/qemucapabilitiesdata/caps_10.0.0_aarch64.xml
index c2bffe88ad..e5f55f461a 100644
--- a/tests/qemucapabilitiesdata/caps_10.0.0_aarch64.xml
+++ b/tests/qemucapabilitiesdata/caps_10.0.0_aarch64.xml
@@ -164,6 +164,7 @@
   <flag name='usb-bot'/>
   <flag name='acpi-generic-initiator'/>
   <flag name='virtio-iommu.aw-bits'/>
+  <flag name='iommufd'/>
   <version>10000000</version>
   <microcodeVersion>61700285</microcodeVersion>
   <package>v10.0.0</package>
diff --git a/tests/qemucapabilitiesdata/caps_10.0.0_s390x.xml 
b/tests/qemucapabilitiesdata/caps_10.0.0_s390x.xml
index 410f7c324c..96eadffcec 100644
--- a/tests/qemucapabilitiesdata/caps_10.0.0_s390x.xml
+++ b/tests/qemucapabilitiesdata/caps_10.0.0_s390x.xml
@@ -137,6 +137,7 @@
   <flag name='nvme-ns'/>
   <flag name='usb-bot'/>
   <flag name='virtio-iommu.aw-bits'/>
+  <flag name='iommufd'/>
   <version>10000000</version>
   <microcodeVersion>39100285</microcodeVersion>
   <package>v10.0.0</package>
diff --git a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64+amdsev.xml 
b/tests/qemucapabilitiesdata/caps_10.0.0_x86_64+amdsev.xml
index a7166aba44..74a68c8402 100644
--- a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64+amdsev.xml
+++ b/tests/qemucapabilitiesdata/caps_10.0.0_x86_64+amdsev.xml
@@ -210,6 +210,7 @@
   <flag name='usb-bot'/>
   <flag name='acpi-generic-initiator'/>
   <flag name='virtio-iommu.aw-bits'/>
+  <flag name='iommufd'/>
   <version>10000000</version>
   <microcodeVersion>43100285</microcodeVersion>
   <package>v10.0.0</package>
diff --git a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml 
b/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml
index 4177eb06b6..d593dd1ab8 100644
--- a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml
@@ -210,6 +210,7 @@
   <flag name='usb-bot'/>
   <flag name='acpi-generic-initiator'/>
   <flag name='virtio-iommu.aw-bits'/>
+  <flag name='iommufd'/>
   <version>10000000</version>
   <microcodeVersion>43100285</microcodeVersion>
   <package>v10.0.0</package>
diff --git a/tests/qemucapabilitiesdata/caps_10.1.0_s390x.xml 
b/tests/qemucapabilitiesdata/caps_10.1.0_s390x.xml
index 9faa853da2..3e271824c6 100644
--- a/tests/qemucapabilitiesdata/caps_10.1.0_s390x.xml
+++ b/tests/qemucapabilitiesdata/caps_10.1.0_s390x.xml
@@ -141,6 +141,7 @@
   <flag name='usb-bot'/>
   <flag name='qom-list-get'/>
   <flag name='virtio-iommu.aw-bits'/>
+  <flag name='iommufd'/>
   <version>10001000</version>
   <microcodeVersion>39100286</microcodeVersion>
   <package>v10.1.0</package>
diff --git a/tests/qemucapabilitiesdata/caps_10.1.0_x86_64+inteltdx.xml 
b/tests/qemucapabilitiesdata/caps_10.1.0_x86_64+inteltdx.xml
index d5566234a2..512186a341 100644
--- a/tests/qemucapabilitiesdata/caps_10.1.0_x86_64+inteltdx.xml
+++ b/tests/qemucapabilitiesdata/caps_10.1.0_x86_64+inteltdx.xml
@@ -193,6 +193,7 @@
   <flag name='qom-list-get'/>
   <flag name='acpi-generic-initiator'/>
   <flag name='virtio-iommu.aw-bits'/>
+  <flag name='iommufd'/>
   <version>10001000</version>
   <microcodeVersion>43100286</microcodeVersion>
   <package>v10.1.0</package>
diff --git a/tests/qemucapabilitiesdata/caps_10.1.0_x86_64.xml 
b/tests/qemucapabilitiesdata/caps_10.1.0_x86_64.xml
index 12d2b262a5..d6f1009c77 100644
--- a/tests/qemucapabilitiesdata/caps_10.1.0_x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_10.1.0_x86_64.xml
@@ -215,6 +215,7 @@
   <flag name='qom-list-get'/>
   <flag name='acpi-generic-initiator'/>
   <flag name='virtio-iommu.aw-bits'/>
+  <flag name='iommufd'/>
   <version>10001000</version>
   <microcodeVersion>43100286</microcodeVersion>
   <package>v10.1.0</package>
diff --git a/tests/qemucapabilitiesdata/caps_10.2.0_aarch64.xml 
b/tests/qemucapabilitiesdata/caps_10.2.0_aarch64.xml
index 7154cdb66c..54d10e1433 100644
--- a/tests/qemucapabilitiesdata/caps_10.2.0_aarch64.xml
+++ b/tests/qemucapabilitiesdata/caps_10.2.0_aarch64.xml
@@ -183,6 +183,7 @@
   <flag name='disk-timed-stats'/>
   <flag name='query-accelerators'/>
   <flag name='virtio-iommu.aw-bits'/>
+  <flag name='iommufd'/>
   <version>10002000</version>
   <microcodeVersion>61700287</microcodeVersion>
   <package>v10.2.0</package>
diff --git a/tests/qemucapabilitiesdata/caps_10.2.0_x86_64+mshv.xml 
b/tests/qemucapabilitiesdata/caps_10.2.0_x86_64+mshv.xml
index 0d627136e8..38f6a0f6c3 100644
--- a/tests/qemucapabilitiesdata/caps_10.2.0_x86_64+mshv.xml
+++ b/tests/qemucapabilitiesdata/caps_10.2.0_x86_64+mshv.xml
@@ -203,6 +203,7 @@
   <flag name='query-accelerators'/>
   <flag name='mshv'/>
   <flag name='virtio-iommu.aw-bits'/>
+  <flag name='iommufd'/>
   <version>10002000</version>
   <microcodeVersion>43100287</microcodeVersion>
   <package>v10.2.0</package>
diff --git a/tests/qemucapabilitiesdata/caps_10.2.0_x86_64.xml 
b/tests/qemucapabilitiesdata/caps_10.2.0_x86_64.xml
index 5eae704512..1ed21b9bf7 100644
--- a/tests/qemucapabilitiesdata/caps_10.2.0_x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_10.2.0_x86_64.xml
@@ -216,6 +216,7 @@
   <flag name='disk-timed-stats'/>
   <flag name='query-accelerators'/>
   <flag name='virtio-iommu.aw-bits'/>
+  <flag name='iommufd'/>
   <version>10002000</version>
   <microcodeVersion>43100287</microcodeVersion>
   <package>v10.2.0</package>
diff --git a/tests/qemucapabilitiesdata/caps_11.0.0_aarch64.xml 
b/tests/qemucapabilitiesdata/caps_11.0.0_aarch64.xml
index 89c02268e4..4e6edf8df9 100644
--- a/tests/qemucapabilitiesdata/caps_11.0.0_aarch64.xml
+++ b/tests/qemucapabilitiesdata/caps_11.0.0_aarch64.xml
@@ -184,6 +184,7 @@
   <flag name='query-accelerators'/>
   <flag name='virtio-iommu.aw-bits'/>
   <flag name='scsi-block.migrate-pr'/>
+  <flag name='iommufd'/>
   <version>10002050</version>
   <microcodeVersion>61700286</microcodeVersion>
   <package>v10.2.0-1114-gb3abdfa486</package>
diff --git a/tests/qemucapabilitiesdata/caps_11.0.0_x86_64.xml 
b/tests/qemucapabilitiesdata/caps_11.0.0_x86_64.xml
index 89e45331f6..22eaff6545 100644
--- a/tests/qemucapabilitiesdata/caps_11.0.0_x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_11.0.0_x86_64.xml
@@ -217,6 +217,7 @@
   <flag name='query-accelerators'/>
   <flag name='virtio-iommu.aw-bits'/>
   <flag name='scsi-block.migrate-pr'/>
+  <flag name='iommufd'/>
   <version>10002050</version>
   <microcodeVersion>43100286</microcodeVersion>
   <package>v10.2.0-1114-gb3abdfa486</package>
diff --git a/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml 
b/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml
index 43c174e0e6..3b4aaa202c 100644
--- a/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml
@@ -205,6 +205,7 @@
   <flag name='usb-bot'/>
   <flag name='acpi-generic-initiator'/>
   <flag name='virtio-iommu.aw-bits'/>
+  <flag name='iommufd'/>
   <version>9000000</version>
   <microcodeVersion>43100245</microcodeVersion>
   <package>v9.0.0</package>
diff --git a/tests/qemucapabilitiesdata/caps_9.1.0_s390x.xml 
b/tests/qemucapabilitiesdata/caps_9.1.0_s390x.xml
index 78b7493b53..02c8e6f641 100644
--- a/tests/qemucapabilitiesdata/caps_9.1.0_s390x.xml
+++ b/tests/qemucapabilitiesdata/caps_9.1.0_s390x.xml
@@ -127,6 +127,7 @@
   <flag name='nvme-ns'/>
   <flag name='usb-bot'/>
   <flag name='virtio-iommu.aw-bits'/>
+  <flag name='iommufd'/>
   <version>9001000</version>
   <microcodeVersion>39100246</microcodeVersion>
   <package>v9.1.0</package>
diff --git a/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml 
b/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml
index d68bb783e8..84972cba68 100644
--- a/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml
@@ -204,6 +204,7 @@
   <flag name='usb-bot'/>
   <flag name='acpi-generic-initiator'/>
   <flag name='virtio-iommu.aw-bits'/>
+  <flag name='iommufd'/>
   <version>9001000</version>
   <microcodeVersion>43100246</microcodeVersion>
   <package>v9.1.0</package>
diff --git a/tests/qemucapabilitiesdata/caps_9.2.0_s390x.xml 
b/tests/qemucapabilitiesdata/caps_9.2.0_s390x.xml
index 01fb50038d..135812b527 100644
--- a/tests/qemucapabilitiesdata/caps_9.2.0_s390x.xml
+++ b/tests/qemucapabilitiesdata/caps_9.2.0_s390x.xml
@@ -130,6 +130,7 @@
   <flag name='nvme-ns'/>
   <flag name='usb-bot'/>
   <flag name='virtio-iommu.aw-bits'/>
+  <flag name='iommufd'/>
   <version>9002000</version>
   <microcodeVersion>39100247</microcodeVersion>
   <package>v9.2.0</package>
diff --git a/tests/qemucapabilitiesdata/caps_9.2.0_x86_64+amdsev.xml 
b/tests/qemucapabilitiesdata/caps_9.2.0_x86_64+amdsev.xml
index ac936bc17b..5097fc3900 100644
--- a/tests/qemucapabilitiesdata/caps_9.2.0_x86_64+amdsev.xml
+++ b/tests/qemucapabilitiesdata/caps_9.2.0_x86_64+amdsev.xml
@@ -208,6 +208,7 @@
   <flag name='usb-bot'/>
   <flag name='acpi-generic-initiator'/>
   <flag name='virtio-iommu.aw-bits'/>
+  <flag name='iommufd'/>
   <version>9002000</version>
   <microcodeVersion>43100247</microcodeVersion>
   <package>v9.2.0</package>
diff --git a/tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml 
b/tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml
index fd851d9201..b8bf0a3e9b 100644
--- a/tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml
@@ -206,6 +206,7 @@
   <flag name='usb-bot'/>
   <flag name='acpi-generic-initiator'/>
   <flag name='virtio-iommu.aw-bits'/>
+  <flag name='iommufd'/>
   <version>9002000</version>
   <microcodeVersion>43100247</microcodeVersion>
   <package>v9.2.0</package>
-- 
2.53.0

Reply via email to