On Fri, 23 Jan 2026 08:55:18 +0100 Eric Auger <[email protected]> wrote:
> Hi Peter, Richard, > > On 1/21/26 6:52 PM, Shameer Kolothum wrote: > > Hi, > > > > Changes since v7: > > > > https://lore.kernel.org/qemu-devel/[email protected]/ > > -Addressed comments and collected R-by and T-by tags. Thanks!. > > -Rebased to latest master. > > -Reworked PASID support patches (patch #34, #36). > > > > I think this series is in good shape now and mature enough for inclusion. > > > > Patch organization: > > > > 1–28: Enable accelerated SMMUv3 with features aligned to the default QEMU > > SMMUv3 implementation, including IORT RMR-based MSI support. > > > > 29–31: Add user-configurable options for RIL, ATS, and OAS features. > > > > 32–37: Add PASID support, including required VFIO changes. > > > > Please take a look and let me know your feedback. > > This big series collected R-b's and T-bs for all patches I think. Please > could you consider pulling it? I definitely support getting this merged now. I'm seeing an indent snafu in patch 18 though which either Shameer needs to tidy up in a v9 or it needs a bit of hand tweaking by the person queuing this up for a pull request. Jonathan > > Thank you in advance > > Eric > > > > Thanks, > > Shameer > > > > A complete branch can be found here, > > https://github.com/shamiali2008/qemu-master/tree/master-smmuv3-accel-v8-dmabuf-v4 > > > > Testing: > > Basic sanity testing was performed on an NVIDIA Grace platform with GPU > > device assignment. A CUDA test application was used to validate the SVA > > use case. Additional testing and feedback are welcome. > > > > Eg: Qemu Cmd line: > > > > qemu-system-aarch64 -machine virt,gic-version=3,highmem-mmio-size=2T \ > > -cpu host -smp cpus=4 -m size=16G,slots=2,maxmem=66G -nographic \ > > -bios QEMU_EFI.fd -object iommufd,id=iommufd0 -enable-kvm \ > > -object memory-backend-ram,size=8G,id=m0 \ > > -object memory-backend-ram,size=8G,id=m1 \ > > -numa node,memdev=m0,cpus=0-3,nodeid=0 -numa node,memdev=m1,nodeid=1 \ > > -numa node,nodeid=2 -numa node,nodeid=3 -numa node,nodeid=4 -numa > > node,nodeid=5 \ > > -numa node,nodeid=6 -numa node,nodeid=7 -numa node,nodeid=8 -numa > > node,nodeid=9 \ > > -device pxb-pcie,id=pcie.1,bus_nr=1,bus=pcie.0 \ > > -device > > arm-smmuv3,primary-bus=pcie.1,id=smmuv3.0,accel=on,ats=on,ril=off,ssidsize=20,oas=48 > > \ > > -device > > pcie-root-port,id=pcie.port1,bus=pcie.1,chassis=1,pref64-reserve=512G,id=dev0 > > \ > > -device > > vfio-pci,host=0019:06:00.0,rombar=0,id=dev0,iommufd=iommufd0,bus=pcie.port1,x-vpasid-cap-offset=0xff8 > > \ > > -object acpi-generic-initiator,id=gi0,pci-dev=dev0,node=2 \ > > ... > > -object acpi-generic-initiator,id=gi7,pci-dev=dev0,node=9 \ > > -device pxb-pcie,id=pcie.2,bus_nr=8,bus=pcie.0 \ > > -device > > arm-smmuv3,primary-bus=pcie.2,id=smmuv3.1,accel=on,ats=on,ril=off,ssidsize=20,oas=48 > > \ > > -device > > pcie-root-port,id=pcie.port2,bus=pcie.2,chassis=2,pref64-reserve=512G \ > > -device > > vfio-pci,host=0018:06:00.0,rombar=0,id=dev1,iommufd=iommufd0,bus=pcie.port2,x-vpasid-cap-offset=0xff8 > > \ > > -device virtio-blk-device,drive=fs \ > > -drive file=image.qcow2,index=0,media=disk,format=qcow2,if=none,id=fs \ > > -net none \ > > -nographic > > > > Details from RFCv3 Cover letter: > > ------------------------------- > > https://lore.kernel.org/qemu-devel/[email protected]/ > > > > This patch series introduces initial support for a user-creatable, > > accelerated SMMUv3 device (-device arm-smmuv3,accel=on) in QEMU. > > > > This is based on the user-creatable SMMUv3 device series [0]. > > > > Why this is needed: > > > > On ARM, to enable vfio-pci pass-through devices in a VM, the host SMMUv3 > > must be set up in nested translation mode (Stage 1 + Stage 2), with > > Stage 1 (S1) controlled by the guest and Stage 2 (S2) managed by the host. > > > > This series introduces an optional accel property for the SMMUv3 device, > > indicating that the guest will try to leverage host SMMUv3 features for > > acceleration. By default, enabling accel configures the host SMMUv3 in > > nested mode to support vfio-pci pass-through. > > > > This new accelerated, user-creatable SMMUv3 device lets you: > > > > -Set up a VM with multiple SMMUv3s, each tied to a different physical > > SMMUv3 > > on the host. Typically, you’d have multiple PCIe PXB root complexes in the > > VM (one per virtual NUMA node), and each of them can have its own SMMUv3. > > This setup mirrors the host's layout, where each NUMA node has its own > > SMMUv3, and helps build VMs that are more aligned with the host's NUMA > > topology. > > > > -The host–guest SMMUv3 association results in reduced invalidation > > broadcasts > > and lookups for devices behind different physical SMMUv3s. > > > > -Simplifies handling of host SMMUv3s with differing feature sets. > > > > -Lays the groundwork for additional capabilities like vCMDQ support. > > ------------------------------- > > > > Eric Auger (2): > > hw/pci-host/gpex: Allow to generate preserve boot config DSM #5 > > hw/arm/virt-acpi-build: Add IORT RMR regions to handle MSI nested > > binding > > > > Nicolin Chen (4): > > backends/iommufd: Introduce iommufd_backend_alloc_viommu > > backends/iommufd: Introduce iommufd_backend_alloc_vdev > > hw/arm/smmuv3-accel: Add set/unset_iommu_device callback > > hw/arm/smmuv3-accel: Add nested vSTE install/uninstall support > > > > Shameer Kolothum (31): > > hw/arm/smmu-common: Factor out common helper functions and export > > hw/arm/smmu-common: Make iommu ops part of SMMUState > > hw/arm/smmuv3-accel: Introduce smmuv3 accel device > > hw/arm/smmuv3-accel: Initialize shared system address space > > hw/pci/pci: Move pci_init_bus_master() after adding device to bus > > hw/pci/pci: Add optional supports_address_space() callback > > hw/pci-bridge/pci_expander_bridge: Move TYPE_PXB_PCIE_DEV to header > > hw/arm/smmuv3-accel: Restrict accelerated SMMUv3 to vfio-pci endpoints > > with iommufd > > hw/arm/smmuv3: Implement get_viommu_cap() callback > > hw/arm/smmuv3: propagate smmuv3_cmdq_consume() errors to caller > > hw/arm/smmuv3-accel: Install SMMUv3 GBPA based hwpt > > hw/pci/pci: Introduce a callback to retrieve the MSI doorbell GPA > > directly > > hw/arm/smmuv3-accel: Implement get_msi_direct_gpa callback > > hw/arm/virt: Set msi-gpa property > > hw/arm/smmuv3-accel: Add support to issue invalidation cmd to host > > hw/arm/smmuv3: Initialize ID registers early during realize() > > hw/arm/smmuv3-accel: Get host SMMUv3 hw info and validate > > hw/arm/virt: Set PCI preserve_config for accel SMMUv3 > > tests/qtest/bios-tables-test: Prepare for IORT revison upgrade > > tests/qtest/bios-tables-test: Update IORT blobs after revision upgrade > > hw/arm/smmuv3: Block migration when accel is enabled > > hw/arm/smmuv3: Add accel property for SMMUv3 device > > hw/arm/smmuv3-accel: Add a property to specify RIL support > > hw/arm/smmuv3-accel: Add support for ATS > > hw/arm/smmuv3-accel: Add property to specify OAS bits > > backends/iommufd: Retrieve PASID width from > > iommufd_backend_get_device_info() > > backends/iommufd: Add get_pasid_info() callback > > hw/pci: Add helper to insert PCIe extended capability at a fixed > > offset > > hw/pci: Factor out common PASID capability initialization > > hw/vfio/pci: Synthesize PASID capability for vfio-pci devices > > hw/arm/smmuv3-accel: Make SubstreamID support configurable > > > > backends/iommufd.c | 76 +- > > backends/trace-events | 2 + > > hw/arm/Kconfig | 5 + > > hw/arm/meson.build | 3 +- > > hw/arm/smmu-common.c | 51 +- > > hw/arm/smmuv3-accel.c | 768 ++++++++++++++++++ > > hw/arm/smmuv3-accel.h | 88 ++ > > hw/arm/smmuv3-internal.h | 1 + > > hw/arm/smmuv3.c | 227 +++++- > > hw/arm/trace-events | 6 + > > hw/arm/virt-acpi-build.c | 127 ++- > > hw/arm/virt.c | 39 +- > > hw/pci-bridge/pci_expander_bridge.c | 1 - > > hw/pci-host/gpex-acpi.c | 29 +- > > hw/pci/pci.c | 43 +- > > hw/pci/pcie.c | 88 +- > > hw/vfio/iommufd.c | 6 +- > > hw/vfio/pci.c | 75 ++ > > hw/vfio/pci.h | 1 + > > hw/vfio/trace-events | 1 + > > include/hw/arm/smmu-common.h | 7 + > > include/hw/arm/smmuv3-common.h | 27 +- > > include/hw/arm/smmuv3.h | 10 + > > include/hw/arm/virt.h | 1 + > > include/hw/core/iommu.h | 1 + > > include/hw/pci-host/gpex.h | 1 + > > include/hw/pci/pci.h | 36 + > > include/hw/pci/pci_bridge.h | 1 + > > include/hw/pci/pcie.h | 4 + > > include/system/host_iommu_device.h | 20 + > > include/system/iommufd.h | 29 +- > > target/arm/kvm.c | 18 +- > > tests/data/acpi/aarch64/virt/IORT | Bin 128 -> 128 bytes > > tests/data/acpi/aarch64/virt/IORT.its_off | Bin 172 -> 172 bytes > > tests/data/acpi/aarch64/virt/IORT.smmuv3-dev | Bin 364 -> 364 bytes > > .../data/acpi/aarch64/virt/IORT.smmuv3-legacy | Bin 276 -> 276 bytes > > 36 files changed, 1692 insertions(+), 100 deletions(-) > > create mode 100644 hw/arm/smmuv3-accel.c > > create mode 100644 hw/arm/smmuv3-accel.h > > > >
