v4 --> v5: As Hanjun and Thomas Gleixner's suggestion: 1. Keep the old ARCH specific boot options no change. 2. Keep build option CONFIG_IOMMU_DEFAULT_PASSTHROUGH no change. v4: As Robin Murphy's suggestion: "It's also not necessarily obvious to the user how this interacts with IOMMU_DEFAULT_PASSTHROUGH, so if we really do go down this route, maybe it would be better to refactor the whole lot into a single selection of something like IOMMU_DEFAULT_MODE anyway." In this version, I tried to normalize the IOMMU dma mode boot options for all ARCHs. When IOMMU is enabled, there are 3 dma modes: paasthrough(bypass), lazy(mapping but defer the IOTLB invalidation), strict. But currently each ARCHs defined their private boot options, different with each other. For example, to enable/disable "passthrough", ARM64 use iommu.passthrough=1/0, X86 use iommu=pt/nopt, PPC/POWERNV use iommu=nobypass. Zhen Lei (6): iommu: add generic boot option iommu.dma_mode iommu: add build options corresponding to iommu.dma_mode iommu: add iommu_default_dma_mode_get/set() helper s390/pci: add support for generic boot option iommu.dma_mode powernv/iommu: add support for generic boot option iommu.dma_mode x86/iommu: add support for generic boot option iommu.dma_mode Documentation/admin-guide/kernel-parameters.txt | 19 +++++++ arch/ia64/include/asm/iommu.h | 2 - arch/ia64/kernel/pci-dma.c | 2 - arch/powerpc/platforms/powernv/pci-ioda.c | 5 +- arch/s390/pci/pci_dma.c | 14 ++--- arch/x86/include/asm/iommu.h | 1 - arch/x86/kernel/pci-dma.c | 35 ++++++------ drivers/iommu/Kconfig | 45 ++++++++++++--- drivers/iommu/amd_iommu.c | 10 ++-- drivers/iommu/amd_iommu_init.c | 4 +- drivers/iommu/amd_iommu_types.h | 6 -- drivers/iommu/intel-iommu.c | 9 ++- drivers/iommu/iommu.c | 73 ++++++++++++++++++++----- include/linux/iommu.h | 23 ++++++++ 14 files changed, 176 insertions(+), 72 deletions(-) -- 1.8.3