summaryrefslogtreecommitdiffstats
path: root/drivers/iommu/dma-iommu.c
diff options
context:
space:
mode:
authorJoerg Roedel <jroedel@suse.de>2019-08-30 16:12:10 +0200
committerJoerg Roedel <jroedel@suse.de>2019-08-30 16:12:10 +0200
commit4c008893415385a0941bbb626c666620a4d7ab00 (patch)
tree979d6ef8540d1c16369679f354c06580eaadb639 /drivers/iommu/dma-iommu.c
parentiommu/mediatek: Clean up struct mtk_smi_iommu (diff)
parentMerge branch 'for-joerg/arm-smmu/updates' of git://git.kernel.org/pub/scm/lin... (diff)
downloadlinux-4c008893415385a0941bbb626c666620a4d7ab00.tar.xz
linux-4c008893415385a0941bbb626c666620a4d7ab00.zip
Merge branch 'arm/smmu' into arm/mediatek
Diffstat (limited to 'drivers/iommu/dma-iommu.c')
-rw-r--r--drivers/iommu/dma-iommu.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c
index f68a62c3c32b..de68b4a02aea 100644
--- a/drivers/iommu/dma-iommu.c
+++ b/drivers/iommu/dma-iommu.c
@@ -444,13 +444,18 @@ static void __iommu_dma_unmap(struct device *dev, dma_addr_t dma_addr,
struct iommu_dma_cookie *cookie = domain->iova_cookie;
struct iova_domain *iovad = &cookie->iovad;
size_t iova_off = iova_offset(iovad, dma_addr);
+ struct iommu_iotlb_gather iotlb_gather;
+ size_t unmapped;
dma_addr -= iova_off;
size = iova_align(iovad, size + iova_off);
+ iommu_iotlb_gather_init(&iotlb_gather);
+
+ unmapped = iommu_unmap_fast(domain, dma_addr, size, &iotlb_gather);
+ WARN_ON(unmapped != size);
- WARN_ON(iommu_unmap_fast(domain, dma_addr, size) != size);
if (!cookie->fq_domain)
- iommu_tlb_sync(domain);
+ iommu_tlb_sync(domain, &iotlb_gather);
iommu_dma_free_iova(cookie, dma_addr, size);
}