diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2016-08-03 21:12:52 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-08-03 21:12:51 -0700 |
| commit | 1ecb9eaec78fbaa3187574c347165bb70e54fef3 (patch) | |
| tree | bfcf1f2f106244f513036743a4e630f5cc8fe2b2 | |
| parent | 4cffd9684d63cfa85c262617213d45f7d8b02c41 (diff) | |
| parent | 7debeac5bbacb258d41a3f2a5203e6cb4277a99e (diff) | |
Merge "arm64: dma-mapping: don't clear dma ops on bypass detach"
| -rw-r--r-- | arch/arm64/mm/dma-mapping.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c index 416b2afc6555..06f9ffccd562 100644 --- a/arch/arm64/mm/dma-mapping.c +++ b/arch/arm64/mm/dma-mapping.c @@ -2147,7 +2147,7 @@ EXPORT_SYMBOL(arm_iommu_attach_device); void arm_iommu_detach_device(struct device *dev) { struct dma_iommu_mapping *mapping; - int is_fast; + int is_fast, s1_bypass = 0; mapping = to_dma_iommu_mapping(dev); if (!mapping) { @@ -2161,10 +2161,14 @@ void arm_iommu_detach_device(struct device *dev) return; } + iommu_domain_get_attr(mapping->domain, DOMAIN_ATTR_S1_BYPASS, + &s1_bypass); + iommu_detach_device(mapping->domain, dev); kref_put(&mapping->kref, release_iommu_mapping); dev->archdata.mapping = NULL; - set_dma_ops(dev, NULL); + if (!s1_bypass) + set_dma_ops(dev, NULL); pr_debug("Detached IOMMU controller from %s device.\n", dev_name(dev)); } |
