Merge "arm64: dma-mapping: optimize unmap coherency check"
This commit is contained in:
commit
c03b5c2d1c
2 changed files with 10 additions and 3 deletions
|
@ -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.
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue