From: Nathan Chen <[email protected]> The arm-smmuv3 QOM type appears in qom-list-types on ARM QEMU as far back as 8.2 because the type is used for machine-integrated IOMMU (-machine virt,iommu=smmuv3). That reply does not indicate support for a user-pluggable -device arm-smmuv3.
User-pluggable SMMUv3 with the smmu_per_bus property was added in QEMU 10.2.0. Probe that property via device-list-properties instead of registering arm-smmuv3 in virQEMUCapsObjectTypes[], so the capability tracks pluggable device support rather than mere QOM visibility. Skip arm-smmuv3 device-list-properties probing on non-ARM targets. In qemu_validate.c, an IOMMU with pci_bus set requires QEMU_CAPS_ARM_SMMUV3; machine-integrated SMMUv3 without pci_bus keeps using QEMU_CAPS_MACHINE_VIRT_IOMMU. Update caps_8.2.0_aarch64, caps_9.2.0_aarch64, caps_10.0.0_aarch64, caps_10.2.0_aarch64, caps_11.0.0_aarch64, caps_8.2.0_armv7l, and caps_11.1.0_aarch64 .replies with the arm-smmuv3 device-list-properties exchange. Signed-off-by: Nathan Chen <[email protected]> --- src/qemu/qemu_capabilities.c | 12 ++ src/qemu/qemu_capabilities.h | 1 + src/qemu/qemu_validate.c | 9 +- .../caps_10.0.0_aarch64.replies | 79 ++++++---- .../caps_10.2.0_aarch64.replies | 89 +++++++---- .../caps_10.2.0_aarch64.xml | 1 + .../caps_11.0.0_aarch64.replies | 132 ++++++++++++---- .../caps_11.0.0_aarch64.xml | 1 + .../caps_11.1.0_aarch64.replies | 143 ++++++++++++++---- .../caps_11.1.0_aarch64.xml | 1 + .../caps_8.2.0_aarch64.replies | 79 ++++++---- .../caps_8.2.0_armv7l.replies | 79 ++++++---- .../caps_9.2.0_aarch64+hvf.replies | 75 ++++++--- 13 files changed, 514 insertions(+), 187 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index be57dcad8e..c98023bbe2 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -767,6 +767,7 @@ VIR_ENUM_IMPL(virQEMUCaps, /* 495 */ "blockdev-mirror.target-is-zero", /* QEMU_CAPS_BLOCKDEV_MIRROR_TARGET_IS_ZERO */ + "arm-smmuv3.smmu_per_bus", /* QEMU_CAPS_ARM_SMMUV3 */ ); @@ -1643,6 +1644,10 @@ static struct virQEMUCapsDevicePropsFlags virQEMUCapsDevicePropsAMDIOMMU[] = { { "xtsup", QEMU_CAPS_AMD_IOMMU_XTSUP, NULL }, }; +static struct virQEMUCapsDevicePropsFlags virQEMUCapsDevicePropsArmSmmuv3[] = { + { "smmu_per_bus", QEMU_CAPS_ARM_SMMUV3, 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 }, @@ -1808,6 +1813,9 @@ static virQEMUCapsDeviceTypeProps virQEMUCapsDeviceProps[] = { { "amd-iommu", virQEMUCapsDevicePropsAMDIOMMU, G_N_ELEMENTS(virQEMUCapsDevicePropsAMDIOMMU), QEMU_CAPS_AMD_IOMMU }, + { "arm-smmuv3", virQEMUCapsDevicePropsArmSmmuv3, + G_N_ELEMENTS(virQEMUCapsDevicePropsArmSmmuv3), + -1 }, { "scsi-block", virQEMUCapsDevicePropsSCSIBlock, G_N_ELEMENTS(virQEMUCapsDevicePropsSCSIBlock), -1 }, @@ -2825,6 +2833,10 @@ virQEMUCapsProbeQMPDeviceProperties(virQEMUCaps *qemuCaps, !virQEMUCapsGet(qemuCaps, device->capsCondition)) continue; + if (STREQ(device->type, "arm-smmuv3") && + !ARCH_IS_ARM(qemuCaps->arch)) + continue; + if (!(qemuprops = qemuMonitorGetDeviceProps(mon, device->type))) return -1; diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 3014f3dc5e..c03c32389b 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -741,6 +741,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */ /* 495 */ QEMU_CAPS_BLOCKDEV_MIRROR_TARGET_IS_ZERO, /* 'blockdev-mirror' supports 'target-is-zero' */ + QEMU_CAPS_ARM_SMMUV3, /* arm-smmuv3.smmu_per_bus */ QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 439d4b1916..500b8ee680 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -5711,7 +5711,14 @@ qemuValidateDomainDeviceDefIOMMU(const virDomainIOMMUDef *iommu, virDomainIOMMUModelTypeToString(iommu->model)); return -1; } - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_MACHINE_VIRT_IOMMU)) { + if (iommu->pci_bus >= 0) { + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_ARM_SMMUV3)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("IOMMU device: Setting pciBus for '%1$s' is not supported with this QEMU binary"), + virDomainIOMMUModelTypeToString(iommu->model)); + return -1; + } + } else if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_MACHINE_VIRT_IOMMU)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("IOMMU device: '%1$s' is not supported with this QEMU binary"), virDomainIOMMUModelTypeToString(iommu->model)); diff --git a/tests/qemucapabilitiesdata/caps_10.0.0_aarch64.replies b/tests/qemucapabilitiesdata/caps_10.0.0_aarch64.replies index 0448dcaab9..382b76e021 100644 --- a/tests/qemucapabilitiesdata/caps_10.0.0_aarch64.replies +++ b/tests/qemucapabilitiesdata/caps_10.0.0_aarch64.replies @@ -32067,17 +32067,44 @@ { "execute": "device-list-properties", "arguments": { - "typename": "scsi-block" + "typename": "arm-smmuv3" }, "id": "libvirt-31" } +{ + "return": [ + { + "name": "primary-bus", + "type": "link<PCI>" + }, + { + "default-value": 0, + "name": "bus_num", + "type": "uint8" + }, + { + "name": "stage", + "type": "str" + } + ], + "id": "libvirt-31" +} + +{ + "execute": "device-list-properties", + "arguments": { + "typename": "scsi-block" + }, + "id": "libvirt-32" +} + { "error": { "class": "DeviceNotFound", "desc": "The libvirt device dump was not collected for this version+device tuple" }, - "id": "libvirt-31" + "id": "libvirt-32" } { @@ -32085,7 +32112,7 @@ "arguments": { "typename": "scsi-generic" }, - "id": "libvirt-32" + "id": "libvirt-33" } { @@ -32093,7 +32120,7 @@ "class": "DeviceNotFound", "desc": "The libvirt device dump was not collected for this version+device tuple" }, - "id": "libvirt-32" + "id": "libvirt-33" } { @@ -32101,7 +32128,7 @@ "arguments": { "typename": "memory-backend-file" }, - "id": "libvirt-33" + "id": "libvirt-34" } { @@ -32191,7 +32218,7 @@ "type": "bool" } ], - "id": "libvirt-33" + "id": "libvirt-34" } { @@ -32199,7 +32226,7 @@ "arguments": { "typename": "memory-backend-memfd" }, - "id": "libvirt-34" + "id": "libvirt-35" } { @@ -32278,7 +32305,7 @@ "type": "int" } ], - "id": "libvirt-34" + "id": "libvirt-35" } { @@ -32286,7 +32313,7 @@ "arguments": { "typename": "max-arm-cpu" }, - "id": "libvirt-35" + "id": "libvirt-36" } { @@ -32534,12 +32561,12 @@ "type": "link<irq>" } ], - "id": "libvirt-35" + "id": "libvirt-36" } { "execute": "query-machines", - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -33634,7 +33661,7 @@ "default-ram-id": "ram" } ], - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -33642,7 +33669,7 @@ "arguments": { "typename": "virt-10.0-machine" }, - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -33889,7 +33916,7 @@ "type": "string" } ], - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -33897,7 +33924,7 @@ "arguments": { "typename": "none-machine" }, - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -34016,12 +34043,12 @@ "type": "bool" } ], - "id": "libvirt-38" + "id": "libvirt-39" } { "execute": "query-cpu-definitions", - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -34315,12 +34342,12 @@ "deprecated": false } ], - "id": "libvirt-39" + "id": "libvirt-40" } { "execute": "query-command-line-options", - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -35787,12 +35814,12 @@ "option": "drive" } ], - "id": "libvirt-40" + "id": "libvirt-41" } { "execute": "query-gic-capabilities", - "id": "libvirt-41" + "id": "libvirt-42" } { @@ -35808,7 +35835,7 @@ "kernel": false } ], - "id": "libvirt-41" + "id": "libvirt-42" } { @@ -35819,7 +35846,7 @@ "name": "host" } }, - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -35852,7 +35879,7 @@ } } }, - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -35867,11 +35894,11 @@ } } }, - "id": "libvirt-43" + "id": "libvirt-44" } { - "id": "libvirt-43", + "id": "libvirt-44", "error": { "class": "GenericError", "desc": "Parameter 'model.props.hv-passthrough' is unexpected" diff --git a/tests/qemucapabilitiesdata/caps_10.2.0_aarch64.replies b/tests/qemucapabilitiesdata/caps_10.2.0_aarch64.replies index 2a5be22ed8..c0cb15aa3a 100644 --- a/tests/qemucapabilitiesdata/caps_10.2.0_aarch64.replies +++ b/tests/qemucapabilitiesdata/caps_10.2.0_aarch64.replies @@ -33933,11 +33933,44 @@ { "execute": "device-list-properties", "arguments": { - "typename": "scsi-block" + "typename": "arm-smmuv3" }, "id": "libvirt-32" } +{ + "return": [ + { + "name": "primary-bus", + "type": "link<PCI>" + }, + { + "default-value": 0, + "name": "bus_num", + "type": "uint8" + }, + { + "default-value": false, + "name": "smmu_per_bus", + "description": "on/off", + "type": "bool" + }, + { + "name": "stage", + "type": "str" + } + ], + "id": "libvirt-32" +} + +{ + "execute": "device-list-properties", + "arguments": { + "typename": "scsi-block" + }, + "id": "libvirt-33" +} + { "return": [ { @@ -34008,7 +34041,7 @@ "type": "int32" } ], - "id": "libvirt-32" + "id": "libvirt-33" } { @@ -34016,7 +34049,7 @@ "arguments": { "typename": "scsi-generic" }, - "id": "libvirt-33" + "id": "libvirt-34" } { @@ -34057,7 +34090,7 @@ "type": "int32" } ], - "id": "libvirt-33" + "id": "libvirt-34" } { @@ -34065,7 +34098,7 @@ "arguments": { "typename": "memory-backend-file" }, - "id": "libvirt-34" + "id": "libvirt-35" } { @@ -34159,7 +34192,7 @@ "type": "bool" } ], - "id": "libvirt-34" + "id": "libvirt-35" } { @@ -34167,7 +34200,7 @@ "arguments": { "typename": "memory-backend-memfd" }, - "id": "libvirt-35" + "id": "libvirt-36" } { @@ -34236,7 +34269,7 @@ "type": "bool" } ], - "id": "libvirt-35" + "id": "libvirt-36" } { @@ -34244,7 +34277,7 @@ "arguments": { "typename": "max-arm-cpu" }, - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -34492,12 +34525,12 @@ "type": "link<irq>" } ], - "id": "libvirt-36" + "id": "libvirt-37" } { "execute": "query-machines", - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -35539,7 +35572,7 @@ "default-ram-id": "ram" } ], - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -35547,7 +35580,7 @@ "arguments": { "typename": "virt-10.2-machine" }, - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -35810,7 +35843,7 @@ "type": "child<cfi.pflash01>" } ], - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -35818,7 +35851,7 @@ "arguments": { "typename": "none-machine" }, - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -35943,12 +35976,12 @@ "type": "bool" } ], - "id": "libvirt-39" + "id": "libvirt-40" } { "execute": "query-cpu-definitions", - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -36176,12 +36209,12 @@ "deprecated": false } ], - "id": "libvirt-40" + "id": "libvirt-41" } { "execute": "query-command-line-options", - "id": "libvirt-41" + "id": "libvirt-42" } { @@ -37743,12 +37776,12 @@ "option": "drive" } ], - "id": "libvirt-41" + "id": "libvirt-42" } { "execute": "query-gic-capabilities", - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -37764,7 +37797,7 @@ "kernel": true } ], - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -37775,7 +37808,7 @@ "name": "host" } }, - "id": "libvirt-43" + "id": "libvirt-44" } { @@ -37808,7 +37841,7 @@ } } }, - "id": "libvirt-43" + "id": "libvirt-44" } { @@ -37819,7 +37852,7 @@ "name": "host" } }, - "id": "libvirt-44" + "id": "libvirt-45" } { @@ -37852,7 +37885,7 @@ } } }, - "id": "libvirt-44" + "id": "libvirt-45" } { @@ -37867,11 +37900,11 @@ } } }, - "id": "libvirt-45" + "id": "libvirt-46" } { - "id": "libvirt-45", + "id": "libvirt-46", "error": { "class": "GenericError", "desc": "Parameter 'model.props.hv-passthrough' is unexpected" diff --git a/tests/qemucapabilitiesdata/caps_10.2.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_10.2.0_aarch64.xml index df3e2a8275..f637cb6f11 100644 --- a/tests/qemucapabilitiesdata/caps_10.2.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_10.2.0_aarch64.xml @@ -186,6 +186,7 @@ <flag name='iommufd'/> <flag name='uefi-vars'/> <flag name='blockdev-mirror.target-is-zero'/> + <flag name='arm-smmuv3.smmu_per_bus'/> <version>10002000</version> <microcodeVersion>61700287</microcodeVersion> <package>v10.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_11.0.0_aarch64.replies b/tests/qemucapabilitiesdata/caps_11.0.0_aarch64.replies index fef7dd9730..078716745d 100644 --- a/tests/qemucapabilitiesdata/caps_11.0.0_aarch64.replies +++ b/tests/qemucapabilitiesdata/caps_11.0.0_aarch64.replies @@ -33845,11 +33845,87 @@ { "execute": "device-list-properties", "arguments": { - "typename": "scsi-block" + "typename": "arm-smmuv3" }, "id": "libvirt-32" } +{ + "return": [ + { + "name": "memory", + "type": "link<memory-region>" + }, + { + "name": "secure-memory", + "type": "link<memory-region>" + }, + { + "name": "primary-bus", + "type": "link<PCI>" + }, + { + "default-value": 0, + "name": "bus_num", + "type": "uint8" + }, + { + "default-value": false, + "name": "smmu_per_bus", + "description": "on/off", + "type": "bool" + }, + { + "default-value": "44", + "name": "oas", + "description": "Specify Output Address Size (for accel=on). Supported values are 44 or 48 bits. Defaults to 44 bits. oas=auto is not supported.", + "type": "OasMode" + }, + { + "default-value": "on", + "name": "ril", + "description": "Disable range invalidation support (for accel=on). ril=auto is not supported.", + "type": "OnOffAuto" + }, + { + "default-value": 0, + "name": "msi-gpa", + "type": "uint64" + }, + { + "default-value": false, + "name": "accel", + "description": "Enable SMMUv3 accelerator support. Allows host SMMUv3 to be configured in nested mode for vfio-pci dev assignment", + "type": "bool" + }, + { + "name": "stage", + "type": "str" + }, + { + "default-value": "0", + "name": "ssidsize", + "description": "Number of bits used to represent SubstreamIDs (SSIDs). A value of N allows SSIDs in the range [0 .. 2^N - 1]. Valid range is 0-20, where 0 disables SubstreamID support. Defaults to 0. A value greater than 0 is required to enable PASID support. ssidsize=auto is not supported.", + "type": "SsidSizeMode" + }, + { + "default-value": "off", + "name": "ats", + "description": "Enable/disable ATS support (for accel=on). Please ensure host platform has ATS support before enabling this. ats=auto is not supported.", + "type": "OnOffAuto" + } + ], + "id": "libvirt-32" +} + +{ + "execute": "device-list-properties", + "arguments": { + "typename": "scsi-block" + }, + "id": "libvirt-33" +} + { "return": [ { @@ -33926,7 +34002,7 @@ "type": "int32" } ], - "id": "libvirt-32" + "id": "libvirt-33" } { @@ -33934,7 +34010,7 @@ "arguments": { "typename": "scsi-generic" }, - "id": "libvirt-33" + "id": "libvirt-34" } { @@ -33975,7 +34051,7 @@ "type": "int32" } ], - "id": "libvirt-33" + "id": "libvirt-34" } { @@ -33983,7 +34059,7 @@ "arguments": { "typename": "memory-backend-file" }, - "id": "libvirt-34" + "id": "libvirt-35" } { @@ -34077,7 +34153,7 @@ "type": "bool" } ], - "id": "libvirt-34" + "id": "libvirt-35" } { @@ -34085,7 +34161,7 @@ "arguments": { "typename": "memory-backend-memfd" }, - "id": "libvirt-35" + "id": "libvirt-36" } { @@ -34154,7 +34230,7 @@ "type": "bool" } ], - "id": "libvirt-35" + "id": "libvirt-36" } { @@ -34162,7 +34238,7 @@ "arguments": { "typename": "max-arm-cpu" }, - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -34411,12 +34487,12 @@ "type": "link<irq>" } ], - "id": "libvirt-36" + "id": "libvirt-37" } { "execute": "query-machines", - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -35466,7 +35542,7 @@ "default-ram-id": "ram" } ], - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -35474,7 +35550,7 @@ "arguments": { "typename": "virt-11.0-machine" }, - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -35752,7 +35828,7 @@ "type": "child<cfi.pflash01>" } ], - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -35760,7 +35836,7 @@ "arguments": { "typename": "none-machine" }, - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -35890,12 +35966,12 @@ "type": "bool" } ], - "id": "libvirt-39" + "id": "libvirt-40" } { "execute": "query-cpu-definitions", - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -36123,12 +36199,12 @@ "deprecated": false } ], - "id": "libvirt-40" + "id": "libvirt-41" } { "execute": "query-command-line-options", - "id": "libvirt-41" + "id": "libvirt-42" } { @@ -37709,12 +37785,12 @@ "option": "drive" } ], - "id": "libvirt-41" + "id": "libvirt-42" } { "execute": "query-gic-capabilities", - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -37730,7 +37806,7 @@ "kernel": true } ], - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -37741,7 +37817,7 @@ "name": "host" } }, - "id": "libvirt-43" + "id": "libvirt-44" } { @@ -37774,7 +37850,7 @@ } } }, - "id": "libvirt-43" + "id": "libvirt-44" } { @@ -37785,7 +37861,7 @@ "name": "host" } }, - "id": "libvirt-44" + "id": "libvirt-45" } { @@ -37818,7 +37894,7 @@ } } }, - "id": "libvirt-44" + "id": "libvirt-45" } { @@ -37833,11 +37909,11 @@ } } }, - "id": "libvirt-45" + "id": "libvirt-46" } { - "id": "libvirt-45", + "id": "libvirt-46", "error": { "class": "GenericError", "desc": "Parameter 'model.props.hv-passthrough' is unexpected" diff --git a/tests/qemucapabilitiesdata/caps_11.0.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_11.0.0_aarch64.xml index 3fdc0d6621..b5f43d9be5 100644 --- a/tests/qemucapabilitiesdata/caps_11.0.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_11.0.0_aarch64.xml @@ -188,6 +188,7 @@ <flag name='uefi-vars'/> <flag name='query-block-flat'/> <flag name='blockdev-mirror.target-is-zero'/> + <flag name='arm-smmuv3.smmu_per_bus'/> <version>11000000</version> <microcodeVersion>61700286</microcodeVersion> <package>v11.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_11.1.0_aarch64.replies b/tests/qemucapabilitiesdata/caps_11.1.0_aarch64.replies index 41cd5496c6..c91d77655d 100644 --- a/tests/qemucapabilitiesdata/caps_11.1.0_aarch64.replies +++ b/tests/qemucapabilitiesdata/caps_11.1.0_aarch64.replies @@ -33939,11 +33939,98 @@ { "execute": "device-list-properties", "arguments": { - "typename": "scsi-block" + "typename": "arm-smmuv3" }, "id": "libvirt-32" } +{ + "return": [ + { + "name": "memory", + "type": "link<memory-region>" + }, + { + "name": "secure-memory", + "type": "link<memory-region>" + }, + { + "name": "primary-bus", + "type": "link<PCI>" + }, + { + "default-value": 0, + "name": "bus_num", + "type": "uint8" + }, + { + "default-value": false, + "name": "smmu_per_bus", + "description": "on/off", + "type": "bool" + }, + { + "default-value": "auto", + "name": "cmdqv", + "description": "Enable/disable CMDQV support (for accel=on). Valid values are on, off, and auto. Defaults to auto.", + "type": "OnOffAuto" + }, + { + "default-value": "auto", + "name": "ats", + "description": "Enable/disable ATS support (for accel=on). Valid values are on, off, and auto. Defaults to auto. Please ensure host platform supports ATS before setting it to on.", + "type": "OnOffAuto" + }, + { + "default-value": "auto", + "name": "oas", + "description": "Set Output Address Size in bits (for accel=on). Valid values are 44, 48, and auto. Defaults to auto.Please ensure the value does not exceed the maximum Output Address Size supported by the host platform.", + "type": "OasMode" + }, + { + "default-value": "auto", + "name": "ssidsize", + "description": "Set number of bits used to represent SubstreamIDs (SSIDs). Valid values are 0-20 and auto. Defaults to auto. A value of N allows SSIDs in the range [0 .. 2^N - 1]. A value of 0 disables SubstreamID support. A value greater than 0 is required to enable PASID support.Please ensure the value does not exceed the maximum SubstreamID size supported by the host platform.", + "type": "SsidSizeMode" + }, + { + "default-value": "auto", + "name": "ril", + "description": "Enable/disable range invalidation support (for accel=on). Valid values are on, off, and auto. Defaults to auto. Any attempt to turn it 'on' while the host does not support it would fail.", + "type": "OnOffAuto" + }, + { + "default-value": false, + "name": "accel", + "description": "Enable SMMUv3 accelerator support. Allows host SMMUv3 to be configured in nested mode for vfio-pci dev assignment. Please ensure the host SMMUv3 supports nested translation before enabling.", + "type": "bool" + }, + { + "name": "stage", + "type": "str" + }, + { + "default-value": 0, + "name": "msi-gpa", + "type": "uint64" + }, + { + "default-value": 0, + "name": "identifier", + "type": "uint8" + } + ], + "id": "libvirt-32" +} + +{ + "execute": "device-list-properties", + "arguments": { + "typename": "scsi-block" + }, + "id": "libvirt-33" +} + { "return": [ { @@ -34020,7 +34107,7 @@ "type": "int32" } ], - "id": "libvirt-32" + "id": "libvirt-33" } { @@ -34028,7 +34115,7 @@ "arguments": { "typename": "scsi-generic" }, - "id": "libvirt-33" + "id": "libvirt-34" } { @@ -34069,7 +34156,7 @@ "type": "int32" } ], - "id": "libvirt-33" + "id": "libvirt-34" } { @@ -34077,7 +34164,7 @@ "arguments": { "typename": "memory-backend-file" }, - "id": "libvirt-34" + "id": "libvirt-35" } { @@ -34171,7 +34258,7 @@ "type": "bool" } ], - "id": "libvirt-34" + "id": "libvirt-35" } { @@ -34179,7 +34266,7 @@ "arguments": { "typename": "memory-backend-memfd" }, - "id": "libvirt-35" + "id": "libvirt-36" } { @@ -34248,7 +34335,7 @@ "type": "bool" } ], - "id": "libvirt-35" + "id": "libvirt-36" } { @@ -34256,7 +34343,7 @@ "arguments": { "typename": "max-arm-cpu" }, - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -34511,12 +34598,12 @@ "type": "link<irq>" } ], - "id": "libvirt-36" + "id": "libvirt-37" } { "execute": "query-machines", - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -35555,7 +35642,7 @@ "default-ram-id": "ram" } ], - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -35563,7 +35650,7 @@ "arguments": { "typename": "virt-11.1-machine" }, - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -35841,7 +35928,7 @@ "type": "child<cfi.pflash01>" } ], - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -35849,7 +35936,7 @@ "arguments": { "typename": "none-machine" }, - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -35979,12 +36066,12 @@ "type": "bool" } ], - "id": "libvirt-39" + "id": "libvirt-40" } { "execute": "query-cpu-definitions", - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -36212,12 +36299,12 @@ "deprecated": false } ], - "id": "libvirt-40" + "id": "libvirt-41" } { "execute": "query-command-line-options", - "id": "libvirt-41" + "id": "libvirt-42" } { @@ -37810,12 +37897,12 @@ "option": "drive" } ], - "id": "libvirt-41" + "id": "libvirt-42" } { "execute": "query-gic-capabilities", - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -37831,7 +37918,7 @@ "kernel": true } ], - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -37842,7 +37929,7 @@ "name": "host" } }, - "id": "libvirt-43" + "id": "libvirt-44" } { @@ -37875,7 +37962,7 @@ } } }, - "id": "libvirt-43" + "id": "libvirt-44" } { @@ -37886,7 +37973,7 @@ "name": "host" } }, - "id": "libvirt-44" + "id": "libvirt-45" } { @@ -37919,7 +38006,7 @@ } } }, - "id": "libvirt-44" + "id": "libvirt-45" } { @@ -37934,11 +38021,11 @@ } } }, - "id": "libvirt-45" + "id": "libvirt-46" } { - "id": "libvirt-45", + "id": "libvirt-46", "error": { "class": "GenericError", "desc": "Parameter 'model.props.hv-passthrough' is unexpected" diff --git a/tests/qemucapabilitiesdata/caps_11.1.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_11.1.0_aarch64.xml index f7dd14a1ad..28bf1aff57 100644 --- a/tests/qemucapabilitiesdata/caps_11.1.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_11.1.0_aarch64.xml @@ -188,6 +188,7 @@ <flag name='uefi-vars'/> <flag name='query-block-flat'/> <flag name='blockdev-mirror.target-is-zero'/> + <flag name='arm-smmuv3.smmu_per_bus'/> <version>11000050</version> <microcodeVersion>61700287</microcodeVersion> <package>v11.0.0-1600-g5611a9268d</package> diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_aarch64.replies b/tests/qemucapabilitiesdata/caps_8.2.0_aarch64.replies index 002ca31b9f..c4d0be6029 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_aarch64.replies +++ b/tests/qemucapabilitiesdata/caps_8.2.0_aarch64.replies @@ -31157,17 +31157,44 @@ { "execute": "device-list-properties", "arguments": { - "typename": "scsi-block" + "typename": "arm-smmuv3" }, "id": "libvirt-32" } +{ + "return": [ + { + "name": "primary-bus", + "type": "link<PCI>" + }, + { + "default-value": 0, + "name": "bus_num", + "type": "uint8" + }, + { + "name": "stage", + "type": "str" + } + ], + "id": "libvirt-32" +} + +{ + "execute": "device-list-properties", + "arguments": { + "typename": "scsi-block" + }, + "id": "libvirt-33" +} + { "error": { "class": "DeviceNotFound", "desc": "The libvirt device dump was not collected for this version+device tuple" }, - "id": "libvirt-32" + "id": "libvirt-33" } { @@ -31175,7 +31202,7 @@ "arguments": { "typename": "scsi-generic" }, - "id": "libvirt-33" + "id": "libvirt-34" } { @@ -31183,7 +31210,7 @@ "class": "DeviceNotFound", "desc": "The libvirt device dump was not collected for this version+device tuple" }, - "id": "libvirt-33" + "id": "libvirt-34" } { @@ -31191,7 +31218,7 @@ "arguments": { "typename": "memory-backend-file" }, - "id": "libvirt-34" + "id": "libvirt-35" } { @@ -31281,7 +31308,7 @@ "type": "bool" } ], - "id": "libvirt-34" + "id": "libvirt-35" } { @@ -31289,7 +31316,7 @@ "arguments": { "typename": "memory-backend-memfd" }, - "id": "libvirt-35" + "id": "libvirt-36" } { @@ -31368,7 +31395,7 @@ "type": "int" } ], - "id": "libvirt-35" + "id": "libvirt-36" } { @@ -31376,7 +31403,7 @@ "arguments": { "typename": "max-arm-cpu" }, - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -31585,12 +31612,12 @@ "type": "bool" } ], - "id": "libvirt-36" + "id": "libvirt-37" } { "execute": "query-machines", - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -32702,7 +32729,7 @@ "default-ram-id": "ram" } ], - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -32710,7 +32737,7 @@ "arguments": { "typename": "virt-8.2-machine" }, - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -32946,7 +32973,7 @@ "type": "child<cfi.pflash01>" } ], - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -32954,7 +32981,7 @@ "arguments": { "typename": "none-machine" }, - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -33067,12 +33094,12 @@ "type": "child<container>" } ], - "id": "libvirt-39" + "id": "libvirt-40" } { "execute": "query-cpu-definitions", - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -33366,12 +33393,12 @@ "deprecated": false } ], - "id": "libvirt-40" + "id": "libvirt-41" } { "execute": "query-command-line-options", - "id": "libvirt-41" + "id": "libvirt-42" } { @@ -34736,12 +34763,12 @@ "option": "drive" } ], - "id": "libvirt-41" + "id": "libvirt-42" } { "execute": "query-gic-capabilities", - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -34757,7 +34784,7 @@ "kernel": false } ], - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -34768,7 +34795,7 @@ "name": "host" } }, - "id": "libvirt-43" + "id": "libvirt-44" } { @@ -34801,7 +34828,7 @@ } } }, - "id": "libvirt-43" + "id": "libvirt-44" } { @@ -34816,11 +34843,11 @@ } } }, - "id": "libvirt-44" + "id": "libvirt-45" } { - "id": "libvirt-44", + "id": "libvirt-45", "error": { "class": "GenericError", "desc": "Parameter 'hv-passthrough' is unexpected" diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_armv7l.replies b/tests/qemucapabilitiesdata/caps_8.2.0_armv7l.replies index b8f7b6f68a..51cd48e1d1 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_armv7l.replies +++ b/tests/qemucapabilitiesdata/caps_8.2.0_armv7l.replies @@ -31391,17 +31391,44 @@ { "execute": "device-list-properties", "arguments": { - "typename": "scsi-block" + "typename": "arm-smmuv3" }, "id": "libvirt-32" } +{ + "return": [ + { + "name": "primary-bus", + "type": "link<PCI>" + }, + { + "default-value": 0, + "name": "bus_num", + "type": "uint8" + }, + { + "name": "stage", + "type": "str" + } + ], + "id": "libvirt-32" +} + +{ + "execute": "device-list-properties", + "arguments": { + "typename": "scsi-block" + }, + "id": "libvirt-33" +} + { "error": { "class": "DeviceNotFound", "desc": "The libvirt device dump was not collected for this version+device tuple" }, - "id": "libvirt-32" + "id": "libvirt-33" } { @@ -31409,7 +31436,7 @@ "arguments": { "typename": "scsi-generic" }, - "id": "libvirt-33" + "id": "libvirt-34" } { @@ -31417,7 +31444,7 @@ "class": "DeviceNotFound", "desc": "The libvirt device dump was not collected for this version+device tuple" }, - "id": "libvirt-33" + "id": "libvirt-34" } { @@ -31425,7 +31452,7 @@ "arguments": { "typename": "memory-backend-file" }, - "id": "libvirt-34" + "id": "libvirt-35" } { @@ -31519,7 +31546,7 @@ "type": "bool" } ], - "id": "libvirt-34" + "id": "libvirt-35" } { @@ -31527,7 +31554,7 @@ "arguments": { "typename": "memory-backend-memfd" }, - "id": "libvirt-35" + "id": "libvirt-36" } { @@ -31606,7 +31633,7 @@ "type": "int" } ], - "id": "libvirt-35" + "id": "libvirt-36" } { @@ -31614,7 +31641,7 @@ "arguments": { "typename": "max-arm-cpu" }, - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -31756,12 +31783,12 @@ "type": "link<irq>" } ], - "id": "libvirt-36" + "id": "libvirt-37" } { "execute": "query-machines", - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -32819,7 +32846,7 @@ "default-ram-id": "ram" } ], - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -32827,7 +32854,7 @@ "arguments": { "typename": "virt-8.2-machine" }, - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -33063,7 +33090,7 @@ "type": "child<cfi.pflash01>" } ], - "id": "libvirt-38" + "id": "libvirt-39" } { @@ -33071,7 +33098,7 @@ "arguments": { "typename": "none-machine" }, - "id": "libvirt-39" + "id": "libvirt-40" } { @@ -33184,12 +33211,12 @@ "type": "child<container>" } ], - "id": "libvirt-39" + "id": "libvirt-40" } { "execute": "query-cpu-definitions", - "id": "libvirt-40" + "id": "libvirt-41" } { @@ -33411,12 +33438,12 @@ "deprecated": false } ], - "id": "libvirt-40" + "id": "libvirt-41" } { "execute": "query-command-line-options", - "id": "libvirt-41" + "id": "libvirt-42" } { @@ -34898,12 +34925,12 @@ "option": "drive" } ], - "id": "libvirt-41" + "id": "libvirt-42" } { "execute": "query-gic-capabilities", - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -34919,7 +34946,7 @@ "kernel": false } ], - "id": "libvirt-42" + "id": "libvirt-43" } { @@ -34930,11 +34957,11 @@ "name": "host" } }, - "id": "libvirt-43" + "id": "libvirt-44" } { - "id": "libvirt-43", + "id": "libvirt-44", "error": { "class": "GenericError", "desc": "The CPU type 'host' requires KVM" @@ -34953,11 +34980,11 @@ } } }, - "id": "libvirt-44" + "id": "libvirt-45" } { - "id": "libvirt-44", + "id": "libvirt-45", "error": { "class": "GenericError", "desc": "The CPU type 'host' requires KVM" diff --git a/tests/qemucapabilitiesdata/caps_9.2.0_aarch64+hvf.replies b/tests/qemucapabilitiesdata/caps_9.2.0_aarch64+hvf.replies index 14b11c5c30..31b13f865b 100644 --- a/tests/qemucapabilitiesdata/caps_9.2.0_aarch64+hvf.replies +++ b/tests/qemucapabilitiesdata/caps_9.2.0_aarch64+hvf.replies @@ -30532,17 +30532,44 @@ { "execute": "device-list-properties", "arguments": { - "typename": "scsi-block" + "typename": "arm-smmuv3" }, "id": "libvirt-28" } +{ + "return": [ + { + "name": "primary-bus", + "type": "link<PCI>" + }, + { + "default-value": 0, + "name": "bus_num", + "type": "uint8" + }, + { + "name": "stage", + "type": "str" + } + ], + "id": "libvirt-28" +} + +{ + "execute": "device-list-properties", + "arguments": { + "typename": "scsi-block" + }, + "id": "libvirt-29" +} + { "error": { "class": "DeviceNotFound", "desc": "The libvirt device dump was not collected for this version+device tuple" }, - "id": "libvirt-28" + "id": "libvirt-29" } { @@ -30550,7 +30577,7 @@ "arguments": { "typename": "scsi-generic" }, - "id": "libvirt-29" + "id": "libvirt-30" } { @@ -30558,7 +30585,7 @@ "class": "DeviceNotFound", "desc": "The libvirt device dump was not collected for this version+device tuple" }, - "id": "libvirt-29" + "id": "libvirt-30" } { @@ -30566,7 +30593,7 @@ "arguments": { "typename": "memory-backend-file" }, - "id": "libvirt-30" + "id": "libvirt-31" } { @@ -30651,7 +30678,7 @@ "type": "bool" } ], - "id": "libvirt-30" + "id": "libvirt-31" } { @@ -30659,7 +30686,7 @@ "arguments": { "typename": "max-arm-cpu" }, - "id": "libvirt-31" + "id": "libvirt-32" } { @@ -30816,12 +30843,12 @@ "type": "link<irq>" } ], - "id": "libvirt-31" + "id": "libvirt-32" } { "execute": "query-machines", - "id": "libvirt-32" + "id": "libvirt-33" } { @@ -31871,7 +31898,7 @@ "default-ram-id": "ram" } ], - "id": "libvirt-32" + "id": "libvirt-33" } { @@ -31879,7 +31906,7 @@ "arguments": { "typename": "virt-9.2-machine" }, - "id": "libvirt-33" + "id": "libvirt-34" } { @@ -32120,7 +32147,7 @@ "type": "child<cfi.pflash01>" } ], - "id": "libvirt-33" + "id": "libvirt-34" } { @@ -32128,7 +32155,7 @@ "arguments": { "typename": "none-machine" }, - "id": "libvirt-34" + "id": "libvirt-35" } { @@ -32246,12 +32273,12 @@ "type": "child<container>" } ], - "id": "libvirt-34" + "id": "libvirt-35" } { "execute": "query-cpu-definitions", - "id": "libvirt-35" + "id": "libvirt-36" } { @@ -32545,12 +32572,12 @@ "deprecated": false } ], - "id": "libvirt-35" + "id": "libvirt-36" } { "execute": "query-command-line-options", - "id": "libvirt-36" + "id": "libvirt-37" } { @@ -33866,12 +33893,12 @@ "option": "drive" } ], - "id": "libvirt-36" + "id": "libvirt-37" } { "execute": "query-gic-capabilities", - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -33887,7 +33914,7 @@ "kernel": false } ], - "id": "libvirt-37" + "id": "libvirt-38" } { @@ -33898,11 +33925,11 @@ "name": "host" } }, - "id": "libvirt-38" + "id": "libvirt-39" } { - "id": "libvirt-38", + "id": "libvirt-39", "error": { "class": "GenericError", "desc": "The CPU type 'host' requires KVM" @@ -33921,11 +33948,11 @@ } } }, - "id": "libvirt-39" + "id": "libvirt-40" } { - "id": "libvirt-39", + "id": "libvirt-40", "error": { "class": "GenericError", "desc": "The CPU type 'host' requires KVM" -- 2.43.0
