lkml.org 
[lkml]   [2015]   [May]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH 19/22] iommu/amd: Put IOMMUv2 devices in a direct mapped domain
Date
From: Joerg Roedel <jroedel@suse.de>

A device that might be used for HSA needs to be in a direct
mapped domain so that all DMA-API mappings stay alive when
the IOMMUv2 stack is used.

Signed-off-by: Joerg Roedel <jroedel@suse.de>
---
drivers/iommu/amd_iommu.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
index 33bbb4d..8682786 100644
--- a/drivers/iommu/amd_iommu.c
+++ b/drivers/iommu/amd_iommu.c
@@ -2253,6 +2253,8 @@ static void detach_device(struct device *dev)

static int amd_iommu_add_device(struct device *dev)
{
+ struct iommu_dev_data *dev_data;
+ struct iommu_domain *domain;
struct amd_iommu *iommu;
u16 devid;
int ret;
@@ -2270,7 +2272,18 @@ static int amd_iommu_add_device(struct device *dev)
}
init_iommu_group(dev);

- dev->archdata.dma_ops = &amd_iommu_dma_ops;
+ dev_data = get_dev_data(dev);
+ if (dev_data && dev_data->iommu_v2)
+ iommu_request_dm_for_dev(dev);
+
+ /* Domains are initialized for this device - have a look what we ended up with */
+ domain = iommu_get_domain_for_dev(dev);
+ if (domain->type == IOMMU_DOMAIN_IDENTITY) {
+ dev_data->passthrough = true;
+ dev->archdata.dma_ops = &nommu_dma_ops;
+ } else {
+ dev->archdata.dma_ops = &amd_iommu_dma_ops;
+ }

out:
iommu_completion_wait(iommu);
--
1.9.1


\
 
 \ /
  Last update: 2015-05-28 19:21    [W:0.150 / U:2.672 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site