Shared Virtual Addressing (SVA) allows to share process page tables with
devices using the IOMMU. Add a generic implementation of the IOMMU SVA
API, and add support in the Arm SMMUv3 driver.
Since v4 [1] I changed the PASID lifetime. It isn't released when the
corresponding process address space dies, but when the device driver calls
unbind. This alleviates the mmput() path as we don't need to ensure that
the device driver stops DMA there anymore. For more details see my
proposal from last week [2], which is a requirement for this series. As a
result patch 1 has separate clear() and detach() operations, and patch 17
has a new context descriptor state.
Other changes are a simplification of the locking in patch 1 and overall
cleanups following review comments.
[1] [PATCH v4 00/26] iommu: Shared Virtual Addressing and SMMUv3 support
https://lore.kernel.org/linux-iommu/[email protected]/
[2] [PATCH 0/2] iommu: Remove iommu_sva_ops::mm_exit()
https://lore.kernel.org/linux-iommu/[email protected]/
Jean-Philippe Brucker (25):
mm/mmu_notifiers: pass private data down to alloc_notifier()
iommu/sva: Manage process address spaces
iommu: Add a page fault handler
iommu/sva: Search mm by PASID
iommu/iopf: Handle mm faults
iommu/sva: Register page fault handler
arm64: mm: Add asid_gen_match() helper
arm64: mm: Pin down ASIDs for sharing mm with devices
iommu/io-pgtable-arm: Move some definitions to a header
iommu/arm-smmu-v3: Manage ASIDs with xarray
arm64: cpufeature: Export symbol read_sanitised_ftr_reg()
iommu/arm-smmu-v3: Share process page tables
iommu/arm-smmu-v3: Seize private ASID
iommu/arm-smmu-v3: Add support for VHE
iommu/arm-smmu-v3: Enable broadcast TLB maintenance
iommu/arm-smmu-v3: Add SVA feature checking
iommu/arm-smmu-v3: Implement mm operations
iommu/arm-smmu-v3: Hook up ATC invalidation to mm ops
iommu/arm-smmu-v3: Add support for Hardware Translation Table Update
iommu/arm-smmu-v3: Maintain a SID->device structure
dt-bindings: document stall property for IOMMU masters
iommu/arm-smmu-v3: Add stall support for platform devices
PCI/ATS: Add PRI stubs
PCI/ATS: Export PRI functions
iommu/arm-smmu-v3: Add support for PRI
drivers/iommu/Kconfig | 13 +
drivers/iommu/Makefile | 2 +
.../devicetree/bindings/iommu/iommu.txt | 18 +
arch/arm64/include/asm/mmu.h | 1 +
arch/arm64/include/asm/mmu_context.h | 11 +-
drivers/iommu/io-pgtable-arm.h | 30 +
drivers/iommu/iommu-sva.h | 78 +
include/linux/iommu.h | 75 +
include/linux/mmu_notifier.h | 11 +-
include/linux/pci-ats.h | 8 +
arch/arm64/kernel/cpufeature.c | 1 +
arch/arm64/mm/context.c | 103 +-
drivers/iommu/arm-smmu-v3.c | 1398 +++++++++++++++--
drivers/iommu/io-pgfault.c | 525 +++++++
drivers/iommu/io-pgtable-arm.c | 27 +-
drivers/iommu/iommu-sva.c | 557 +++++++
drivers/iommu/iommu.c | 1 +
drivers/iommu/of_iommu.c | 5 +-
drivers/misc/sgi-gru/grutlbpurge.c | 5 +-
drivers/pci/ats.c | 4 +
mm/mmu_notifier.c | 6 +-
21 files changed, 2716 insertions(+), 163 deletions(-)
create mode 100644 drivers/iommu/io-pgtable-arm.h
create mode 100644 drivers/iommu/iommu-sva.h
create mode 100644 drivers/iommu/io-pgfault.c
create mode 100644 drivers/iommu/iommu-sva.c
--
2.26.0
_______________________________________________
iommu mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/iommu