From: Zhen Lei Date: Wed, 6 Jun 2018 02:18:46 +0000 (+0800) Subject: iommu/amd: make sure TLB to be flushed before IOVA freed X-Git-Tag: v4.19-rc1~21^2^6~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3c120143f584360a13614787e23ae2cdcb5e5ccd;p=thirdparty%2Fkernel%2Flinux.git iommu/amd: make sure TLB to be flushed before IOVA freed Although the mapping has already been removed in the page table, it maybe still exist in TLB. Suppose the freed IOVAs is reused by others before the flush operation completed, the new user can not correctly access to its meomory. Signed-off-by: Zhen Lei Fixes: b1516a14657a ('iommu/amd: Implement flush queue') Signed-off-by: Joerg Roedel --- diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c index e688169721b88..874e6480e3919 100644 --- a/drivers/iommu/amd_iommu.c +++ b/drivers/iommu/amd_iommu.c @@ -2407,9 +2407,9 @@ static void __unmap_single(struct dma_ops_domain *dma_dom, } if (amd_iommu_unmap_flush) { - dma_ops_free_iova(dma_dom, dma_addr, pages); domain_flush_tlb(&dma_dom->domain); domain_flush_complete(&dma_dom->domain); + dma_ops_free_iova(dma_dom, dma_addr, pages); } else { pages = __roundup_pow_of_two(pages); queue_iova(&dma_dom->iovad, dma_addr >> PAGE_SHIFT, pages, 0);