[PATCH v2 0/3] qemu: Implement support for multiple SMMUv3s

Nathan Chen via Devel posted 3 patches 2 days, 22 hours ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/libvirt tags/patchew/20251002002348.1536936-1-nathanc@nvidia.com
docs/formatdomain.rst                         |   9 +-
src/conf/domain_conf.c                        | 101 +++++++--
src/conf/domain_conf.h                        |  11 +-
src/conf/domain_validate.c                    |  58 +++--
src/conf/schemas/domaincommon.rng             |  10 +-
src/libvirt_private.syms                      |   2 +
src/qemu/qemu_alias.c                         |  15 +-
src/qemu/qemu_command.c                       | 202 ++++++++++++------
src/qemu/qemu_domain_address.c                |  33 +--
src/qemu/qemu_driver.c                        |   8 +-
src/qemu/qemu_postparse.c                     |  11 +-
src/qemu/qemu_validate.c                      |  18 +-
.../iommu-smmuv3Dev.aarch64-latest.args       |  41 ++++
.../iommu-smmuv3Dev.aarch64-latest.xml        |  62 ++++++
tests/qemuxmlconfdata/iommu-smmuv3Dev.xml     |  49 +++++
tests/qemuxmlconftest.c                       |   1 +
16 files changed, 499 insertions(+), 132 deletions(-)
create mode 100644 tests/qemuxmlconfdata/iommu-smmuv3Dev.aarch64-latest.args
create mode 100644 tests/qemuxmlconfdata/iommu-smmuv3Dev.aarch64-latest.xml
create mode 100644 tests/qemuxmlconfdata/iommu-smmuv3Dev.xml
[PATCH v2 0/3] qemu: Implement support for multiple SMMUv3s
Posted by Nathan Chen via Devel 2 days, 22 hours ago
Hi,

This is a follow up to the first patchset [0] for supporting multiple
vSMMU instances.

This patchset implements support for specifying multiple <iommu> devices
within the VM definition when smmuv3Dev IOMMU model is specified, and is
tested with Shameer's recently accepted qemu series for user-creatable
vSMMU devices [1]

For instance, specifying the associated emulated device in a
VM definition with multiple IOMMUs, configured to be routed to
pcie-expander-bus or pcie-root controllers:

  <devices>
    <controller type='pci' index='0' model='pcie-root'/>
    <controller type='pci' index='1' model='pcie-expander-bus'>
      <model name='pxb-pcie'/>
      <target busNr='252'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
    </controller>
    <controller type='pci' index='2' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='2' port='0x0'/>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
    </controller>
...
    <rng model='virtio'>
      <backend model='random'>/dev/urandom</backend>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
    </rng>
    <rng model='virtio'>
      <backend model='random'>/dev/urandom</backend>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </rng>
    <iommu model='smmuv3Dev'>
      <driver parentIdx='0'/>
    </iommu>
    <iommu model='smmuv3Dev'>
      <driver parentIdx='1'/>
    </iommu>
  </devices>

This would get translated to a qemu command line with the arguments below.

-device '{"driver":"pxb-pcie","bus_nr":252,"id":"pci.1","bus":"pcie.0","addr":"0x1"}' \
-device '{"driver":"pcie-root-port","port":0,"chassis":2,"id":"pci.2","bus":"pci.1","addr":"0x0"}' \
-device '{"driver":"arm-smmuv3","primary-bus":"pcie.0","id":"smmuv3.0"}' \
-device '{"driver":"arm-smmuv3","primary-bus":"pci.1","id":"smmuv3.1"}' \
...
-object '{"qom-type":"rng-random","id":"objrng0","filename":"/dev/urandom"}' \
-device '{"driver":"virtio-rng-pci","rng":"objrng0","id":"rng0","bus":"pci.2","addr":"0x0"}' \
-object '{"qom-type":"rng-random","id":"objrng1","filename":"/dev/urandom"}' \
-device '{"driver":"virtio-rng-pci","rng":"objrng1","id":"rng1","bus":"pcie.0","addr":"0x4"}' \

Changes from v1:
- Moved parentIdx attribute under <driver>
- Revised qemuxmlconfdata test cases to attach emulated devices

This series is on Github:
https://github.com/NathanChenNVIDIA/libvirt/tree/smmuv3Dev-no-accel-09-29-25

Thanks,
Nathan

[0] https://lists.libvirt.org/archives/list/devel@lists.libvirt.org/thread/3PYS3PTBP2DCOPP4SHD3UZSRELTX7RFC/
[1] https://lore.kernel.org/qemu-devel/20250829082543.7680-1-skolothumtho@nvidia.com/

Signed-off-by: Nathan Chen <nathanc@nvidia.com>

Nathan Chen (4):
  qemu: add IOMMU model smmuv3Dev
  conf: Support multiple smmuv3Dev IOMMU devices
  tests: qemuxmlconfdata: provide smmuv3Dev sample XML and CLI args

 docs/formatdomain.rst                         |   9 +-
 src/conf/domain_conf.c                        | 101 +++++++--
 src/conf/domain_conf.h                        |  11 +-
 src/conf/domain_validate.c                    |  58 +++--
 src/conf/schemas/domaincommon.rng             |  10 +-
 src/libvirt_private.syms                      |   2 +
 src/qemu/qemu_alias.c                         |  15 +-
 src/qemu/qemu_command.c                       | 202 ++++++++++++------
 src/qemu/qemu_domain_address.c                |  33 +--
 src/qemu/qemu_driver.c                        |   8 +-
 src/qemu/qemu_postparse.c                     |  11 +-
 src/qemu/qemu_validate.c                      |  18 +-
 .../iommu-smmuv3Dev.aarch64-latest.args       |  41 ++++
 .../iommu-smmuv3Dev.aarch64-latest.xml        |  62 ++++++
 tests/qemuxmlconfdata/iommu-smmuv3Dev.xml     |  49 +++++
 tests/qemuxmlconftest.c                       |   1 +
 16 files changed, 499 insertions(+), 132 deletions(-)
 create mode 100644 tests/qemuxmlconfdata/iommu-smmuv3Dev.aarch64-latest.args
 create mode 100644 tests/qemuxmlconfdata/iommu-smmuv3Dev.aarch64-latest.xml
 create mode 100644 tests/qemuxmlconfdata/iommu-smmuv3Dev.xml

-- 
2.43.0