All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tom Murphy <murphyt7@tcd.ie>
To: iommu@lists.linux-foundation.org
Cc: Heiko Stuebner <heiko@sntech.de>,
	Will Deacon <will.deacon@arm.com>,
	virtualization@lists.linux-foundation.org,
	David Brown <david.brown@linaro.org>,
	Thierry Reding <thierry.reding@gmail.com>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	linux-s390@vger.kernel.org, linux-samsung-soc@vger.kernel.org,
	Jean-Philippe Brucker <jean-philippe.brucker@arm.com>,
	Joerg Roedel <joro@8bytes.org>,
	Krzysztof Kozlowski <krzk@kernel.org>,
	Jonathan Hunter <jonathanh@nvidia.com>,
	linux-rockchip@lists.infradead.org,
	Andy Gross <agross@kernel.org>,
	Gerald Schaefer <gerald.schaefer@de.ibm.com>,
	linux-tegra@vger.kernel.org, linux-arm-msm@vger.kernel.org,
	linux-mediatek@lists.infradead.org,
	Matthias Brugger <matthias.bgg@gmail.com>,
	linux-arm-kernel@lists.infradead.org,
	Robin Murphy <robin.murphy@arm.com>,
	linux-kernel@vger.kernel.org, Tom Murphy <murphyt7@tcd.ie>,
	Rob Clark <robdclark@gmai>
Subject: [PATCH v4 3/5] iommu/dma-iommu: Handle deferred devices
Date: Thu, 13 Jun 2019 23:38:58 +0100	[thread overview]
Message-ID: <20190613223901.9523-4-murphyt7__2422.69698517106$1563995191$gmane$org@tcd.ie> (raw)
In-Reply-To: <20190613223901.9523-1-murphyt7@tcd.ie>

Handle devices which defer their attach to the iommu in the dma-iommu api

Signed-off-by: Tom Murphy <murphyt7@tcd.ie>
---
 drivers/iommu/dma-iommu.c | 27 ++++++++++++++++++++++++++-
 1 file changed, 26 insertions(+), 1 deletion(-)

diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c
index e64dbbcde63c..f303bbe20e51 100644
--- a/drivers/iommu/dma-iommu.c
+++ b/drivers/iommu/dma-iommu.c
@@ -22,6 +22,7 @@
 #include <linux/pci.h>
 #include <linux/scatterlist.h>
 #include <linux/vmalloc.h>
+#include <linux/crash_dump.h>
 
 struct iommu_dma_msi_page {
 	struct list_head	list;
@@ -351,6 +352,21 @@ static int iommu_dma_init_domain(struct iommu_domain *domain, dma_addr_t base,
 	return iova_reserve_iommu_regions(dev, domain);
 }
 
+static int handle_deferred_device(struct device *dev,
+	struct iommu_domain *domain)
+{
+	const struct iommu_ops *ops = domain->ops;
+
+	if (!is_kdump_kernel())
+		return 0;
+
+	if (unlikely(ops->is_attach_deferred &&
+		ops->is_attach_deferred(domain, dev)))
+		return iommu_attach_device(domain, dev);
+
+	return 0;
+}
+
 /**
  * dma_info_to_prot - Translate DMA API directions and attributes to IOMMU API
  *                    page flags.
@@ -462,6 +478,9 @@ static dma_addr_t __iommu_dma_map(struct device *dev, phys_addr_t phys,
 	size_t iova_off = 0;
 	dma_addr_t iova;
 
+	if (unlikely(handle_deferred_device(dev, domain)))
+		return DMA_MAPPING_ERROR;
+
 	if (cookie->type == IOMMU_DMA_IOVA_COOKIE) {
 		iova_off = iova_offset(&cookie->iovad, phys);
 		size = iova_align(&cookie->iovad, size + iova_off);
@@ -583,6 +602,9 @@ static void *iommu_dma_alloc_remap(struct device *dev, size_t size,
 
 	*dma_handle = DMA_MAPPING_ERROR;
 
+	if (unlikely(handle_deferred_device(dev, domain)))
+		return NULL;
+
 	min_size = alloc_sizes & -alloc_sizes;
 	if (min_size < PAGE_SIZE) {
 		min_size = PAGE_SIZE;
@@ -715,7 +737,7 @@ static dma_addr_t iommu_dma_map_page(struct device *dev, struct page *page,
 	int prot = dma_info_to_prot(dir, coherent, attrs);
 	dma_addr_t dma_handle;
 
-	dma_handle =__iommu_dma_map(dev, phys, size, prot);
+	dma_handle = __iommu_dma_map(dev, phys, size, prot);
 	if (!coherent && !(attrs & DMA_ATTR_SKIP_CPU_SYNC) &&
 	    dma_handle != DMA_MAPPING_ERROR)
 		arch_sync_dma_for_device(dev, phys, size, dir);
@@ -825,6 +847,9 @@ static int iommu_dma_map_sg(struct device *dev, struct scatterlist *sg,
 	unsigned long mask = dma_get_seg_boundary(dev);
 	int i;
 
+	if (unlikely(handle_deferred_device(dev, domain)))
+		return 0;
+
 	if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC))
 		iommu_dma_sync_sg_for_device(dev, sg, nents, dir);
 
-- 
2.20.1

  parent reply	other threads:[~2019-06-13 22:38 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-13 22:38 [PATCH v4 0/5] iommu/amd: Convert the AMD iommu driver to the dma-iommu api Tom Murphy
2019-06-13 22:38 ` Tom Murphy
2019-06-13 22:38 ` Tom Murphy
2019-06-13 22:38 ` Tom Murphy
2019-06-13 22:38 ` [PATCH v4 1/5] iommu/amd: Remove unnecessary locking from AMD iommu driver Tom Murphy
2019-06-13 22:38   ` Tom Murphy
2019-06-13 22:38   ` Tom Murphy
2019-06-13 22:38   ` Tom Murphy
2019-06-13 22:38 ` Tom Murphy
2019-06-13 22:38 ` [PATCH v4 2/5] iommu: Add gfp parameter to iommu_ops::map Tom Murphy
2019-06-13 22:38 ` Tom Murphy [this message]
2019-06-13 22:38 ` [PATCH v4 4/5] iommu/dma-iommu: Use the dev->coherent_dma_mask Tom Murphy
2019-06-13 22:38 ` Tom Murphy
2019-06-13 22:38   ` Tom Murphy
2019-06-13 22:38   ` Tom Murphy
2019-06-13 22:38   ` Tom Murphy
2019-06-13 22:39 ` [PATCH v4 5/5] iommu/amd: Convert AMD iommu driver to the dma-iommu api Tom Murphy
2019-06-13 22:39   ` Tom Murphy
2019-06-13 22:39   ` Tom Murphy
2019-06-13 22:39   ` Tom Murphy
2019-06-13 22:39 ` Tom Murphy
2019-06-24  6:19 ` [PATCH v4 0/5] iommu/amd: Convert the " Christoph Hellwig
     [not found] ` <20190613223901.9523-1-murphyt7-/Zw1syy4LHg@public.gmane.org>
2019-06-13 22:38   ` [PATCH v4 2/5] iommu: Add gfp parameter to iommu_ops::map Tom Murphy
2019-06-13 22:38     ` Tom Murphy
2019-06-13 22:38     ` Tom Murphy
2019-06-13 22:38     ` Tom Murphy
2019-06-13 22:38   ` [PATCH v4 3/5] iommu/dma-iommu: Handle deferred devices Tom Murphy
2019-06-13 22:38     ` Tom Murphy
2019-06-13 22:38     ` Tom Murphy
2019-06-13 22:38     ` Tom Murphy
2019-06-24  6:19   ` [PATCH v4 0/5] iommu/amd: Convert the AMD iommu driver to the dma-iommu api Christoph Hellwig
2019-06-24  6:19     ` Christoph Hellwig
2019-06-24  6:19     ` Christoph Hellwig
2019-06-24  6:19     ` Christoph Hellwig
2019-07-01 12:19     ` Joerg Roedel
2019-07-01 12:19     ` Joerg Roedel
2019-07-01 12:19       ` Joerg Roedel
2019-07-01 12:19       ` Joerg Roedel
2019-07-01 12:19       ` Joerg Roedel
     [not found]     ` <20190624061945.GA4912-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>
2019-08-10  7:19       ` Christoph Hellwig
2019-08-10  7:19         ` Christoph Hellwig
2019-08-10  7:19         ` Christoph Hellwig
2019-08-10  7:19         ` Christoph Hellwig
2019-08-13 12:09         ` Tom Murphy
     [not found]         ` <20190810071952.GA25550-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>
2019-08-13 12:09           ` Tom Murphy
2019-08-13 12:09             ` Tom Murphy
2019-08-13 13:07             ` Christoph Hellwig
2019-08-13 13:07             ` Christoph Hellwig
2019-08-13 13:07               ` Christoph Hellwig
2019-08-13 13:07               ` Christoph Hellwig
2019-08-13 13:07               ` Christoph Hellwig
2019-08-15 11:13               ` Tom Murphy
2019-08-15 11:13                 ` Tom Murphy
2019-08-15 11:13                 ` Tom Murphy
2019-08-15 11:13                 ` Tom Murphy
2019-08-15 11:13               ` Tom Murphy
2019-08-10  7:19     ` Christoph Hellwig

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='20190613223901.9523-4-murphyt7__2422.69698517106$1563995191$gmane$org@tcd.ie' \
    --to=murphyt7@tcd.ie \
    --cc=agross@kernel.org \
    --cc=david.brown@linaro.org \
    --cc=gerald.schaefer@de.ibm.com \
    --cc=heiko@sntech.de \
    --cc=iommu@lists.linux-foundation.org \
    --cc=jean-philippe.brucker@arm.com \
    --cc=jonathanh@nvidia.com \
    --cc=joro@8bytes.org \
    --cc=krzk@kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mediatek@lists.infradead.org \
    --cc=linux-rockchip@lists.infradead.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=linux-samsung-soc@vger.kernel.org \
    --cc=linux-tegra@vger.kernel.org \
    --cc=m.szyprowski@samsung.com \
    --cc=matthias.bgg@gmail.com \
    --cc=robdclark@gmai \
    --cc=robin.murphy@arm.com \
    --cc=thierry.reding@gmail.com \
    --cc=virtualization@lists.linux-foundation.org \
    --cc=will.deacon@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.