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