A recent patchset highlighted to me that DMA_ATTR_SKIP_CPU_SYNC might be easily misunderstood. This attempts to improve documentation in several ways: when used with dma_map_*, DMA_ATTR_SKIP_CPU_SYNC does not really assume buffer has been transferred previously - the buffer would often not even exist in device domain before it's mapped, instead it normally has to be transferred later. Add a hint on how buffer can be transferred. Code comments near DMA_ATTR_SKIP_CPU_SYNC focus on the use-case of CPU cache synchronization while in practice this flag isn't limited to that. Make it more generic. A couple of things I'm thinking about left for a follow-up patch: - rename DMA_ATTR_SKIP_CPU_SYNC to DMA_ATTR_SKIP_SYNC there's nothing I can see making it especially related to the CPU. - drop mentions of CPU cache from documentation completely and talk about CPU domain exclusively, or maybe mention CPU cache as an example: CPU domain (e.g. CPU cache). Signed-off-by: Michael S. Tsirkin <mst@xxxxxxxxxx> --- Documentation/core-api/dma-attributes.rst | 5 +++-- include/linux/dma-mapping.h | 5 ++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Documentation/core-api/dma-attributes.rst b/Documentation/core-api/dma-attributes.rst index 1887d92e8e92..782734666790 100644 --- a/Documentation/core-api/dma-attributes.rst +++ b/Documentation/core-api/dma-attributes.rst @@ -61,8 +61,9 @@ same synchronization operation on the CPU cache. CPU cache synchronization might be a time consuming operation, especially if the buffers are large, so it is highly recommended to avoid it if possible. DMA_ATTR_SKIP_CPU_SYNC allows platform code to skip synchronization of -the CPU cache for the given buffer assuming that it has been already -transferred to 'device' domain. This attribute can be also used for +the CPU cache for the given buffer assuming that it is +transferred to 'device' domain separately, e.g. using +dma_sync_{single,sg}_for_{cpu,device}. This attribute can be also used for dma_unmap_{single,page,sg} functions family to force buffer to stay in device domain after releasing a mapping for it. Use this attribute with care! diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h index 0ee20b764000..13295ae4385a 100644 --- a/include/linux/dma-mapping.h +++ b/include/linux/dma-mapping.h @@ -32,9 +32,8 @@ */ #define DMA_ATTR_NO_KERNEL_MAPPING (1UL << 4) /* - * DMA_ATTR_SKIP_CPU_SYNC: Allows platform code to skip synchronization of - * the CPU cache for the given buffer assuming that it has been already - * transferred to 'device' domain. + * DMA_ATTR_SKIP_CPU_SYNC: Allows platform code to skip synchronization of the + * CPU and device domains for the given buffer. */ #define DMA_ATTR_SKIP_CPU_SYNC (1UL << 5) /* -- MST