Thread (65 messages) 65 messages, 8 authors, 2021-08-03

Re: [PATCH v2 01/24] iommu: Pull IOVA cookie management into the core

From: Lu Baolu <baolu.lu@linux.intel.com>
Date: 2021-07-30 06:09:07
Also in: linux-iommu, lkml

On 7/28/21 11:58 PM, Robin Murphy wrote:
quoted hunk ↗ jump to hunk
Now that everyone has converged on iommu-dma for IOMMU_DOMAIN_DMA
support, we can abandon the notion of drivers being responsible for the
cookie type, and consolidate all the management into the core code.

CC: Marek Szyprowski <m.szyprowski@samsung.com>
CC: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
CC: Geert Uytterhoeven <geert+renesas@glider.be>
CC: Yong Wu <yong.wu@mediatek.com>
CC: Heiko Stuebner <heiko@sntech.de>
CC: Chunyan Zhang <redacted>
CC: Chunyan Zhang <redacted>
CC: Maxime Ripard <mripard@kernel.org>
CC: Jean-Philippe Brucker <redacted>
Signed-off-by: Robin Murphy <robin.murphy@arm.com>
---
  drivers/iommu/iommu.c | 7 +++++++
  include/linux/iommu.h | 3 ++-
  2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
index f2cda9950bd5..ea5a9ea8d431 100644
--- a/drivers/iommu/iommu.c
+++ b/drivers/iommu/iommu.c
@@ -7,6 +7,7 @@
  #define pr_fmt(fmt)    "iommu: " fmt
  
  #include <linux/device.h>
+#include <linux/dma-iommu.h>
  #include <linux/kernel.h>
  #include <linux/bits.h>
  #include <linux/bug.h>
@@ -1946,6 +1947,11 @@ static struct iommu_domain *__iommu_domain_alloc(struct bus_type *bus,
  	/* Assume all sizes by default; the driver may override this later */
  	domain->pgsize_bitmap  = bus->iommu_ops->pgsize_bitmap;
  
+	/* Temporarily ignore -EEXIST while drivers still get their own cookies */
+	if (type == IOMMU_DOMAIN_DMA && iommu_get_dma_cookie(domain) == -ENOMEM) {
+		iommu_domain_free(domain);
+		domain = NULL;
+	}
  	return domain;
  }
  
@@ -1957,6 +1963,7 @@ EXPORT_SYMBOL_GPL(iommu_domain_alloc);
  
  void iommu_domain_free(struct iommu_domain *domain)
  {
+	iommu_put_dma_cookie(domain);
  	domain->ops->domain_free(domain);
  }
  EXPORT_SYMBOL_GPL(iommu_domain_free);
diff --git a/include/linux/iommu.h b/include/linux/iommu.h
index 4997c78e2670..141779d76035 100644
--- a/include/linux/iommu.h
+++ b/include/linux/iommu.h
@@ -40,6 +40,7 @@ struct iommu_domain;
  struct notifier_block;
  struct iommu_sva;
  struct iommu_fault_event;
+struct iommu_dma_cookie;
  
  /* iommu fault flags */
  #define IOMMU_FAULT_READ	0x0
@@ -86,7 +87,7 @@ struct iommu_domain {
  	iommu_fault_handler_t handler;
  	void *handler_token;
  	struct iommu_domain_geometry geometry;
-	void *iova_cookie;
+	struct iommu_dma_cookie *iova_cookie;
  };
  
  enum iommu_cap {
Reviewed-by: Lu Baolu <baolu.lu@linux.intel.com>

Best regards,
baolu

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help