Merge "arm64: dma-mapping: optimize unmap coherency check"

This commit is contained in:
Linux Build Service Account 2017-03-10 02:07:10 -08:00 committed by Gerrit - the friendly Code Review server
commit c03b5c2d1c
2 changed files with 10 additions and 3 deletions

View file

@ -132,6 +132,11 @@ DMA_ATTR_FORCE_COHERENT
When passed to a DMA map call the DMA_ATTR_FORCE_COHERENT DMA
attribute can be used to force a buffer to be mapped as IO coherent.
When the DMA_ATTR_FORCE_COHERENT attribute is set during a map call ensure
that it is also set during for the matching unmap call to ensure that the
correct cache maintenance is carried out.
This DMA attribute is only currently supported for arm64 stage 1 IOMMU
mappings.
@ -143,5 +148,9 @@ coherent.
The DMA_ATTR_FORCE_NON_COHERENT DMA attribute overrides the buffer IO
coherency configuration set by making the device IO coherent.
When the DMA_ATTR_FORCE_NON_COHERENT attribute is set during a map call
ensure that it is also set during for the matching unmap call to ensure
that the correct cache maintenance is carried out.
This DMA attribute is only currently supported for arm64 stage 1 IOMMU
mappings.

View file

@ -1821,10 +1821,8 @@ static void arm_iommu_unmap_page(struct device *dev, dma_addr_t handle,
mapping->domain, iova));
int offset = handle & ~PAGE_MASK;
int len = PAGE_ALIGN(size + offset);
bool iova_coherent = iommu_is_iova_coherent(mapping->domain,
handle);
if (!(iova_coherent ||
if (!(is_dma_coherent(dev, attrs) ||
dma_get_attr(DMA_ATTR_SKIP_CPU_SYNC, attrs)))
__dma_page_dev_to_cpu(page, offset, size, dir);