|
@@ -1953,6 +1953,7 @@ static void __unmap_single(struct dma_ops_domain *dma_dom,
|
|
|
size_t size,
|
|
|
int dir)
|
|
|
{
|
|
|
+ dma_addr_t flush_addr;
|
|
|
dma_addr_t i, start;
|
|
|
unsigned int pages;
|
|
|
|
|
@@ -1960,6 +1961,7 @@ static void __unmap_single(struct dma_ops_domain *dma_dom,
|
|
|
(dma_addr + size > dma_dom->aperture_size))
|
|
|
return;
|
|
|
|
|
|
+ flush_addr = dma_addr;
|
|
|
pages = iommu_num_pages(dma_addr, size, PAGE_SIZE);
|
|
|
dma_addr &= PAGE_MASK;
|
|
|
start = dma_addr;
|
|
@@ -1974,7 +1976,7 @@ static void __unmap_single(struct dma_ops_domain *dma_dom,
|
|
|
dma_ops_free_addresses(dma_dom, dma_addr, pages);
|
|
|
|
|
|
if (amd_iommu_unmap_flush || dma_dom->need_flush) {
|
|
|
- iommu_flush_pages(&dma_dom->domain, dma_addr, size);
|
|
|
+ iommu_flush_pages(&dma_dom->domain, flush_addr, size);
|
|
|
dma_dom->need_flush = false;
|
|
|
}
|
|
|
}
|