Re: [PATCH/RFC 0/2] ARM: DMA-mapping: new extensions for buffer sharing(part 2)

From: Subash Patel
Date: Wed Jun 06 2012 - 09:45:47 EST


Hello Marek,

Thanks for the patch. We had found below two challenges when using UMM related to the cache invalidate/flush after/before performing the DMA operations:

a) when using HIGH_MEM pages, the page-table walk consumed lot of time to get the KVA of each page. Moreover the overhead was from the spinlock we acquire/release for each of the page.

b) One of my colleague tried to map/unmap the buffers only once instead of every time(which results in this problem) and we didn't find significant performance improvement. The reason is (as per my knowledge) when we give address range to cache controller to invalidate/flush out, the hardware operation is too fast(if there were any cache lines associated with the pages at all) to add any overhead to the CPU operation.

But this patch makes logical flow for dma-mapping one step closer :) I will adopt it as part of pulling all your new patches, and will keep you updated of any new findings.

Regards,
Subash

On 06/06/2012 06:47 PM, Marek Szyprowski wrote:
Hello,

This is a continuation of the dma-mapping extensions posted in the
following thread:
http://thread.gmane.org/gmane.linux.kernel.mm/78644

We noticed that some advanced buffer sharing use cases usually require
creating a dma mapping for the same memory buffer for more than one
device. Usually also such buffer is never touched with CPU, so the data
are processed by the devices.

From the DMA-mapping perspective this requires to call one of the
dma_map_{page,single,sg} function for the given memory buffer a few
times, for each of the devices. Each dma_map_* call performs CPU cache
synchronization, what might be a time consuming operation, especially
when the buffers are large. We would like to avoid any useless and time
consuming operations, so that was the main reason for introducing
another attribute for DMA-mapping subsystem: DMA_ATTR_SKIP_CPU_SYNC,
which lets dma-mapping core to skip CPU cache synchronization in certain
cases.

The proposed patches have been generated on top of the ARM DMA-mapping
redesign patch series on Linux v3.4-rc7. They are also available on the
following GIT branch:

git://git.linaro.org/people/mszyprowski/linux-dma-mapping.git 3.4-rc7-arm-dma-v10-ext

with all require patches on top of vanilla v3.4-rc7 kernel. I will
resend them rebased onto v3.5-rc1 soon.

Best regards
Marek Szyprowski
Samsung Poland R&D Center


Patch summary:

Marek Szyprowski (2):
common: DMA-mapping: add DMA_ATTR_SKIP_CPU_SYNC attribute
ARM: dma-mapping: add support for DMA_ATTR_SKIP_CPU_SYNC attribute

Documentation/DMA-attributes.txt | 24 ++++++++++++++++++++++++
arch/arm/mm/dma-mapping.c | 20 +++++++++++---------
include/linux/dma-attrs.h | 1 +
3 files changed, 36 insertions(+), 9 deletions(-)

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/