diff options
author | Joerg Roedel <jroedel@suse.de> | 2019-08-23 17:41:59 +0200 |
---|---|---|
committer | Joerg Roedel <jroedel@suse.de> | 2019-08-23 17:41:59 +0200 |
commit | dbe8e6a81a2a45dfa210c2c271472db80efaa03f (patch) | |
tree | d8c11ee8159d5730fdd419dc0d463b80757bc314 /drivers/iommu/dma-iommu.c | |
parent | Linux 5.3-rc5 (diff) | |
parent | Merge branches 'for-joerg/arm-smmu/smmu-v2' and 'for-joerg/arm-smmu/smmu-v3' ... (diff) | |
download | linux-dbe8e6a81a2a45dfa210c2c271472db80efaa03f.tar.xz linux-dbe8e6a81a2a45dfa210c2c271472db80efaa03f.zip |
Merge branch 'for-joerg/arm-smmu/updates' of git://git.kernel.org/pub/scm/linux/kernel/git/will/linux into arm/smmu
Diffstat (limited to 'drivers/iommu/dma-iommu.c')
-rw-r--r-- | drivers/iommu/dma-iommu.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c index d991d40f797f..315e0087c19f 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); } |