Skip to contentSkip to conversation

iommu/dma: Some housekeeping

PATCH Applied Robin Murphy 6 participants 13 messages Aug 16, 2022 – May 5, 2023

Subsystems (17)
lore
Share & tools
lore

Robin Murphy

author maintainer
#0 lore raw

cover 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
author maintainer
#1 lore raw

PATCH 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
index 571cc234d0b3..59af600445c2 100644
@@ -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
index 5c5cb5bee8b6..1d99c2d984fb 100644
@@ -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
index a3cbafb603f5..9b5fc3356bf2 100644
@@ -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
index 39a06d245f12..c48005147ac5 100644
@@ -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
maintainer Acked-by on v1 1/3
#2 lore raw

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 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 -

For this change:

#3 lore raw

Re: [PATCH 1/3] iommu/dma: Clean up Kconfig

In reply to Robin Murphy
Quoted 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 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
index 571cc234d0b3..59af600445c2 100644
@@ -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 +0 -0
index 5c5cb5bee8b6..1d99c2d984fb 100644

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

author maintainer
#4 lore raw

Re: [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 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
index 571cc234d0b3..59af600445c2 100644
@@ -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 +0 -0
index 5c5cb5bee8b6..1d99c2d984fb 100644
@@ -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 || X86

Robin, 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.

#5 lore raw

Re: [PATCH 1/3] iommu/dma: Clean up Kconfig

Quoted 13 lines · Robin Murphy
Quoted 4 lines
Quoted 4 lines
drivers/iommu/Kconfig +0 -0
index 5c5cb5bee8b6..1d99c2d984fb 100644
Quoted 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 || X86

Robin, do you remember why you added IA64 here? What is the Itanimum IOMMU driver?

Quoted 5 lines

config INTEL_IOMMU

	bool "Support for Intel IOMMU using DMA Remapping Devices"
	depends on PCI_MSI && ACPI && (X86 || IA64)

Yes, really :)

Wowo, thanks!

Jason

author maintainer
#6 lore raw

PATCH 2/3 iommu/dma: Move public interfaces to linux/iommu.h

In reply to 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.

---

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
index 599cf81f5685..7d7e9a046305 100644
@@ -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
index 17dd683b2fce..6809b33ac9df 100644
@@ -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
index b249d4df899e..6e1ac330d7a6 100644
@@ -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
index 5ff09de6c48f..e7d8d4208ee6 100644
@@ -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
index a2163d32f17d..e1efdec9e9ac 100644
@@ -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
index b4927e425f7b..527c90e0920e 100644
@@ -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
index c766aa683110..e65861fdba7b 100644
@@ -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
index 24607dc3c2ac..e83de4f1f3d6 100644
@@ -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
index 70393fbb57ed..79cb6eb560a8 100644
@@ -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
maintainer Acked-by on v1 2/3
#7 lore raw

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.

---

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.
#8 lore raw

Re: [PATCH 2/3] iommu/dma: Move public interfaces to linux/iommu.h

In reply to Robin Murphy

include/linux/iommu.h void iommu_debugfs_setup(void); · line 1063

Quoted 10 lines
include/linux/iommu.h +2 -0
index 70393fbb57ed..79cb6eb560a8 100644
@@ -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.

author maintainer
#9 lore raw

Re: [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
index 70393fbb57ed..79cb6eb560a8 100644
@@ -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.h is actually needed here.

Just make the struct msi_desc and struct msi_msg forward 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.

maintainer Acked-by on v1 2/3
#10 lore raw

Re: [PATCH 2/3] iommu/dma: Move public interfaces to linux/iommu.h

In reply to Robin Murphy
Quoted 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

---

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:

author maintainer
#11 lore raw

PATCH 3/3 iommu/dma: Make header private

In reply to Robin Murphy

Now 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
index 6132092dab2a..ed752cbbe636 100644
@@ -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
index d819ee69dfb7..7012aa8ed4c6 100644
@@ -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
index 2df1bfa884e5..b339bf13259d 100644
@@ -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
index ed6b5fa538af..716f34a768b1 100644
@@ -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
index c13b46a15dcb..f1785e518a90 100644
@@ -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
index 2cece34f4824..c30f82c19240 100644
@@ -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
index 6809b33ac9df..9297b741f5e8 100644
@@ -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
similarity index 67%
rename from include/linux/dma-iommu.h
rename to drivers/iommu/dma-iommu.h
index e83de4f1f3d6..c6d0235feb6e 100644
@@ -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
index 9441c070c811..4375d1ee9389 100644
@@ -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
index 07eda7c41aee..862d4e73efd2 100644
@@ -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
index bdae3939260a..e355cb5d1e5b 100644
@@ -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
maintainer Applied
#12 lore raw
In reply to Robin Murphy
Quoted 4 lines · Robin Murphy

Robin Murphy (3):
iommu/dma: Clean up Kconfig
iommu/dma: Move public interfaces to linux/iommu.h iommu/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.