[PATCH 00/23] iommu: Refactor DMA domain strictness

From: Robin Murphy
Date: Wed Jul 21 2021 - 14:20:48 EST


Hi all,

First off, yes, this conflicts with just about everything else
currently in-flight. Sorry about that. If it stands up to initial review
then I'll start giving some thought to how to fit everything together
(particularly John's cleanup of strictness defaults, which I'd be
inclined to fold into a v2 of this series).

Anyway, this is my take on promoting the strict vs. non-strict DMA
domain choice to distinct domain types, so that it can fit logically
into the existing sysfs and Kconfig controls. The first 13 patches are
effectively preparatory cleanup to reduce churn in the later changes,
but could be merged in their own right even if the rest is too
contentious. I ended up splitting patches #2-#11 by driver for ease of
review, since some of them are more than just trivial deletions, but
they could readily be squashed (even as far as with #1 and #12 too).

I'm slightly surprised at how straightforward it's turned out, but it
has survived some very basic smoke testing for arm-smmu using dmatest
on my Arm Juno board. Branch here for convenience:

https://gitlab.arm.com/linux-arm/linux-rm/-/tree/iommu/fq

Please let me know what you think!

Robin.


Robin Murphy (23):
iommu: Pull IOVA cookie management into the core
iommu/amd: Drop IOVA cookie management
iommu/arm-smmu: Drop IOVA cookie management
iommu/vt-d: Drop IOVA cookie management
iommu/exynos: Drop IOVA cookie management
iommu/ipmmu-vmsa: Drop IOVA cookie management
iommu/mtk: Drop IOVA cookie management
iommu/rockchip: Drop IOVA cookie management
iommu/sprd: Drop IOVA cookie management
iommu/sun50i: Drop IOVA cookie management
iommu/virtio: Drop IOVA cookie management
iommu/dma: Unexport IOVA cookie management
iommu/dma: Remove redundant "!dev" checks
iommu: Introduce explicit type for non-strict DMA domains
iommu/amd: Prepare for multiple DMA domain types
iommu/arm-smmu: Prepare for multiple DMA domain types
iommu/vt-d: Prepare for multiple DMA domain types
iommu: Express DMA strictness via the domain type
iommu: Expose DMA domain strictness via sysfs
iommu: Allow choosing DMA strictness at build time
iommu/dma: Factor out flush queue init
iommu: Allow enabling non-strict mode dynamically
iommu/arm-smmu: Allow non-strict in pgtable_quirks interface

.../ABI/testing/sysfs-kernel-iommu_groups | 2 +
drivers/iommu/Kconfig | 48 +++++++++++++++----
drivers/iommu/amd/iommu.c | 21 +-------
drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 25 ++++++----
drivers/iommu/arm/arm-smmu/arm-smmu.c | 24 ++++++----
drivers/iommu/arm/arm-smmu/qcom_iommu.c | 8 ----
drivers/iommu/dma-iommu.c | 44 +++++++++--------
drivers/iommu/exynos-iommu.c | 18 ++-----
drivers/iommu/intel/iommu.c | 23 +++------
drivers/iommu/iommu.c | 44 +++++++++++------
drivers/iommu/ipmmu-vmsa.c | 27 ++---------
drivers/iommu/mtk_iommu.c | 6 ---
drivers/iommu/rockchip-iommu.c | 11 +----
drivers/iommu/sprd-iommu.c | 6 ---
drivers/iommu/sun50i-iommu.c | 12 +----
drivers/iommu/virtio-iommu.c | 8 ----
include/linux/dma-iommu.h | 9 ++--
include/linux/iommu.h | 10 +++-
18 files changed, 160 insertions(+), 186 deletions(-)

--
2.25.1