Skip to content

Commit

Permalink
ARM: dma-mapping: avoid calling dma_cache_maint_page() on dev=>cpu
Browse files Browse the repository at this point in the history
Avoid calling dma_cache_maint_page() when unmapping a DMA_TO_DEVICE
buffer.  The L1 cache ops never do anything in this circumstance, nor
do they ever need to - all that matters for this case is that the data
written is visible to the device before DMA starts.  What happens during
the transfer (provided the buffer is not written to) is of no real
consequence.

We already do this optimisation for the L2 cache.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
  • Loading branch information
Russell King committed May 22, 2014
1 parent 86f4062 commit deace4a
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions arch/arm/mm/dma-mapping.c
Original file line number Diff line number Diff line change
Expand Up @@ -904,11 +904,12 @@ static void __dma_page_dev_to_cpu(struct page *page, unsigned long off,
unsigned long paddr = page_to_phys(page) + off;

/* FIXME: non-speculating: not required */
/* don't bother invalidating if DMA to device */
if (dir != DMA_TO_DEVICE)
/* in any case, don't bother invalidating if DMA to device */
if (dir != DMA_TO_DEVICE) {
outer_inv_range(paddr, paddr + size);

dma_cache_maint_page(page, off, size, dir, dmac_unmap_area);
dma_cache_maint_page(page, off, size, dir, dmac_unmap_area);
}

/*
* Mark the D-cache clean for these pages to avoid extra flushing.
Expand Down

0 comments on commit deace4a

Please sign in to comment.