As of today when a guest is assigned with a host PCI device and an SMMUv3, VFIO calls memory_region_iommu_replay() default implementation. This translates the whole address range and completely stalls the execution. As VFIO/SMMUv3 integration is not supported yet (it requires SMMUv3 HW nested paging), let's recognize this situation and fail.
Best Regards Eric This series can be found at: https://github.com/eauger/qemu/tree/v4.1.0_smmu_vfio_fail_v5 History: v4 -> v5: - v4 patches: 1, 4, 5 were upstreamed separately - IOMMU_ATTR_HW_NESTED_PAGING renamed into IOMMU_ATTR_NEED_HW_NESTED_PAGING v3 -> v4: - see individual patches v2 -> v3: - squash IOMMU_ATTR_VFIO_NESTED introduction and SMMUv3 usage - assert when recognizing VFIO/NESTED case - collect R-bs v1 -> v2: - Added "memory: Remove unused memory_region_iommu_replay_all()" & "hw/arm/smmuv3: Log a guest error when decoding an invalid STE" - do not attempt to implement replay Cb but rather remove the call in case it is not needed - explain why we do not remove other log messages on config decoding Eric Auger (2): memory: Add IOMMU_ATTR_NEED_HW_NESTED_PAGING IOMMU memory region attribute hw/vfio/common: Fail on VFIO/HW nested paging detection hw/arm/smmuv3.c | 12 ++++++++++++ hw/vfio/common.c | 10 ++++++++++ include/exec/memory.h | 8 +++++++- 3 files changed, 29 insertions(+), 1 deletion(-) -- 2.20.1