[PATCH 0/7] Use the generic iommu page table for SMMUv3
Jason Gunthorpe
jgg at nvidia.com
Mon Jul 6 09:29:06 PDT 2026
[ This is the last patch to move SMMUv3 over to the generic page
table:
1) Organize the SMMUv3 invalidation flow so iommupt can use it
..
2) Use the generic iommu page table for SMMUv3
It depends on #1
The whole branch is here:
https://github.com/jgunthorpe/linux/commits/iommu_pt_arm64/
]
Introduce the generic page table for what the ARM spec calls VMSAv8-64
(ie the long 64 bit PTE page table, io-pgtable-arm.c) and use it for
SMMUv3. ARM is by far the most complex page table of all the ones
implemented, it has the most runtime behavior variations and a lot of
features.
Like the othe architectures, the page table itself is supported by a kunit
compare test that runs operations through both io-pgtable-arm.c and the
new code then checks for identical PTEs. This is on the github link above
but I don't intend to merge it.
The existing kunit tests for iommupt will automatically cover the new
format as well.
This is the final series migrating the SMMUv3 driver over to use the new
functions and remove io-pgtable-arm.c usage. In principle the other iommu
drivers that use io-pgtable-arm could be converted someday as well.
Robin once mentioned there were errata about contiguous bits, I only found
3673557 and it is mitigated in this design by always using RIL. I'm
assuming that RIL is always available in SMMUs that are effected by
3673557? I have a patch add a FEAT if for contiguous bits if that is
required.
Jason Gunthorpe (7):
iommupt: Remove the sanity check for pt_num_items_lg2() at the top
level
iommupt/kunit: Skip test configs without supported features
iommupt: Add the 64 bit ARMv8 page table format
iommu/arm-smmu-v3: Remove io-pgtable-arm from sva.c
iommu/arm-smmu-v3: Move the DMA API comment to flush_iotlb_all
iommu/arm-smmu-v3: Use the generic iommu page table
iommu: Remove pgsize from iommu_iotlb_gather
drivers/iommu/arm/Kconfig | 4 +-
.../iommu/arm/arm-smmu-v3/arm-smmu-v3-sva.c | 13 +-
.../iommu/arm/arm-smmu-v3/arm-smmu-v3-test.c | 45 +-
drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 287 ++---
drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h | 18 +-
drivers/iommu/generic_pt/.kunitconfig | 1 +
drivers/iommu/generic_pt/Kconfig | 12 +
drivers/iommu/generic_pt/fmt/Makefile | 2 +
drivers/iommu/generic_pt/fmt/armv8.h | 1124 +++++++++++++++++
drivers/iommu/generic_pt/fmt/defs_armv8.h | 23 +
drivers/iommu/generic_pt/fmt/iommu_armv8.c | 13 +
drivers/iommu/generic_pt/iommu_pt.h | 14 -
drivers/iommu/generic_pt/kunit_iommu.h | 10 +
include/linux/generic_pt/common.h | 42 +
include/linux/generic_pt/iommu.h | 73 ++
include/linux/iommu.h | 62 +-
16 files changed, 1452 insertions(+), 291 deletions(-)
create mode 100644 drivers/iommu/generic_pt/fmt/armv8.h
create mode 100644 drivers/iommu/generic_pt/fmt/defs_armv8.h
create mode 100644 drivers/iommu/generic_pt/fmt/iommu_armv8.c
base-commit: 8cd13c14dcc29762766ff9ca2f67e3bae7c7cb77
--
2.43.0
More information about the linux-arm-kernel
mailing list