[libvirt PATCH 0/7] qemu: introduce amd-iommu support

To the cc'd QEMU developers - I'd appreciate guidance on how/whether to document and expose the 'xtsup' and 'pt' parameters to libvirt users. Based on QEMU series: Subject: [PATCH v4 0/2] hw/i386/amd_iommu: Add migration support From: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com> Message-ID: <20250304141716.638880-1-suravee.suthikulpanit@amd.com> (not yet merged in upstream QEMU) Ján Tomko (7): qemu: introduce QEMU_CAPS_AMD_IOMMU qemu: introduce QEMU_CAPS_PCI_ID qemu: add IOMMU model amd docs: formatdomain: document intel-only IOMMU attributes conf: add passthrough and xtsup attributes for IOMMU conf: reject some attributes not applicable to intel IOMMU qemu: format pt and xstup on the command line docs/formatdomain.rst | 22 +++- src/conf/domain_conf.c | 31 +++++ src/conf/domain_conf.h | 3 + src/conf/domain_validate.c | 22 ++++ src/conf/schemas/domaincommon.rng | 11 ++ src/qemu/qemu_capabilities.c | 12 ++ src/qemu/qemu_capabilities.h | 4 + src/qemu/qemu_command.c | 30 +++++ src/qemu/qemu_domain_address.c | 4 + src/qemu/qemu_validate.c | 29 +++++ .../caps_10.0.0_x86_64+amdsev.replies | 102 +++++++++++------ .../caps_10.0.0_x86_64+amdsev.xml | 1 + .../caps_10.0.0_x86_64.replies | 106 ++++++++++++------ .../caps_10.0.0_x86_64.xml | 2 + .../caps_6.2.0_x86_64.replies | 102 +++++++++++------ .../caps_6.2.0_x86_64.xml | 1 + .../caps_7.0.0_x86_64.replies | 80 +++++++------ .../caps_7.0.0_x86_64.xml | 1 + .../caps_7.1.0_x86_64.replies | 102 +++++++++++------ .../caps_7.1.0_x86_64.xml | 1 + .../caps_7.2.0_x86_64+hvf.replies | 102 +++++++++++------ .../caps_7.2.0_x86_64+hvf.xml | 1 + .../caps_7.2.0_x86_64.replies | 102 +++++++++++------ .../caps_7.2.0_x86_64.xml | 1 + .../caps_8.0.0_x86_64.replies | 80 +++++++------ .../caps_8.0.0_x86_64.xml | 1 + .../caps_8.1.0_x86_64.replies | 102 +++++++++++------ .../caps_8.1.0_x86_64.xml | 1 + .../caps_8.2.0_x86_64.replies | 102 +++++++++++------ .../caps_8.2.0_x86_64.xml | 1 + .../caps_9.0.0_x86_64.replies | 80 +++++++------ .../caps_9.0.0_x86_64.xml | 1 + .../caps_9.1.0_x86_64.replies | 102 +++++++++++------ .../caps_9.1.0_x86_64.xml | 1 + .../caps_9.2.0_x86_64+amdsev.replies | 102 +++++++++++------ .../caps_9.2.0_x86_64+amdsev.xml | 1 + .../caps_9.2.0_x86_64.replies | 102 +++++++++++------ .../caps_9.2.0_x86_64.xml | 1 + .../amd-iommu.x86_64-latest.args | 35 ++++++ .../amd-iommu.x86_64-latest.xml | 1 + tests/qemuxmlconfdata/amd-iommu.xml | 39 +++++++ tests/qemuxmlconftest.c | 2 + 42 files changed, 1172 insertions(+), 454 deletions(-) create mode 100644 tests/qemuxmlconfdata/amd-iommu.x86_64-latest.args create mode 120000 tests/qemuxmlconfdata/amd-iommu.x86_64-latest.xml create mode 100644 tests/qemuxmlconfdata/amd-iommu.xml -- 2.48.1

Check for the presence of the amd-iommu device, so we can conditionalize probing for its properties. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_capabilities.c | 4 ++++ src/qemu/qemu_capabilities.h | 3 +++ tests/qemucapabilitiesdata/caps_10.0.0_x86_64+amdsev.xml | 1 + tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml | 1 + tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_9.2.0_x86_64+amdsev.xml | 1 + tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml | 1 + 16 files changed, 21 insertions(+) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 2c137bb663..583f2bdc27 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -729,6 +729,9 @@ VIR_ENUM_IMPL(virQEMUCaps, "virtio-mem-ccw", /* QEMU_CAPS_DEVICE_VIRTIO_MEM_CCW */ "blockdev-set-active", /* QEMU_CAPS_BLOCKDEV_SET_ACTIVE */ "shim", /* QEMU_CAPS_MACHINE_SHIM */ + + /* 475 */ + "amd-iommu", /* QEMU_CAPS_AMD_IOMMU */ ); @@ -1418,6 +1421,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = { { "sev-snp-guest", QEMU_CAPS_SEV_SNP_GUEST }, { "acpi-erst", QEMU_CAPS_DEVICE_ACPI_ERST }, { "virtio-mem-ccw", QEMU_CAPS_DEVICE_VIRTIO_MEM_CCW }, + { "amd-iommu", QEMU_CAPS_AMD_IOMMU }, }; diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index df63fe51ae..f0b9c36516 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -711,6 +711,9 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */ QEMU_CAPS_BLOCKDEV_SET_ACTIVE, /* blockdev-set-active QMP command supported */ QEMU_CAPS_MACHINE_SHIM, /* -shim command line argument */ + /* 475 */ + QEMU_CAPS_AMD_IOMMU, /* -device amd-iommu */ + QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; 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 ad7bb7ebc8..b23a4b5307 100644 --- a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64+amdsev.xml +++ b/tests/qemucapabilitiesdata/caps_10.0.0_x86_64+amdsev.xml @@ -207,6 +207,7 @@ <flag name='migrate-incoming.exit-on-error'/> <flag name='blockdev-set-active'/> <flag name='shim'/> + <flag name='amd-iommu'/> <version>9002050</version> <microcodeVersion>43100285</microcodeVersion> <package>v9.2.0-2369-g98c7362b1e</package> diff --git a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml index 24509f6a0a..e2894b733e 100644 --- a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml @@ -206,6 +206,7 @@ <flag name='migrate-incoming.exit-on-error'/> <flag name='blockdev-set-active'/> <flag name='shim'/> + <flag name='amd-iommu'/> <version>9002050</version> <microcodeVersion>43100285</microcodeVersion> <package>v9.2.0-2369-g98c7362b1e</package> diff --git a/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml index 1c7def169c..2426f28d09 100644 --- a/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml @@ -175,6 +175,7 @@ <flag name='usb-mtp'/> <flag name='netdev.user'/> <flag name='snapshot-internal-qmp'/> + <flag name='amd-iommu'/> <version>6002000</version> <microcodeVersion>43100244</microcodeVersion> <package>v6.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml index 8e342bf4ad..4f0e50da32 100644 --- a/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml @@ -183,6 +183,7 @@ <flag name='acpi-erst'/> <flag name='machine-i8042-opt'/> <flag name='snapshot-internal-qmp'/> + <flag name='amd-iommu'/> <version>7000000</version> <microcodeVersion>43100243</microcodeVersion> <package>v7.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml index 71e6c16e8f..d96ea154b0 100644 --- a/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml @@ -188,6 +188,7 @@ <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> <flag name='snapshot-internal-qmp'/> + <flag name='amd-iommu'/> <version>7001000</version> <microcodeVersion>43100244</microcodeVersion> <package>v7.1.0</package> diff --git a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml index 7bdeb00f9a..675d285e42 100644 --- a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml +++ b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml @@ -192,6 +192,7 @@ <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> <flag name='snapshot-internal-qmp'/> + <flag name='amd-iommu'/> <version>7002000</version> <microcodeVersion>43100245</microcodeVersion> <package>v7.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml index 54c72521b0..b7f29e58c6 100644 --- a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml @@ -192,6 +192,7 @@ <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> <flag name='snapshot-internal-qmp'/> + <flag name='amd-iommu'/> <version>7002000</version> <microcodeVersion>43100245</microcodeVersion> <package>v7.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml index 54db96d9c7..cf3f37ad50 100644 --- a/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml @@ -196,6 +196,7 @@ <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> <flag name='snapshot-internal-qmp'/> + <flag name='amd-iommu'/> <version>8000000</version> <microcodeVersion>43100244</microcodeVersion> <package>v8.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml index 7d508a1601..f9b0326aa5 100644 --- a/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml @@ -198,6 +198,7 @@ <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> <flag name='snapshot-internal-qmp'/> + <flag name='amd-iommu'/> <version>8001000</version> <microcodeVersion>43100245</microcodeVersion> <package>v8.1.0</package> diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml index 2da46d944d..896e684364 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml @@ -201,6 +201,7 @@ <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> <flag name='snapshot-internal-qmp'/> + <flag name='amd-iommu'/> <version>8002000</version> <microcodeVersion>43100246</microcodeVersion> <package>v8.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml index b273193d35..2a2a71a7f5 100644 --- a/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml @@ -203,6 +203,7 @@ <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> <flag name='snapshot-internal-qmp'/> + <flag name='amd-iommu'/> <version>9000000</version> <microcodeVersion>43100245</microcodeVersion> <package>v9.0.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 6b995c2f26..20b8b1d19c 100644 --- a/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml @@ -202,6 +202,7 @@ <flag name='machine-i8042-opt'/> <flag name='snapshot-internal-qmp'/> <flag name='migrate-incoming.exit-on-error'/> + <flag name='amd-iommu'/> <version>9001000</version> <microcodeVersion>43100246</microcodeVersion> <package>v9.1.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 2181b9432a..c7aae0956f 100644 --- a/tests/qemucapabilitiesdata/caps_9.2.0_x86_64+amdsev.xml +++ b/tests/qemucapabilitiesdata/caps_9.2.0_x86_64+amdsev.xml @@ -206,6 +206,7 @@ <flag name='chardev-reconnect-miliseconds'/> <flag name='netdev-stream-reconnect-miliseconds'/> <flag name='migrate-incoming.exit-on-error'/> + <flag name='amd-iommu'/> <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 924f56d010..48499cdae0 100644 --- a/tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml @@ -204,6 +204,7 @@ <flag name='chardev-reconnect-miliseconds'/> <flag name='netdev-stream-reconnect-miliseconds'/> <flag name='migrate-incoming.exit-on-error'/> + <flag name='amd-iommu'/> <version>9002000</version> <microcodeVersion>43100247</microcodeVersion> <package>v9.2.0</package> -- 2.48.1

Introduced by QEMU commit TBD, the presence of this attribute allows libvirt to specify the alias of the AMDVI-PCI device explicitly. (It was implicit before the introduction of this attribute) Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_capabilities.c | 8 ++ src/qemu/qemu_capabilities.h | 1 + .../caps_10.0.0_x86_64+amdsev.replies | 102 +++++++++++------ .../caps_10.0.0_x86_64.replies | 106 ++++++++++++------ .../caps_10.0.0_x86_64.xml | 1 + .../caps_6.2.0_x86_64.replies | 102 +++++++++++------ .../caps_7.0.0_x86_64.replies | 80 +++++++------ .../caps_7.1.0_x86_64.replies | 102 +++++++++++------ .../caps_7.2.0_x86_64+hvf.replies | 102 +++++++++++------ .../caps_7.2.0_x86_64.replies | 102 +++++++++++------ .../caps_8.0.0_x86_64.replies | 80 +++++++------ .../caps_8.1.0_x86_64.replies | 102 +++++++++++------ .../caps_8.2.0_x86_64.replies | 102 +++++++++++------ .../caps_9.0.0_x86_64.replies | 80 +++++++------ .../caps_9.1.0_x86_64.replies | 102 +++++++++++------ .../caps_9.2.0_x86_64+amdsev.replies | 102 +++++++++++------ .../caps_9.2.0_x86_64.replies | 102 +++++++++++------ 17 files changed, 928 insertions(+), 448 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 583f2bdc27..e07f78dbc2 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -732,6 +732,7 @@ VIR_ENUM_IMPL(virQEMUCaps, /* 475 */ "amd-iommu", /* QEMU_CAPS_AMD_IOMMU */ + "amd-iommu.pci-id", /* QEMU_CAPS_AMD_IOMMU_PCI_ID */ ); @@ -1566,6 +1567,10 @@ static struct virQEMUCapsDevicePropsFlags virQEMUCapsDevicePropsVirtioBlkCCW[] = { "loadparm", QEMU_CAPS_VIRTIO_CCW_DEVICE_LOADPARM, NULL }, }; +static struct virQEMUCapsDevicePropsFlags virQEMUCapsDevicePropsAMDIOMMU[] = { + { "pci-id", QEMU_CAPS_AMD_IOMMU_PCI_ID, NULL }, +}; + /* see documentation for virQEMUQAPISchemaPathGet for the query format */ static struct virQEMUCapsStringFlags virQEMUCapsQMPSchemaQueries[] = { { "blockdev-add/arg-type/+file/drop-cache", QEMU_CAPS_MIGRATION_FILE_DROP_CACHE }, @@ -1725,6 +1730,9 @@ static virQEMUCapsDeviceTypeProps virQEMUCapsDeviceProps[] = { { "virtio-blk-ccw", virQEMUCapsDevicePropsVirtioBlkCCW, G_N_ELEMENTS(virQEMUCapsDevicePropsVirtioBlkCCW), QEMU_CAPS_VIRTIO_CCW }, + { "amd-iommu", virQEMUCapsDevicePropsAMDIOMMU, + G_N_ELEMENTS(virQEMUCapsDevicePropsAMDIOMMU), + QEMU_CAPS_AMD_IOMMU }, }; static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsMemoryBackendFile[] = { diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index f0b9c36516..92efad958e 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -713,6 +713,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */ /* 475 */ QEMU_CAPS_AMD_IOMMU, /* -device amd-iommu */ + QEMU_CAPS_AMD_IOMMU_PCI_ID, /* amd-iommu.pci-id */ QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; diff --git a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64+amdsev.replies b/tests/qemucapabilitiesdata/caps_10.0.0_x86_64+amdsev.replies index e8a0346fb1..1456bf1015 100644 --- a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64+amdsev.replies +++ b/tests/qemucapabilitiesdata/caps_10.0.0_x86_64+amdsev.replies @@ -32147,12 +32147,50 @@ "id": "libvirt-35" } +{ + "execute": "device-list-properties", + "arguments": { + "typename": "amd-iommu" + }, + "id": "libvirt-36" +} + +{ + "return": [ + { + "default-value": true, + "name": "pt", + "description": "on/off", + "type": "bool" + }, + { + "default-value": false, + "name": "device-iotlb", + "description": "on/off", + "type": "bool" + }, + { + "default-value": "auto", + "name": "intremap", + "description": "on/off/auto", + "type": "OnOffAuto" + }, + { + "default-value": false, + "name": "xtsup", + "description": "on/off", + "type": "bool" + } + ], + "id": "libvirt-36" +} + { "execute": "qom-list-properties", "arguments": { "typename": "memory-backend-file" }, - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -32242,7 +32280,7 @@ "type": "bool" } ], - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -32250,7 +32288,7 @@ "arguments": { "typename": "memory-backend-memfd" }, - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -32329,7 +32367,7 @@ "type": "int" } ], - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -32337,7 +32375,7 @@ "arguments": { "typename": "max-x86_64-cpu" }, - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -34510,12 +34548,12 @@ "type": "bool" } ], - "id": "libvirt-38" + "id": "libvirt-39" } { "execute": "query-machines", - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -35171,7 +35209,7 @@ "default-ram-id": "pc.ram" } ], - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -35179,7 +35217,7 @@ "arguments": { "typename": "none-machine" }, - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -35298,7 +35336,7 @@ "type": "bool" } ], - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -35306,7 +35344,7 @@ "arguments": { "typename": "generic-pc-machine" }, - "id": "libvirt-41" + "id": "libvirt-42" } { @@ -35513,12 +35551,12 @@ "type": "bool" } ], - "id": "libvirt-41" + "id": "libvirt-42" } { "execute": "query-cpu-definitions", - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -37295,12 +37333,12 @@ "deprecated": false } ], - "id": "libvirt-42" + "id": "libvirt-43" } { "execute": "query-tpm-models", - "id": "libvirt-43" + "id": "libvirt-44" } { @@ -37308,12 +37346,12 @@ "tpm-crb", "tpm-tis" ], - "id": "libvirt-43" + "id": "libvirt-44" } { "execute": "query-tpm-types", - "id": "libvirt-44" + "id": "libvirt-45" } { @@ -37321,12 +37359,12 @@ "passthrough", "emulator" ], - "id": "libvirt-44" + "id": "libvirt-45" } { "execute": "query-command-line-options", - "id": "libvirt-45" + "id": "libvirt-46" } { @@ -38849,12 +38887,12 @@ "option": "drive" } ], - "id": "libvirt-45" + "id": "libvirt-46" } { "execute": "query-migrate-capabilities", - "id": "libvirt-46" + "id": "libvirt-47" } { @@ -38948,12 +38986,12 @@ "capability": "mapped-ram" } ], - "id": "libvirt-46" + "id": "libvirt-47" } { "execute": "query-sev-capabilities", - "id": "libvirt-47" + "id": "libvirt-48" } { @@ -38964,16 +39002,16 @@ "pdh": "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", "cpu0-id": "BlAwmcr4Ruya3YvEGe2EBxuWjMAfIYolslNNM92RsIKxLkWDDRqivqSBOD+qQRCYS9joBYSHMD1g+rmjY+MmVw==" }, - "id": "libvirt-47" + "id": "libvirt-48" } { "execute": "query-sgx-capabilities", - "id": "libvirt-48" + "id": "libvirt-49" } { - "id": "libvirt-48", + "id": "libvirt-49", "error": { "class": "GenericError", "desc": "Could not open '/dev/sgx_vepc': No such file or directory" @@ -38988,7 +39026,7 @@ "name": "host" } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -39389,7 +39427,7 @@ } } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -39403,7 +39441,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -39804,7 +39842,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -39819,7 +39857,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { @@ -40331,7 +40369,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { diff --git a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.replies b/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.replies index aea8060984..33ddba6ca1 100644 --- a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.replies @@ -32072,12 +32072,54 @@ "id": "libvirt-35" } +{ + "execute": "device-list-properties", + "arguments": { + "typename": "amd-iommu" + }, + "id": "libvirt-36" +} + +{ + "return": [ + { + "default-value": true, + "name": "pt", + "description": "on/off", + "type": "bool" + }, + { + "default-value": false, + "name": "device-iotlb", + "description": "on/off", + "type": "bool" + }, + { + "default-value": "auto", + "name": "intremap", + "description": "on/off/auto", + "type": "OnOffAuto" + }, + { + "default-value": false, + "name": "xtsup", + "description": "on/off", + "type": "bool" + }, + { + "name": "pci-id", + "type": "str" + } + ], + "id": "libvirt-36" +} + { "execute": "qom-list-properties", "arguments": { "typename": "memory-backend-file" }, - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -32171,7 +32213,7 @@ "type": "bool" } ], - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -32179,7 +32221,7 @@ "arguments": { "typename": "memory-backend-memfd" }, - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -32258,7 +32300,7 @@ "type": "int" } ], - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -32266,7 +32308,7 @@ "arguments": { "typename": "max-x86_64-cpu" }, - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -34439,12 +34481,12 @@ "type": "bool" } ], - "id": "libvirt-38" + "id": "libvirt-39" } { "execute": "query-machines", - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -35100,7 +35142,7 @@ "default-ram-id": "pc.ram" } ], - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -35108,7 +35150,7 @@ "arguments": { "typename": "none-machine" }, - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -35227,7 +35269,7 @@ "type": "bool" } ], - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -35235,7 +35277,7 @@ "arguments": { "typename": "generic-pc-machine" }, - "id": "libvirt-41" + "id": "libvirt-42" } { @@ -35442,12 +35484,12 @@ "type": "bool" } ], - "id": "libvirt-41" + "id": "libvirt-42" } { "execute": "query-cpu-definitions", - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -38080,12 +38122,12 @@ "deprecated": false } ], - "id": "libvirt-42" + "id": "libvirt-43" } { "execute": "query-tpm-models", - "id": "libvirt-43" + "id": "libvirt-44" } { @@ -38093,12 +38135,12 @@ "tpm-crb", "tpm-tis" ], - "id": "libvirt-43" + "id": "libvirt-44" } { "execute": "query-tpm-types", - "id": "libvirt-44" + "id": "libvirt-45" } { @@ -38106,12 +38148,12 @@ "passthrough", "emulator" ], - "id": "libvirt-44" + "id": "libvirt-45" } { "execute": "query-command-line-options", - "id": "libvirt-45" + "id": "libvirt-46" } { @@ -39634,12 +39676,12 @@ "option": "drive" } ], - "id": "libvirt-45" + "id": "libvirt-46" } { "execute": "query-migrate-capabilities", - "id": "libvirt-46" + "id": "libvirt-47" } { @@ -39733,16 +39775,16 @@ "capability": "mapped-ram" } ], - "id": "libvirt-46" + "id": "libvirt-47" } { "execute": "query-sev-capabilities", - "id": "libvirt-47" + "id": "libvirt-48" } { - "id": "libvirt-47", + "id": "libvirt-48", "error": { "class": "GenericError", "desc": "SEV: Failed to open /dev/sev: No such file or directory" @@ -39751,11 +39793,11 @@ { "execute": "query-sgx-capabilities", - "id": "libvirt-48" + "id": "libvirt-49" } { - "id": "libvirt-48", + "id": "libvirt-49", "error": { "class": "GenericError", "desc": "Could not open '/dev/sgx_vepc': No such file or directory" @@ -39770,7 +39812,7 @@ "name": "host" } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -40171,7 +40213,7 @@ } } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -40185,7 +40227,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -40586,7 +40628,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -40601,7 +40643,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { @@ -41113,7 +41155,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { diff --git a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml index e2894b733e..156f347614 100644 --- a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml @@ -207,6 +207,7 @@ <flag name='blockdev-set-active'/> <flag name='shim'/> <flag name='amd-iommu'/> + <flag name='amd-iommu.pci-id'/> <version>9002050</version> <microcodeVersion>43100285</microcodeVersion> <package>v9.2.0-2369-g98c7362b1e</package> diff --git a/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.replies b/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.replies index b2b6bcdf0d..6d6072cab5 100644 --- a/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.replies @@ -25740,12 +25740,50 @@ "id": "libvirt-35" } +{ + "execute": "device-list-properties", + "arguments": { + "typename": "amd-iommu" + }, + "id": "libvirt-36" +} + +{ + "return": [ + { + "default-value": true, + "name": "pt", + "description": "on/off", + "type": "bool" + }, + { + "default-value": false, + "name": "device-iotlb", + "description": "on/off", + "type": "bool" + }, + { + "default-value": "auto", + "name": "intremap", + "description": "on/off/auto", + "type": "OnOffAuto" + }, + { + "default-value": false, + "name": "xtsup", + "description": "on/off", + "type": "bool" + } + ], + "id": "libvirt-36" +} + { "execute": "qom-list-properties", "arguments": { "typename": "memory-backend-file" }, - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -25824,7 +25862,7 @@ "type": "bool" } ], - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -25832,7 +25870,7 @@ "arguments": { "typename": "memory-backend-memfd" }, - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -25906,7 +25944,7 @@ "type": "int" } ], - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -25914,7 +25952,7 @@ "arguments": { "typename": "max-x86_64-cpu" }, - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -27654,12 +27692,12 @@ "type": "bool" } ], - "id": "libvirt-38" + "id": "libvirt-39" } { "execute": "query-machines", - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -28142,7 +28180,7 @@ "default-ram-id": "pc.ram" } ], - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -28150,7 +28188,7 @@ "arguments": { "typename": "none-machine" }, - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -28253,7 +28291,7 @@ "type": "child<container>" } ], - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -28261,7 +28299,7 @@ "arguments": { "typename": "generic-pc-machine" }, - "id": "libvirt-41" + "id": "libvirt-42" } { @@ -28425,12 +28463,12 @@ "type": "bool" } ], - "id": "libvirt-41" + "id": "libvirt-42" } { "execute": "query-cpu-definitions", - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -30454,12 +30492,12 @@ "deprecated": false } ], - "id": "libvirt-42" + "id": "libvirt-43" } { "execute": "query-tpm-models", - "id": "libvirt-43" + "id": "libvirt-44" } { @@ -30467,12 +30505,12 @@ "tpm-crb", "tpm-tis" ], - "id": "libvirt-43" + "id": "libvirt-44" } { "execute": "query-tpm-types", - "id": "libvirt-44" + "id": "libvirt-45" } { @@ -30480,12 +30518,12 @@ "passthrough", "emulator" ], - "id": "libvirt-44" + "id": "libvirt-45" } { "execute": "query-command-line-options", - "id": "libvirt-45" + "id": "libvirt-46" } { @@ -31805,12 +31843,12 @@ "option": "drive" } ], - "id": "libvirt-45" + "id": "libvirt-46" } { "execute": "query-migrate-capabilities", - "id": "libvirt-46" + "id": "libvirt-47" } { @@ -31892,16 +31930,16 @@ "capability": "background-snapshot" } ], - "id": "libvirt-46" + "id": "libvirt-47" } { "execute": "query-sev-capabilities", - "id": "libvirt-47" + "id": "libvirt-48" } { - "id": "libvirt-47", + "id": "libvirt-48", "error": { "class": "GenericError", "desc": "SEV: Failed to open /dev/sev: No such file or directory" @@ -31910,11 +31948,11 @@ { "execute": "query-sgx-capabilities", - "id": "libvirt-48" + "id": "libvirt-49" } { - "id": "libvirt-48", + "id": "libvirt-49", "error": { "class": "GenericError", "desc": "SGX is not enabled in KVM" @@ -31929,7 +31967,7 @@ "name": "host" } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -32262,7 +32300,7 @@ } } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -32276,7 +32314,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -32609,7 +32647,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -32624,7 +32662,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { @@ -32957,7 +32995,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { diff --git a/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.replies b/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.replies index 1ad960c99b..16fad62b37 100644 --- a/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.replies @@ -26276,12 +26276,28 @@ "id": "libvirt-35" } +{ + "execute": "device-list-properties", + "arguments": { + "typename": "amd-iommu" + }, + "id": "libvirt-36" +} + +{ + "error": { + "class": "DeviceNotFound", + "desc": "Device 'example-device' not found" + }, + "id": "libvirt-36" +} + { "execute": "qom-list-properties", "arguments": { "typename": "memory-backend-file" }, - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -26360,7 +26376,7 @@ "type": "bool" } ], - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -26368,7 +26384,7 @@ "arguments": { "typename": "memory-backend-memfd" }, - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -26442,7 +26458,7 @@ "type": "int" } ], - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -26450,7 +26466,7 @@ "arguments": { "typename": "max-x86_64-cpu" }, - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -28206,12 +28222,12 @@ "type": "bool" } ], - "id": "libvirt-38" + "id": "libvirt-39" } { "execute": "query-machines", - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -28712,7 +28728,7 @@ "default-ram-id": "pc.ram" } ], - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -28720,7 +28736,7 @@ "arguments": { "typename": "none-machine" }, - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -28823,7 +28839,7 @@ "type": "child<container>" } ], - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -28831,7 +28847,7 @@ "arguments": { "typename": "generic-pc-machine" }, - "id": "libvirt-41" + "id": "libvirt-42" } { @@ -29008,12 +29024,12 @@ "type": "bool" } ], - "id": "libvirt-41" + "id": "libvirt-42" } { "execute": "query-cpu-definitions", - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -31073,12 +31089,12 @@ "deprecated": false } ], - "id": "libvirt-42" + "id": "libvirt-43" } { "execute": "query-tpm-models", - "id": "libvirt-43" + "id": "libvirt-44" } { @@ -31086,12 +31102,12 @@ "tpm-crb", "tpm-tis" ], - "id": "libvirt-43" + "id": "libvirt-44" } { "execute": "query-tpm-types", - "id": "libvirt-44" + "id": "libvirt-45" } { @@ -31099,12 +31115,12 @@ "passthrough", "emulator" ], - "id": "libvirt-44" + "id": "libvirt-45" } { "execute": "query-command-line-options", - "id": "libvirt-45" + "id": "libvirt-46" } { @@ -32428,12 +32444,12 @@ "option": "drive" } ], - "id": "libvirt-45" + "id": "libvirt-46" } { "execute": "query-migrate-capabilities", - "id": "libvirt-46" + "id": "libvirt-47" } { @@ -32515,16 +32531,16 @@ "capability": "background-snapshot" } ], - "id": "libvirt-46" + "id": "libvirt-47" } { "execute": "query-sev-capabilities", - "id": "libvirt-47" + "id": "libvirt-48" } { - "id": "libvirt-47", + "id": "libvirt-48", "error": { "class": "GenericError", "desc": "SEV: Failed to open /dev/sev: No such file or directory" @@ -32533,7 +32549,7 @@ { "execute": "query-sgx-capabilities", - "id": "libvirt-48" + "id": "libvirt-49" } { @@ -32554,7 +32570,7 @@ } ] }, - "id": "libvirt-48" + "id": "libvirt-49" } { @@ -32565,7 +32581,7 @@ "name": "host" } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -32902,7 +32918,7 @@ } } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -32916,7 +32932,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -33253,7 +33269,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -33268,7 +33284,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { @@ -33605,7 +33621,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { diff --git a/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.replies b/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.replies index cd2116d05a..ff560438f9 100644 --- a/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.replies @@ -26999,12 +26999,50 @@ "id": "libvirt-35" } +{ + "execute": "device-list-properties", + "arguments": { + "typename": "amd-iommu" + }, + "id": "libvirt-36" +} + +{ + "return": [ + { + "default-value": true, + "name": "pt", + "description": "on/off", + "type": "bool" + }, + { + "default-value": false, + "name": "device-iotlb", + "description": "on/off", + "type": "bool" + }, + { + "default-value": "auto", + "name": "intremap", + "description": "on/off/auto", + "type": "OnOffAuto" + }, + { + "default-value": false, + "name": "xtsup", + "description": "on/off", + "type": "bool" + } + ], + "id": "libvirt-36" +} + { "execute": "qom-list-properties", "arguments": { "typename": "memory-backend-file" }, - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -27083,7 +27121,7 @@ "type": "bool" } ], - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -27091,7 +27129,7 @@ "arguments": { "typename": "memory-backend-memfd" }, - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -27165,7 +27203,7 @@ "type": "int" } ], - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -27173,7 +27211,7 @@ "arguments": { "typename": "max-x86_64-cpu" }, - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -28966,12 +29004,12 @@ "type": "bool" } ], - "id": "libvirt-38" + "id": "libvirt-39" } { "execute": "query-machines", - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -29490,7 +29528,7 @@ "default-ram-id": "pc.ram" } ], - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -29498,7 +29536,7 @@ "arguments": { "typename": "none-machine" }, - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -29611,7 +29649,7 @@ "type": "child<container>" } ], - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -29619,7 +29657,7 @@ "arguments": { "typename": "generic-pc-machine" }, - "id": "libvirt-41" + "id": "libvirt-42" } { @@ -29811,12 +29849,12 @@ "type": "bool" } ], - "id": "libvirt-41" + "id": "libvirt-42" } { "execute": "query-cpu-definitions", - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -31755,12 +31793,12 @@ "deprecated": false } ], - "id": "libvirt-42" + "id": "libvirt-43" } { "execute": "query-tpm-models", - "id": "libvirt-43" + "id": "libvirt-44" } { @@ -31768,12 +31806,12 @@ "tpm-crb", "tpm-tis" ], - "id": "libvirt-43" + "id": "libvirt-44" } { "execute": "query-tpm-types", - "id": "libvirt-44" + "id": "libvirt-45" } { @@ -31781,12 +31819,12 @@ "passthrough", "emulator" ], - "id": "libvirt-44" + "id": "libvirt-45" } { "execute": "query-command-line-options", - "id": "libvirt-45" + "id": "libvirt-46" } { @@ -33110,12 +33148,12 @@ "option": "drive" } ], - "id": "libvirt-45" + "id": "libvirt-46" } { "execute": "query-migrate-capabilities", - "id": "libvirt-46" + "id": "libvirt-47" } { @@ -33205,16 +33243,16 @@ "capability": "postcopy-preempt" } ], - "id": "libvirt-46" + "id": "libvirt-47" } { "execute": "query-sev-capabilities", - "id": "libvirt-47" + "id": "libvirt-48" } { - "id": "libvirt-47", + "id": "libvirt-48", "error": { "class": "GenericError", "desc": "SEV: Failed to open /dev/sev: No such file or directory" @@ -33223,11 +33261,11 @@ { "execute": "query-sgx-capabilities", - "id": "libvirt-48" + "id": "libvirt-49" } { - "id": "libvirt-48", + "id": "libvirt-49", "error": { "class": "GenericError", "desc": "SGX is not enabled in KVM" @@ -33242,7 +33280,7 @@ "name": "host" } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -33580,7 +33618,7 @@ } } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -33594,7 +33632,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -33932,7 +33970,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -33947,7 +33985,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { @@ -34285,7 +34323,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { diff --git a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.replies b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.replies index c85be45cd1..e0a72f7ad9 100644 --- a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.replies +++ b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.replies @@ -27968,12 +27968,50 @@ "id": "libvirt-35" } +{ + "execute": "device-list-properties", + "arguments": { + "typename": "amd-iommu" + }, + "id": "libvirt-36" +} + +{ + "return": [ + { + "default-value": true, + "name": "pt", + "description": "on/off", + "type": "bool" + }, + { + "default-value": false, + "name": "device-iotlb", + "description": "on/off", + "type": "bool" + }, + { + "default-value": "auto", + "name": "intremap", + "description": "on/off/auto", + "type": "OnOffAuto" + }, + { + "default-value": false, + "name": "xtsup", + "description": "on/off", + "type": "bool" + } + ], + "id": "libvirt-36" +} + { "execute": "qom-list-properties", "arguments": { "typename": "memory-backend-file" }, - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -28057,7 +28095,7 @@ "type": "bool" } ], - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -28065,7 +28103,7 @@ "arguments": { "typename": "memory-backend-memfd" }, - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -28144,7 +28182,7 @@ "type": "int" } ], - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -28152,7 +28190,7 @@ "arguments": { "typename": "max-x86_64-cpu" }, - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -29945,12 +29983,12 @@ "type": "bool" } ], - "id": "libvirt-38" + "id": "libvirt-39" } { "execute": "query-machines", - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -30487,7 +30525,7 @@ "default-ram-id": "pc.ram" } ], - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -30495,7 +30533,7 @@ "arguments": { "typename": "none-machine" }, - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -30608,7 +30646,7 @@ "type": "child<container>" } ], - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -30616,7 +30654,7 @@ "arguments": { "typename": "generic-pc-machine" }, - "id": "libvirt-41" + "id": "libvirt-42" } { @@ -30808,12 +30846,12 @@ "type": "bool" } ], - "id": "libvirt-41" + "id": "libvirt-42" } { "execute": "query-cpu-definitions", - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -32752,12 +32790,12 @@ "deprecated": false } ], - "id": "libvirt-42" + "id": "libvirt-43" } { "execute": "query-tpm-models", - "id": "libvirt-43" + "id": "libvirt-44" } { @@ -32765,12 +32803,12 @@ "tpm-crb", "tpm-tis" ], - "id": "libvirt-43" + "id": "libvirt-44" } { "execute": "query-tpm-types", - "id": "libvirt-44" + "id": "libvirt-45" } { @@ -32778,12 +32816,12 @@ "passthrough", "emulator" ], - "id": "libvirt-44" + "id": "libvirt-45" } { "execute": "query-command-line-options", - "id": "libvirt-45" + "id": "libvirt-46" } { @@ -34107,12 +34145,12 @@ "option": "drive" } ], - "id": "libvirt-45" + "id": "libvirt-46" } { "execute": "query-migrate-capabilities", - "id": "libvirt-46" + "id": "libvirt-47" } { @@ -34202,16 +34240,16 @@ "capability": "postcopy-preempt" } ], - "id": "libvirt-46" + "id": "libvirt-47" } { "execute": "query-sev-capabilities", - "id": "libvirt-47" + "id": "libvirt-48" } { - "id": "libvirt-47", + "id": "libvirt-48", "error": { "class": "GenericError", "desc": "SEV: Failed to open /dev/sev: No such file or directory" @@ -34220,11 +34258,11 @@ { "execute": "query-sgx-capabilities", - "id": "libvirt-48" + "id": "libvirt-49" } { - "id": "libvirt-48", + "id": "libvirt-49", "error": { "class": "GenericError", "desc": "SGX is not enabled in KVM" @@ -34239,7 +34277,7 @@ "name": "host" } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -34577,7 +34615,7 @@ } } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -34591,7 +34629,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -34929,7 +34967,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -34944,7 +34982,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { @@ -35282,7 +35320,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { diff --git a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.replies b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.replies index 4b56adeafa..fd6578b1c5 100644 --- a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.replies @@ -27968,12 +27968,50 @@ "id": "libvirt-35" } +{ + "execute": "device-list-properties", + "arguments": { + "typename": "amd-iommu" + }, + "id": "libvirt-36" +} + +{ + "return": [ + { + "default-value": true, + "name": "pt", + "description": "on/off", + "type": "bool" + }, + { + "default-value": false, + "name": "device-iotlb", + "description": "on/off", + "type": "bool" + }, + { + "default-value": "auto", + "name": "intremap", + "description": "on/off/auto", + "type": "OnOffAuto" + }, + { + "default-value": false, + "name": "xtsup", + "description": "on/off", + "type": "bool" + } + ], + "id": "libvirt-36" +} + { "execute": "qom-list-properties", "arguments": { "typename": "memory-backend-file" }, - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -28057,7 +28095,7 @@ "type": "bool" } ], - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -28065,7 +28103,7 @@ "arguments": { "typename": "memory-backend-memfd" }, - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -28144,7 +28182,7 @@ "type": "int" } ], - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -28152,7 +28190,7 @@ "arguments": { "typename": "max-x86_64-cpu" }, - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -29945,12 +29983,12 @@ "type": "bool" } ], - "id": "libvirt-38" + "id": "libvirt-39" } { "execute": "query-machines", - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -30487,7 +30525,7 @@ "default-ram-id": "pc.ram" } ], - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -30495,7 +30533,7 @@ "arguments": { "typename": "none-machine" }, - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -30608,7 +30646,7 @@ "type": "child<container>" } ], - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -30616,7 +30654,7 @@ "arguments": { "typename": "generic-pc-machine" }, - "id": "libvirt-41" + "id": "libvirt-42" } { @@ -30808,12 +30846,12 @@ "type": "bool" } ], - "id": "libvirt-41" + "id": "libvirt-42" } { "execute": "query-cpu-definitions", - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -32752,12 +32790,12 @@ "deprecated": false } ], - "id": "libvirt-42" + "id": "libvirt-43" } { "execute": "query-tpm-models", - "id": "libvirt-43" + "id": "libvirt-44" } { @@ -32765,12 +32803,12 @@ "tpm-crb", "tpm-tis" ], - "id": "libvirt-43" + "id": "libvirt-44" } { "execute": "query-tpm-types", - "id": "libvirt-44" + "id": "libvirt-45" } { @@ -32778,12 +32816,12 @@ "passthrough", "emulator" ], - "id": "libvirt-44" + "id": "libvirt-45" } { "execute": "query-command-line-options", - "id": "libvirt-45" + "id": "libvirt-46" } { @@ -34107,12 +34145,12 @@ "option": "drive" } ], - "id": "libvirt-45" + "id": "libvirt-46" } { "execute": "query-migrate-capabilities", - "id": "libvirt-46" + "id": "libvirt-47" } { @@ -34202,16 +34240,16 @@ "capability": "postcopy-preempt" } ], - "id": "libvirt-46" + "id": "libvirt-47" } { "execute": "query-sev-capabilities", - "id": "libvirt-47" + "id": "libvirt-48" } { - "id": "libvirt-47", + "id": "libvirt-48", "error": { "class": "GenericError", "desc": "SEV: Failed to open /dev/sev: No such file or directory" @@ -34220,11 +34258,11 @@ { "execute": "query-sgx-capabilities", - "id": "libvirt-48" + "id": "libvirt-49" } { - "id": "libvirt-48", + "id": "libvirt-49", "error": { "class": "GenericError", "desc": "SGX is not enabled in KVM" @@ -34239,7 +34277,7 @@ "name": "host" } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -34577,7 +34615,7 @@ } } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -34591,7 +34629,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -34929,7 +34967,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -34944,7 +34982,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { @@ -35282,7 +35320,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { diff --git a/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.replies b/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.replies index 4cad376388..b070a5e569 100644 --- a/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.replies @@ -29339,12 +29339,28 @@ "id": "libvirt-35" } +{ + "execute": "device-list-properties", + "arguments": { + "typename": "amd-iommu" + }, + "id": "libvirt-36" +} + +{ + "error": { + "class": "DeviceNotFound", + "desc": "Device 'example-device' not found" + }, + "id": "libvirt-36" +} + { "execute": "qom-list-properties", "arguments": { "typename": "memory-backend-file" }, - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -29428,7 +29444,7 @@ "type": "bool" } ], - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -29436,7 +29452,7 @@ "arguments": { "typename": "memory-backend-memfd" }, - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -29515,7 +29531,7 @@ "type": "int" } ], - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -29523,7 +29539,7 @@ "arguments": { "typename": "max-x86_64-cpu" }, - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -31340,12 +31356,12 @@ "type": "bool" } ], - "id": "libvirt-38" + "id": "libvirt-39" } { "execute": "query-machines", - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -31961,7 +31977,7 @@ "default-ram-id": "pc.ram" } ], - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -31969,7 +31985,7 @@ "arguments": { "typename": "none-machine" }, - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -32082,7 +32098,7 @@ "type": "child<container>" } ], - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -32090,7 +32106,7 @@ "arguments": { "typename": "generic-pc-machine" }, - "id": "libvirt-41" + "id": "libvirt-42" } { @@ -32282,12 +32298,12 @@ "type": "bool" } ], - "id": "libvirt-41" + "id": "libvirt-42" } { "execute": "query-cpu-definitions", - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -34333,12 +34349,12 @@ "deprecated": false } ], - "id": "libvirt-42" + "id": "libvirt-43" } { "execute": "query-tpm-models", - "id": "libvirt-43" + "id": "libvirt-44" } { @@ -34346,12 +34362,12 @@ "tpm-crb", "tpm-tis" ], - "id": "libvirt-43" + "id": "libvirt-44" } { "execute": "query-tpm-types", - "id": "libvirt-44" + "id": "libvirt-45" } { @@ -34359,12 +34375,12 @@ "passthrough", "emulator" ], - "id": "libvirt-44" + "id": "libvirt-45" } { "execute": "query-command-line-options", - "id": "libvirt-45" + "id": "libvirt-46" } { @@ -35805,12 +35821,12 @@ "option": "drive" } ], - "id": "libvirt-45" + "id": "libvirt-46" } { "execute": "query-migrate-capabilities", - "id": "libvirt-46" + "id": "libvirt-47" } { @@ -35900,16 +35916,16 @@ "capability": "postcopy-preempt" } ], - "id": "libvirt-46" + "id": "libvirt-47" } { "execute": "query-sev-capabilities", - "id": "libvirt-47" + "id": "libvirt-48" } { - "id": "libvirt-47", + "id": "libvirt-48", "error": { "class": "GenericError", "desc": "SEV: Failed to open /dev/sev: No such file or directory" @@ -35918,11 +35934,11 @@ { "execute": "query-sgx-capabilities", - "id": "libvirt-48" + "id": "libvirt-49" } { - "id": "libvirt-48", + "id": "libvirt-49", "error": { "class": "GenericError", "desc": "SGX is not enabled in KVM" @@ -35937,7 +35953,7 @@ "name": "host" } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -36280,7 +36296,7 @@ } } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -36294,7 +36310,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -36637,7 +36653,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -36652,7 +36668,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { @@ -37101,7 +37117,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { diff --git a/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.replies b/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.replies index 888a5d3b6a..6f5297b470 100644 --- a/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.replies @@ -30094,12 +30094,50 @@ "id": "libvirt-35" } +{ + "execute": "device-list-properties", + "arguments": { + "typename": "amd-iommu" + }, + "id": "libvirt-36" +} + +{ + "return": [ + { + "default-value": true, + "name": "pt", + "description": "on/off", + "type": "bool" + }, + { + "default-value": false, + "name": "device-iotlb", + "description": "on/off", + "type": "bool" + }, + { + "default-value": "auto", + "name": "intremap", + "description": "on/off/auto", + "type": "OnOffAuto" + }, + { + "default-value": false, + "name": "xtsup", + "description": "on/off", + "type": "bool" + } + ], + "id": "libvirt-36" +} + { "execute": "qom-list-properties", "arguments": { "typename": "memory-backend-file" }, - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -30188,7 +30226,7 @@ "type": "bool" } ], - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -30196,7 +30234,7 @@ "arguments": { "typename": "memory-backend-memfd" }, - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -30275,7 +30313,7 @@ "type": "int" } ], - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -30283,7 +30321,7 @@ "arguments": { "typename": "max-x86_64-cpu" }, - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -32180,12 +32218,12 @@ "type": "bool" } ], - "id": "libvirt-38" + "id": "libvirt-39" } { "execute": "query-machines", - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -32821,7 +32859,7 @@ "default-ram-id": "pc.ram" } ], - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -32829,7 +32867,7 @@ "arguments": { "typename": "none-machine" }, - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -32942,7 +32980,7 @@ "type": "child<container>" } ], - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -32950,7 +32988,7 @@ "arguments": { "typename": "generic-pc-machine" }, - "id": "libvirt-41" + "id": "libvirt-42" } { @@ -33138,12 +33176,12 @@ "type": "bool" } ], - "id": "libvirt-41" + "id": "libvirt-42" } { "execute": "query-cpu-definitions", - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -35525,12 +35563,12 @@ "deprecated": false } ], - "id": "libvirt-42" + "id": "libvirt-43" } { "execute": "query-tpm-models", - "id": "libvirt-43" + "id": "libvirt-44" } { @@ -35538,12 +35576,12 @@ "tpm-crb", "tpm-tis" ], - "id": "libvirt-43" + "id": "libvirt-44" } { "execute": "query-tpm-types", - "id": "libvirt-44" + "id": "libvirt-45" } { @@ -35551,12 +35589,12 @@ "passthrough", "emulator" ], - "id": "libvirt-44" + "id": "libvirt-45" } { "execute": "query-command-line-options", - "id": "libvirt-45" + "id": "libvirt-46" } { @@ -37014,12 +37052,12 @@ "option": "drive" } ], - "id": "libvirt-45" + "id": "libvirt-46" } { "execute": "query-migrate-capabilities", - "id": "libvirt-46" + "id": "libvirt-47" } { @@ -37117,16 +37155,16 @@ "capability": "dirty-limit" } ], - "id": "libvirt-46" + "id": "libvirt-47" } { "execute": "query-sev-capabilities", - "id": "libvirt-47" + "id": "libvirt-48" } { - "id": "libvirt-47", + "id": "libvirt-48", "error": { "class": "GenericError", "desc": "SEV: Failed to open /dev/sev: No such file or directory" @@ -37135,11 +37173,11 @@ { "execute": "query-sgx-capabilities", - "id": "libvirt-48" + "id": "libvirt-49" } { - "id": "libvirt-48", + "id": "libvirt-49", "error": { "class": "GenericError", "desc": "SGX is not enabled in KVM" @@ -37154,7 +37192,7 @@ "name": "host" } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -37517,7 +37555,7 @@ } } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -37531,7 +37569,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -37894,7 +37932,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -37909,7 +37947,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { @@ -38378,7 +38416,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.replies b/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.replies index 33e4978c38..8a3c54f915 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.replies @@ -30785,12 +30785,50 @@ "id": "libvirt-35" } +{ + "execute": "device-list-properties", + "arguments": { + "typename": "amd-iommu" + }, + "id": "libvirt-36" +} + +{ + "return": [ + { + "default-value": true, + "name": "pt", + "description": "on/off", + "type": "bool" + }, + { + "default-value": false, + "name": "device-iotlb", + "description": "on/off", + "type": "bool" + }, + { + "default-value": "auto", + "name": "intremap", + "description": "on/off/auto", + "type": "OnOffAuto" + }, + { + "default-value": false, + "name": "xtsup", + "description": "on/off", + "type": "bool" + } + ], + "id": "libvirt-36" +} + { "execute": "qom-list-properties", "arguments": { "typename": "memory-backend-file" }, - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -30884,7 +30922,7 @@ "type": "bool" } ], - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -30892,7 +30930,7 @@ "arguments": { "typename": "memory-backend-memfd" }, - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -30971,7 +31009,7 @@ "type": "int" } ], - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -30979,7 +31017,7 @@ "arguments": { "typename": "max-x86_64-cpu" }, - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -32892,12 +32930,12 @@ "type": "bool" } ], - "id": "libvirt-38" + "id": "libvirt-39" } { "execute": "query-machines", - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -33513,7 +33551,7 @@ "default-ram-id": "pc.ram" } ], - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -33521,7 +33559,7 @@ "arguments": { "typename": "none-machine" }, - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -33634,7 +33672,7 @@ "type": "child<container>" } ], - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -33642,7 +33680,7 @@ "arguments": { "typename": "generic-pc-machine" }, - "id": "libvirt-41" + "id": "libvirt-42" } { @@ -33830,12 +33868,12 @@ "type": "bool" } ], - "id": "libvirt-41" + "id": "libvirt-42" } { "execute": "query-cpu-definitions", - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -36217,12 +36255,12 @@ "deprecated": false } ], - "id": "libvirt-42" + "id": "libvirt-43" } { "execute": "query-tpm-models", - "id": "libvirt-43" + "id": "libvirt-44" } { @@ -36230,12 +36268,12 @@ "tpm-crb", "tpm-tis" ], - "id": "libvirt-43" + "id": "libvirt-44" } { "execute": "query-tpm-types", - "id": "libvirt-44" + "id": "libvirt-45" } { @@ -36243,12 +36281,12 @@ "passthrough", "emulator" ], - "id": "libvirt-44" + "id": "libvirt-45" } { "execute": "query-command-line-options", - "id": "libvirt-45" + "id": "libvirt-46" } { @@ -37719,12 +37757,12 @@ "option": "drive" } ], - "id": "libvirt-45" + "id": "libvirt-46" } { "execute": "query-migrate-capabilities", - "id": "libvirt-46" + "id": "libvirt-47" } { @@ -37822,16 +37860,16 @@ "capability": "dirty-limit" } ], - "id": "libvirt-46" + "id": "libvirt-47" } { "execute": "query-sev-capabilities", - "id": "libvirt-47" + "id": "libvirt-48" } { - "id": "libvirt-47", + "id": "libvirt-48", "error": { "class": "GenericError", "desc": "SEV: Failed to open /dev/sev: No such file or directory" @@ -37840,11 +37878,11 @@ { "execute": "query-sgx-capabilities", - "id": "libvirt-48" + "id": "libvirt-49" } { - "id": "libvirt-48", + "id": "libvirt-49", "error": { "class": "GenericError", "desc": "SGX is not enabled in KVM" @@ -37859,7 +37897,7 @@ "name": "host" } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -38226,7 +38264,7 @@ } } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -38240,7 +38278,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -38607,7 +38645,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -38622,7 +38660,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { @@ -39095,7 +39133,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { diff --git a/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.replies b/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.replies index 89fefb863b..638313f857 100644 --- a/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.replies @@ -31003,12 +31003,28 @@ "id": "libvirt-35" } +{ + "execute": "device-list-properties", + "arguments": { + "typename": "amd-iommu" + }, + "id": "libvirt-36" +} + +{ + "error": { + "class": "DeviceNotFound", + "desc": "Device 'example-device' not found" + }, + "id": "libvirt-36" +} + { "execute": "qom-list-properties", "arguments": { "typename": "memory-backend-file" }, - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -31102,7 +31118,7 @@ "type": "bool" } ], - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -31110,7 +31126,7 @@ "arguments": { "typename": "memory-backend-memfd" }, - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -31189,7 +31205,7 @@ "type": "int" } ], - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -31197,7 +31213,7 @@ "arguments": { "typename": "max-x86_64-cpu" }, - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -33114,12 +33130,12 @@ "type": "bool" } ], - "id": "libvirt-38" + "id": "libvirt-39" } { "execute": "query-machines", - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -33755,7 +33771,7 @@ "default-ram-id": "pc.ram" } ], - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -33763,7 +33779,7 @@ "arguments": { "typename": "none-machine" }, - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -33876,7 +33892,7 @@ "type": "child<container>" } ], - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -33884,7 +33900,7 @@ "arguments": { "typename": "generic-pc-machine" }, - "id": "libvirt-41" + "id": "libvirt-42" } { @@ -34076,12 +34092,12 @@ "type": "bool" } ], - "id": "libvirt-41" + "id": "libvirt-42" } { "execute": "query-cpu-definitions", - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -36463,12 +36479,12 @@ "deprecated": false } ], - "id": "libvirt-42" + "id": "libvirt-43" } { "execute": "query-tpm-models", - "id": "libvirt-43" + "id": "libvirt-44" } { @@ -36476,12 +36492,12 @@ "tpm-crb", "tpm-tis" ], - "id": "libvirt-43" + "id": "libvirt-44" } { "execute": "query-tpm-types", - "id": "libvirt-44" + "id": "libvirt-45" } { @@ -36489,12 +36505,12 @@ "passthrough", "emulator" ], - "id": "libvirt-44" + "id": "libvirt-45" } { "execute": "query-command-line-options", - "id": "libvirt-45" + "id": "libvirt-46" } { @@ -37969,12 +37985,12 @@ "option": "drive" } ], - "id": "libvirt-45" + "id": "libvirt-46" } { "execute": "query-migrate-capabilities", - "id": "libvirt-46" + "id": "libvirt-47" } { @@ -38076,16 +38092,16 @@ "capability": "mapped-ram" } ], - "id": "libvirt-46" + "id": "libvirt-47" } { "execute": "query-sev-capabilities", - "id": "libvirt-47" + "id": "libvirt-48" } { - "id": "libvirt-47", + "id": "libvirt-48", "error": { "class": "GenericError", "desc": "SEV: Failed to open /dev/sev: No such file or directory" @@ -38094,11 +38110,11 @@ { "execute": "query-sgx-capabilities", - "id": "libvirt-48" + "id": "libvirt-49" } { - "id": "libvirt-48", + "id": "libvirt-49", "error": { "class": "GenericError", "desc": "SGX is not enabled in KVM" @@ -38113,7 +38129,7 @@ "name": "host" } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -38481,7 +38497,7 @@ } } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -38495,7 +38511,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -38863,7 +38879,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -38878,7 +38894,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { @@ -39352,7 +39368,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { diff --git a/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.replies b/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.replies index 4838037ee7..47575075bd 100644 --- a/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.replies @@ -31390,12 +31390,50 @@ "id": "libvirt-35" } +{ + "execute": "device-list-properties", + "arguments": { + "typename": "amd-iommu" + }, + "id": "libvirt-36" +} + +{ + "return": [ + { + "default-value": true, + "name": "pt", + "description": "on/off", + "type": "bool" + }, + { + "default-value": false, + "name": "device-iotlb", + "description": "on/off", + "type": "bool" + }, + { + "default-value": "auto", + "name": "intremap", + "description": "on/off/auto", + "type": "OnOffAuto" + }, + { + "default-value": false, + "name": "xtsup", + "description": "on/off", + "type": "bool" + } + ], + "id": "libvirt-36" +} + { "execute": "qom-list-properties", "arguments": { "typename": "memory-backend-file" }, - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -31489,7 +31527,7 @@ "type": "bool" } ], - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -31497,7 +31535,7 @@ "arguments": { "typename": "memory-backend-memfd" }, - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -31576,7 +31614,7 @@ "type": "int" } ], - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -31584,7 +31622,7 @@ "arguments": { "typename": "max-x86_64-cpu" }, - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -33633,12 +33671,12 @@ "type": "bool" } ], - "id": "libvirt-38" + "id": "libvirt-39" } { "execute": "query-machines", - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -34254,7 +34292,7 @@ "default-ram-id": "pc.ram" } ], - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -34262,7 +34300,7 @@ "arguments": { "typename": "none-machine" }, - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -34375,7 +34413,7 @@ "type": "child<container>" } ], - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -34383,7 +34421,7 @@ "arguments": { "typename": "generic-pc-machine" }, - "id": "libvirt-41" + "id": "libvirt-42" } { @@ -34575,12 +34613,12 @@ "type": "bool" } ], - "id": "libvirt-41" + "id": "libvirt-42" } { "execute": "query-cpu-definitions", - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -37131,12 +37169,12 @@ "deprecated": false } ], - "id": "libvirt-42" + "id": "libvirt-43" } { "execute": "query-tpm-models", - "id": "libvirt-43" + "id": "libvirt-44" } { @@ -37144,12 +37182,12 @@ "tpm-crb", "tpm-tis" ], - "id": "libvirt-43" + "id": "libvirt-44" } { "execute": "query-tpm-types", - "id": "libvirt-44" + "id": "libvirt-45" } { @@ -37157,12 +37195,12 @@ "passthrough", "emulator" ], - "id": "libvirt-44" + "id": "libvirt-45" } { "execute": "query-command-line-options", - "id": "libvirt-45" + "id": "libvirt-46" } { @@ -38645,12 +38683,12 @@ "option": "drive" } ], - "id": "libvirt-45" + "id": "libvirt-46" } { "execute": "query-migrate-capabilities", - "id": "libvirt-46" + "id": "libvirt-47" } { @@ -38744,16 +38782,16 @@ "capability": "mapped-ram" } ], - "id": "libvirt-46" + "id": "libvirt-47" } { "execute": "query-sev-capabilities", - "id": "libvirt-47" + "id": "libvirt-48" } { - "id": "libvirt-47", + "id": "libvirt-48", "error": { "class": "GenericError", "desc": "SEV: Failed to open /dev/sev: No such file or directory" @@ -38762,11 +38800,11 @@ { "execute": "query-sgx-capabilities", - "id": "libvirt-48" + "id": "libvirt-49" } { - "id": "libvirt-48", + "id": "libvirt-49", "error": { "class": "GenericError", "desc": "Could not open '/dev/sgx_vepc': No such file or directory" @@ -38781,7 +38819,7 @@ "name": "host" } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -39159,7 +39197,7 @@ } } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -39173,7 +39211,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -39551,7 +39589,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -39566,7 +39604,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { @@ -40054,7 +40092,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { diff --git a/tests/qemucapabilitiesdata/caps_9.2.0_x86_64+amdsev.replies b/tests/qemucapabilitiesdata/caps_9.2.0_x86_64+amdsev.replies index 9d074f5843..be063de8aa 100644 --- a/tests/qemucapabilitiesdata/caps_9.2.0_x86_64+amdsev.replies +++ b/tests/qemucapabilitiesdata/caps_9.2.0_x86_64+amdsev.replies @@ -31834,12 +31834,50 @@ "id": "libvirt-35" } +{ + "execute": "device-list-properties", + "arguments": { + "typename": "amd-iommu" + }, + "id": "libvirt-36" +} + +{ + "return": [ + { + "default-value": true, + "name": "pt", + "description": "on/off", + "type": "bool" + }, + { + "default-value": false, + "name": "device-iotlb", + "description": "on/off", + "type": "bool" + }, + { + "default-value": "auto", + "name": "intremap", + "description": "on/off/auto", + "type": "OnOffAuto" + }, + { + "default-value": false, + "name": "xtsup", + "description": "on/off", + "type": "bool" + } + ], + "id": "libvirt-36" +} + { "execute": "qom-list-properties", "arguments": { "typename": "memory-backend-file" }, - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -31933,7 +31971,7 @@ "type": "bool" } ], - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -31941,7 +31979,7 @@ "arguments": { "typename": "memory-backend-memfd" }, - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -32020,7 +32058,7 @@ "type": "int" } ], - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -32028,7 +32066,7 @@ "arguments": { "typename": "max-x86_64-cpu" }, - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -34170,12 +34208,12 @@ "type": "bool" } ], - "id": "libvirt-38" + "id": "libvirt-39" } { "execute": "query-machines", - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -34821,7 +34859,7 @@ "default-ram-id": "pc.ram" } ], - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -34829,7 +34867,7 @@ "arguments": { "typename": "none-machine" }, - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -34947,7 +34985,7 @@ "type": "child<container>" } ], - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -34955,7 +34993,7 @@ "arguments": { "typename": "generic-pc-machine" }, - "id": "libvirt-41" + "id": "libvirt-42" } { @@ -35153,12 +35191,12 @@ "type": "bool" } ], - "id": "libvirt-41" + "id": "libvirt-42" } { "execute": "query-cpu-definitions", - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -36783,12 +36821,12 @@ "deprecated": false } ], - "id": "libvirt-42" + "id": "libvirt-43" } { "execute": "query-tpm-models", - "id": "libvirt-43" + "id": "libvirt-44" } { @@ -36796,12 +36834,12 @@ "tpm-crb", "tpm-tis" ], - "id": "libvirt-43" + "id": "libvirt-44" } { "execute": "query-tpm-types", - "id": "libvirt-44" + "id": "libvirt-45" } { @@ -36809,12 +36847,12 @@ "passthrough", "emulator" ], - "id": "libvirt-44" + "id": "libvirt-45" } { "execute": "query-command-line-options", - "id": "libvirt-45" + "id": "libvirt-46" } { @@ -38327,12 +38365,12 @@ "option": "drive" } ], - "id": "libvirt-45" + "id": "libvirt-46" } { "execute": "query-migrate-capabilities", - "id": "libvirt-46" + "id": "libvirt-47" } { @@ -38426,12 +38464,12 @@ "capability": "mapped-ram" } ], - "id": "libvirt-46" + "id": "libvirt-47" } { "execute": "query-sev-capabilities", - "id": "libvirt-47" + "id": "libvirt-48" } { @@ -38442,16 +38480,16 @@ "pdh": "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", "cpu0-id": "BlAwmcr4Ruya3YvEGe2EBxuWjMAfIYolslNNM92RsIKxLkWDDRqivqSBOD+qQRCYS9joBYSHMD1g+rmjY+MmVw==" }, - "id": "libvirt-47" + "id": "libvirt-48" } { "execute": "query-sgx-capabilities", - "id": "libvirt-48" + "id": "libvirt-49" } { - "id": "libvirt-48", + "id": "libvirt-49", "error": { "class": "GenericError", "desc": "Could not open '/dev/sgx_vepc': No such file or directory" @@ -38466,7 +38504,7 @@ "name": "host" } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -38866,7 +38904,7 @@ } } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -38880,7 +38918,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -39280,7 +39318,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -39295,7 +39333,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { @@ -39806,7 +39844,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { diff --git a/tests/qemucapabilitiesdata/caps_9.2.0_x86_64.replies b/tests/qemucapabilitiesdata/caps_9.2.0_x86_64.replies index 6b2ecb40d0..eaff01aba7 100644 --- a/tests/qemucapabilitiesdata/caps_9.2.0_x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_9.2.0_x86_64.replies @@ -31726,12 +31726,50 @@ "id": "libvirt-35" } +{ + "execute": "device-list-properties", + "arguments": { + "typename": "amd-iommu" + }, + "id": "libvirt-36" +} + +{ + "return": [ + { + "default-value": true, + "name": "pt", + "description": "on/off", + "type": "bool" + }, + { + "default-value": false, + "name": "device-iotlb", + "description": "on/off", + "type": "bool" + }, + { + "default-value": "auto", + "name": "intremap", + "description": "on/off/auto", + "type": "OnOffAuto" + }, + { + "default-value": false, + "name": "xtsup", + "description": "on/off", + "type": "bool" + } + ], + "id": "libvirt-36" +} + { "execute": "qom-list-properties", "arguments": { "typename": "memory-backend-file" }, - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -31825,7 +31863,7 @@ "type": "bool" } ], - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -31833,7 +31871,7 @@ "arguments": { "typename": "memory-backend-memfd" }, - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -31912,7 +31950,7 @@ "type": "int" } ], - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -31920,7 +31958,7 @@ "arguments": { "typename": "max-x86_64-cpu" }, - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -34062,12 +34100,12 @@ "type": "bool" } ], - "id": "libvirt-38" + "id": "libvirt-39" } { "execute": "query-machines", - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -34703,7 +34741,7 @@ "default-ram-id": "pc.ram" } ], - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -34711,7 +34749,7 @@ "arguments": { "typename": "none-machine" }, - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -34829,7 +34867,7 @@ "type": "child<container>" } ], - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -34837,7 +34875,7 @@ "arguments": { "typename": "generic-pc-machine" }, - "id": "libvirt-41" + "id": "libvirt-42" } { @@ -35035,12 +35073,12 @@ "type": "bool" } ], - "id": "libvirt-41" + "id": "libvirt-42" } { "execute": "query-cpu-definitions", - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -37483,12 +37521,12 @@ "deprecated": false } ], - "id": "libvirt-42" + "id": "libvirt-43" } { "execute": "query-tpm-models", - "id": "libvirt-43" + "id": "libvirt-44" } { @@ -37496,12 +37534,12 @@ "tpm-crb", "tpm-tis" ], - "id": "libvirt-43" + "id": "libvirt-44" } { "execute": "query-tpm-types", - "id": "libvirt-44" + "id": "libvirt-45" } { @@ -37509,12 +37547,12 @@ "passthrough", "emulator" ], - "id": "libvirt-44" + "id": "libvirt-45" } { "execute": "query-command-line-options", - "id": "libvirt-45" + "id": "libvirt-46" } { @@ -39007,12 +39045,12 @@ "option": "drive" } ], - "id": "libvirt-45" + "id": "libvirt-46" } { "execute": "query-migrate-capabilities", - "id": "libvirt-46" + "id": "libvirt-47" } { @@ -39106,16 +39144,16 @@ "capability": "mapped-ram" } ], - "id": "libvirt-46" + "id": "libvirt-47" } { "execute": "query-sev-capabilities", - "id": "libvirt-47" + "id": "libvirt-48" } { - "id": "libvirt-47", + "id": "libvirt-48", "error": { "class": "GenericError", "desc": "SEV: Failed to open /dev/sev: No such file or directory" @@ -39124,11 +39162,11 @@ { "execute": "query-sgx-capabilities", - "id": "libvirt-48" + "id": "libvirt-49" } { - "id": "libvirt-48", + "id": "libvirt-49", "error": { "class": "GenericError", "desc": "Could not open '/dev/sgx_vepc': No such file or directory" @@ -39143,7 +39181,7 @@ "name": "host" } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -39543,7 +39581,7 @@ } } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -39557,7 +39595,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -39957,7 +39995,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -39972,7 +40010,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { @@ -40483,7 +40521,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { -- 2.48.1

Introduce a new IOMMU device model 'amd', both the parser and the formatter for QEMU because of our enum warnings. https://issues.redhat.com/browse/RHEL-50560 Signed-off-by: Ján Tomko <jtomko@redhat.com> --- docs/formatdomain.rst | 5 ++- src/conf/domain_conf.c | 1 + src/conf/domain_conf.h | 1 + src/conf/domain_validate.c | 13 +++++++ src/conf/schemas/domaincommon.rng | 1 + src/qemu/qemu_command.c | 28 +++++++++++++ src/qemu/qemu_domain_address.c | 4 ++ src/qemu/qemu_validate.c | 29 ++++++++++++++ .../amd-iommu.x86_64-latest.args | 35 +++++++++++++++++ .../amd-iommu.x86_64-latest.xml | 1 + tests/qemuxmlconfdata/amd-iommu.xml | 39 +++++++++++++++++++ tests/qemuxmlconftest.c | 2 + 12 files changed, 157 insertions(+), 2 deletions(-) create mode 100644 tests/qemuxmlconfdata/amd-iommu.x86_64-latest.args create mode 120000 tests/qemuxmlconfdata/amd-iommu.x86_64-latest.xml create mode 100644 tests/qemuxmlconfdata/amd-iommu.xml diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst index 9c6bb08726..c5708000b8 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -8904,8 +8904,9 @@ Example: ``model`` Supported values are ``intel`` (for Q35 guests) ``smmuv3`` - (:since:`since 5.5.0`, for ARM virt guests), and ``virtio`` - (:since:`since 8.3.0`, for Q35 and ARM virt guests). + (:since:`since 5.5.0`, for ARM virt guests), ``virtio`` + (:since:`since 8.3.0`, for Q35 and ARM virt guests) and + ``amd`` (:since:`since 11.2.0`). ``driver`` The ``driver`` subelement can be used to configure additional options, some diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index d05e68dd41..961ef08ba1 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -1350,6 +1350,7 @@ VIR_ENUM_IMPL(virDomainIOMMUModel, "intel", "smmuv3", "virtio", + "amd", ); VIR_ENUM_IMPL(virDomainVsockModel, diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index cbad1b7f7d..1ec16d3824 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2989,6 +2989,7 @@ typedef enum { VIR_DOMAIN_IOMMU_MODEL_INTEL, VIR_DOMAIN_IOMMU_MODEL_SMMUV3, VIR_DOMAIN_IOMMU_MODEL_VIRTIO, + VIR_DOMAIN_IOMMU_MODEL_AMD, VIR_DOMAIN_IOMMU_MODEL_LAST } virDomainIOMMUModel; diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index 7b901da593..be91caee65 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -3016,6 +3016,18 @@ virDomainIOMMUDefValidate(const virDomainIOMMUDef *iommu) } break; + case VIR_DOMAIN_IOMMU_MODEL_AMD: + if (iommu->caching_mode != VIR_TRISTATE_SWITCH_ABSENT || + iommu->eim != VIR_TRISTATE_SWITCH_ABSENT || + iommu->aw_bits != 0 || + iommu->dma_translation != VIR_TRISTATE_SWITCH_ABSENT) { + virReportError(VIR_ERR_XML_ERROR, + _("iommu model '%1$s' doesn't support some additional attributes"), + virDomainIOMMUModelTypeToString(iommu->model)); + return -1; + } + break; + case VIR_DOMAIN_IOMMU_MODEL_INTEL: case VIR_DOMAIN_IOMMU_MODEL_LAST: break; @@ -3033,6 +3045,7 @@ virDomainIOMMUDefValidate(const virDomainIOMMUDef *iommu) break; case VIR_DOMAIN_IOMMU_MODEL_VIRTIO: + case VIR_DOMAIN_IOMMU_MODEL_AMD: case VIR_DOMAIN_IOMMU_MODEL_LAST: break; } diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincommon.rng index 7ef45a1731..71b68d6687 100644 --- a/src/conf/schemas/domaincommon.rng +++ b/src/conf/schemas/domaincommon.rng @@ -6178,6 +6178,7 @@ <value>intel</value> <value>smmuv3</value> <value>virtio</value> + <value>amd</value> </choice> </attribute> <interleave> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 84ff62cd6c..269455ff3b 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -6039,6 +6039,7 @@ qemuBuildIOMMUCommandLine(virCommand *cmd, virQEMUCaps *qemuCaps) { g_autoptr(virJSONValue) props = NULL; + g_autoptr(virJSONValue) wrapperProps = NULL; const virDomainIOMMUDef *iommu = def->iommu; if (!iommu) @@ -6083,6 +6084,32 @@ qemuBuildIOMMUCommandLine(virCommand *cmd, /* There is no -device for SMMUv3, so nothing to be done here */ return 0; + case VIR_DOMAIN_IOMMU_MODEL_AMD: + if (virJSONValueObjectAdd(&wrapperProps, + "s:driver", "AMDVI-PCI", + "s:id", iommu->info.alias, + NULL) < 0) + return -1; + + if (qemuBuildDeviceAddressProps(wrapperProps, def, &iommu->info) < 0) + return -1; + + if (qemuBuildDeviceCommandlineFromJSON(cmd, wrapperProps, def, qemuCaps) < 0) + return -1; + + if (virJSONValueObjectAdd(&props, + "s:driver", "amd-iommu", + "s:pci-id", iommu->info.alias, + "S:intremap", qemuOnOffAuto(iommu->intremap), + "T:device-iotlb", iommu->iotlb, + NULL) < 0) + return -1; + + if (qemuBuildDeviceCommandlineFromJSON(cmd, props, def, qemuCaps) < 0) + return -1; + + return 0; + case VIR_DOMAIN_IOMMU_MODEL_LAST: default: virReportEnumRangeError(virDomainIOMMUModel, iommu->model); @@ -6914,6 +6941,7 @@ qemuBuildMachineCommandLine(virCommand *cmd, case VIR_DOMAIN_IOMMU_MODEL_INTEL: case VIR_DOMAIN_IOMMU_MODEL_VIRTIO: + case VIR_DOMAIN_IOMMU_MODEL_AMD: /* These IOMMUs are formatted in qemuBuildIOMMUCommandLine */ break; diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c index e89cdee487..7b65abac82 100644 --- a/src/qemu/qemu_domain_address.c +++ b/src/qemu/qemu_domain_address.c @@ -941,6 +941,9 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDeviceDef *dev, case VIR_DOMAIN_IOMMU_MODEL_VIRTIO: return virtioFlags | VIR_PCI_CONNECT_INTEGRATED; + case VIR_DOMAIN_IOMMU_MODEL_AMD: + return pciFlags | VIR_PCI_CONNECT_INTEGRATED; + case VIR_DOMAIN_IOMMU_MODEL_INTEL: case VIR_DOMAIN_IOMMU_MODEL_SMMUV3: case VIR_DOMAIN_IOMMU_MODEL_LAST: @@ -2359,6 +2362,7 @@ qemuDomainAssignDevicePCISlots(virDomainDef *def, switch (iommu->model) { case VIR_DOMAIN_IOMMU_MODEL_VIRTIO: + case VIR_DOMAIN_IOMMU_MODEL_AMD: if (virDeviceInfoPCIAddressIsWanted(&iommu->info) && qemuDomainPCIAddressReserveNextAddr(addrs, &iommu->info) < 0) { return -1; diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 19af0f0209..b1a798802d 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -5209,6 +5209,35 @@ qemuValidateDomainDeviceDefIOMMU(const virDomainIOMMUDef *iommu, } break; + case VIR_DOMAIN_IOMMU_MODEL_AMD: + /* TODO: is this true? */ + if (!qemuDomainIsQ35(def)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("IOMMU device: '%1$s' is only supported with Q35 machines"), + virDomainIOMMUModelTypeToString(iommu->model)); + return -1; + } + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_AMD_IOMMU_PCI_ID)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("IOMMU device: '%1$s' is not supported with this QEMU binary"), + virDomainIOMMUModelTypeToString(iommu->model)); + return -1; + } + if (def->features[VIR_DOMAIN_FEATURE_ACPI] != VIR_TRISTATE_SWITCH_ON) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("IOMMU device: '%1$s' requires ACPI"), + virDomainIOMMUModelTypeToString(iommu->model)); + return -1; + } + if (iommu->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE && + iommu->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("IOMMU device: '%1$s' needs a PCI address"), + virDomainIOMMUModelTypeToString(iommu->model)); + return -1; + } + break; + case VIR_DOMAIN_IOMMU_MODEL_LAST: default: virReportEnumRangeError(virDomainIOMMUModel, iommu->model); diff --git a/tests/qemuxmlconfdata/amd-iommu.x86_64-latest.args b/tests/qemuxmlconfdata/amd-iommu.x86_64-latest.args new file mode 100644 index 0000000000..36244edb3a --- /dev/null +++ b/tests/qemuxmlconfdata/amd-iommu.x86_64-latest.args @@ -0,0 +1,35 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1 \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.local/share \ +XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.cache \ +XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \ +/usr/bin/qemu-system-x86_64 \ +-name guest=QEMUGuest1,debug-threads=on \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-QEMUGuest1/master-key.aes"}' \ +-machine q35,usb=off,kernel_irqchip=split,dump-guest-core=off,memory-backend=pc.ram,acpi=on \ +-accel kvm \ +-cpu qemu64 \ +-m size=219136k \ +-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \ +-overcommit mem-lock=off \ +-smp 1,sockets=1,cores=1,threads=1 \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-device '{"driver":"AMDVI-PCI","id":"iommu0","bus":"pcie.0","addr":"0x1"}' \ +-device '{"driver":"amd-iommu","pci-id":"iommu0","intremap":"on","device-iotlb":true}' \ +-audiodev '{"id":"audio1","driver":"none"}' \ +-global ICH9-LPC.noreboot=off \ +-watchdog-action reset \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxmlconfdata/amd-iommu.x86_64-latest.xml b/tests/qemuxmlconfdata/amd-iommu.x86_64-latest.xml new file mode 120000 index 0000000000..5ba3d4b91b --- /dev/null +++ b/tests/qemuxmlconfdata/amd-iommu.x86_64-latest.xml @@ -0,0 +1 @@ +amd-iommu.xml \ No newline at end of file diff --git a/tests/qemuxmlconfdata/amd-iommu.xml b/tests/qemuxmlconfdata/amd-iommu.xml new file mode 100644 index 0000000000..0668ed4237 --- /dev/null +++ b/tests/qemuxmlconfdata/amd-iommu.xml @@ -0,0 +1,39 @@ +<domain type='kvm'> + <name>QEMUGuest1</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <memory unit='KiB'>219100</memory> + <currentMemory unit='KiB'>219100</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='x86_64' machine='q35'>hvm</type> + <boot dev='hd'/> + </os> + <features> + <acpi/> + <ioapic driver='qemu'/> + </features> + <cpu mode='custom' match='exact' check='none'> + <model fallback='forbid'>qemu64</model> + </cpu> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <controller type='pci' index='0' model='pcie-root'/> + <controller type='usb' index='0' model='none'/> + <controller type='sata' index='0'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/> + </controller> + <input type='mouse' bus='ps2'/> + <input type='keyboard' bus='ps2'/> + <audio id='1' type='none'/> + <watchdog model='itco' action='reset'/> + <memballoon model='none'/> + <iommu model='amd'> + <driver intremap='on' iotlb='on'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/> + </iommu> + </devices> +</domain> diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c index 17efed1379..389d885898 100644 --- a/tests/qemuxmlconftest.c +++ b/tests/qemuxmlconftest.c @@ -2745,6 +2745,8 @@ mymain(void) DO_TEST_CAPS_LATEST("acpi-table"); DO_TEST_CAPS_LATEST("acpi-table-many"); + DO_TEST_CAPS_LATEST("amd-iommu"); + DO_TEST_CAPS_LATEST("intel-iommu"); DO_TEST_CAPS_LATEST("intel-iommu-caching-mode"); DO_TEST_CAPS_LATEST("intel-iommu-eim"); -- 2.48.1

On a Wednesday in 2025, Ján Tomko via Devel wrote:
Introduce a new IOMMU device model 'amd', both the parser and the formatter for QEMU because of our enum warnings.
https://issues.redhat.com/browse/RHEL-50560
Signed-off-by: Ján Tomko <jtomko@redhat.com> --- docs/formatdomain.rst | 5 ++- src/conf/domain_conf.c | 1 + src/conf/domain_conf.h | 1 + src/conf/domain_validate.c | 13 +++++++ src/conf/schemas/domaincommon.rng | 1 + src/qemu/qemu_command.c | 28 +++++++++++++ src/qemu/qemu_domain_address.c | 4 ++ src/qemu/qemu_validate.c | 29 ++++++++++++++ .../amd-iommu.x86_64-latest.args | 35 +++++++++++++++++ .../amd-iommu.x86_64-latest.xml | 1 + tests/qemuxmlconfdata/amd-iommu.xml | 39 +++++++++++++++++++ tests/qemuxmlconftest.c | 2 + 12 files changed, 157 insertions(+), 2 deletions(-) create mode 100644 tests/qemuxmlconfdata/amd-iommu.x86_64-latest.args create mode 120000 tests/qemuxmlconfdata/amd-iommu.x86_64-latest.xml create mode 100644 tests/qemuxmlconfdata/amd-iommu.xml
diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst index 9c6bb08726..c5708000b8 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -8904,8 +8904,9 @@ Example:
``model`` Supported values are ``intel`` (for Q35 guests) ``smmuv3`` - (:since:`since 5.5.0`, for ARM virt guests), and ``virtio`` - (:since:`since 8.3.0`, for Q35 and ARM virt guests). + (:since:`since 5.5.0`, for ARM virt guests), ``virtio`` + (:since:`since 8.3.0`, for Q35 and ARM virt guests) and + ``amd`` (:since:`since 11.2.0`).
s/11.2.0/11.3.0/ at least Jano
``driver`` The ``driver`` subelement can be used to configure additional options, some

Signed-off-by: Ján Tomko <jtomko@redhat.com> --- docs/formatdomain.rst | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst index c5708000b8..8c122f5dae 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -8921,14 +8921,15 @@ Example: ``caching_mode`` The ``caching_mode`` attribute with possible values ``on`` and ``off`` can be used to turn on the VT-d caching mode (useful for assigned devices). - :since:`Since 3.4.0` (QEMU/KVM only) + :since:`Since 3.4.0` (QEMU/KVM and ``intel`` model only) ``eim`` The ``eim`` attribute (with possible values ``on`` and ``off``) can be used to configure Extended Interrupt Mode. A q35 domain with split I/O APIC (as described in `Hypervisor features`_), and both interrupt remapping and EIM turned on for the IOMMU, will be able to - use more than 255 vCPUs. :since:`Since 3.4.0` (QEMU/KVM only) + use more than 255 vCPUs. :since:`Since 3.4.0` (QEMU/KVM and ``intel`` model + only) ``iotlb`` The ``iotlb`` attribute with possible values ``on`` and ``off`` can be @@ -8938,14 +8939,14 @@ Example: ``aw_bits`` The ``aw_bits`` attribute can be used to set the address width to allow mapping larger iova addresses in the guest. :since:`Since 6.5.0` (QEMU/KVM - only) + and ``intel`` model only) ``dma_translation`` The ``dma_translation`` attribute with possible values ``on`` and ``off`` can be used to turn off the dma translation for IOMMU. It is useful when only interrupt remapping is required but dma translation overhead is unwanted, for example to efficiently enable more than 255 vCPUs. - :since:`Since 10.7.0` (QEMU/KVM only) + :since:`Since 10.7.0` (QEMU/KVM and ``intel`` model only) The ``virtio`` IOMMU devices can further have ``address`` element as described in `Device addresses`_ (address has to by type of ``pci``). -- 2.48.1

For the newly supported AMD device. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- docs/formatdomain.rst | 8 ++++++++ src/conf/domain_conf.c | 30 +++++++++++++++++++++++++++++ src/conf/domain_conf.h | 2 ++ src/conf/schemas/domaincommon.rng | 10 ++++++++++ tests/qemuxmlconfdata/amd-iommu.xml | 2 +- 5 files changed, 51 insertions(+), 1 deletion(-) diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst index 8c122f5dae..690da6d43e 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -8948,6 +8948,14 @@ Example: example to efficiently enable more than 255 vCPUs. :since:`Since 10.7.0` (QEMU/KVM and ``intel`` model only) + ``passthrough`` + Enable passthrough. TODO: Explain what this is + :since:`Since 11.2.0` (QEMU/KVM and ``amd`` model only) + + ``xtsup`` + Enable x2APIC mode. + :since:`Since 11.2.0` (QEMU/KVM and ``amd`` model only) + The ``virtio`` IOMMU devices can further have ``address`` element as described in `Device addresses`_ (address has to by type of ``pci``). diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 961ef08ba1..ef31da9d3f 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -14091,6 +14091,14 @@ virDomainIOMMUDefParseXML(virDomainXMLOption *xmlopt, if (virXMLPropTristateSwitch(driver, "dma_translation", VIR_XML_PROP_NONE, &iommu->dma_translation) < 0) return NULL; + + if (virXMLPropTristateSwitch(driver, "xtsup", VIR_XML_PROP_NONE, + &iommu->xtsup) < 0) + return NULL; + + if (virXMLPropTristateSwitch(driver, "passthrough", VIR_XML_PROP_NONE, + &iommu->pt) < 0) + return NULL; } if (virDomainDeviceInfoParseXML(xmlopt, node, ctxt, @@ -21707,6 +21715,20 @@ virDomainIOMMUDefCheckABIStability(virDomainIOMMUDef *src, virTristateSwitchTypeToString(src->dma_translation)); return false; } + if (src->pt != dst->pt) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("Target domain IOMMU device dma translation '%1$s' does not match source '%2$s'"), + virTristateSwitchTypeToString(dst->pt), + virTristateSwitchTypeToString(src->pt)); + return false; + } + if (src->xtsup != dst->xtsup) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("Target domain IOMMU device dma translation '%1$s' does not match source '%2$s'"), + virTristateSwitchTypeToString(dst->xtsup), + virTristateSwitchTypeToString(src->xtsup)); + return false; + } return virDomainDeviceInfoCheckABIStability(&src->info, &dst->info); } @@ -27734,6 +27756,14 @@ virDomainIOMMUDefFormat(virBuffer *buf, virBufferAsprintf(&driverAttrBuf, " dma_translation='%s'", virTristateSwitchTypeToString(iommu->dma_translation)); } + if (iommu->pt != VIR_TRISTATE_SWITCH_ABSENT) { + virBufferAsprintf(&driverAttrBuf, " passthrough='%s'", + virTristateSwitchTypeToString(iommu->pt)); + } + if (iommu->xtsup != VIR_TRISTATE_SWITCH_ABSENT) { + virBufferAsprintf(&driverAttrBuf, " xtsup='%s'", + virTristateSwitchTypeToString(iommu->xtsup)); + } virXMLFormatElement(&childBuf, "driver", &driverAttrBuf, NULL); diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 1ec16d3824..9b00212fb9 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -3003,6 +3003,8 @@ struct _virDomainIOMMUDef { unsigned int aw_bits; virDomainDeviceInfo info; virTristateSwitch dma_translation; + virTristateSwitch xtsup; + virTristateSwitch pt; }; typedef enum { diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincommon.rng index 71b68d6687..7183b4090c 100644 --- a/src/conf/schemas/domaincommon.rng +++ b/src/conf/schemas/domaincommon.rng @@ -6214,6 +6214,16 @@ <ref name="virOnOff"/> </attribute> </optional> + <optional> + <attribute name="xtsup"> + <ref name="virOnOff"/> + </attribute> + </optional> + <optional> + <attribute name="passthrough"> + <ref name="virOnOff"/> + </attribute> + </optional> </element> </optional> <optional> diff --git a/tests/qemuxmlconfdata/amd-iommu.xml b/tests/qemuxmlconfdata/amd-iommu.xml index 0668ed4237..4ad79ce4ae 100644 --- a/tests/qemuxmlconfdata/amd-iommu.xml +++ b/tests/qemuxmlconfdata/amd-iommu.xml @@ -32,7 +32,7 @@ <watchdog model='itco' action='reset'/> <memballoon model='none'/> <iommu model='amd'> - <driver intremap='on' iotlb='on'/> + <driver intremap='on' iotlb='on' passthrough='on' xtsup='on'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/> </iommu> </devices> -- 2.48.1

Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/conf/domain_validate.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index be91caee65..1f3643d441 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -3029,6 +3029,15 @@ virDomainIOMMUDefValidate(const virDomainIOMMUDef *iommu) break; case VIR_DOMAIN_IOMMU_MODEL_INTEL: + if (iommu->pt != VIR_TRISTATE_SWITCH_ABSENT || + iommu->xtsup != VIR_TRISTATE_SWITCH_ABSENT) { + virReportError(VIR_ERR_XML_ERROR, + _("iommu model '%1$s' doesn't support some additional attributes"), + virDomainIOMMUModelTypeToString(iommu->model)); + return -1; + } + break; + case VIR_DOMAIN_IOMMU_MODEL_LAST: break; } -- 2.48.1

Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_command.c | 2 ++ tests/qemuxmlconfdata/amd-iommu.x86_64-latest.args | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 269455ff3b..b778c76f5a 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -6101,6 +6101,8 @@ qemuBuildIOMMUCommandLine(virCommand *cmd, "s:driver", "amd-iommu", "s:pci-id", iommu->info.alias, "S:intremap", qemuOnOffAuto(iommu->intremap), + "S:pt", qemuOnOffAuto(iommu->pt), + "S:xtsup", qemuOnOffAuto(iommu->xtsup), "T:device-iotlb", iommu->iotlb, NULL) < 0) return -1; diff --git a/tests/qemuxmlconfdata/amd-iommu.x86_64-latest.args b/tests/qemuxmlconfdata/amd-iommu.x86_64-latest.args index 36244edb3a..f7ba304a17 100644 --- a/tests/qemuxmlconfdata/amd-iommu.x86_64-latest.args +++ b/tests/qemuxmlconfdata/amd-iommu.x86_64-latest.args @@ -27,7 +27,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \ -no-shutdown \ -boot strict=on \ -device '{"driver":"AMDVI-PCI","id":"iommu0","bus":"pcie.0","addr":"0x1"}' \ --device '{"driver":"amd-iommu","pci-id":"iommu0","intremap":"on","device-iotlb":true}' \ +-device '{"driver":"amd-iommu","pci-id":"iommu0","intremap":"on","pt":"on","xtsup":"on","device-iotlb":true}' \ -audiodev '{"id":"audio1","driver":"none"}' \ -global ICH9-LPC.noreboot=off \ -watchdog-action reset \ -- 2.48.1
participants (1)
-
Ján Tomko