Hi,
This series adds support for configuring Intel vIOMMU (VT-d) in domain XML
and formatting them onto the QEMU command line:
* scalable_mode: Configures scalable mode support ('on'/'off').
* fsts: Enables First-Stage Translation support ('on'/'off').
* pasid_bits: Sets the number of supported PASID bits.
* svm: Enables Shared Virtual Memory (SVM) / PRQ support ('on'/'off').
With these attributes, users can configure advanced vIOMMU features for both
emulated devices and assigned host devices (e.g., vSVA / nested translation via
iommufd and first-stage translation).
Example domain XML configuration:
<iommu model='intel'>
<driver caching_mode='on' iotlb='on' scalable_mode='on' fsts='on'
pasid_bits='6' svm='on'/>
</iommu>
Which formats the following QEMU command line options:
-device
{"driver":"intel-iommu","id":"iommu0","caching-mode":true,"device-iotlb":true,"scalable-mode":true,"fsts":true,"pasid-bits":6,"svm":true}
Testing:
- Validated with libvirt test suite (ninja test).
- Tested DSA card passthrough and SVM/vSVA with iommufd backend.
Changelog:
v1:
- Added support for 'pasid_bits' and 'svm' attributes.
- rebased to master branch newest
Thanks,
Zhenzhong
Zhenzhong Duan (12):
qemu_capabilities: Introduce QEMU_CAPS_INTEL_IOMMU_SCALABLE_MODE
conf: Add scalable_mode attribute to iommu
qemu: format scalable-mode on intel-iommu command line
qemu_capabilities: Introduce QEMU_CAPS_INTEL_IOMMU_FSTS
conf: Add fsts attribute to iommu
qemu: format fsts on intel-iommu command line
qemu_capabilities: Introduce QEMU_CAPS_INTEL_IOMMU_PASID_BITS
conf: add pasid_bits attribute to iommu
qemu: format pasid-bits on intel-iommu command line
qemu_capabilities: Introduce QEMU_CAPS_INTEL_IOMMU_SVM
conf: add svm attribute to iommu
qemu: format svm on intel-iommu command line
docs/formatdomain.rst | 19 ++++++
src/conf/domain_conf.c | 64 +++++++++++++++++++
src/conf/domain_conf.h | 4 ++
src/conf/domain_validate.c | 12 ++++
src/conf/schemas/domaincommon.rng | 20 ++++++
src/qemu/qemu_capabilities.c | 10 +++
src/qemu/qemu_capabilities.h | 6 ++
src/qemu/qemu_command.c | 4 ++
src/qemu/qemu_validate.c | 31 ++++++++-
.../caps_11.0.0_x86_64+sgx.xml | 1 +
.../caps_11.0.0_x86_64.xml | 1 +
.../caps_11.1.0_x86_64.xml | 4 ++
.../intel-iommu-fsts.x86_64-latest.args | 34 ++++++++++
.../intel-iommu-fsts.x86_64-latest.xml | 37 +++++++++++
tests/qemuxmlconfdata/intel-iommu-fsts.xml | 37 +++++++++++
.../intel-iommu-pasid-bits.x86_64-latest.args | 34 ++++++++++
.../intel-iommu-pasid-bits.x86_64-latest.xml | 37 +++++++++++
.../intel-iommu-pasid-bits.xml | 37 +++++++++++
...tel-iommu-scalable-mode.x86_64-latest.args | 34 ++++++++++
...ntel-iommu-scalable-mode.x86_64-latest.xml | 37 +++++++++++
.../intel-iommu-scalable-mode.xml | 37 +++++++++++
.../intel-iommu-svm.x86_64-latest.args | 34 ++++++++++
.../intel-iommu-svm.x86_64-latest.xml | 37 +++++++++++
tests/qemuxmlconfdata/intel-iommu-svm.xml | 37 +++++++++++
tests/qemuxmlconftest.c | 4 ++
25 files changed, 611 insertions(+), 1 deletion(-)
create mode 100644 tests/qemuxmlconfdata/intel-iommu-fsts.x86_64-latest.args
create mode 100644 tests/qemuxmlconfdata/intel-iommu-fsts.x86_64-latest.xml
create mode 100644 tests/qemuxmlconfdata/intel-iommu-fsts.xml
create mode 100644
tests/qemuxmlconfdata/intel-iommu-pasid-bits.x86_64-latest.args
create mode 100644
tests/qemuxmlconfdata/intel-iommu-pasid-bits.x86_64-latest.xml
create mode 100644 tests/qemuxmlconfdata/intel-iommu-pasid-bits.xml
create mode 100644
tests/qemuxmlconfdata/intel-iommu-scalable-mode.x86_64-latest.args
create mode 100644
tests/qemuxmlconfdata/intel-iommu-scalable-mode.x86_64-latest.xml
create mode 100644 tests/qemuxmlconfdata/intel-iommu-scalable-mode.xml
create mode 100644 tests/qemuxmlconfdata/intel-iommu-svm.x86_64-latest.args
create mode 100644 tests/qemuxmlconfdata/intel-iommu-svm.x86_64-latest.xml
create mode 100644 tests/qemuxmlconfdata/intel-iommu-svm.xml
--
2.52.0