From: labbott@redhat.com (Laura Abbott)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFCv3][PATCH 5/5] staging: ion: Add support for syncing with DMA_BUF_IOCTL_SYNC
Date: Mon, 12 Sep 2016 14:32:58 -0700 [thread overview]
Message-ID: <1473715978-11633-6-git-send-email-labbott@redhat.com> (raw)
In-Reply-To: <1473715978-11633-1-git-send-email-labbott@redhat.com>
dma_buf added support for a userspace syncing ioctl. It is implemented
by calling dma_buf_begin_cpu_access and dma_buf_end_cpu_access. Ion
currently lacks cache operations on this code path. Add them for
compatibility with the dma_buf ioctl.
Signed-off-by: Laura Abbott <labbott@redhat.com>
---
drivers/staging/android/ion/ion.c | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/drivers/staging/android/ion/ion.c b/drivers/staging/android/ion/ion.c
index c2125de..1ad8e8a 100644
--- a/drivers/staging/android/ion/ion.c
+++ b/drivers/staging/android/ion/ion.c
@@ -969,6 +969,24 @@ static void ion_dma_buf_kunmap(struct dma_buf *dmabuf, unsigned long offset,
{
}
+static void ion_clean_buffer(struct ion_buffer *buffer)
+{
+ struct scatterlist *sg;
+ int i;
+
+ for_each_sg(buffer->sg_table->sgl, sg, buffer->sg_table->orig_nents, i)
+ kernel_force_cache_clean(sg_page(sg), sg->length);
+}
+
+static void ion_invalidate_buffer(struct ion_buffer *buffer)
+{
+ struct scatterlist *sg;
+ int i;
+
+ for_each_sg(buffer->sg_table->sgl, sg, buffer->sg_table->orig_nents, i)
+ kernel_force_cache_invalidate(sg_page(sg), sg->length);
+}
+
static int ion_dma_buf_begin_cpu_access(struct dma_buf *dmabuf,
enum dma_data_direction direction)
{
@@ -984,6 +1002,11 @@ static int ion_dma_buf_begin_cpu_access(struct dma_buf *dmabuf,
mutex_lock(&buffer->lock);
vaddr = ion_buffer_kmap_get(buffer);
mutex_unlock(&buffer->lock);
+
+ if (direction != DMA_TO_DEVICE) {
+ ion_invalidate_buffer(buffer);
+ }
+
return PTR_ERR_OR_ZERO(vaddr);
}
@@ -996,6 +1019,12 @@ static int ion_dma_buf_end_cpu_access(struct dma_buf *dmabuf,
ion_buffer_kmap_put(buffer);
mutex_unlock(&buffer->lock);
+ if (direction == DMA_FROM_DEVICE) {
+ ion_invalidate_buffer(buffer);
+ } else {
+ ion_clean_buffer(buffer);
+ }
+
return 0;
}
@@ -1126,6 +1155,8 @@ int ion_sync_for_device(struct ion_client *client, int fd)
struct dma_buf *dmabuf;
struct ion_buffer *buffer;
+ WARN_ONCE(1, "This API is deprecated in favor of the dma_buf ioctl\n");
+
dmabuf = dma_buf_get(fd);
if (IS_ERR(dmabuf))
return PTR_ERR(dmabuf);
--
2.7.4
WARNING: multiple messages have this Message-ID (diff)
From: Laura Abbott <labbott@redhat.com>
To: "Sumit Semwal" <sumit.semwal@linaro.org>,
"John Stultz" <john.stultz@linaro.org>,
"Arve Hjønnevåg" <arve@android.com>,
"Riley Andrews" <riandrews@android.com>
Cc: Laura Abbott <labbott@redhat.com>,
Daniel Vetter <daniel.vetter@ffwll.ch>,
linaro-mm-sig@lists.linaro.org, devel@driverdev.osuosl.org,
Russell King <linux@armlinux.org.uk>,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org,
Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will.deacon@arm.com>,
Eun Taik Lee <eun.taik.lee@samsung.com>,
Rohit kumar <rohit.kr@samsung.com>,
Liviu Dudau <Liviu.Dudau@arm.com>, Jon Medhurst <tixy@linaro.org>,
Jeremy Gebben <jgebben@codeaurora.org>,
Bryan Huntsman <bryanh@codeaurora.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Android Kernel Team <kernel-team@android.com>,
Arnd Bergmann <arnd@arndb.de>
Subject: [RFCv3][PATCH 5/5] staging: ion: Add support for syncing with DMA_BUF_IOCTL_SYNC
Date: Mon, 12 Sep 2016 14:32:58 -0700 [thread overview]
Message-ID: <1473715978-11633-6-git-send-email-labbott@redhat.com> (raw)
In-Reply-To: <1473715978-11633-1-git-send-email-labbott@redhat.com>
dma_buf added support for a userspace syncing ioctl. It is implemented
by calling dma_buf_begin_cpu_access and dma_buf_end_cpu_access. Ion
currently lacks cache operations on this code path. Add them for
compatibility with the dma_buf ioctl.
Signed-off-by: Laura Abbott <labbott@redhat.com>
---
drivers/staging/android/ion/ion.c | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/drivers/staging/android/ion/ion.c b/drivers/staging/android/ion/ion.c
index c2125de..1ad8e8a 100644
--- a/drivers/staging/android/ion/ion.c
+++ b/drivers/staging/android/ion/ion.c
@@ -969,6 +969,24 @@ static void ion_dma_buf_kunmap(struct dma_buf *dmabuf, unsigned long offset,
{
}
+static void ion_clean_buffer(struct ion_buffer *buffer)
+{
+ struct scatterlist *sg;
+ int i;
+
+ for_each_sg(buffer->sg_table->sgl, sg, buffer->sg_table->orig_nents, i)
+ kernel_force_cache_clean(sg_page(sg), sg->length);
+}
+
+static void ion_invalidate_buffer(struct ion_buffer *buffer)
+{
+ struct scatterlist *sg;
+ int i;
+
+ for_each_sg(buffer->sg_table->sgl, sg, buffer->sg_table->orig_nents, i)
+ kernel_force_cache_invalidate(sg_page(sg), sg->length);
+}
+
static int ion_dma_buf_begin_cpu_access(struct dma_buf *dmabuf,
enum dma_data_direction direction)
{
@@ -984,6 +1002,11 @@ static int ion_dma_buf_begin_cpu_access(struct dma_buf *dmabuf,
mutex_lock(&buffer->lock);
vaddr = ion_buffer_kmap_get(buffer);
mutex_unlock(&buffer->lock);
+
+ if (direction != DMA_TO_DEVICE) {
+ ion_invalidate_buffer(buffer);
+ }
+
return PTR_ERR_OR_ZERO(vaddr);
}
@@ -996,6 +1019,12 @@ static int ion_dma_buf_end_cpu_access(struct dma_buf *dmabuf,
ion_buffer_kmap_put(buffer);
mutex_unlock(&buffer->lock);
+ if (direction == DMA_FROM_DEVICE) {
+ ion_invalidate_buffer(buffer);
+ } else {
+ ion_clean_buffer(buffer);
+ }
+
return 0;
}
@@ -1126,6 +1155,8 @@ int ion_sync_for_device(struct ion_client *client, int fd)
struct dma_buf *dmabuf;
struct ion_buffer *buffer;
+ WARN_ONCE(1, "This API is deprecated in favor of the dma_buf ioctl\n");
+
dmabuf = dma_buf_get(fd);
if (IS_ERR(dmabuf))
return PTR_ERR(dmabuf);
--
2.7.4
next prev parent reply other threads:[~2016-09-12 21:32 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-12 21:32 [RFCv3][PATCH 0/5] Cleanup Ion mapping/caching Laura Abbott
2016-09-12 21:32 ` Laura Abbott
2016-09-12 21:32 ` [RFCv3][PATCH 1/5] Documentation: Introduce kernel_force_cache_* APIs Laura Abbott
2016-09-12 21:32 ` Laura Abbott
2016-09-12 21:32 ` [RFCv3][PATCH 2/5] arm: Impelment ARCH_HAS_FORCE_CACHE Laura Abbott
2016-09-12 21:32 ` Laura Abbott
2016-09-12 21:32 ` [RFCv3][PATCH 3/5] arm64: Implement ARCH_HAS_FORCE_CACHE Laura Abbott
2016-09-12 21:32 ` Laura Abbott
2016-09-13 9:19 ` Will Deacon
2016-09-13 9:19 ` Will Deacon
2016-09-13 15:02 ` Laura Abbott
2016-09-13 15:02 ` Laura Abbott
2016-09-13 15:14 ` Will Deacon
2016-09-13 15:14 ` Will Deacon
2016-09-13 18:41 ` Laura Abbott
2016-09-13 18:41 ` Laura Abbott
2017-02-21 6:05 ` [Linaro-mm-sig] " Chen Feng
2017-02-21 6:05 ` Chen Feng
2017-02-21 19:29 ` Laura Abbott
2017-02-21 19:29 ` Laura Abbott
2017-02-23 1:01 ` Chen Feng
2017-02-23 1:01 ` Chen Feng
2017-02-23 16:03 ` Laura Abbott
2017-02-23 16:03 ` Laura Abbott
2016-09-12 21:32 ` [RFCv3][PATCH 4/5] staging: android: ion: Convert to the kernel_force_cache APIs Laura Abbott
2016-09-12 21:32 ` Laura Abbott
2016-09-12 21:32 ` Laura Abbott [this message]
2016-09-12 21:32 ` [RFCv3][PATCH 5/5] staging: ion: Add support for syncing with DMA_BUF_IOCTL_SYNC Laura Abbott
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=1473715978-11633-6-git-send-email-labbott@redhat.com \
--to=labbott@redhat.com \
--cc=linux-arm-kernel@lists.infradead.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.