iommu/dma: Some housekeeping
Subsystems (17)
Robin Murphy
maintainercover iommu/dma: Some housekeeping
Hi All,
It's been a while now since iommu-dma grew from a library of DMA ops helpers for arch code into something more abstracted and closely coupled to the IOMMU API core, so it seemed about time to do some housekeeping in the more neglected areas to reflect that.
The header reorganisation does touch a range of areas (a couple of which seemingly had no reason to be involved anyway), but hopefully these are all low-impact changes that nobody minds going through the IOMMU tree.
Now for the build-bots to tell me what I've missed...
Thanks,
Robin.
Robin Murphy (3):
iommu/dma: Clean up Kconfig
iommu/dma: Move public interfaces to linux/iommu.h iommu/dma: Make header private
arch/arm64/Kconfig | 1 - arch/arm64/mm/dma-mapping.c | 2 +- drivers/acpi/viot.c | 1 - drivers/gpu/drm/exynos/exynos_drm_dma.c | 1 - drivers/iommu/Kconfig | 3 +- drivers/iommu/amd/Kconfig | 1 - drivers/iommu/amd/iommu.c | 2 +- drivers/iommu/apple-dart.c | 3 +- drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 2 +- drivers/iommu/arm/arm-smmu/arm-smmu.c | 2 +- drivers/iommu/dma-iommu.c | 18 +++- drivers/iommu/dma-iommu.h | 38 +++++++++ drivers/iommu/intel/Kconfig | 1 - drivers/iommu/intel/iommu.c | 2 +- drivers/iommu/iommu.c | 3 +- drivers/iommu/virtio-iommu.c | 3 +- drivers/irqchip/irq-gic-v2m.c | 2 +- drivers/irqchip/irq-gic-v3-its.c | 2 +- drivers/irqchip/irq-gic-v3-mbi.c | 2 +- drivers/irqchip/irq-ls-scfg-msi.c | 2 +- drivers/vfio/vfio_iommu_type1.c | 1 - include/linux/dma-iommu.h | 93 --------------------- include/linux/iommu.h | 36 ++++++++ 23 files changed, 105 insertions(+), 116 deletions(-) create mode 100644 drivers/iommu/dma-iommu.h delete mode 100644 include/linux/dma-iommu.h
Signature · 1 line
2.36.1.dirty
Robin Murphy
maintainerPATCH 1/3 iommu/dma: Clean up Kconfig
Although iommu-dma is a per-architecture chonce, that is currently implemented in a rather haphazard way. Selecting from the arch Kconfig was the original logical approach, but is complicated by having to manage dependencies; conversely, selecting from drivers ends up hiding the architecture dependency *too* well. Instead, let's just have it enable itself automatically when IOMMU API support is enabled for the relevant architectures. It can't get much clearer than that.
--- arch/arm64/Kconfig | 1 - drivers/iommu/Kconfig | 3 +-- drivers/iommu/amd/Kconfig | 1 - drivers/iommu/intel/Kconfig | 1 - 4 files changed, 1 insertion(+), 5 deletions(-)
arch/arm64/Kconfig +0 -1
@@ -209,7 +209,6 @@ config ARM64 select HAVE_KPROBES select HAVE_KRETPROBES select HAVE_GENERIC_VDSO - select IOMMU_DMA if IOMMU_SUPPORT select IRQ_DOMAIN select IRQ_FORCED_THREADING select KASAN_VMALLOC if KASAN
drivers/iommu/Kconfig +1 -2
@@ -137,7 +137,7 @@ config OF_IOMMU # IOMMU-agnostic DMA-mapping layer config IOMMU_DMA - bool + def_bool ARM64 || IA64 || X86 select DMA_OPS select IOMMU_API select IOMMU_IOVA
@@ -476,7 +476,6 @@ config VIRTIO_IOMMU depends on VIRTIO depends on (ARM64 || X86) select IOMMU_API - select IOMMU_DMA select INTERVAL_TREE select ACPI_VIOT if ACPI help
drivers/iommu/amd/Kconfig +0 -1
@@ -9,7 +9,6 @@ config AMD_IOMMU select PCI_PASID select IOMMU_API select IOMMU_IOVA - select IOMMU_DMA select IOMMU_IO_PGTABLE depends on X86_64 && PCI && ACPI && HAVE_CMPXCHG_DOUBLE help
drivers/iommu/intel/Kconfig +0 -1
@@ -19,7 +19,6 @@ config INTEL_IOMMU select DMAR_TABLE select SWIOTLB select IOASID - select IOMMU_DMA select PCI_ATS help DMA remapping (DMAR) devices support enables independent address
Signature · 1 line
2.36.1.dirty
Re: [PATCH 1/3] iommu/dma: Clean up Kconfig
Quoted 11 lines · Robin Murphy
Although iommu-dma is a per-architecture chonce, that is currently implemented in a rather haphazard way. Selecting from the arch
Kconfigwas the original logical approach, but is complicated by having to manage dependencies; conversely, selecting from drivers ends up hiding the architecture dependency *too* well. Instead, let's just have it enable itself automatically when IOMMU API support is enabled for the relevant architectures. It can't get much clearer than that.Signed-off-by Robin Murphy <[email protected]>--- arch/arm64/Kconfig | 1 -
For this change:
Re: [PATCH 1/3] iommu/dma: Clean up Kconfig
In reply to Robin MurphyQuoted 33 lines · Robin Murphy
Although iommu-dma is a per-architecture chonce, that is currently implemented in a rather haphazard way. Selecting from the arch
Kconfigwas the original logical approach, but is complicated by having to manage dependencies; conversely, selecting from drivers ends up hiding the architecture dependency *too* well. Instead, let's just have it enable itself automatically when IOMMU API support is enabled for the relevant architectures. It can't get much clearer than that.Signed-off-by Robin Murphy <[email protected]>--- arch/arm64/Kconfig | 1 - drivers/iommu/Kconfig | 3 +-- drivers/iommu/amd/Kconfig | 1 - drivers/iommu/intel/Kconfig | 1 - 4 files changed, 1 insertion(+), 5 deletions(-)arch/arm64/Kconfig +0
-1@@ -209,7 +209,6 @@ config ARM64 select HAVE_KPROBES select HAVE_KRETPROBES select HAVE_GENERIC_VDSO - select IOMMU_DMA if IOMMU_SUPPORT select IRQ_DOMAIN select IRQ_FORCED_THREADING select KASAN_VMALLOC if KASANdrivers/iommu/Kconfig +0
-0
drivers/iommu/Kconfig config OF_IOMMU · line 140
Quoted 5 lines
drivers/iommu/Kconfig +1
-1@@ -137,7 +137,7 @@ config OF_IOMMU # IOMMU-agnostic DMA-mapping layer config IOMMU_DMA - bool + def_bool ARM64 || IA64 || X86
Robin, do you remember why you added IA64 here? What is the Itanimum IOMMU driver?
Thanks,
Jason
Robin Murphy
maintainerRe: [PATCH 1/3] iommu/dma: Clean up Kconfig
Quoted 35 lines · Jason Gunthorpe
Quoted 34 lines · Robin Murphy
Although iommu-dma is a per-architecture chonce, that is currently implemented in a rather haphazard way. Selecting from the arch
Kconfigwas the original logical approach, but is complicated by having to manage dependencies; conversely, selecting from drivers ends up hiding the architecture dependency *too* well. Instead, let's just have it enable itself automatically when IOMMU API support is enabled for the relevant architectures. It can't get much clearer than that.Signed-off-by Robin Murphy <[email protected]>--- arch/arm64/Kconfig | 1 - drivers/iommu/Kconfig | 3 +-- drivers/iommu/amd/Kconfig | 1 - drivers/iommu/intel/Kconfig | 1 - 4 files changed, 1 insertion(+), 5 deletions(-)arch/arm64/Kconfig +0
-1@@ -209,7 +209,6 @@ config ARM64 select HAVE_KPROBES select HAVE_KRETPROBES select HAVE_GENERIC_VDSO - select IOMMU_DMA if IOMMU_SUPPORT select IRQ_DOMAIN select IRQ_FORCED_THREADING select KASAN_VMALLOC if KASANdrivers/iommu/Kconfig +0
-0@@ -137,7 +137,7 @@ config OF_IOMMU
Quoted 7 lines
drivers/iommu/Kconfig config OF_IOMMU · line 140
Quoted 4 lines
drivers/iommu/Kconfig +1
-1# IOMMU-agnostic DMA-mapping layer config IOMMU_DMA - bool + def_bool ARM64 || IA64 || X86Robin, do you remember why you added IA64 here? What is the Itanimum IOMMU driver?
config INTEL_IOMMU
bool "Support for Intel IOMMU using DMA Remapping Devices" depends on PCI_MSI && ACPI && (X86 || IA64)
Yes, really :)
Robin.
Re: [PATCH 1/3] iommu/dma: Clean up Kconfig
Quoted 13 lines · Robin Murphy
Quoted 4 lines
Quoted 4 lines
drivers/iommu/Kconfig +0
-0Quoted 8 lines
drivers/iommu/Kconfig config OF_IOMMU · line 139
Quoted 5 lines
drivers/iommu/Kconfig +1
-1@@ -137,7 +137,7 @@ config OF_IOMMU # IOMMU-agnostic DMA-mapping layer config IOMMU_DMA - bool + def_bool ARM64 || IA64 || X86Robin, do you remember why you added IA64 here? What is the Itanimum IOMMU driver?
Quoted 5 lines
config
INTEL_IOMMUbool "Support for Intel IOMMU using DMA Remapping Devices" depends on PCI_MSI && ACPI && (X86 || IA64)Yes, really :)
Wowo, thanks!
Jason
Robin Murphy
maintainerPATCH 2/3 iommu/dma: Move public interfaces to linux/iommu.h
In reply to Robin MurphyThe iommu-dma layer is now mostly encapsulated by iommu_dma_ops, with only a couple more public interfaces left pertaining to MSI integration. Since these depend on the main IOMMU API header anyway, move their declarations there, taking the opportunity to update the half-baked comments to proper kerneldoc along the way.
---
Note that iommu_setup_dma_ops() should also become internal in a future phase of the great IOMMU API upheaval - for now as the last bit of true arch code glue I consider it more "necessarily exposed" than "public".
arch/arm64/mm/dma-mapping.c | 2 +- drivers/iommu/dma-iommu.c | 15 ++++++++++-- drivers/irqchip/irq-gic-v2m.c | 2 +- drivers/irqchip/irq-gic-v3-its.c | 2 +- drivers/irqchip/irq-gic-v3-mbi.c | 2 +- drivers/irqchip/irq-ls-scfg-msi.c | 2 +- drivers/vfio/vfio_iommu_type1.c | 1 - include/linux/dma-iommu.h | 40 ------------------------------- include/linux/iommu.h | 36 ++++++++++++++++++++++++++++ 9 files changed, 54 insertions(+), 48 deletions(-)
arch/arm64/mm/dma-mapping.c +1 -1
@@ -7,7 +7,7 @@#include <linux/gfp.h> #include <linux/cache.h> #include <linux/dma-map-ops.h> -#include <linux/dma-iommu.h> +#include <linux/iommu.h> #include <xen/xen.h> #include <asm/cacheflush.h>
drivers/iommu/dma-iommu.c +13 -2
@@ -1633,6 +1633,13 @@ static struct iommu_dma_msi_page *iommu_dma_get_msi_page(struct device *dev,return NULL ; } +/** +* iommu_dma_prepare_msi() - Map the MSI page in the IOMMU domain +* @desc: MSI descriptor, will store the MSI page +* @msi_addr: MSI target address to be mapped +* +* Return: 0 on success or negative error code if the mapping failed. +*/ int iommu_dma_prepare_msi (struct msi_desc *desc,phys_addr_t msi_addr) {struct device *dev =msi_desc_to_dev (desc);
@@ -1661,8 +1668,12 @@ int iommu_dma_prepare_msi(struct msi_desc *desc, phys_addr_t msi_addr)return 0 ; } -void iommu_dma_compose_msi_msg (struct msi_desc *desc, -struct msi_msg *msg) +/** +* iommu_dma_compose_msi_msg() - Apply translation to an MSI message +* @desc: MSI descriptor prepared by iommu_dma_prepare_msi() +* @msg: MSI message containing target physical address +*/ +void iommu_dma_compose_msi_msg (struct msi_desc *desc,struct msi_msg *msg) {struct device *dev =msi_desc_to_dev (desc);const struct iommu_domain *domain =iommu_get_domain_for_dev (dev);
drivers/irqchip/irq-gic-v2m.c +1 -1
@@ -13,7 +13,7 @@#define pr_fmt (fmt) "GICv2m: " fmt#include <linux/acpi.h> -#include <linux/dma-iommu.h> +#include <linux/iommu.h> #include <linux/irq.h> #include <linux/irqdomain.h> #include <linux/kernel.h>
drivers/irqchip/irq-gic-v3-its.c +1 -1
@@ -11,9 +11,9 @@#include <linux/cpu.h> #include <linux/crash_dump.h> #include <linux/delay.h> -#include <linux/dma-iommu.h> #include <linux/efi.h> #include <linux/interrupt.h> +#include <linux/iommu.h> #include <linux/iopoll.h> #include <linux/irqdomain.h> #include <linux/list.h>
drivers/irqchip/irq-gic-v3-mbi.c +1 -1
@@ -6,7 +6,7 @@#define pr_fmt (fmt) "GICv3: " fmt -#include <linux/dma-iommu.h> +#include <linux/iommu.h> #include <linux/irq.h> #include <linux/irqdomain.h> #include <linux/kernel.h>
drivers/irqchip/irq-ls-scfg-msi.c +1 -1
@@ -11,6 +11,7 @@#include <linux/module.h> #include <linux/msi.h> #include <linux/interrupt.h> +#include <linux/iommu.h> #include <linux/irq.h> #include <linux/irqchip/chained_irq.h> #include <linux/irqdomain.h>
@@ -18,7 +19,6 @@#include <linux/of_pci.h> #include <linux/of_platform.h> #include <linux/spinlock.h> -#include <linux/dma-iommu.h> #define MSI_IRQS_PER_MSIR 32#define MSI_MSIR_OFFSET 4
drivers/vfio/vfio_iommu_type1.c +0 -1
@@ -37,7 +37,6 @@#include <linux/vfio.h> #include <linux/workqueue.h> #include <linux/notifier.h> -#include <linux/dma-iommu.h> #include <linux/irqdomain.h> #include "vfio.h"
include/linux/dma-iommu.h +0 -40
@@ -15,27 +15,10 @@/* Domain management interface for IOMMU drivers */ int iommu_get_dma_cookie (struct iommu_domain *domain); -int iommu_get_msi_cookie (struct iommu_domain *domain,dma_addr_t base);void iommu_put_dma_cookie (struct iommu_domain *domain); -/* Setup call for arch DMA mapping code */ -void iommu_setup_dma_ops (struct device *dev,u64 dma_base,u64 dma_limit);int iommu_dma_init_fq (struct iommu_domain *domain); -/* The DMA API isn't _quite_ the whole story, though... */ -/* -* iommu_dma_prepare_msi() - Map the MSI page in the IOMMU device -* -* The MSI page will be stored in @desc. -* -* Return: 0 on success otherwise an error describing the failure. -*/ -int iommu_dma_prepare_msi (struct msi_desc *desc,phys_addr_t msi_addr); - -/* Update the MSI message if required. */ -void iommu_dma_compose_msi_msg (struct msi_desc *desc, -struct msi_msg *msg); -void iommu_dma_get_resv_regions (struct device *dev,struct list_head *list); void iommu_dma_free_cpu_cached_iovas(unsigned int cpu,
@@ -46,15 +29,8 @@ extern bool iommu_dma_forcedac;#else /* CONFIG_IOMMU_DMA */ struct iommu_domain ; -struct msi_desc ; -struct msi_msg ;struct device ; -static inline void iommu_setup_dma_ops (struct device *dev,u64 dma_base, -u64 dma_limit) -{ -} -static inline int iommu_dma_init_fq (struct iommu_domain *domain) {return -EINVAL ;
@@ -65,26 +41,10 @@ static inline int iommu_get_dma_cookie(struct iommu_domain *domain)return -ENODEV ; } -static inline int iommu_get_msi_cookie (struct iommu_domain *domain,dma_addr_t base) -{ -return -ENODEV ; -} -static inline void iommu_put_dma_cookie (struct iommu_domain *domain) { } -static inline int iommu_dma_prepare_msi (struct msi_desc *desc, -phys_addr_t msi_addr) -{ -return 0 ; -} - -static inline void iommu_dma_compose_msi_msg (struct msi_desc *desc, -struct msi_msg *msg) -{ -} -static inline void iommu_dma_get_resv_regions (struct device *dev,struct list_head *list) { }
include/linux/iommu.h +36 -0
@@ -1059,4 +1059,40 @@ void iommu_debugfs_setup(void);static inline void iommu_debugfs_setup (void ) {}#endif +#ifdef CONFIG_IOMMU_DMA +#include <linux/msi.h> + +/* Setup call for arch DMA mapping code */ +void iommu_setup_dma_ops (struct device *dev,u64 dma_base,u64 dma_limit); + +int iommu_get_msi_cookie (struct iommu_domain *domain,dma_addr_t base); + +int iommu_dma_prepare_msi (struct msi_desc *desc,phys_addr_t msi_addr); +void iommu_dma_compose_msi_msg (struct msi_desc *desc,struct msi_msg *msg); + +#else /* CONFIG_IOMMU_DMA */ + +struct msi_desc ; +struct msi_msg ; + +static inline void iommu_setup_dma_ops (struct device *dev,u64 dma_base,u64 dma_limit) +{ +} + +static inline int iommu_get_msi_cookie (struct iommu_domain *domain,dma_addr_t base) +{ +return -ENODEV ; +} + +static inline int iommu_dma_prepare_msi (struct msi_desc *desc,phys_addr_t msi_addr) +{ +return 0 ; +} + +static inline void iommu_dma_compose_msi_msg (struct msi_desc *desc,struct msi_msg *msg) +{ +} + +#endif /* CONFIG_IOMMU_DMA */ +#endif /* __LINUX_IOMMU_H */
Signature · 1 line
2.36.1.dirty
Re: [PATCH 2/3] iommu/dma: Move public interfaces to linux/iommu.h
Quoted 14 lines · Robin Murphy
The iommu-dma layer is now mostly encapsulated by
iommu_dma_ops, with only a couple more public interfaces left pertaining to MSI integration. Since these depend on the main IOMMU API header anyway, move their declarations there, taking the opportunity to update the half-baked comments to proper kerneldoc along the way.Signed-off-by Robin Murphy <[email protected]>---
Note that
iommu_setup_dma_ops()should also become internal in a future phase of the great IOMMU API upheaval - for now as the last bit of true arch code glue I consider it more "necessarily exposed" than "public".
Quoted 10 lines
arch/arm64/mm/dma-mapping.c | 2 +- drivers/iommu/dma-iommu.c | 15 ++++++++++-- drivers/irqchip/irq-gic-v2m.c | 2 +- drivers/irqchip/irq-gic-v3-its.c | 2 +- drivers/irqchip/irq-gic-v3-mbi.c | 2 +- drivers/irqchip/irq-ls-scfg-msi.c | 2 +- drivers/vfio/vfio_iommu_type1.c | 1 - include/linux/dma-iommu.h | 40 ------------------------------- include/linux/iommu.h | 36 ++++++++++++++++++++++++++++ 9 files changed, 54 insertions(+), 48 deletions(-)
For the irqchip side:
M.
Signature · 1 line
Without deviation from the norm, progress is not possible.
Re: [PATCH 2/3] iommu/dma: Move public interfaces to linux/iommu.h
In reply to Robin Murphyinclude/linux/iommu.h void iommu_debugfs_setup(void); · line 1063
Quoted 10 lines
include/linux/iommu.h +2
-0@@ -1059,4 +1059,40 @@ void iommu_debugfs_setup(void);static inline void iommu_debugfs_setup (void ) {}#endif +#ifdef CONFIG_IOMMU_DMA +#include <linux/msi.h>
I don't think msi.h is actually needed here.
Just make the struct msi_desc and struct msi_msg forward declarations unconditional and we should be fine.
Robin Murphy
maintainerRe: [PATCH 2/3] iommu/dma: Move public interfaces to linux/iommu.h
Quoted 8 lines · Christoph Hellwig
Quoted 8 lines
include/linux/iommu.h +0
-0@@ -1059,4 +1059,40 @@ void iommu_debugfs_setup(void);static inline void iommu_debugfs_setup (void ) {}#endif
Quoted 7 lines
include/linux/iommu.h void iommu_debugfs_setup(void); · line 1063
Quoted 2 lines
include/linux/iommu.h +2
-0+#ifdef CONFIG_IOMMU_DMA +#include <linux/msi.h> I don't think
msi.his actually needed here.Just make the struct
msi_descand structmsi_msgforward declarations unconditional and we should be fine.
dma-iommu.c still needs to pick up msi.h for the actual definitions somehow, so it seemed logical to keep things the same shape as before. However I don't have a particularly strong preference either way.
Thanks,
Robin.
Re: [PATCH 2/3] iommu/dma: Move public interfaces to linux/iommu.h
In reply to Robin MurphyQuoted 6 lines · Robin Murphy
The iommu-dma layer is now mostly encapsulated by
iommu_dma_ops, with only a couple more public interfaces left pertaining to MSI integration. Since these depend on the main IOMMU API header anyway, move their declarations there, taking the opportunity to update the half-baked comments to proper kerneldoc along the way.
Quoted 8 lines
Signed-off-by Robin Murphy <[email protected]>---
Note that
iommu_setup_dma_ops()should also become internal in a future phase of the great IOMMU API upheaval - for now as the last bit of true arch code glue I consider it more "necessarily exposed" than "public".arch/arm64/mm/dma-mapping.c | 2 +-
And here:
Robin Murphy
maintainerPATCH 3/3 iommu/dma: Make header private
In reply to Robin MurphyNow that dma-iommu.h only contains internal interfaces, make it private to the IOMMU subsytem.
---
drivers/acpi/viot.c | 1 -
drivers/gpu/drm/exynos/exynos_drm_dma.c | 1 -
drivers/iommu/amd/iommu.c | 2 +-
drivers/iommu/apple-dart.c | 3 ++-
drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 2 +-
drivers/iommu/arm/arm-smmu/arm-smmu.c | 2 +-
drivers/iommu/dma-iommu.c | 3 ++-
{include/linux => drivers/iommu}/dma-iommu.h | 17 +----------------
drivers/iommu/intel/iommu.c | 2 +-
drivers/iommu/iommu.c | 3 ++-
drivers/iommu/virtio-iommu.c | 3 ++-
11 files changed, 13 insertions(+), 26 deletions(-)
rename {include/linux => drivers/iommu}/dma-iommu.h (67%)drivers/acpi/viot.c +0 -1
@@ -19,7 +19,6 @@#define pr_fmt (fmt) "ACPI: VIOT: " fmt#include <linux/acpi_viot.h> -#include <linux/dma-iommu.h> #include <linux/fwnode.h> #include <linux/iommu.h> #include <linux/list.h>
drivers/gpu/drm/exynos/exynos_drm_dma.c +0 -1
@@ -4,7 +4,6 @@// Author: Inki Dae <[email protected]> // Author: Andrzej Hajda <[email protected]> -#include <linux/dma-iommu.h> #include <linux/dma-map-ops.h> #include <linux/iommu.h> #include <linux/platform_device.h>
drivers/iommu/amd/iommu.c +1 -1
@@ -18,7 +18,6 @@#include <linux/scatterlist.h> #include <linux/dma-map-ops.h> #include <linux/dma-direct.h> -#include <linux/dma-iommu.h> #include <linux/iommu-helper.h> #include <linux/delay.h> #include <linux/amd-iommu.h>
@@ -40,6 +39,7 @@#include <asm/dma.h> #include "amd_iommu.h" +#include "../dma-iommu.h" #include "../irq_remapping.h" #define CMD_SET_TYPE (cmd, t) ((cmd)->data[1] |= ((t) << 28))
drivers/iommu/apple-dart.c +2 -1
@@ -15,7 +15,6 @@#include <linux/bitfield.h> #include <linux/clk.h> #include <linux/dev_printk.h> -#include <linux/dma-iommu.h> #include <linux/dma-mapping.h> #include <linux/err.h> #include <linux/interrupt.h>
@@ -33,6 +32,8 @@#include <linux/swab.h> #include <linux/types.h> +#include "dma-iommu.h" +#define DART_MAX_STREAMS 16#define DART_MAX_TTBR 4#define MAX_DARTS_PER_DEVICE 2
drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c +1 -1
@@ -14,7 +14,6 @@#include <linux/bitops.h> #include <linux/crash_dump.h> #include <linux/delay.h> -#include <linux/dma-iommu.h> #include <linux/err.h> #include <linux/interrupt.h> #include <linux/io-pgtable.h>
@@ -29,6 +28,7 @@#include <linux/platform_device.h> #include "arm-smmu-v3.h" +#include "../../dma-iommu.h" #include "../../iommu-sva-lib.h" static bool disable_bypass = true;
drivers/iommu/arm/arm-smmu/arm-smmu.c +1 -1
@@ -21,7 +21,6 @@#include <linux/acpi_iort.h> #include <linux/bitfield.h> #include <linux/delay.h> -#include <linux/dma-iommu.h> #include <linux/dma-mapping.h> #include <linux/err.h> #include <linux/interrupt.h>
@@ -40,6 +39,7 @@#include <linux/fsl/mc.h> #include "arm-smmu.h" +#include "../../dma-iommu.h" /* * Apparently, some Qualcomm arm64 platforms which appear to expose their SMMU
drivers/iommu/dma-iommu.c +2 -1
@@ -13,7 +13,6 @@#include <linux/crash_dump.h> #include <linux/device.h> #include <linux/dma-direct.h> -#include <linux/dma-iommu.h> #include <linux/dma-map-ops.h> #include <linux/gfp.h> #include <linux/huge_mm.h>
@@ -30,6 +29,8 @@#include <linux/swiotlb.h> #include <linux/vmalloc.h> +#include "dma-iommu.h" +struct iommu_dma_msi_page {struct list_head list;dma_addr_t iova;
drivers/iommu/dma-iommu.h renamed from include/linux/dma-iommu.h +1 -16
@@ -5,15 +5,10 @@#ifndef __DMA_IOMMU_H#define __DMA_IOMMU_H -#include <linux/errno.h> -#include <linux/types.h> +#include <linux/iommu.h> #ifdef CONFIG_IOMMU_DMA -#include <linux/dma-mapping.h> -#include <linux/iommu.h> -#include <linux/msi.h> -/* Domain management interface for IOMMU drivers */ int iommu_get_dma_cookie (struct iommu_domain *domain);void iommu_put_dma_cookie (struct iommu_domain *domain);
@@ -21,16 +16,10 @@ int iommu_dma_init_fq(struct iommu_domain *domain);void iommu_dma_get_resv_regions (struct device *dev,struct list_head *list); -void iommu_dma_free_cpu_cached_iovas (unsigned int cpu, -struct iommu_domain *domain); -extern bool iommu_dma_forcedac;#else /* CONFIG_IOMMU_DMA */ -struct iommu_domain ; -struct device ; -static inline int iommu_dma_init_fq (struct iommu_domain *domain) {return -EINVAL ;
@@ -45,9 +34,5 @@ static inline void iommu_put_dma_cookie(struct iommu_domain *domain) { } -static inline void iommu_dma_get_resv_regions (struct device *dev,struct list_head *list) -{ -} -#endif /* CONFIG_IOMMU_DMA */ #endif /* __DMA_IOMMU_H */
drivers/iommu/intel/iommu.c +1 -1
@@ -15,7 +15,6 @@#include <linux/crash_dump.h> #include <linux/dma-direct.h> -#include <linux/dma-iommu.h> #include <linux/dmi.h> #include <linux/intel-svm.h> #include <linux/memory.h>
@@ -26,6 +25,7 @@#include <linux/tboot.h> #include "iommu.h" +#include "../dma-iommu.h" #include "../irq_remapping.h" #include "../iommu-sva-lib.h" #include "pasid.h"
drivers/iommu/iommu.c +2 -1
@@ -8,7 +8,6 @@#include <linux/amba/bus.h> #include <linux/device.h> -#include <linux/dma-iommu.h> #include <linux/kernel.h> #include <linux/bits.h> #include <linux/bug.h>
@@ -30,6 +29,8 @@#include <linux/cc_platform.h> #include <trace/events/iommu.h> +#include "dma-iommu.h" +static struct kset *iommu_group_kset;static DEFINE_IDA (iommu_group_ida);
drivers/iommu/virtio-iommu.c +2 -1
@@ -8,7 +8,6 @@#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt#include <linux/delay.h> -#include <linux/dma-iommu.h> #include <linux/dma-map-ops.h> #include <linux/freezer.h> #include <linux/interval_tree.h>
@@ -23,6 +22,8 @@#include <uapi/linux/virtio_iommu.h> +#include "dma-iommu.h" +#define MSI_IOVA_BASE 0x8000000#define MSI_IOVA_LENGTH 0x100000
Signature · 1 line
2.36.1.dirty
Quoted 4 lines · Robin Murphy
Robin Murphy (3):
iommu/dma: Clean upKconfig
iommu/dma: Move public interfaces tolinux/iommu.hiommu/dma: Make header private
Applied, thanks.
Quoted 1 line
include/linux/dma-iommu.h | 93 ---------------------
Squashed the updated file path in MAINTAINERS into the last patch.