From: Daniel Vetter <daniel@ffwll.ch>
To: Marek Szyprowski <m.szyprowski@samsung.com>
Cc: linux-arm-kernel@lists.infradead.org,
linaro-mm-sig@lists.linaro.org, linux-mm@kvack.org,
linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org,
Abhinav Kochhar <abhinav.k@samsung.com>,
Russell King - ARM Linux <linux@arm.linux.org.uk>,
Arnd Bergmann <arnd@arndb.de>,
Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Kyungmin Park <kyungmin.park@samsung.com>,
Subash Patel <subash.ramaswamy@linaro.org>
Subject: Re: [Linaro-mm-sig] [PATCHv2 5/6] common: DMA-mapping: add DMA_ATTR_SKIP_CPU_SYNC attribute
Date: Wed, 13 Jun 2012 20:45:49 +0200 [thread overview]
Message-ID: <20120613184549.GL4829@phenom.ffwll.local> (raw)
In-Reply-To: <1339588218-24398-6-git-send-email-m.szyprowski@samsung.com>
On Wed, Jun 13, 2012 at 01:50:17PM +0200, Marek Szyprowski wrote:
> This patch adds DMA_ATTR_SKIP_CPU_SYNC attribute to the DMA-mapping
> subsystem.
>
> By default dma_map_{single,page,sg} functions family transfer a given
> buffer from CPU domain to device domain. Some advanced use cases might
> require sharing a buffer between more than one device. This requires
> having a mapping created separately for each device and is usually
> performed by calling dma_map_{single,page,sg} function more than once
> for the given buffer with device pointer to each device taking part in
> the buffer sharing. The first call transfers a buffer from 'CPU' domain
> to 'device' domain, what synchronizes CPU caches for the given region
> (usually it means that the cache has been flushed or invalidated
> depending on the dma direction). However, next calls to
> dma_map_{single,page,sg}() for other devices will perform exactly the
> same sychronization operation on the CPU cache. CPU cache sychronization
> 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
> 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!
>
> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
> Reviewed-by: Kyungmin Park <kyungmin.park@samsung.com>
Curious question: What's the use-case for this? Is this just to
work-around the fact that dma-buf atm doesn't support streaming dma so
that we could optimize this all (and keep around the mappings)? Or is
there a different use-case that I don't see?
-Daniel
> ---
> Documentation/DMA-attributes.txt | 24 ++++++++++++++++++++++++
> include/linux/dma-attrs.h | 1 +
> 2 files changed, 25 insertions(+), 0 deletions(-)
>
> diff --git a/Documentation/DMA-attributes.txt b/Documentation/DMA-attributes.txt
> index 725580d..f503090 100644
> --- a/Documentation/DMA-attributes.txt
> +++ b/Documentation/DMA-attributes.txt
> @@ -67,3 +67,27 @@ set on each call.
> Since it is optional for platforms to implement
> DMA_ATTR_NO_KERNEL_MAPPING, those that do not will simply ignore the
> attribute and exhibit default behavior.
> +
> +DMA_ATTR_SKIP_CPU_SYNC
> +----------------------
> +
> +By default dma_map_{single,page,sg} functions family transfer a given
> +buffer from CPU domain to device domain. Some advanced use cases might
> +require sharing a buffer between more than one device. This requires
> +having a mapping created separately for each device and is usually
> +performed by calling dma_map_{single,page,sg} function more than once
> +for the given buffer with device pointer to each device taking part in
> +the buffer sharing. The first call transfers a buffer from 'CPU' domain
> +to 'device' domain, what synchronizes CPU caches for the given region
> +(usually it means that the cache has been flushed or invalidated
> +depending on the dma direction). However, next calls to
> +dma_map_{single,page,sg}() for other devices will perform exactly the
> +same sychronization operation on the CPU cache. CPU cache sychronization
> +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
> +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-attrs.h b/include/linux/dma-attrs.h
> index a37c10c..f83f793 100644
> --- a/include/linux/dma-attrs.h
> +++ b/include/linux/dma-attrs.h
> @@ -16,6 +16,7 @@ enum dma_attr {
> DMA_ATTR_WRITE_COMBINE,
> DMA_ATTR_NON_CONSISTENT,
> DMA_ATTR_NO_KERNEL_MAPPING,
> + DMA_ATTR_SKIP_CPU_SYNC,
> DMA_ATTR_MAX,
> };
>
> --
> 1.7.1.569.g6f426
>
>
> _______________________________________________
> Linaro-mm-sig mailing list
> Linaro-mm-sig@lists.linaro.org
> http://lists.linaro.org/mailman/listinfo/linaro-mm-sig
--
Daniel Vetter
Mail: daniel@ffwll.ch
Mobile: +41 (0)79 365 57 48
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
WARNING: multiple messages have this Message-ID (diff)
From: Daniel Vetter <daniel@ffwll.ch>
To: Marek Szyprowski <m.szyprowski@samsung.com>
Cc: linux-arm-kernel@lists.infradead.org,
linaro-mm-sig@lists.linaro.org, linux-mm@kvack.org,
linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org,
Abhinav Kochhar <abhinav.k@samsung.com>,
Russell King - ARM Linux <linux@arm.linux.org.uk>,
Arnd Bergmann <arnd@arndb.de>,
Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Kyungmin Park <kyungmin.park@samsung.com>,
Subash Patel <subash.ramaswamy@linaro.org>
Subject: Re: [Linaro-mm-sig] [PATCHv2 5/6] common: DMA-mapping: add DMA_ATTR_SKIP_CPU_SYNC attribute
Date: Wed, 13 Jun 2012 20:45:49 +0200 [thread overview]
Message-ID: <20120613184549.GL4829@phenom.ffwll.local> (raw)
Message-ID: <20120613184549.rmcc3E98oU0xe9hw3275C2ksI9RfCgCATq8EBXFwmBw@z> (raw)
In-Reply-To: <1339588218-24398-6-git-send-email-m.szyprowski@samsung.com>
On Wed, Jun 13, 2012 at 01:50:17PM +0200, Marek Szyprowski wrote:
> This patch adds DMA_ATTR_SKIP_CPU_SYNC attribute to the DMA-mapping
> subsystem.
>
> By default dma_map_{single,page,sg} functions family transfer a given
> buffer from CPU domain to device domain. Some advanced use cases might
> require sharing a buffer between more than one device. This requires
> having a mapping created separately for each device and is usually
> performed by calling dma_map_{single,page,sg} function more than once
> for the given buffer with device pointer to each device taking part in
> the buffer sharing. The first call transfers a buffer from 'CPU' domain
> to 'device' domain, what synchronizes CPU caches for the given region
> (usually it means that the cache has been flushed or invalidated
> depending on the dma direction). However, next calls to
> dma_map_{single,page,sg}() for other devices will perform exactly the
> same sychronization operation on the CPU cache. CPU cache sychronization
> 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
> 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!
>
> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
> Reviewed-by: Kyungmin Park <kyungmin.park@samsung.com>
Curious question: What's the use-case for this? Is this just to
work-around the fact that dma-buf atm doesn't support streaming dma so
that we could optimize this all (and keep around the mappings)? Or is
there a different use-case that I don't see?
-Daniel
> ---
> Documentation/DMA-attributes.txt | 24 ++++++++++++++++++++++++
> include/linux/dma-attrs.h | 1 +
> 2 files changed, 25 insertions(+), 0 deletions(-)
>
> diff --git a/Documentation/DMA-attributes.txt b/Documentation/DMA-attributes.txt
> index 725580d..f503090 100644
> --- a/Documentation/DMA-attributes.txt
> +++ b/Documentation/DMA-attributes.txt
> @@ -67,3 +67,27 @@ set on each call.
> Since it is optional for platforms to implement
> DMA_ATTR_NO_KERNEL_MAPPING, those that do not will simply ignore the
> attribute and exhibit default behavior.
> +
> +DMA_ATTR_SKIP_CPU_SYNC
> +----------------------
> +
> +By default dma_map_{single,page,sg} functions family transfer a given
> +buffer from CPU domain to device domain. Some advanced use cases might
> +require sharing a buffer between more than one device. This requires
> +having a mapping created separately for each device and is usually
> +performed by calling dma_map_{single,page,sg} function more than once
> +for the given buffer with device pointer to each device taking part in
> +the buffer sharing. The first call transfers a buffer from 'CPU' domain
> +to 'device' domain, what synchronizes CPU caches for the given region
> +(usually it means that the cache has been flushed or invalidated
> +depending on the dma direction). However, next calls to
> +dma_map_{single,page,sg}() for other devices will perform exactly the
> +same sychronization operation on the CPU cache. CPU cache sychronization
> +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
> +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-attrs.h b/include/linux/dma-attrs.h
> index a37c10c..f83f793 100644
> --- a/include/linux/dma-attrs.h
> +++ b/include/linux/dma-attrs.h
> @@ -16,6 +16,7 @@ enum dma_attr {
> DMA_ATTR_WRITE_COMBINE,
> DMA_ATTR_NON_CONSISTENT,
> DMA_ATTR_NO_KERNEL_MAPPING,
> + DMA_ATTR_SKIP_CPU_SYNC,
> DMA_ATTR_MAX,
> };
>
> --
> 1.7.1.569.g6f426
>
>
> _______________________________________________
> Linaro-mm-sig mailing list
> Linaro-mm-sig@lists.linaro.org
> http://lists.linaro.org/mailman/listinfo/linaro-mm-sig
--
Daniel Vetter
Mail: daniel@ffwll.ch
Mobile: +41 (0)79 365 57 48
WARNING: multiple messages have this Message-ID (diff)
From: daniel@ffwll.ch (Daniel Vetter)
To: linux-arm-kernel@lists.infradead.org
Subject: [Linaro-mm-sig] [PATCHv2 5/6] common: DMA-mapping: add DMA_ATTR_SKIP_CPU_SYNC attribute
Date: Wed, 13 Jun 2012 20:45:49 +0200 [thread overview]
Message-ID: <20120613184549.GL4829@phenom.ffwll.local> (raw)
In-Reply-To: <1339588218-24398-6-git-send-email-m.szyprowski@samsung.com>
On Wed, Jun 13, 2012 at 01:50:17PM +0200, Marek Szyprowski wrote:
> This patch adds DMA_ATTR_SKIP_CPU_SYNC attribute to the DMA-mapping
> subsystem.
>
> By default dma_map_{single,page,sg} functions family transfer a given
> buffer from CPU domain to device domain. Some advanced use cases might
> require sharing a buffer between more than one device. This requires
> having a mapping created separately for each device and is usually
> performed by calling dma_map_{single,page,sg} function more than once
> for the given buffer with device pointer to each device taking part in
> the buffer sharing. The first call transfers a buffer from 'CPU' domain
> to 'device' domain, what synchronizes CPU caches for the given region
> (usually it means that the cache has been flushed or invalidated
> depending on the dma direction). However, next calls to
> dma_map_{single,page,sg}() for other devices will perform exactly the
> same sychronization operation on the CPU cache. CPU cache sychronization
> 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
> 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!
>
> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
> Reviewed-by: Kyungmin Park <kyungmin.park@samsung.com>
Curious question: What's the use-case for this? Is this just to
work-around the fact that dma-buf atm doesn't support streaming dma so
that we could optimize this all (and keep around the mappings)? Or is
there a different use-case that I don't see?
-Daniel
> ---
> Documentation/DMA-attributes.txt | 24 ++++++++++++++++++++++++
> include/linux/dma-attrs.h | 1 +
> 2 files changed, 25 insertions(+), 0 deletions(-)
>
> diff --git a/Documentation/DMA-attributes.txt b/Documentation/DMA-attributes.txt
> index 725580d..f503090 100644
> --- a/Documentation/DMA-attributes.txt
> +++ b/Documentation/DMA-attributes.txt
> @@ -67,3 +67,27 @@ set on each call.
> Since it is optional for platforms to implement
> DMA_ATTR_NO_KERNEL_MAPPING, those that do not will simply ignore the
> attribute and exhibit default behavior.
> +
> +DMA_ATTR_SKIP_CPU_SYNC
> +----------------------
> +
> +By default dma_map_{single,page,sg} functions family transfer a given
> +buffer from CPU domain to device domain. Some advanced use cases might
> +require sharing a buffer between more than one device. This requires
> +having a mapping created separately for each device and is usually
> +performed by calling dma_map_{single,page,sg} function more than once
> +for the given buffer with device pointer to each device taking part in
> +the buffer sharing. The first call transfers a buffer from 'CPU' domain
> +to 'device' domain, what synchronizes CPU caches for the given region
> +(usually it means that the cache has been flushed or invalidated
> +depending on the dma direction). However, next calls to
> +dma_map_{single,page,sg}() for other devices will perform exactly the
> +same sychronization operation on the CPU cache. CPU cache sychronization
> +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
> +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-attrs.h b/include/linux/dma-attrs.h
> index a37c10c..f83f793 100644
> --- a/include/linux/dma-attrs.h
> +++ b/include/linux/dma-attrs.h
> @@ -16,6 +16,7 @@ enum dma_attr {
> DMA_ATTR_WRITE_COMBINE,
> DMA_ATTR_NON_CONSISTENT,
> DMA_ATTR_NO_KERNEL_MAPPING,
> + DMA_ATTR_SKIP_CPU_SYNC,
> DMA_ATTR_MAX,
> };
>
> --
> 1.7.1.569.g6f426
>
>
> _______________________________________________
> Linaro-mm-sig mailing list
> Linaro-mm-sig at lists.linaro.org
> http://lists.linaro.org/mailman/listinfo/linaro-mm-sig
--
Daniel Vetter
Mail: daniel at ffwll.ch
Mobile: +41 (0)79 365 57 48
next prev parent reply other threads:[~2012-06-13 18:45 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-13 11:50 [PATCHv2 0/6] ARM: DMA-mapping: new extensions for buffer sharing Marek Szyprowski
2012-06-13 11:50 ` Marek Szyprowski
2012-06-13 11:50 ` Marek Szyprowski
2012-06-13 11:50 ` [PATCHv2 1/6] common: DMA-mapping: add DMA_ATTR_NO_KERNEL_MAPPING attribute Marek Szyprowski
2012-06-13 11:50 ` Marek Szyprowski
2012-06-13 11:50 ` Marek Szyprowski
2012-06-13 18:52 ` [Linaro-mm-sig] " Daniel Vetter
2012-06-13 18:52 ` Daniel Vetter
2012-06-13 18:52 ` Daniel Vetter
2012-06-14 9:01 ` Marek Szyprowski
2012-06-14 9:01 ` Marek Szyprowski
2012-06-14 9:01 ` Marek Szyprowski
2012-06-13 11:50 ` [PATCHv2 2/6] ARM: dma-mapping: add support for " Marek Szyprowski
2012-06-13 11:50 ` Marek Szyprowski
2012-06-13 11:50 ` Marek Szyprowski
2012-06-13 11:50 ` [PATCHv2 3/6] common: dma-mapping: introduce dma_get_sgtable() function Marek Szyprowski
2012-06-13 11:50 ` Marek Szyprowski
2012-06-13 11:50 ` Marek Szyprowski
2012-06-13 18:52 ` [Linaro-mm-sig] " Daniel Vetter
2012-06-13 18:52 ` Daniel Vetter
2012-06-13 18:52 ` Daniel Vetter
2012-06-13 11:50 ` [PATCHv2 4/6] ARM: dma-mapping: add support for dma_get_sgtable() Marek Szyprowski
2012-06-13 11:50 ` Marek Szyprowski
2012-06-13 11:50 ` Marek Szyprowski
2012-06-13 11:50 ` [PATCHv2 5/6] common: DMA-mapping: add DMA_ATTR_SKIP_CPU_SYNC attribute Marek Szyprowski
2012-06-13 11:50 ` Marek Szyprowski
2012-06-13 11:50 ` Marek Szyprowski
2012-06-13 18:45 ` Daniel Vetter [this message]
2012-06-13 18:45 ` [Linaro-mm-sig] " Daniel Vetter
2012-06-13 18:45 ` Daniel Vetter
2012-06-13 11:50 ` [PATCHv2 6/6] ARM: dma-mapping: add support for " Marek Szyprowski
2012-06-13 11:50 ` Marek Szyprowski
2012-06-13 11:50 ` Marek Szyprowski
2012-06-13 14:12 ` [PATCHv2 0/6] ARM: DMA-mapping: new extensions for buffer sharing Konrad Rzeszutek Wilk
2012-06-13 14:12 ` Konrad Rzeszutek Wilk
2012-06-13 14:12 ` Konrad Rzeszutek Wilk
2012-06-13 19:01 ` [Linaro-mm-sig] " Daniel Vetter
2012-06-13 19:01 ` Daniel Vetter
2012-06-13 19:01 ` Daniel Vetter
2012-06-14 8:47 ` Marek Szyprowski
2012-06-14 8:47 ` Marek Szyprowski
2012-06-14 8:47 ` Marek Szyprowski
2012-06-14 8:39 ` Marek Szyprowski
2012-06-14 8:39 ` Marek Szyprowski
2012-06-14 8:39 ` Marek Szyprowski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120613184549.GL4829@phenom.ffwll.local \
--to=daniel@ffwll.ch \
--cc=abhinav.k@samsung.com \
--cc=arnd@arndb.de \
--cc=benh@kernel.crashing.org \
--cc=konrad.wilk@oracle.com \
--cc=kyungmin.park@samsung.com \
--cc=linaro-mm-sig@lists.linaro.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux@arm.linux.org.uk \
--cc=m.szyprowski@samsung.com \
--cc=subash.ramaswamy@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.