[RFC PATCH 0/5] Implement amd-iommu device to libvirt

Here is a draft patch series for amd-iommu device. It will implement amd-iommu device and its attributes: intremap, device-iotlb, xtsup. However, its secret device AMDVI-PCI will occupy a PCIe slot and cause VM failed to start: Domain XML: <domain type='kvm'> ... <video> <model type='virtio' heads='1' primary='yes'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/> </video> <iommu model='amd'/> ... </domain> ➜ ~ virsh create /tmp/fedora.xml error: Failed to create domain from /tmp/fedora.xml error: internal error: QEMU unexpectedly closed the monitor (vm='fedora'): 2024-09-27T07:55:46.132886Z qemu-system-x86_64: -device {"driver":"virtio-vga","id":"video0","max_outputs":1,"bus":"pcie.0","addr":"0x1"}: PCI: slot 1 function 0 not available for virtio-vga, in use by AMDVI-PCI,id=(null) I'll update the series when QEMU fixes the blocker. Han Han (5): qemu_capabilities: Introduce QEMU_CAPS_AMD_IOMMU qemu_capabilities: Introduce QEMU_CAPS_AMD_IOMMU_INTREMAP qemu_capabilities: Introduce QEMU_CAPS_AMD_IOMMU_DEVICE_IOTLB qemu_capabilities: Introduce QEMU_CAPS_AMD_IOMMU_XTSUP qemu: Add suppport for amd-iommu device and xtsup attrib docs/formatdomain.rst | 20 +++- src/conf/domain_conf.c | 16 +++ src/conf/domain_conf.h | 2 + src/conf/domain_validate.c | 39 +++++++- src/conf/schemas/domaincommon.rng | 6 ++ src/qemu/qemu_capabilities.c | 16 +++ src/qemu/qemu_capabilities.h | 6 ++ src/qemu/qemu_command.c | 15 +++ src/qemu/qemu_domain_address.c | 2 + src/qemu/qemu_validate.c | 1 + .../caps_5.2.0_x86_64.replies | 90 +++++++++++------ .../caps_5.2.0_x86_64.xml | 3 + .../caps_6.0.0_x86_64.replies | 90 +++++++++++------ .../caps_6.0.0_x86_64.xml | 3 + .../caps_6.1.0_x86_64.replies | 90 +++++++++++------ .../caps_6.1.0_x86_64.xml | 3 + .../caps_6.2.0_x86_64.xml | 3 + .../caps_7.0.0_x86_64.replies | 94 ++++++++++++------ .../caps_7.0.0_x86_64.xml | 3 + .../caps_7.1.0_x86_64.replies | 94 ++++++++++++------ .../caps_7.1.0_x86_64.xml | 3 + .../caps_7.2.0_x86_64+hvf.replies | 94 ++++++++++++------ .../caps_7.2.0_x86_64+hvf.xml | 3 + .../caps_7.2.0_x86_64.replies | 94 ++++++++++++------ .../caps_7.2.0_x86_64.xml | 3 + .../caps_8.0.0_x86_64.replies | 94 ++++++++++++------ .../caps_8.0.0_x86_64.xml | 3 + .../caps_8.1.0_x86_64.replies | 90 +++++++++++------ .../caps_8.1.0_x86_64.xml | 3 + .../caps_8.2.0_x86_64.replies | 86 ++++++++++------ .../caps_8.2.0_x86_64.xml | 3 + .../caps_9.0.0_x86_64.replies | 99 +++++++++++++------ .../caps_9.0.0_x86_64.xml | 4 + .../caps_9.1.0_x86_64.replies | 79 ++++++++++----- .../caps_9.1.0_x86_64.xml | 4 + tests/qemuxmlconfdata/amd-iommu-aw-bits.err | 1 + tests/qemuxmlconfdata/amd-iommu-aw-bits.xml | 32 ++++++ .../amd-iommu-caching-mode.err | 1 + .../amd-iommu-caching-mode.xml | 32 ++++++ .../amd-iommu-device-iotlb.x86_64-latest.args | 34 +++++++ .../amd-iommu-device-iotlb.xml | 37 +++++++ .../amd-iommu-dma-translation.err | 1 + .../amd-iommu-dma-translation.xml | 32 ++++++ tests/qemuxmlconfdata/amd-iommu-eim.err | 1 + tests/qemuxmlconfdata/amd-iommu-eim.xml | 32 ++++++ .../amd-iommu-xtsup.x86_64-latest.args | 34 +++++++ tests/qemuxmlconfdata/amd-iommu-xtsup.xml | 32 ++++++ .../amd-iommu.x86_64-latest.args | 34 +++++++ tests/qemuxmlconfdata/amd-iommu.xml | 32 ++++++ tests/qemuxmlconfdata/intel-iommu-xtsup.err | 1 + tests/qemuxmlconfdata/intel-iommu-xtsup.xml | 38 +++++++ tests/qemuxmlconftest.c | 8 ++ 52 files changed, 1275 insertions(+), 365 deletions(-) create mode 100644 tests/qemuxmlconfdata/amd-iommu-aw-bits.err create mode 100644 tests/qemuxmlconfdata/amd-iommu-aw-bits.xml create mode 100644 tests/qemuxmlconfdata/amd-iommu-caching-mode.err create mode 100644 tests/qemuxmlconfdata/amd-iommu-caching-mode.xml create mode 100644 tests/qemuxmlconfdata/amd-iommu-device-iotlb.x86_64-latest.args create mode 100644 tests/qemuxmlconfdata/amd-iommu-device-iotlb.xml create mode 100644 tests/qemuxmlconfdata/amd-iommu-dma-translation.err create mode 100644 tests/qemuxmlconfdata/amd-iommu-dma-translation.xml create mode 100644 tests/qemuxmlconfdata/amd-iommu-eim.err create mode 100644 tests/qemuxmlconfdata/amd-iommu-eim.xml create mode 100644 tests/qemuxmlconfdata/amd-iommu-xtsup.x86_64-latest.args create mode 100644 tests/qemuxmlconfdata/amd-iommu-xtsup.xml create mode 100644 tests/qemuxmlconfdata/amd-iommu.x86_64-latest.args create mode 100644 tests/qemuxmlconfdata/amd-iommu.xml create mode 100644 tests/qemuxmlconfdata/intel-iommu-xtsup.err create mode 100644 tests/qemuxmlconfdata/intel-iommu-xtsup.xml -- 2.46.2

This qemu capability will be used for the device amd-iommu. Signed-off-by: Han Han <hhan@redhat.com> --- src/qemu/qemu_capabilities.c | 4 + src/qemu/qemu_capabilities.h | 3 + .../caps_5.2.0_x86_64.replies | 90 +++++++++++------ .../caps_5.2.0_x86_64.xml | 1 + .../caps_6.0.0_x86_64.replies | 90 +++++++++++------ .../caps_6.0.0_x86_64.xml | 1 + .../caps_6.1.0_x86_64.replies | 90 +++++++++++------ .../caps_6.1.0_x86_64.xml | 1 + .../caps_6.2.0_x86_64.xml | 1 + .../caps_7.0.0_x86_64.replies | 94 ++++++++++++------ .../caps_7.0.0_x86_64.xml | 1 + .../caps_7.1.0_x86_64.replies | 94 ++++++++++++------ .../caps_7.1.0_x86_64.xml | 1 + .../caps_7.2.0_x86_64+hvf.replies | 94 ++++++++++++------ .../caps_7.2.0_x86_64+hvf.xml | 1 + .../caps_7.2.0_x86_64.replies | 94 ++++++++++++------ .../caps_7.2.0_x86_64.xml | 1 + .../caps_8.0.0_x86_64.replies | 94 ++++++++++++------ .../caps_8.0.0_x86_64.xml | 1 + .../caps_8.1.0_x86_64.replies | 90 +++++++++++------ .../caps_8.1.0_x86_64.xml | 1 + .../caps_8.2.0_x86_64.replies | 86 ++++++++++------ .../caps_8.2.0_x86_64.xml | 1 + .../caps_9.0.0_x86_64.replies | 99 +++++++++++++------ .../caps_9.0.0_x86_64.xml | 1 + .../caps_9.1.0_x86_64.replies | 79 ++++++++++----- .../caps_9.1.0_x86_64.xml | 1 + 27 files changed, 752 insertions(+), 362 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 6a0f3e2ab7..5ecee07a53 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -715,6 +715,9 @@ VIR_ENUM_IMPL(virQEMUCaps, "acpi-erst", /* QEMU_CAPS_DEVICE_ACPI_ERST */ "intel-iommu.dma-translation", /* QEMU_CAPS_INTEL_IOMMU_DMA_TRANSLATION */ "machine-i8042-opt", /* QEMU_CAPS_MACHINE_I8042_OPT */ + + /* 465 */ + "amd-iommu", /* QEMU_CAPS_DEVICE_AMD_IOMMU */ ); @@ -1402,6 +1405,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = { { "virtio-sound-device", QEMU_CAPS_DEVICE_VIRTIO_SOUND }, { "sev-snp-guest", QEMU_CAPS_SEV_SNP_GUEST }, { "acpi-erst", QEMU_CAPS_DEVICE_ACPI_ERST }, + { "amd-iommu", QEMU_CAPS_DEVICE_AMD_IOMMU }, }; diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 736d34179e..3075fe069c 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -695,6 +695,9 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */ QEMU_CAPS_INTEL_IOMMU_DMA_TRANSLATION, /* intel-iommu.dma-translation */ QEMU_CAPS_MACHINE_I8042_OPT, /* -machine xxx,i8042=on/off; use virQEMUCapsSupportsI8042Toggle() to query this capability */ + /* 465 */ + QEMU_CAPS_DEVICE_AMD_IOMMU, /* -device amd-iommu */ + QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; diff --git a/tests/qemucapabilitiesdata/caps_5.2.0_x86_64.replies b/tests/qemucapabilitiesdata/caps_5.2.0_x86_64.replies index 3f5405d83e..cb0c432868 100644 --- a/tests/qemucapabilitiesdata/caps_5.2.0_x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_5.2.0_x86_64.replies @@ -20589,12 +20589,42 @@ "id": "libvirt-35" } +{ + "execute": "device-list-properties", + "arguments": { + "typename": "amd-iommu" + }, + "id": "libvirt-36" +} + +{ + "return": [ + { + "default-value": true, + "name": "pt", + "type": "bool" + }, + { + "default-value": false, + "name": "device-iotlb", + "type": "bool" + }, + { + "default-value": "auto", + "name": "intremap", + "description": "on/off/auto", + "type": "OnOffAuto" + } + ], + "id": "libvirt-36" +} + { "execute": "qom-list-properties", "arguments": { "typename": "memory-backend-file" }, - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -20664,7 +20694,7 @@ "type": "bool" } ], - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -20672,7 +20702,7 @@ "arguments": { "typename": "memory-backend-memfd" }, - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -20741,7 +20771,7 @@ "type": "int" } ], - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -20749,7 +20779,7 @@ "arguments": { "typename": "max-x86_64-cpu" }, - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -22347,12 +22377,12 @@ "type": "bool" } ], - "id": "libvirt-38" + "id": "libvirt-39" } { "execute": "query-machines", - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -22810,7 +22840,7 @@ "default-ram-id": "pc.ram" } ], - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -22818,7 +22848,7 @@ "arguments": { "typename": "none-machine" }, - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -22903,7 +22933,7 @@ "type": "string" } ], - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -22911,7 +22941,7 @@ "arguments": { "typename": "generic-pc-machine" }, - "id": "libvirt-41" + "id": "libvirt-42" } { @@ -23036,12 +23066,12 @@ "type": "bool" } ], - "id": "libvirt-41" + "id": "libvirt-42" } { "execute": "query-cpu-definitions", - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -24822,12 +24852,12 @@ "deprecated": false } ], - "id": "libvirt-42" + "id": "libvirt-43" } { "execute": "query-tpm-models", - "id": "libvirt-43" + "id": "libvirt-44" } { @@ -24835,12 +24865,12 @@ "tpm-crb", "tpm-tis" ], - "id": "libvirt-43" + "id": "libvirt-44" } { "execute": "query-tpm-types", - "id": "libvirt-44" + "id": "libvirt-45" } { @@ -24848,12 +24878,12 @@ "passthrough", "emulator" ], - "id": "libvirt-44" + "id": "libvirt-45" } { "execute": "query-command-line-options", - "id": "libvirt-45" + "id": "libvirt-46" } { @@ -26137,12 +26167,12 @@ "option": "drive" } ], - "id": "libvirt-45" + "id": "libvirt-46" } { "execute": "query-migrate-capabilities", - "id": "libvirt-46" + "id": "libvirt-47" } { @@ -26220,16 +26250,16 @@ "capability": "validate-uuid" } ], - "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 is not enabled in KVM" @@ -26244,7 +26274,7 @@ "name": "host" } }, - "id": "libvirt-48" + "id": "libvirt-49" } { @@ -26553,7 +26583,7 @@ } } }, - "id": "libvirt-48" + "id": "libvirt-49" } { @@ -26567,7 +26597,7 @@ } } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -26876,7 +26906,7 @@ } } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -26891,7 +26921,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -27200,7 +27230,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { diff --git a/tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml index 4cd05fa7ec..c46b023c78 100644 --- a/tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml @@ -161,6 +161,7 @@ <flag name='virtio-crypto'/> <flag name='usb-mtp'/> <flag name='netdev.user'/> + <flag name='amd-iommu'/> <version>5002000</version> <microcodeVersion>43100243</microcodeVersion> <package>v5.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_6.0.0_x86_64.replies b/tests/qemucapabilitiesdata/caps_6.0.0_x86_64.replies index 5380b322d2..683b245c2e 100644 --- a/tests/qemucapabilitiesdata/caps_6.0.0_x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_6.0.0_x86_64.replies @@ -22363,12 +22363,42 @@ "id": "libvirt-35" } +{ + "execute": "device-list-properties", + "arguments": { + "typename": "amd-iommu" + }, + "id": "libvirt-36" +} + +{ + "return": [ + { + "default-value": true, + "name": "pt", + "type": "bool" + }, + { + "default-value": false, + "name": "device-iotlb", + "type": "bool" + }, + { + "default-value": "auto", + "name": "intremap", + "description": "on/off/auto", + "type": "OnOffAuto" + } + ], + "id": "libvirt-36" +} + { "execute": "qom-list-properties", "arguments": { "typename": "memory-backend-file" }, - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -22442,7 +22472,7 @@ "type": "bool" } ], - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -22450,7 +22480,7 @@ "arguments": { "typename": "memory-backend-memfd" }, - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -22519,7 +22549,7 @@ "type": "int" } ], - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -22527,7 +22557,7 @@ "arguments": { "typename": "max-x86_64-cpu" }, - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -24173,12 +24203,12 @@ "type": "bool" } ], - "id": "libvirt-38" + "id": "libvirt-39" } { "execute": "query-machines", - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -24625,7 +24655,7 @@ "default-ram-id": "pc.ram" } ], - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -24633,7 +24663,7 @@ "arguments": { "typename": "none-machine" }, - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -24731,7 +24761,7 @@ "type": "child<container>" } ], - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -24739,7 +24769,7 @@ "arguments": { "typename": "generic-pc-machine" }, - "id": "libvirt-41" + "id": "libvirt-42" } { @@ -24884,12 +24914,12 @@ "type": "bool" } ], - "id": "libvirt-41" + "id": "libvirt-42" } { "execute": "query-cpu-definitions", - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -26713,12 +26743,12 @@ "deprecated": false } ], - "id": "libvirt-42" + "id": "libvirt-43" } { "execute": "query-tpm-models", - "id": "libvirt-43" + "id": "libvirt-44" } { @@ -26726,12 +26756,12 @@ "tpm-crb", "tpm-tis" ], - "id": "libvirt-43" + "id": "libvirt-44" } { "execute": "query-tpm-types", - "id": "libvirt-44" + "id": "libvirt-45" } { @@ -26739,12 +26769,12 @@ "passthrough", "emulator" ], - "id": "libvirt-44" + "id": "libvirt-45" } { "execute": "query-command-line-options", - "id": "libvirt-45" + "id": "libvirt-46" } { @@ -28052,12 +28082,12 @@ "option": "drive" } ], - "id": "libvirt-45" + "id": "libvirt-46" } { "execute": "query-migrate-capabilities", - "id": "libvirt-46" + "id": "libvirt-47" } { @@ -28139,12 +28169,12 @@ "capability": "background-snapshot" } ], - "id": "libvirt-46" + "id": "libvirt-47" } { "execute": "query-sev-capabilities", - "id": "libvirt-47" + "id": "libvirt-48" } { @@ -28154,7 +28184,7 @@ "cert-chain": "AQAAAAAOAAAAQAAAAAOAAAAQAAAAAOAAAAQAAAAAOAAAAQAAAAAOAAA", "pdh": "AQAAAAAOAAAAQAAAAAOAAAAQAAAAAOAAAAQAAAAAOAAAAQAAAAAOAAAAQAAAAAOAAA" }, - "id": "libvirt-47" + "id": "libvirt-48" } { @@ -28165,7 +28195,7 @@ "name": "host" } }, - "id": "libvirt-48" + "id": "libvirt-49" } { @@ -28486,7 +28516,7 @@ } } }, - "id": "libvirt-48" + "id": "libvirt-49" } { @@ -28500,7 +28530,7 @@ } } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -28821,7 +28851,7 @@ } } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -28836,7 +28866,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -29157,7 +29187,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { diff --git a/tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml index dc55e0ab3f..a189694f3b 100644 --- a/tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml @@ -173,6 +173,7 @@ <flag name='display-reload'/> <flag name='usb-mtp'/> <flag name='netdev.user'/> + <flag name='amd-iommu'/> <version>6000000</version> <microcodeVersion>43100242</microcodeVersion> <package>v6.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_6.1.0_x86_64.replies b/tests/qemucapabilitiesdata/caps_6.1.0_x86_64.replies index 6fb37d63d5..fec03bdf02 100644 --- a/tests/qemucapabilitiesdata/caps_6.1.0_x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_6.1.0_x86_64.replies @@ -22592,12 +22592,42 @@ "id": "libvirt-35" } +{ + "execute": "device-list-properties", + "arguments": { + "typename": "amd-iommu" + }, + "id": "libvirt-36" +} + +{ + "return": [ + { + "default-value": true, + "name": "pt", + "type": "bool" + }, + { + "default-value": false, + "name": "device-iotlb", + "type": "bool" + }, + { + "default-value": "auto", + "name": "intremap", + "description": "on/off/auto", + "type": "OnOffAuto" + } + ], + "id": "libvirt-36" +} + { "execute": "qom-list-properties", "arguments": { "typename": "memory-backend-file" }, - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -22676,7 +22706,7 @@ "type": "bool" } ], - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -22684,7 +22714,7 @@ "arguments": { "typename": "memory-backend-memfd" }, - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -22758,7 +22788,7 @@ "type": "int" } ], - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -22766,7 +22796,7 @@ "arguments": { "typename": "max-x86_64-cpu" }, - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -24424,12 +24454,12 @@ "type": "bool" } ], - "id": "libvirt-38" + "id": "libvirt-39" } { "execute": "query-machines", - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -24894,7 +24924,7 @@ "default-ram-id": "pc.ram" } ], - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -24902,7 +24932,7 @@ "arguments": { "typename": "none-machine" }, - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -25005,7 +25035,7 @@ "type": "child<container>" } ], - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -25013,7 +25043,7 @@ "arguments": { "typename": "generic-pc-machine" }, - "id": "libvirt-41" + "id": "libvirt-42" } { @@ -25172,12 +25202,12 @@ "type": "bool" } ], - "id": "libvirt-41" + "id": "libvirt-42" } { "execute": "query-cpu-definitions", - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -27189,12 +27219,12 @@ "deprecated": false } ], - "id": "libvirt-42" + "id": "libvirt-43" } { "execute": "query-tpm-models", - "id": "libvirt-43" + "id": "libvirt-44" } { @@ -27202,12 +27232,12 @@ "tpm-crb", "tpm-tis" ], - "id": "libvirt-43" + "id": "libvirt-44" } { "execute": "query-tpm-types", - "id": "libvirt-44" + "id": "libvirt-45" } { @@ -27215,12 +27245,12 @@ "passthrough", "emulator" ], - "id": "libvirt-44" + "id": "libvirt-45" } { "execute": "query-command-line-options", - "id": "libvirt-45" + "id": "libvirt-46" } { @@ -28540,12 +28570,12 @@ "option": "drive" } ], - "id": "libvirt-45" + "id": "libvirt-46" } { "execute": "query-migrate-capabilities", - "id": "libvirt-46" + "id": "libvirt-47" } { @@ -28627,16 +28657,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": "Failed to open /dev/sev: No such file or directory" @@ -28651,7 +28681,7 @@ "name": "host" } }, - "id": "libvirt-48" + "id": "libvirt-49" } { @@ -28974,7 +29004,7 @@ } } }, - "id": "libvirt-48" + "id": "libvirt-49" } { @@ -28988,7 +29018,7 @@ } } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -29311,7 +29341,7 @@ } } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -29326,7 +29356,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -29649,7 +29679,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { diff --git a/tests/qemucapabilitiesdata/caps_6.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_6.1.0_x86_64.xml index 1d5b8ea9d2..641841d02d 100644 --- a/tests/qemucapabilitiesdata/caps_6.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_6.1.0_x86_64.xml @@ -179,6 +179,7 @@ <flag name='display-reload'/> <flag name='usb-mtp'/> <flag name='netdev.user'/> + <flag name='amd-iommu'/> <version>6001000</version> <microcodeVersion>43100243</microcodeVersion> <package>v6.1.0</package> diff --git a/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml index f8f8bd95f4..e7da931a73 100644 --- a/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml @@ -181,6 +181,7 @@ <flag name='display-reload'/> <flag name='usb-mtp'/> <flag name='netdev.user'/> + <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.replies b/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.replies index 1ad960c99b..2d9c660813 100644 --- a/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.replies @@ -26276,12 +26276,42 @@ "id": "libvirt-35" } +{ + "execute": "device-list-properties", + "arguments": { + "typename": "amd-iommu" + }, + "id": "libvirt-36" +} + +{ + "return": [ + { + "default-value": true, + "name": "pt", + "type": "bool" + }, + { + "default-value": false, + "name": "device-iotlb", + "type": "bool" + }, + { + "default-value": "auto", + "name": "intremap", + "description": "on/off/auto", + "type": "OnOffAuto" + } + ], + "id": "libvirt-36" +} + { "execute": "qom-list-properties", "arguments": { "typename": "memory-backend-file" }, - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -26360,7 +26390,7 @@ "type": "bool" } ], - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -26368,7 +26398,7 @@ "arguments": { "typename": "memory-backend-memfd" }, - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -26442,7 +26472,7 @@ "type": "int" } ], - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -26450,7 +26480,7 @@ "arguments": { "typename": "max-x86_64-cpu" }, - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -28206,12 +28236,12 @@ "type": "bool" } ], - "id": "libvirt-38" + "id": "libvirt-39" } { "execute": "query-machines", - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -28712,7 +28742,7 @@ "default-ram-id": "pc.ram" } ], - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -28720,7 +28750,7 @@ "arguments": { "typename": "none-machine" }, - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -28823,7 +28853,7 @@ "type": "child<container>" } ], - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -28831,7 +28861,7 @@ "arguments": { "typename": "generic-pc-machine" }, - "id": "libvirt-41" + "id": "libvirt-42" } { @@ -29008,12 +29038,12 @@ "type": "bool" } ], - "id": "libvirt-41" + "id": "libvirt-42" } { "execute": "query-cpu-definitions", - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -31073,12 +31103,12 @@ "deprecated": false } ], - "id": "libvirt-42" + "id": "libvirt-43" } { "execute": "query-tpm-models", - "id": "libvirt-43" + "id": "libvirt-44" } { @@ -31086,12 +31116,12 @@ "tpm-crb", "tpm-tis" ], - "id": "libvirt-43" + "id": "libvirt-44" } { "execute": "query-tpm-types", - "id": "libvirt-44" + "id": "libvirt-45" } { @@ -31099,12 +31129,12 @@ "passthrough", "emulator" ], - "id": "libvirt-44" + "id": "libvirt-45" } { "execute": "query-command-line-options", - "id": "libvirt-45" + "id": "libvirt-46" } { @@ -32428,12 +32458,12 @@ "option": "drive" } ], - "id": "libvirt-45" + "id": "libvirt-46" } { "execute": "query-migrate-capabilities", - "id": "libvirt-46" + "id": "libvirt-47" } { @@ -32515,16 +32545,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 +32563,7 @@ { "execute": "query-sgx-capabilities", - "id": "libvirt-48" + "id": "libvirt-49" } { @@ -32554,7 +32584,7 @@ } ] }, - "id": "libvirt-48" + "id": "libvirt-49" } { @@ -32565,7 +32595,7 @@ "name": "host" } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -32902,7 +32932,7 @@ } } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -32916,7 +32946,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -33253,7 +33283,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -33268,7 +33298,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { @@ -33605,7 +33635,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { diff --git a/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml index 23b626aa16..3218c5aa98 100644 --- a/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml @@ -189,6 +189,7 @@ <flag name='netdev.user'/> <flag name='acpi-erst'/> <flag name='machine-i8042-opt'/> + <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.replies b/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.replies index cd2116d05a..286878bc6c 100644 --- a/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.replies @@ -26999,12 +26999,42 @@ "id": "libvirt-35" } +{ + "execute": "device-list-properties", + "arguments": { + "typename": "amd-iommu" + }, + "id": "libvirt-36" +} + +{ + "return": [ + { + "default-value": true, + "name": "pt", + "type": "bool" + }, + { + "default-value": false, + "name": "device-iotlb", + "type": "bool" + }, + { + "default-value": "auto", + "name": "intremap", + "description": "on/off/auto", + "type": "OnOffAuto" + } + ], + "id": "libvirt-36" +} + { "execute": "qom-list-properties", "arguments": { "typename": "memory-backend-file" }, - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -27083,7 +27113,7 @@ "type": "bool" } ], - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -27091,7 +27121,7 @@ "arguments": { "typename": "memory-backend-memfd" }, - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -27165,7 +27195,7 @@ "type": "int" } ], - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -27173,7 +27203,7 @@ "arguments": { "typename": "max-x86_64-cpu" }, - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -28966,12 +28996,12 @@ "type": "bool" } ], - "id": "libvirt-38" + "id": "libvirt-39" } { "execute": "query-machines", - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -29490,7 +29520,7 @@ "default-ram-id": "pc.ram" } ], - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -29498,7 +29528,7 @@ "arguments": { "typename": "none-machine" }, - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -29611,7 +29641,7 @@ "type": "child<container>" } ], - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -29619,7 +29649,7 @@ "arguments": { "typename": "generic-pc-machine" }, - "id": "libvirt-41" + "id": "libvirt-42" } { @@ -29811,12 +29841,12 @@ "type": "bool" } ], - "id": "libvirt-41" + "id": "libvirt-42" } { "execute": "query-cpu-definitions", - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -31755,12 +31785,12 @@ "deprecated": false } ], - "id": "libvirt-42" + "id": "libvirt-43" } { "execute": "query-tpm-models", - "id": "libvirt-43" + "id": "libvirt-44" } { @@ -31768,12 +31798,12 @@ "tpm-crb", "tpm-tis" ], - "id": "libvirt-43" + "id": "libvirt-44" } { "execute": "query-tpm-types", - "id": "libvirt-44" + "id": "libvirt-45" } { @@ -31781,12 +31811,12 @@ "passthrough", "emulator" ], - "id": "libvirt-44" + "id": "libvirt-45" } { "execute": "query-command-line-options", - "id": "libvirt-45" + "id": "libvirt-46" } { @@ -33110,12 +33140,12 @@ "option": "drive" } ], - "id": "libvirt-45" + "id": "libvirt-46" } { "execute": "query-migrate-capabilities", - "id": "libvirt-46" + "id": "libvirt-47" } { @@ -33205,16 +33235,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 +33253,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 +33272,7 @@ "name": "host" } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -33580,7 +33610,7 @@ } } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -33594,7 +33624,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -33932,7 +33962,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -33947,7 +33977,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { @@ -34285,7 +34315,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { diff --git a/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml index 81c4cc474b..ade421305a 100644 --- a/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml @@ -194,6 +194,7 @@ <flag name='acpi-erst'/> <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> + <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.replies b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.replies index c85be45cd1..5bb30166f6 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,42 @@ "id": "libvirt-35" } +{ + "execute": "device-list-properties", + "arguments": { + "typename": "amd-iommu" + }, + "id": "libvirt-36" +} + +{ + "return": [ + { + "default-value": true, + "name": "pt", + "type": "bool" + }, + { + "default-value": false, + "name": "device-iotlb", + "type": "bool" + }, + { + "default-value": "auto", + "name": "intremap", + "description": "on/off/auto", + "type": "OnOffAuto" + } + ], + "id": "libvirt-36" +} + { "execute": "qom-list-properties", "arguments": { "typename": "memory-backend-file" }, - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -28057,7 +28087,7 @@ "type": "bool" } ], - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -28065,7 +28095,7 @@ "arguments": { "typename": "memory-backend-memfd" }, - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -28144,7 +28174,7 @@ "type": "int" } ], - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -28152,7 +28182,7 @@ "arguments": { "typename": "max-x86_64-cpu" }, - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -29945,12 +29975,12 @@ "type": "bool" } ], - "id": "libvirt-38" + "id": "libvirt-39" } { "execute": "query-machines", - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -30487,7 +30517,7 @@ "default-ram-id": "pc.ram" } ], - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -30495,7 +30525,7 @@ "arguments": { "typename": "none-machine" }, - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -30608,7 +30638,7 @@ "type": "child<container>" } ], - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -30616,7 +30646,7 @@ "arguments": { "typename": "generic-pc-machine" }, - "id": "libvirt-41" + "id": "libvirt-42" } { @@ -30808,12 +30838,12 @@ "type": "bool" } ], - "id": "libvirt-41" + "id": "libvirt-42" } { "execute": "query-cpu-definitions", - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -32752,12 +32782,12 @@ "deprecated": false } ], - "id": "libvirt-42" + "id": "libvirt-43" } { "execute": "query-tpm-models", - "id": "libvirt-43" + "id": "libvirt-44" } { @@ -32765,12 +32795,12 @@ "tpm-crb", "tpm-tis" ], - "id": "libvirt-43" + "id": "libvirt-44" } { "execute": "query-tpm-types", - "id": "libvirt-44" + "id": "libvirt-45" } { @@ -32778,12 +32808,12 @@ "passthrough", "emulator" ], - "id": "libvirt-44" + "id": "libvirt-45" } { "execute": "query-command-line-options", - "id": "libvirt-45" + "id": "libvirt-46" } { @@ -34107,12 +34137,12 @@ "option": "drive" } ], - "id": "libvirt-45" + "id": "libvirt-46" } { "execute": "query-migrate-capabilities", - "id": "libvirt-46" + "id": "libvirt-47" } { @@ -34202,16 +34232,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 +34250,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 +34269,7 @@ "name": "host" } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -34577,7 +34607,7 @@ } } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -34591,7 +34621,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -34929,7 +34959,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -34944,7 +34974,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { @@ -35282,7 +35312,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { 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 18d74d6e8c..f920f96d41 100644 --- a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml +++ b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml @@ -198,6 +198,7 @@ <flag name='acpi-erst'/> <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> + <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.replies b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.replies index 4b56adeafa..63513646f1 100644 --- a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.replies @@ -27968,12 +27968,42 @@ "id": "libvirt-35" } +{ + "execute": "device-list-properties", + "arguments": { + "typename": "amd-iommu" + }, + "id": "libvirt-36" +} + +{ + "return": [ + { + "default-value": true, + "name": "pt", + "type": "bool" + }, + { + "default-value": false, + "name": "device-iotlb", + "type": "bool" + }, + { + "default-value": "auto", + "name": "intremap", + "description": "on/off/auto", + "type": "OnOffAuto" + } + ], + "id": "libvirt-36" +} + { "execute": "qom-list-properties", "arguments": { "typename": "memory-backend-file" }, - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -28057,7 +28087,7 @@ "type": "bool" } ], - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -28065,7 +28095,7 @@ "arguments": { "typename": "memory-backend-memfd" }, - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -28144,7 +28174,7 @@ "type": "int" } ], - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -28152,7 +28182,7 @@ "arguments": { "typename": "max-x86_64-cpu" }, - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -29945,12 +29975,12 @@ "type": "bool" } ], - "id": "libvirt-38" + "id": "libvirt-39" } { "execute": "query-machines", - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -30487,7 +30517,7 @@ "default-ram-id": "pc.ram" } ], - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -30495,7 +30525,7 @@ "arguments": { "typename": "none-machine" }, - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -30608,7 +30638,7 @@ "type": "child<container>" } ], - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -30616,7 +30646,7 @@ "arguments": { "typename": "generic-pc-machine" }, - "id": "libvirt-41" + "id": "libvirt-42" } { @@ -30808,12 +30838,12 @@ "type": "bool" } ], - "id": "libvirt-41" + "id": "libvirt-42" } { "execute": "query-cpu-definitions", - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -32752,12 +32782,12 @@ "deprecated": false } ], - "id": "libvirt-42" + "id": "libvirt-43" } { "execute": "query-tpm-models", - "id": "libvirt-43" + "id": "libvirt-44" } { @@ -32765,12 +32795,12 @@ "tpm-crb", "tpm-tis" ], - "id": "libvirt-43" + "id": "libvirt-44" } { "execute": "query-tpm-types", - "id": "libvirt-44" + "id": "libvirt-45" } { @@ -32778,12 +32808,12 @@ "passthrough", "emulator" ], - "id": "libvirt-44" + "id": "libvirt-45" } { "execute": "query-command-line-options", - "id": "libvirt-45" + "id": "libvirt-46" } { @@ -34107,12 +34137,12 @@ "option": "drive" } ], - "id": "libvirt-45" + "id": "libvirt-46" } { "execute": "query-migrate-capabilities", - "id": "libvirt-46" + "id": "libvirt-47" } { @@ -34202,16 +34232,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 +34250,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 +34269,7 @@ "name": "host" } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -34577,7 +34607,7 @@ } } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -34591,7 +34621,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -34929,7 +34959,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -34944,7 +34974,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { @@ -35282,7 +35312,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { diff --git a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml index fb52a30f04..3b23debd94 100644 --- a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml @@ -198,6 +198,7 @@ <flag name='acpi-erst'/> <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> + <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.replies b/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.replies index 4cad376388..f51e0bb223 100644 --- a/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.replies @@ -29339,12 +29339,42 @@ "id": "libvirt-35" } +{ + "execute": "device-list-properties", + "arguments": { + "typename": "amd-iommu" + }, + "id": "libvirt-36" +} + +{ + "return": [ + { + "default-value": true, + "name": "pt", + "type": "bool" + }, + { + "default-value": false, + "name": "device-iotlb", + "type": "bool" + }, + { + "default-value": "auto", + "name": "intremap", + "description": "on/off/auto", + "type": "OnOffAuto" + } + ], + "id": "libvirt-36" +} + { "execute": "qom-list-properties", "arguments": { "typename": "memory-backend-file" }, - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -29428,7 +29458,7 @@ "type": "bool" } ], - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -29436,7 +29466,7 @@ "arguments": { "typename": "memory-backend-memfd" }, - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -29515,7 +29545,7 @@ "type": "int" } ], - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -29523,7 +29553,7 @@ "arguments": { "typename": "max-x86_64-cpu" }, - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -31340,12 +31370,12 @@ "type": "bool" } ], - "id": "libvirt-38" + "id": "libvirt-39" } { "execute": "query-machines", - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -31961,7 +31991,7 @@ "default-ram-id": "pc.ram" } ], - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -31969,7 +31999,7 @@ "arguments": { "typename": "none-machine" }, - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -32082,7 +32112,7 @@ "type": "child<container>" } ], - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -32090,7 +32120,7 @@ "arguments": { "typename": "generic-pc-machine" }, - "id": "libvirt-41" + "id": "libvirt-42" } { @@ -32282,12 +32312,12 @@ "type": "bool" } ], - "id": "libvirt-41" + "id": "libvirt-42" } { "execute": "query-cpu-definitions", - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -34333,12 +34363,12 @@ "deprecated": false } ], - "id": "libvirt-42" + "id": "libvirt-43" } { "execute": "query-tpm-models", - "id": "libvirt-43" + "id": "libvirt-44" } { @@ -34346,12 +34376,12 @@ "tpm-crb", "tpm-tis" ], - "id": "libvirt-43" + "id": "libvirt-44" } { "execute": "query-tpm-types", - "id": "libvirt-44" + "id": "libvirt-45" } { @@ -34359,12 +34389,12 @@ "passthrough", "emulator" ], - "id": "libvirt-44" + "id": "libvirt-45" } { "execute": "query-command-line-options", - "id": "libvirt-45" + "id": "libvirt-46" } { @@ -35805,12 +35835,12 @@ "option": "drive" } ], - "id": "libvirt-45" + "id": "libvirt-46" } { "execute": "query-migrate-capabilities", - "id": "libvirt-46" + "id": "libvirt-47" } { @@ -35900,16 +35930,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 +35948,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 +35967,7 @@ "name": "host" } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -36280,7 +36310,7 @@ } } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -36294,7 +36324,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -36637,7 +36667,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -36652,7 +36682,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { @@ -37101,7 +37131,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { diff --git a/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml index 459d05bf43..1884221439 100644 --- a/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml @@ -202,6 +202,7 @@ <flag name='acpi-erst'/> <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> + <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.replies b/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.replies index 888a5d3b6a..6d94863029 100644 --- a/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.replies @@ -30191,12 +30191,42 @@ "id": "libvirt-36" } +{ + "execute": "device-list-properties", + "arguments": { + "typename": "amd-iommu" + }, + "id": "libvirt-37" +} + +{ + "return": [ + { + "default-value": true, + "name": "pt", + "type": "bool" + }, + { + "default-value": false, + "name": "device-iotlb", + "type": "bool" + }, + { + "default-value": "auto", + "name": "intremap", + "description": "on/off/auto", + "type": "OnOffAuto" + } + ], + "id": "libvirt-37" +} + { "execute": "qom-list-properties", "arguments": { "typename": "memory-backend-memfd" }, - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -30275,7 +30305,7 @@ "type": "int" } ], - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -30283,7 +30313,7 @@ "arguments": { "typename": "max-x86_64-cpu" }, - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -32180,12 +32210,12 @@ "type": "bool" } ], - "id": "libvirt-38" + "id": "libvirt-39" } { "execute": "query-machines", - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -32821,7 +32851,7 @@ "default-ram-id": "pc.ram" } ], - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -32829,7 +32859,7 @@ "arguments": { "typename": "none-machine" }, - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -32942,7 +32972,7 @@ "type": "child<container>" } ], - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -32950,7 +32980,7 @@ "arguments": { "typename": "generic-pc-machine" }, - "id": "libvirt-41" + "id": "libvirt-42" } { @@ -33138,12 +33168,12 @@ "type": "bool" } ], - "id": "libvirt-41" + "id": "libvirt-42" } { "execute": "query-cpu-definitions", - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -35525,12 +35555,12 @@ "deprecated": false } ], - "id": "libvirt-42" + "id": "libvirt-43" } { "execute": "query-tpm-models", - "id": "libvirt-43" + "id": "libvirt-44" } { @@ -35538,12 +35568,12 @@ "tpm-crb", "tpm-tis" ], - "id": "libvirt-43" + "id": "libvirt-44" } { "execute": "query-tpm-types", - "id": "libvirt-44" + "id": "libvirt-45" } { @@ -35551,12 +35581,12 @@ "passthrough", "emulator" ], - "id": "libvirt-44" + "id": "libvirt-45" } { "execute": "query-command-line-options", - "id": "libvirt-45" + "id": "libvirt-46" } { @@ -37014,12 +37044,12 @@ "option": "drive" } ], - "id": "libvirt-45" + "id": "libvirt-46" } { "execute": "query-migrate-capabilities", - "id": "libvirt-46" + "id": "libvirt-47" } { @@ -37117,16 +37147,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 +37165,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 +37184,7 @@ "name": "host" } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -37517,7 +37547,7 @@ } } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -37531,7 +37561,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -37894,7 +37924,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -37909,7 +37939,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { @@ -38378,7 +38408,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { diff --git a/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml index 289c87ff19..1f2f91ce6f 100644 --- a/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml @@ -204,6 +204,7 @@ <flag name='acpi-erst'/> <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> + <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.replies b/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.replies index 33e4978c38..5b6fad2246 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.replies @@ -30974,12 +30974,42 @@ "id": "libvirt-37" } +{ + "execute": "device-list-properties", + "arguments": { + "typename": "amd-iommu" + }, + "id": "libvirt-38" +} + +{ + "return": [ + { + "default-value": true, + "name": "pt", + "type": "bool" + }, + { + "default-value": false, + "name": "device-iotlb", + "type": "bool" + }, + { + "default-value": "auto", + "name": "intremap", + "description": "on/off/auto", + "type": "OnOffAuto" + } + ], + "id": "libvirt-38" +} + { "execute": "qom-list-properties", "arguments": { "typename": "max-x86_64-cpu" }, - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -32892,12 +32922,12 @@ "type": "bool" } ], - "id": "libvirt-38" + "id": "libvirt-39" } { "execute": "query-machines", - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -33513,7 +33543,7 @@ "default-ram-id": "pc.ram" } ], - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -33521,7 +33551,7 @@ "arguments": { "typename": "none-machine" }, - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -33634,7 +33664,7 @@ "type": "child<container>" } ], - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -33642,7 +33672,7 @@ "arguments": { "typename": "generic-pc-machine" }, - "id": "libvirt-41" + "id": "libvirt-42" } { @@ -33830,12 +33860,12 @@ "type": "bool" } ], - "id": "libvirt-41" + "id": "libvirt-42" } { "execute": "query-cpu-definitions", - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -36217,12 +36247,12 @@ "deprecated": false } ], - "id": "libvirt-42" + "id": "libvirt-43" } { "execute": "query-tpm-models", - "id": "libvirt-43" + "id": "libvirt-44" } { @@ -36230,12 +36260,12 @@ "tpm-crb", "tpm-tis" ], - "id": "libvirt-43" + "id": "libvirt-44" } { "execute": "query-tpm-types", - "id": "libvirt-44" + "id": "libvirt-45" } { @@ -36243,12 +36273,12 @@ "passthrough", "emulator" ], - "id": "libvirt-44" + "id": "libvirt-45" } { "execute": "query-command-line-options", - "id": "libvirt-45" + "id": "libvirt-46" } { @@ -37719,12 +37749,12 @@ "option": "drive" } ], - "id": "libvirt-45" + "id": "libvirt-46" } { "execute": "query-migrate-capabilities", - "id": "libvirt-46" + "id": "libvirt-47" } { @@ -37822,16 +37852,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 +37870,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 +37889,7 @@ "name": "host" } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -38226,7 +38256,7 @@ } } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -38240,7 +38270,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -38607,7 +38637,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -38622,7 +38652,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { @@ -39095,7 +39125,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml index e56d5dafa4..ad68484130 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml @@ -207,6 +207,7 @@ <flag name='acpi-erst'/> <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> + <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.replies b/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.replies index 89fefb863b..17f60bdfcc 100644 --- a/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.replies @@ -31003,12 +31003,47 @@ "id": "libvirt-35" } +{ + "execute": "device-list-properties", + "arguments": { + "typename": "amd-iommu" + }, + "id": "libvirt-36" +} + +{ + "return": [ + { + "default-value": true, + "name": "pt", + "type": "bool" + }, + { + "default-value": false, + "name": "device-iotlb", + "type": "bool" + }, + { + "default-value": "auto", + "name": "intremap", + "description": "on/off/auto", + "type": "OnOffAuto" + }, + { + "default-value": false, + "name": "xtsup", + "type": "bool" + } + ], + "id": "libvirt-36" +} + { "execute": "qom-list-properties", "arguments": { "typename": "memory-backend-file" }, - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -31102,7 +31137,7 @@ "type": "bool" } ], - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -31110,7 +31145,7 @@ "arguments": { "typename": "memory-backend-memfd" }, - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -31189,7 +31224,7 @@ "type": "int" } ], - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -31197,7 +31232,7 @@ "arguments": { "typename": "max-x86_64-cpu" }, - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -33114,12 +33149,12 @@ "type": "bool" } ], - "id": "libvirt-38" + "id": "libvirt-39" } { "execute": "query-machines", - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -33755,7 +33790,7 @@ "default-ram-id": "pc.ram" } ], - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -33763,7 +33798,7 @@ "arguments": { "typename": "none-machine" }, - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -33876,7 +33911,7 @@ "type": "child<container>" } ], - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -33884,7 +33919,7 @@ "arguments": { "typename": "generic-pc-machine" }, - "id": "libvirt-41" + "id": "libvirt-42" } { @@ -34076,12 +34111,12 @@ "type": "bool" } ], - "id": "libvirt-41" + "id": "libvirt-42" } { "execute": "query-cpu-definitions", - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -36463,12 +36498,12 @@ "deprecated": false } ], - "id": "libvirt-42" + "id": "libvirt-43" } { "execute": "query-tpm-models", - "id": "libvirt-43" + "id": "libvirt-44" } { @@ -36476,12 +36511,12 @@ "tpm-crb", "tpm-tis" ], - "id": "libvirt-43" + "id": "libvirt-44" } { "execute": "query-tpm-types", - "id": "libvirt-44" + "id": "libvirt-45" } { @@ -36489,12 +36524,12 @@ "passthrough", "emulator" ], - "id": "libvirt-44" + "id": "libvirt-45" } { "execute": "query-command-line-options", - "id": "libvirt-45" + "id": "libvirt-46" } { @@ -37969,12 +38004,12 @@ "option": "drive" } ], - "id": "libvirt-45" + "id": "libvirt-46" } { "execute": "query-migrate-capabilities", - "id": "libvirt-46" + "id": "libvirt-47" } { @@ -38076,16 +38111,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 +38129,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 +38148,7 @@ "name": "host" } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -38481,7 +38516,7 @@ } } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -38495,7 +38530,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -38863,7 +38898,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -38878,7 +38913,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { @@ -39352,7 +39387,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { diff --git a/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml index 3f1f518d22..f899773766 100644 --- a/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml @@ -209,6 +209,7 @@ <flag name='acpi-erst'/> <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> + <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.replies b/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.replies index 4838037ee7..3637ab0e0a 100644 --- a/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.replies @@ -34378,12 +34378,47 @@ "id": "libvirt-40" } +{ + "execute": "device-list-properties", + "arguments": { + "typename": "amd-iommu" + }, + "id": "libvirt-41" +} + +{ + "return": [ + { + "default-value": true, + "name": "pt", + "type": "bool" + }, + { + "default-value": false, + "name": "device-iotlb", + "type": "bool" + }, + { + "default-value": "auto", + "name": "intremap", + "description": "on/off/auto", + "type": "OnOffAuto" + }, + { + "default-value": false, + "name": "xtsup", + "type": "bool" + } + ], + "id": "libvirt-41" +} + { "execute": "qom-list-properties", "arguments": { "typename": "generic-pc-machine" }, - "id": "libvirt-41" + "id": "libvirt-42" } { @@ -34575,12 +34610,12 @@ "type": "bool" } ], - "id": "libvirt-41" + "id": "libvirt-42" } { "execute": "query-cpu-definitions", - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -37131,12 +37166,12 @@ "deprecated": false } ], - "id": "libvirt-42" + "id": "libvirt-43" } { "execute": "query-tpm-models", - "id": "libvirt-43" + "id": "libvirt-44" } { @@ -37144,12 +37179,12 @@ "tpm-crb", "tpm-tis" ], - "id": "libvirt-43" + "id": "libvirt-44" } { "execute": "query-tpm-types", - "id": "libvirt-44" + "id": "libvirt-45" } { @@ -37157,12 +37192,12 @@ "passthrough", "emulator" ], - "id": "libvirt-44" + "id": "libvirt-45" } { "execute": "query-command-line-options", - "id": "libvirt-45" + "id": "libvirt-46" } { @@ -38645,12 +38680,12 @@ "option": "drive" } ], - "id": "libvirt-45" + "id": "libvirt-46" } { "execute": "query-migrate-capabilities", - "id": "libvirt-46" + "id": "libvirt-47" } { @@ -38744,16 +38779,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 +38797,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 +38816,7 @@ "name": "host" } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -39159,7 +39194,7 @@ } } }, - "id": "libvirt-49" + "id": "libvirt-50" } { @@ -39173,7 +39208,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -39551,7 +39586,7 @@ } } }, - "id": "libvirt-50" + "id": "libvirt-51" } { @@ -39566,7 +39601,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { @@ -40054,7 +40089,7 @@ } } }, - "id": "libvirt-51" + "id": "libvirt-52" } { diff --git a/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml index a6b3768dfd..4bdeaa7f62 100644 --- a/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml @@ -207,6 +207,7 @@ <flag name='acpi-erst'/> <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> + <flag name='amd-iommu'/> <version>9001000</version> <microcodeVersion>43100246</microcodeVersion> <package>v9.1.0</package> -- 2.46.2

It will be used for the property "intremap" of the device amd-iommu. Signed-off-by: Han Han <hhan@redhat.com> --- src/qemu/qemu_capabilities.c | 8 ++++++++ src/qemu/qemu_capabilities.h | 1 + tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_6.1.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 + 15 files changed, 22 insertions(+) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 5ecee07a53..4fe354200d 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -718,6 +718,7 @@ VIR_ENUM_IMPL(virQEMUCaps, /* 465 */ "amd-iommu", /* QEMU_CAPS_DEVICE_AMD_IOMMU */ + "amd-iommu.intremap", /* QEMU_CAPS_AMD_IOMMU_INTREMAP */ ); @@ -1546,6 +1547,10 @@ static struct virQEMUCapsDevicePropsFlags virQEMUCapsDevicePropsVirtioIOMMU[] = { "boot-bypass", QEMU_CAPS_VIRTIO_IOMMU_BOOT_BYPASS, NULL }, }; +static struct virQEMUCapsDevicePropsFlags virQEMUCapsDevicePropsAmdIOMMU[] = { + { "intremap", QEMU_CAPS_AMD_IOMMU_INTREMAP, 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 }, @@ -1702,6 +1707,9 @@ static virQEMUCapsDeviceTypeProps virQEMUCapsDeviceProps[] = { { "virtio-iommu-pci", virQEMUCapsDevicePropsVirtioIOMMU, G_N_ELEMENTS(virQEMUCapsDevicePropsVirtioIOMMU), QEMU_CAPS_DEVICE_VIRTIO_IOMMU_PCI }, + { "amd-iommu", virQEMUCapsDevicePropsAmdIOMMU, + G_N_ELEMENTS(virQEMUCapsDevicePropsAmdIOMMU), + QEMU_CAPS_DEVICE_AMD_IOMMU}, }; static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsMemoryBackendFile[] = { diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 3075fe069c..2b87b1ff97 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -697,6 +697,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */ /* 465 */ QEMU_CAPS_DEVICE_AMD_IOMMU, /* -device amd-iommu */ + QEMU_CAPS_AMD_IOMMU_INTREMAP, /* amd-iommu.intremap */ QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; diff --git a/tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml index c46b023c78..2bbe431a54 100644 --- a/tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml @@ -162,6 +162,7 @@ <flag name='usb-mtp'/> <flag name='netdev.user'/> <flag name='amd-iommu'/> + <flag name='amd-iommu.intremap'/> <version>5002000</version> <microcodeVersion>43100243</microcodeVersion> <package>v5.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml index a189694f3b..ed5415ac50 100644 --- a/tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml @@ -174,6 +174,7 @@ <flag name='usb-mtp'/> <flag name='netdev.user'/> <flag name='amd-iommu'/> + <flag name='amd-iommu.intremap'/> <version>6000000</version> <microcodeVersion>43100242</microcodeVersion> <package>v6.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_6.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_6.1.0_x86_64.xml index 641841d02d..208378cd3d 100644 --- a/tests/qemucapabilitiesdata/caps_6.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_6.1.0_x86_64.xml @@ -180,6 +180,7 @@ <flag name='usb-mtp'/> <flag name='netdev.user'/> <flag name='amd-iommu'/> + <flag name='amd-iommu.intremap'/> <version>6001000</version> <microcodeVersion>43100243</microcodeVersion> <package>v6.1.0</package> diff --git a/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml index e7da931a73..d122272fd5 100644 --- a/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml @@ -182,6 +182,7 @@ <flag name='usb-mtp'/> <flag name='netdev.user'/> <flag name='amd-iommu'/> + <flag name='amd-iommu.intremap'/> <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 3218c5aa98..7a5c0d0bff 100644 --- a/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml @@ -190,6 +190,7 @@ <flag name='acpi-erst'/> <flag name='machine-i8042-opt'/> <flag name='amd-iommu'/> + <flag name='amd-iommu.intremap'/> <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 ade421305a..ae41f4a327 100644 --- a/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml @@ -195,6 +195,7 @@ <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> <flag name='amd-iommu'/> + <flag name='amd-iommu.intremap'/> <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 f920f96d41..1f02202c1e 100644 --- a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml +++ b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml @@ -199,6 +199,7 @@ <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> <flag name='amd-iommu'/> + <flag name='amd-iommu.intremap'/> <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 3b23debd94..f24418b5bd 100644 --- a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml @@ -199,6 +199,7 @@ <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> <flag name='amd-iommu'/> + <flag name='amd-iommu.intremap'/> <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 1884221439..f80b9e9541 100644 --- a/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml @@ -203,6 +203,7 @@ <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> <flag name='amd-iommu'/> + <flag name='amd-iommu.intremap'/> <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 1f2f91ce6f..6b1442e477 100644 --- a/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml @@ -205,6 +205,7 @@ <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> <flag name='amd-iommu'/> + <flag name='amd-iommu.intremap'/> <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 ad68484130..f1b183ca7d 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml @@ -208,6 +208,7 @@ <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> <flag name='amd-iommu'/> + <flag name='amd-iommu.intremap'/> <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 f899773766..1caa710622 100644 --- a/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml @@ -210,6 +210,7 @@ <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> <flag name='amd-iommu'/> + <flag name='amd-iommu.intremap'/> <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 4bdeaa7f62..62a2d48dce 100644 --- a/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml @@ -208,6 +208,7 @@ <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> <flag name='amd-iommu'/> + <flag name='amd-iommu.intremap'/> <version>9001000</version> <microcodeVersion>43100246</microcodeVersion> <package>v9.1.0</package> -- 2.46.2

On Fri, Sep 27, 2024 at 15:45:43 +0800, Han Han wrote:
It will be used for the property "intremap" of the device amd-iommu.
Looking at the detected versions and the qemu code it seems that 'intremap' is supported for all qemu versions and also it doesn't seem to be able to be disabled. Thus this capabilit should not be needed as you can assume it's always present.

On Fri, Sep 27, 2024 at 10:22:34AM +0200, Peter Krempa wrote:
On Fri, Sep 27, 2024 at 15:45:43 +0800, Han Han wrote:
It will be used for the property "intremap" of the device amd-iommu.
Looking at the detected versions and the qemu code it seems that 'intremap' is supported for all qemu versions and also it doesn't seem to be able to be disabled.
Thus this capabilit should not be needed as you can assume it's always present.
It is pointless checking for any of these capabilities since the device today is unusable AFAICT, so even if the feature has existed for years, we won't want to use it. Once the PCI integration is fixed, we will merely need 1 capability check to detect the fixed design and everything prior to that point will be implied. With regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|

It will be used for the device-iotlb property of amd-iommu device. Signed-off-by: Han Han <hhan@redhat.com> --- src/qemu/qemu_capabilities.c | 2 ++ src/qemu/qemu_capabilities.h | 1 + tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_6.1.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 + 15 files changed, 16 insertions(+) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 4fe354200d..750f01116c 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -719,6 +719,7 @@ VIR_ENUM_IMPL(virQEMUCaps, /* 465 */ "amd-iommu", /* QEMU_CAPS_DEVICE_AMD_IOMMU */ "amd-iommu.intremap", /* QEMU_CAPS_AMD_IOMMU_INTREMAP */ + "amd-iommu.device-iotlb", /* QEMU_CAPS_AMD_IOMMU_DEVICE_IOTLB */ ); @@ -1549,6 +1550,7 @@ static struct virQEMUCapsDevicePropsFlags virQEMUCapsDevicePropsVirtioIOMMU[] = static struct virQEMUCapsDevicePropsFlags virQEMUCapsDevicePropsAmdIOMMU[] = { { "intremap", QEMU_CAPS_AMD_IOMMU_INTREMAP, NULL }, + { "device-iotlb", QEMU_CAPS_AMD_IOMMU_DEVICE_IOTLB, NULL }, }; /* see documentation for virQEMUQAPISchemaPathGet for the query format */ diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 2b87b1ff97..62b34bdb7c 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -698,6 +698,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */ /* 465 */ QEMU_CAPS_DEVICE_AMD_IOMMU, /* -device amd-iommu */ QEMU_CAPS_AMD_IOMMU_INTREMAP, /* amd-iommu.intremap */ + QEMU_CAPS_AMD_IOMMU_DEVICE_IOTLB, /* amd-iommu.device-iotlb */ QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; diff --git a/tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml index 2bbe431a54..e8c4112bdd 100644 --- a/tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml @@ -163,6 +163,7 @@ <flag name='netdev.user'/> <flag name='amd-iommu'/> <flag name='amd-iommu.intremap'/> + <flag name='amd-iommu.device-iotlb'/> <version>5002000</version> <microcodeVersion>43100243</microcodeVersion> <package>v5.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml index ed5415ac50..ae1c2647b3 100644 --- a/tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml @@ -175,6 +175,7 @@ <flag name='netdev.user'/> <flag name='amd-iommu'/> <flag name='amd-iommu.intremap'/> + <flag name='amd-iommu.device-iotlb'/> <version>6000000</version> <microcodeVersion>43100242</microcodeVersion> <package>v6.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_6.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_6.1.0_x86_64.xml index 208378cd3d..adb7d3125a 100644 --- a/tests/qemucapabilitiesdata/caps_6.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_6.1.0_x86_64.xml @@ -181,6 +181,7 @@ <flag name='netdev.user'/> <flag name='amd-iommu'/> <flag name='amd-iommu.intremap'/> + <flag name='amd-iommu.device-iotlb'/> <version>6001000</version> <microcodeVersion>43100243</microcodeVersion> <package>v6.1.0</package> diff --git a/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml index d122272fd5..78d70da077 100644 --- a/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml @@ -183,6 +183,7 @@ <flag name='netdev.user'/> <flag name='amd-iommu'/> <flag name='amd-iommu.intremap'/> + <flag name='amd-iommu.device-iotlb'/> <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 7a5c0d0bff..e73f5d5c21 100644 --- a/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml @@ -191,6 +191,7 @@ <flag name='machine-i8042-opt'/> <flag name='amd-iommu'/> <flag name='amd-iommu.intremap'/> + <flag name='amd-iommu.device-iotlb'/> <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 ae41f4a327..a1b81d9453 100644 --- a/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml @@ -196,6 +196,7 @@ <flag name='machine-i8042-opt'/> <flag name='amd-iommu'/> <flag name='amd-iommu.intremap'/> + <flag name='amd-iommu.device-iotlb'/> <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 1f02202c1e..1e5aa020f4 100644 --- a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml +++ b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml @@ -200,6 +200,7 @@ <flag name='machine-i8042-opt'/> <flag name='amd-iommu'/> <flag name='amd-iommu.intremap'/> + <flag name='amd-iommu.device-iotlb'/> <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 f24418b5bd..fd00740292 100644 --- a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml @@ -200,6 +200,7 @@ <flag name='machine-i8042-opt'/> <flag name='amd-iommu'/> <flag name='amd-iommu.intremap'/> + <flag name='amd-iommu.device-iotlb'/> <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 f80b9e9541..db3595077a 100644 --- a/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml @@ -204,6 +204,7 @@ <flag name='machine-i8042-opt'/> <flag name='amd-iommu'/> <flag name='amd-iommu.intremap'/> + <flag name='amd-iommu.device-iotlb'/> <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 6b1442e477..b1e9f6b1fa 100644 --- a/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml @@ -206,6 +206,7 @@ <flag name='machine-i8042-opt'/> <flag name='amd-iommu'/> <flag name='amd-iommu.intremap'/> + <flag name='amd-iommu.device-iotlb'/> <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 f1b183ca7d..947ed3aa99 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml @@ -209,6 +209,7 @@ <flag name='machine-i8042-opt'/> <flag name='amd-iommu'/> <flag name='amd-iommu.intremap'/> + <flag name='amd-iommu.device-iotlb'/> <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 1caa710622..5cbcc5f210 100644 --- a/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml @@ -211,6 +211,7 @@ <flag name='machine-i8042-opt'/> <flag name='amd-iommu'/> <flag name='amd-iommu.intremap'/> + <flag name='amd-iommu.device-iotlb'/> <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 62a2d48dce..bda7a6d28d 100644 --- a/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml @@ -209,6 +209,7 @@ <flag name='machine-i8042-opt'/> <flag name='amd-iommu'/> <flag name='amd-iommu.intremap'/> + <flag name='amd-iommu.device-iotlb'/> <version>9001000</version> <microcodeVersion>43100246</microcodeVersion> <package>v9.1.0</package> -- 2.46.2

It will be used for the xtsup property of amd-iommu device. Signed-off-by: Han Han <hhan@redhat.com> --- src/qemu/qemu_capabilities.c | 2 ++ src/qemu/qemu_capabilities.h | 1 + tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml | 1 + 4 files changed, 5 insertions(+) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 750f01116c..a57b7eae2a 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -720,6 +720,7 @@ VIR_ENUM_IMPL(virQEMUCaps, "amd-iommu", /* QEMU_CAPS_DEVICE_AMD_IOMMU */ "amd-iommu.intremap", /* QEMU_CAPS_AMD_IOMMU_INTREMAP */ "amd-iommu.device-iotlb", /* QEMU_CAPS_AMD_IOMMU_DEVICE_IOTLB */ + "amd-iommu.xtsup", /* QEMU_CAPS_AMD_IOMMU_XTSUP */ ); @@ -1551,6 +1552,7 @@ static struct virQEMUCapsDevicePropsFlags virQEMUCapsDevicePropsVirtioIOMMU[] = static struct virQEMUCapsDevicePropsFlags virQEMUCapsDevicePropsAmdIOMMU[] = { { "intremap", QEMU_CAPS_AMD_IOMMU_INTREMAP, NULL }, { "device-iotlb", QEMU_CAPS_AMD_IOMMU_DEVICE_IOTLB, NULL }, + { "xtsup", QEMU_CAPS_AMD_IOMMU_XTSUP, NULL }, }; /* see documentation for virQEMUQAPISchemaPathGet for the query format */ diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 62b34bdb7c..c8bbe5d6f9 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -699,6 +699,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */ QEMU_CAPS_DEVICE_AMD_IOMMU, /* -device amd-iommu */ QEMU_CAPS_AMD_IOMMU_INTREMAP, /* amd-iommu.intremap */ QEMU_CAPS_AMD_IOMMU_DEVICE_IOTLB, /* amd-iommu.device-iotlb */ + QEMU_CAPS_AMD_IOMMU_XTSUP, /* amd-iommu.xtsup */ QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; diff --git a/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml index 5cbcc5f210..039b8adbc6 100644 --- a/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml @@ -212,6 +212,7 @@ <flag name='amd-iommu'/> <flag name='amd-iommu.intremap'/> <flag name='amd-iommu.device-iotlb'/> + <flag name='amd-iommu.xtsup'/> <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 bda7a6d28d..cfb1e46b4b 100644 --- a/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml @@ -210,6 +210,7 @@ <flag name='amd-iommu'/> <flag name='amd-iommu.intremap'/> <flag name='amd-iommu.device-iotlb'/> + <flag name='amd-iommu.xtsup'/> <version>9001000</version> <microcodeVersion>43100246</microcodeVersion> <package>v9.1.0</package> -- 2.46.2

Fixes: https://issues.redhat.com/browse/RHEL-50560 Signed-off-by: Han Han <hhan@redhat.com> --- docs/formatdomain.rst | 20 +++++++++- src/conf/domain_conf.c | 16 ++++++++ src/conf/domain_conf.h | 2 + src/conf/domain_validate.c | 39 ++++++++++++++++++- src/conf/schemas/domaincommon.rng | 6 +++ src/qemu/qemu_command.c | 15 +++++++ src/qemu/qemu_domain_address.c | 2 + src/qemu/qemu_validate.c | 1 + tests/qemuxmlconfdata/amd-iommu-aw-bits.err | 1 + tests/qemuxmlconfdata/amd-iommu-aw-bits.xml | 32 +++++++++++++++ .../amd-iommu-caching-mode.err | 1 + .../amd-iommu-caching-mode.xml | 32 +++++++++++++++ .../amd-iommu-device-iotlb.x86_64-latest.args | 34 ++++++++++++++++ .../amd-iommu-device-iotlb.xml | 37 ++++++++++++++++++ .../amd-iommu-dma-translation.err | 1 + .../amd-iommu-dma-translation.xml | 32 +++++++++++++++ tests/qemuxmlconfdata/amd-iommu-eim.err | 1 + tests/qemuxmlconfdata/amd-iommu-eim.xml | 32 +++++++++++++++ .../amd-iommu-xtsup.x86_64-latest.args | 34 ++++++++++++++++ tests/qemuxmlconfdata/amd-iommu-xtsup.xml | 32 +++++++++++++++ .../amd-iommu.x86_64-latest.args | 34 ++++++++++++++++ tests/qemuxmlconfdata/amd-iommu.xml | 32 +++++++++++++++ tests/qemuxmlconfdata/intel-iommu-xtsup.err | 1 + tests/qemuxmlconfdata/intel-iommu-xtsup.xml | 38 ++++++++++++++++++ tests/qemuxmlconftest.c | 8 ++++ 25 files changed, 480 insertions(+), 3 deletions(-) create mode 100644 tests/qemuxmlconfdata/amd-iommu-aw-bits.err create mode 100644 tests/qemuxmlconfdata/amd-iommu-aw-bits.xml create mode 100644 tests/qemuxmlconfdata/amd-iommu-caching-mode.err create mode 100644 tests/qemuxmlconfdata/amd-iommu-caching-mode.xml create mode 100644 tests/qemuxmlconfdata/amd-iommu-device-iotlb.x86_64-latest.args create mode 100644 tests/qemuxmlconfdata/amd-iommu-device-iotlb.xml create mode 100644 tests/qemuxmlconfdata/amd-iommu-dma-translation.err create mode 100644 tests/qemuxmlconfdata/amd-iommu-dma-translation.xml create mode 100644 tests/qemuxmlconfdata/amd-iommu-eim.err create mode 100644 tests/qemuxmlconfdata/amd-iommu-eim.xml create mode 100644 tests/qemuxmlconfdata/amd-iommu-xtsup.x86_64-latest.args create mode 100644 tests/qemuxmlconfdata/amd-iommu-xtsup.xml create mode 100644 tests/qemuxmlconfdata/amd-iommu.x86_64-latest.args create mode 100644 tests/qemuxmlconfdata/amd-iommu.xml create mode 100644 tests/qemuxmlconfdata/intel-iommu-xtsup.err create mode 100644 tests/qemuxmlconfdata/intel-iommu-xtsup.xml diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst index 4336cff3ac..866dbf4bd4 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -8587,10 +8587,20 @@ Example: </devices> ... +:: + + ... + <devices> + <iommu model='amd'> + <driver xtsup='on'/> + </iommu> + </devices> + ``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 10.9.0`, + for Q35 guests ). ``driver`` The ``driver`` subelement can be used to configure additional options, some @@ -8631,6 +8641,12 @@ Example: example to efficiently enable more than 255 vCPUs. :since:`Since 10.7.0` (QEMU/KVM only) + ``xtsup`` + The ``xtsup`` attribute with possible values ``on`` and ``off`` can be used to + enable XTsup mode. A q35 domain with x2apic cpu feature ( as the ``feature`` paragraph + in `CPU model and topology`_), and both x2apic feature and XTsup turned on for IOMMU, + will be able to use more than 255 vCPUs. :since:`Since 10.9.0` (QEMU/KVM 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 6d7dee7956..6e7d92b264 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -1335,6 +1335,7 @@ VIR_ENUM_IMPL(virDomainIOMMUModel, "intel", "smmuv3", "virtio", + "amd", ); VIR_ENUM_IMPL(virDomainVsockModel, @@ -13933,6 +13934,10 @@ 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 (virDomainDeviceInfoParseXML(xmlopt, node, ctxt, @@ -21492,6 +21497,13 @@ virDomainIOMMUDefCheckABIStability(virDomainIOMMUDef *src, virTristateSwitchTypeToString(src->dma_translation)); return false; } + if (src->xtsup != dst->xtsup) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("Target domain IOMMU device xtsup value '%1$s' does not match source '%2$s'"), + virTristateSwitchTypeToString(dst->xtsup), + virTristateSwitchTypeToString(src->xtsup)); + return false; + } return virDomainDeviceInfoCheckABIStability(&src->info, &dst->info); } @@ -27480,6 +27492,10 @@ virDomainIOMMUDefFormat(virBuffer *buf, virBufferAsprintf(&driverAttrBuf, " dma_translation='%s'", virTristateSwitchTypeToString(iommu->dma_translation)); } + 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 a15af4fae3..d527975eb3 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2919,6 +2919,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; @@ -2932,6 +2933,7 @@ struct _virDomainIOMMUDef { unsigned int aw_bits; virDomainDeviceInfo info; virTristateSwitch dma_translation; + virTristateSwitch xtsup; }; typedef enum { diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index eddb4a5e74..344df0c559 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -2980,7 +2980,8 @@ virDomainIOMMUDefValidate(const virDomainIOMMUDef *iommu) iommu->caching_mode != VIR_TRISTATE_SWITCH_ABSENT || iommu->eim != VIR_TRISTATE_SWITCH_ABSENT || iommu->iotlb != VIR_TRISTATE_SWITCH_ABSENT || - iommu->aw_bits != 0) { + iommu->aw_bits != 0 || + iommu->xtsup != VIR_TRISTATE_SWITCH_ABSENT) { virReportError(VIR_ERR_XML_ERROR, _("iommu model '%1$s' doesn't support additional attributes"), virDomainIOMMUModelTypeToString(iommu->model)); @@ -2989,6 +2990,41 @@ virDomainIOMMUDefValidate(const virDomainIOMMUDef *iommu) break; case VIR_DOMAIN_IOMMU_MODEL_INTEL: + if (iommu->xtsup != VIR_TRISTATE_SWITCH_ABSENT) { + virReportError(VIR_ERR_XML_ERROR, + _("iommu model '%1$s' doesn't support the xtsup attribute"), + virDomainIOMMUModelTypeToString(iommu->model)); + return -1; + } + break; + + case VIR_DOMAIN_IOMMU_MODEL_AMD: + if (iommu->caching_mode != VIR_TRISTATE_SWITCH_ABSENT) { + virReportError(VIR_ERR_XML_ERROR, + _("iommu model '%1$s' doesn't support the caching_mode attribute"), + virDomainIOMMUModelTypeToString(iommu->model)); + return -1; + } + if (iommu->eim != VIR_TRISTATE_SWITCH_ABSENT) { + virReportError(VIR_ERR_XML_ERROR, + _("iommu model '%1$s' doesn't support the eim attribute"), + virDomainIOMMUModelTypeToString(iommu->model)); + return -1; + } + if (iommu->aw_bits != 0) { + virReportError(VIR_ERR_XML_ERROR, + _("iommu model '%1$s' doesn't support the aw_bits attribute"), + virDomainIOMMUModelTypeToString(iommu->model)); + return -1; + } + if (iommu->dma_translation != VIR_TRISTATE_SWITCH_ABSENT) { + virReportError(VIR_ERR_XML_ERROR, + _("iommu model '%1$s' doesn't support the dma_translation attribute"), + virDomainIOMMUModelTypeToString(iommu->model)); + return -1; + } + break; + case VIR_DOMAIN_IOMMU_MODEL_LAST: break; } @@ -2996,6 +3032,7 @@ virDomainIOMMUDefValidate(const virDomainIOMMUDef *iommu) switch (iommu->model) { case VIR_DOMAIN_IOMMU_MODEL_SMMUV3: case VIR_DOMAIN_IOMMU_MODEL_INTEL: + case VIR_DOMAIN_IOMMU_MODEL_AMD: if (iommu->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) { virReportError(VIR_ERR_XML_ERROR, _("iommu model '%1$s' can't have address"), diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincommon.rng index efb5f00d77..d4336c5996 100644 --- a/src/conf/schemas/domaincommon.rng +++ b/src/conf/schemas/domaincommon.rng @@ -6070,6 +6070,7 @@ <value>intel</value> <value>smmuv3</value> <value>virtio</value> + <value>amd</value> </choice> </attribute> <interleave> @@ -6105,6 +6106,11 @@ <ref name="virOnOff"/> </attribute> </optional> + <optional> + <attribute name="xtsup"> + <ref name="virOnOff"/> + </attribute> + </optional> </element> </optional> <optional> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index a0c9e5f8b3..c3d74544db 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -6040,6 +6040,20 @@ 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(&props, + "s:driver", "amd-iommu", + "s:id", iommu->info.alias, + "S:intremap", qemuOnOffAuto(iommu->intremap), + "T:device-iotlb", iommu->iotlb, + "T:xtsup", iommu->xtsup, + 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); @@ -6853,6 +6867,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 970ae3949d..37c7a59aec 100644 --- a/src/qemu/qemu_domain_address.c +++ b/src/qemu/qemu_domain_address.c @@ -943,6 +943,7 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDeviceDef *dev, case VIR_DOMAIN_IOMMU_MODEL_INTEL: case VIR_DOMAIN_IOMMU_MODEL_SMMUV3: + case VIR_DOMAIN_IOMMU_MODEL_AMD: case VIR_DOMAIN_IOMMU_MODEL_LAST: /* These are not PCI devices */ return 0; @@ -2367,6 +2368,7 @@ qemuDomainAssignDevicePCISlots(virDomainDef *def, case VIR_DOMAIN_IOMMU_MODEL_INTEL: case VIR_DOMAIN_IOMMU_MODEL_SMMUV3: + case VIR_DOMAIN_IOMMU_MODEL_AMD: case VIR_DOMAIN_IOMMU_MODEL_LAST: /* These are not PCI devices */ break; diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index fa23c5f973..326b0a9460 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -5046,6 +5046,7 @@ qemuValidateDomainDeviceDefIOMMU(const virDomainIOMMUDef *iommu, { switch (iommu->model) { case VIR_DOMAIN_IOMMU_MODEL_INTEL: + case VIR_DOMAIN_IOMMU_MODEL_AMD: if (!qemuDomainIsQ35(def)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("IOMMU device: '%1$s' is only supported with Q35 machines"), diff --git a/tests/qemuxmlconfdata/amd-iommu-aw-bits.err b/tests/qemuxmlconfdata/amd-iommu-aw-bits.err new file mode 100644 index 0000000000..3958049227 --- /dev/null +++ b/tests/qemuxmlconfdata/amd-iommu-aw-bits.err @@ -0,0 +1 @@ +XML error: iommu model 'amd' doesn't support the aw_bits attribute diff --git a/tests/qemuxmlconfdata/amd-iommu-aw-bits.xml b/tests/qemuxmlconfdata/amd-iommu-aw-bits.xml new file mode 100644 index 0000000000..9433890f77 --- /dev/null +++ b/tests/qemuxmlconfdata/amd-iommu-aw-bits.xml @@ -0,0 +1,32 @@ +<domain type='qemu'> + <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> + <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' aw_bits='16'/> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/amd-iommu-caching-mode.err b/tests/qemuxmlconfdata/amd-iommu-caching-mode.err new file mode 100644 index 0000000000..38f97a8e48 --- /dev/null +++ b/tests/qemuxmlconfdata/amd-iommu-caching-mode.err @@ -0,0 +1 @@ +XML error: iommu model 'amd' doesn't support the caching_mode attribute diff --git a/tests/qemuxmlconfdata/amd-iommu-caching-mode.xml b/tests/qemuxmlconfdata/amd-iommu-caching-mode.xml new file mode 100644 index 0000000000..7dcf3797c4 --- /dev/null +++ b/tests/qemuxmlconfdata/amd-iommu-caching-mode.xml @@ -0,0 +1,32 @@ +<domain type='qemu'> + <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> + <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' caching_mode='on'/> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/amd-iommu-device-iotlb.x86_64-latest.args b/tests/qemuxmlconfdata/amd-iommu-device-iotlb.x86_64-latest.args new file mode 100644 index 0000000000..496b1378c6 --- /dev/null +++ b/tests/qemuxmlconfdata/amd-iommu-device-iotlb.x86_64-latest.args @@ -0,0 +1,34 @@ +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=off \ +-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":"amd-iommu","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-device-iotlb.xml b/tests/qemuxmlconfdata/amd-iommu-device-iotlb.xml new file mode 100644 index 0000000000..a27daeba1c --- /dev/null +++ b/tests/qemuxmlconfdata/amd-iommu-device-iotlb.xml @@ -0,0 +1,37 @@ +<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> + <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'/> + </iommu> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/amd-iommu-dma-translation.err b/tests/qemuxmlconfdata/amd-iommu-dma-translation.err new file mode 100644 index 0000000000..cdaa892a02 --- /dev/null +++ b/tests/qemuxmlconfdata/amd-iommu-dma-translation.err @@ -0,0 +1 @@ +XML error: iommu model 'amd' doesn't support the dma_translation attribute diff --git a/tests/qemuxmlconfdata/amd-iommu-dma-translation.xml b/tests/qemuxmlconfdata/amd-iommu-dma-translation.xml new file mode 100644 index 0000000000..8c960009c0 --- /dev/null +++ b/tests/qemuxmlconfdata/amd-iommu-dma-translation.xml @@ -0,0 +1,32 @@ +<domain type='qemu'> + <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> + <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' dma_translation='on'/> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/amd-iommu-eim.err b/tests/qemuxmlconfdata/amd-iommu-eim.err new file mode 100644 index 0000000000..c7e7a402e9 --- /dev/null +++ b/tests/qemuxmlconfdata/amd-iommu-eim.err @@ -0,0 +1 @@ +XML error: iommu model 'amd' doesn't support the eim attribute diff --git a/tests/qemuxmlconfdata/amd-iommu-eim.xml b/tests/qemuxmlconfdata/amd-iommu-eim.xml new file mode 100644 index 0000000000..02a0926742 --- /dev/null +++ b/tests/qemuxmlconfdata/amd-iommu-eim.xml @@ -0,0 +1,32 @@ +<domain type='qemu'> + <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> + <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' eim='on'/> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/amd-iommu-xtsup.x86_64-latest.args b/tests/qemuxmlconfdata/amd-iommu-xtsup.x86_64-latest.args new file mode 100644 index 0000000000..54eb43a998 --- /dev/null +++ b/tests/qemuxmlconfdata/amd-iommu-xtsup.x86_64-latest.args @@ -0,0 +1,34 @@ +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,dump-guest-core=off,memory-backend=pc.ram,acpi=off \ +-accel tcg \ +-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":"amd-iommu","id":"iommu0", "xtsup": 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-xtsup.xml b/tests/qemuxmlconfdata/amd-iommu-xtsup.xml new file mode 100644 index 0000000000..5c5fcfe35b --- /dev/null +++ b/tests/qemuxmlconfdata/amd-iommu-xtsup.xml @@ -0,0 +1,32 @@ +<domain type='qemu'> + <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> + <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' xtsup='on'/> + </devices> +</domain> 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..e06c320dc5 --- /dev/null +++ b/tests/qemuxmlconfdata/amd-iommu.x86_64-latest.args @@ -0,0 +1,34 @@ +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,dump-guest-core=off,memory-backend=pc.ram,acpi=off \ +-accel tcg \ +-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":"amd-iommu","id":"iommu0"}' \ +-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.xml b/tests/qemuxmlconfdata/amd-iommu.xml new file mode 100644 index 0000000000..acfdc96050 --- /dev/null +++ b/tests/qemuxmlconfdata/amd-iommu.xml @@ -0,0 +1,32 @@ +<domain type='qemu'> + <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> + <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'/> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/intel-iommu-xtsup.err b/tests/qemuxmlconfdata/intel-iommu-xtsup.err new file mode 100644 index 0000000000..5598a0bf5b --- /dev/null +++ b/tests/qemuxmlconfdata/intel-iommu-xtsup.err @@ -0,0 +1 @@ +XML error: iommu model 'intel' doesn't support the xtsup attribute diff --git a/tests/qemuxmlconfdata/intel-iommu-xtsup.xml b/tests/qemuxmlconfdata/intel-iommu-xtsup.xml new file mode 100644 index 0000000000..a8442457e2 --- /dev/null +++ b/tests/qemuxmlconfdata/intel-iommu-xtsup.xml @@ -0,0 +1,38 @@ +<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'>288</vcpu> + <os> + <type arch='x86_64' machine='q35'>hvm</type> + <boot dev='hd'/> + </os> + <features> + <ioapic driver='qemu'/> + </features> + <cpu mode='custom' match='exact' check='none'> + <model fallback='forbid'>qemu64</model> + <feature policy='require' name='x2apic'/> + </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='intel'> + <driver xtsup='on'/> + </iommu> + </devices> +</domain> diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c index 61eb4cda75..93752f5ab1 100644 --- a/tests/qemuxmlconftest.c +++ b/tests/qemuxmlconftest.c @@ -2758,6 +2758,7 @@ mymain(void) DO_TEST_CAPS_LATEST("intel-iommu-aw-bits"); DO_TEST_CAPS_LATEST("intel-iommu-dma-translation"); DO_TEST_CAPS_LATEST_PARSE_ERROR("intel-iommu-wrong-machine"); + DO_TEST_CAPS_LATEST_PARSE_ERROR("intel-iommu-xtsup"); DO_TEST_CAPS_ARCH_LATEST("iommu-smmuv3", "aarch64"); DO_TEST_CAPS_LATEST("virtio-iommu-x86_64"); DO_TEST_CAPS_VER_PARSE_ERROR("virtio-iommu-x86_64", "6.1.0"); @@ -2766,6 +2767,13 @@ mymain(void) DO_TEST_CAPS_LATEST_PARSE_ERROR("virtio-iommu-no-acpi"); DO_TEST_CAPS_LATEST_PARSE_ERROR("virtio-iommu-invalid-address-type"); DO_TEST_CAPS_LATEST_PARSE_ERROR("virtio-iommu-invalid-address"); + DO_TEST_CAPS_LATEST("amd-iommu"); + DO_TEST_CAPS_LATEST("amd-iommu-device-iotlb"); + DO_TEST_CAPS_LATEST("amd-iommu-xtsup"); + DO_TEST_CAPS_LATEST_PARSE_ERROR("amd-iommu-caching-mode"); + DO_TEST_CAPS_LATEST_PARSE_ERROR("amd-iommu-eim"); + DO_TEST_CAPS_LATEST_PARSE_ERROR("amd-iommu-aw-bits"); + DO_TEST_CAPS_LATEST_PARSE_ERROR("amd-iommu-dma-translation"); DO_TEST_CAPS_LATEST("cpu-hotplug-startup"); DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("cpu-hotplug-granularity", "ppc64"); -- 2.46.2

Note that this is not a full review as I don't know how the iommu is behaving/used so I can't comment on that. On Fri, Sep 27, 2024 at 15:45:46 +0800, Han Han wrote:
Please describe in the commit message what/why you are doing. e.g. at the very least when the new device is useful. E.g. the docs state that with certain config it allows > 255 cpus which would be great to mention in the commit message. I'd also prefer if the implementation of the new 'xtsup' attribute is separated. The docs also don't mention when to use the 'amd' model or which options don't actually work with it. (eim,caching-mode, etc) And lastly none of the new capability flags QEMU_CAPS_AMD_IOMMU* are used by this series, which they should be, as otherwise it makes no sense to add them.

On Fri, Sep 27, 2024 at 03:45:41PM +0800, Han Han wrote:
Here is a draft patch series for amd-iommu device. It will implement amd-iommu device and its attributes: intremap, device-iotlb, xtsup.
However, its secret device AMDVI-PCI will occupy a PCIe slot and cause VM failed to start: Domain XML: <domain type='kvm'> ... <video> <model type='virtio' heads='1' primary='yes'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/> </video> <iommu model='amd'/> ... </domain>
➜ ~ virsh create /tmp/fedora.xml error: Failed to create domain from /tmp/fedora.xml error: internal error: QEMU unexpectedly closed the monitor (vm='fedora'): 2024-09-27T07:55:46.132886Z qemu-system-x86_64: -device {"driver":"virtio-vga","id":"video0","max_outputs":1,"bus":"pcie.0","addr":"0x1"}: PCI: slot 1 function 0 not available for virtio-vga, in use by AMDVI-PCI,id=(null)
I'll update the series when QEMU fixes the blocker.
Is anyone even working on this problem in QEMU ? I don't recall seeing any patchset that claimed to address this. The amd-iommu device as it exists today is completely unsupportable, due to it secretly creating this PCI device behind the scenes, making it impossible for libvirt to configure PCI placement. IOW, this series is pretty much useless until the amd-iommu device is re-designed, at which point you'll need to re-write it to cope with the new design which properly exposes the PCI device (or alternatively removes the need for a secret PCI device?). With regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
participants (3)
-
Daniel P. Berrangé
-
Han Han
-
Peter Krempa