]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: Introduce QEMU_CAPS_OBJECT_IOMMUFD
authorPavel Hrdina <phrdina@redhat.com>
Mon, 16 Feb 2026 07:59:39 +0000 (08:59 +0100)
committerPavel Hrdina <phrdina@redhat.com>
Mon, 16 Feb 2026 14:50:38 +0000 (15:50 +0100)
Detect if QEMU was compiled with IOMMUFD.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
21 files changed:
src/qemu/qemu_capabilities.c
src/qemu/qemu_capabilities.h
src/qemu/qemu_validate.c
tests/qemucapabilitiesdata/caps_10.0.0_aarch64.xml
tests/qemucapabilitiesdata/caps_10.0.0_s390x.xml
tests/qemucapabilitiesdata/caps_10.0.0_x86_64+amdsev.xml
tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml
tests/qemucapabilitiesdata/caps_10.1.0_s390x.xml
tests/qemucapabilitiesdata/caps_10.1.0_x86_64+inteltdx.xml
tests/qemucapabilitiesdata/caps_10.1.0_x86_64.xml
tests/qemucapabilitiesdata/caps_10.2.0_aarch64.xml
tests/qemucapabilitiesdata/caps_10.2.0_x86_64+mshv.xml
tests/qemucapabilitiesdata/caps_10.2.0_x86_64.xml
tests/qemucapabilitiesdata/caps_11.0.0_aarch64.xml
tests/qemucapabilitiesdata/caps_11.0.0_x86_64.xml
tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml
tests/qemucapabilitiesdata/caps_9.1.0_s390x.xml
tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml
tests/qemucapabilitiesdata/caps_9.2.0_s390x.xml
tests/qemucapabilitiesdata/caps_9.2.0_x86_64+amdsev.xml
tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml

index 67c60a3912e90a0a22578d957c9b6064f186c343..5a1545c72786b67b87dc84d6c17554bc6036a240 100644 (file)
@@ -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 },
 };
 
 
index 86ebe16b5048ecae6f454e2959df70b274f8514e..8d5c5cc94ce4f1331c53cbf08f2d43d18c7ef1be 100644 (file)
@@ -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;
index 2ca38db9f131c6659d8104c05a614de0c57b591c..18700b5a9bc526e7247ddcd0cfe1f6a2450fbed3 100644 (file)
@@ -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) {
index c2bffe88ada33e861cf8878d089cd7890447563f..e5f55f461ab08d26ca858b63ae19f312f7e0e1fa 100644 (file)
   <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>
index 410f7c324cdda5c1c79affe1a0bcaab06b0a0496..96eadffcec61f8774fa2f82d576e266534a903db 100644 (file)
   <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>
index a7166aba4450c6c1e6e9b2e69489001bc6a76805..74a68c840231529a6c5a8b7821d8f3f6df06ec0f 100644 (file)
   <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>
index 4177eb06b6548632ce8205d636122d7cbec5e8ff..d593dd1ab87d51ca787ee6cce9f0b7a76679bbc8 100644 (file)
   <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>
index 9faa853da2f1e59212a459bac94749a3a1fd32f6..3e271824c66e833757b968a92346072636cc96d6 100644 (file)
   <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>
index d5566234a20356372b56ba8f3af2048d0bbe165b..512186a341e76a6d024cb50da2428b720b0ff7be 100644 (file)
   <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>
index 12d2b262a549d2cb1a59989cd92b8056a4fffaad..d6f1009c7702376eebb3f6a64cdf245d7721787a 100644 (file)
   <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>
index 7154cdb66cc0668b903719de768e025767cfe7e4..54d10e1433923429705c26344f0d876b3166bcbb 100644 (file)
   <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>
index 0d627136e8a06aec47c53650f93b643e6d663993..38f6a0f6c34bc91447ef39e1d52b0620c9357fcb 100644 (file)
   <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>
index 5eae7045124f2c77f50128527002c957bd1ce53f..1ed21b9bf780e35575309acfc1846e1b36259934 100644 (file)
   <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>
index 89c02268e45f00862ab32a8eaa3f4390c52bccd2..4e6edf8df9b3257f723a67560fc5da359c1cff87 100644 (file)
   <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>
index 89e45331f6283d1fac8a32b8a8a3e62e186346ca..22eaff654509285927c04a46834511b4445a479f 100644 (file)
   <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>
index 43c174e0e61dce4b3429282c40c6e09dc2b61fd4..3b4aaa202c5368bd2a7fdf903c104ff436743f4e 100644 (file)
   <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>
index 78b7493b5345e473751531b74a3306660a903dd8..02c8e6f641c2b91fc88198b68033e7986e746c0f 100644 (file)
   <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>
index d68bb783e8e911167fe4f447db84d894969d93d0..84972cba68a3f49240462d8817350676a7ecd2e0 100644 (file)
   <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>
index 01fb50038d07e176117dd55c3f5c8d98c56cb351..135812b52789cd1d322681665e3a908956c62c86 100644 (file)
   <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>
index ac936bc17b044175f64f38eaffebbcf585cf6afe..5097fc3900c268280116126aba16a8871bc17ed0 100644 (file)
   <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>
index fd851d9201d194c899bd43b2a9642bd62a1755b5..b8bf0a3e9b4308f9dd303161b389468d0c9d45b8 100644 (file)
   <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>