dri-devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: "Christian König" <ckoenig.leichtzumerken@gmail.com>
To: l.stach@pengutronix.de, nicolas@ndufresne.ca,
	ppaalanen@gmail.com, sumit.semwal@linaro.org, daniel@ffwll.ch,
	robdclark@gmail.com, dri-devel@lists.freedesktop.org,
	linaro-mm-sig@lists.linaro.org, linux-media@vger.kernel.org
Cc: "Christian König" <christian.koenig@amd.com>
Subject: [PATCH 1/3] dma-buf: add dma_coherent flag
Date: Thu, 20 Oct 2022 14:13:14 +0200	[thread overview]
Message-ID: <20221020121316.3946-2-christian.koenig@amd.com> (raw)
In-Reply-To: <20221020121316.3946-1-christian.koenig@amd.com>

Start to fix the coherency issues for non PCI devices by adding a dma_coherent
flag to the DMA-buf.

The flag should be set by the exporter if only devices which can do coherent
DMA-access with respect to the CPU cache are allowed to access the buffer.

Signed-off-by: Christian König <christian.koenig@amd.com>
---
 drivers/dma-buf/dma-buf.c |  5 +++++
 include/linux/dma-buf.h   | 16 ++++++++++++++++
 2 files changed, 21 insertions(+)

diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
index c40d72d318fd..7509807bf485 100644
--- a/drivers/dma-buf/dma-buf.c
+++ b/drivers/dma-buf/dma-buf.c
@@ -15,6 +15,7 @@
 #include <linux/slab.h>
 #include <linux/dma-buf.h>
 #include <linux/dma-fence.h>
+#include <linux/dma-map-ops.h>
 #include <linux/anon_inodes.h>
 #include <linux/export.h>
 #include <linux/debugfs.h>
@@ -635,6 +636,7 @@ struct dma_buf *dma_buf_export(const struct dma_buf_export_info *exp_info)
 
 	dmabuf->priv = exp_info->priv;
 	dmabuf->ops = exp_info->ops;
+	dmabuf->dma_coherent = exp_info->coherent;
 	dmabuf->size = exp_info->size;
 	dmabuf->exp_name = exp_info->exp_name;
 	dmabuf->owner = exp_info->owner;
@@ -894,6 +896,9 @@ dma_buf_dynamic_attach(struct dma_buf *dmabuf, struct device *dev,
 	if (WARN_ON(importer_ops && !importer_ops->move_notify))
 		return ERR_PTR(-EINVAL);
 
+	if (dmabuf->dma_coherent && !dev_is_dma_coherent(dev))
+		return ERR_PTR(-EINVAL);
+
 	attach = kzalloc(sizeof(*attach), GFP_KERNEL);
 	if (!attach)
 		return ERR_PTR(-ENOMEM);
diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
index 6fa8d4e29719..f2083b94b116 100644
--- a/include/linux/dma-buf.h
+++ b/include/linux/dma-buf.h
@@ -326,6 +326,20 @@ struct dma_buf {
 	/** @ops: dma_buf_ops associated with this buffer object. */
 	const struct dma_buf_ops *ops;
 
+	/**
+	 * @dma_coherent:
+	 *
+	 * True if the buffer is backed by DMA coherent memory with respect to
+	 * the CPU cache even if the architecture can support incoherent
+	 * devices.
+	 *
+	 * Usually mirrors the result of dev_is_dma_coherent() of the exporter,
+	 * but can be cleared by the exporter to allow incoherent devices
+	 * access to the buffer if the exporter takes care of coherency for CPU
+	 * accesses.
+	 */
+	bool dma_coherent;
+
 	/**
 	 * @vmapping_counter:
 	 *
@@ -524,6 +538,7 @@ struct dma_buf_attachment {
  * @ops:	Attach allocator-defined dma buf ops to the new buffer
  * @size:	Size of the buffer - invariant over the lifetime of the buffer
  * @flags:	mode flags for the file
+ * @coherent:	If DMA accesses must be coherent to the CPU cache.
  * @resv:	reservation-object, NULL to allocate default one
  * @priv:	Attach private data of allocator to this buffer
  *
@@ -536,6 +551,7 @@ struct dma_buf_export_info {
 	const struct dma_buf_ops *ops;
 	size_t size;
 	int flags;
+	bool coherent;
 	struct dma_resv *resv;
 	void *priv;
 };
-- 
2.25.1


  reply	other threads:[~2022-10-20 12:13 UTC|newest]

Thread overview: 61+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-20 12:13 Try to address the DMA-buf coherency problem Christian König
2022-10-20 12:13 ` Christian König [this message]
2022-10-20 12:13 ` [PATCH 2/3] drm/prime: set the dma_coherent flag for export Christian König
2022-10-20 14:43   ` Rob Clark
2022-10-20 14:56     ` Christian König
2022-10-28  1:11       ` Rob Clark
2022-10-20 12:13 ` [PATCH 3/3] media: videobuf2: set dma_coherent flag for DMA-buf Christian König
2022-11-04 10:42   ` Hans Verkuil
2022-10-27 12:14 ` Try to address the DMA-buf coherency problem Christian König
2022-10-28  8:09 ` Lucas Stach
2022-10-28  8:40   ` Christian König
2022-10-28 11:42     ` Lucas Stach
2022-10-28 14:26       ` Christian König
2022-10-28 15:46         ` Nicolas Dufresne
2022-10-28 17:50           ` Christian König
2022-10-28 18:47             ` Daniel Stone
2022-11-01 17:40               ` Christian König
2022-11-01 21:09                 ` Nicolas Dufresne
2022-11-02 11:18                   ` Christian König
2022-11-02 11:39                     ` Lucas Stach
2022-11-02 12:21                       ` Christian König
2022-11-02 17:10                         ` Lucas Stach
2022-11-02 19:13                           ` Christian König
2022-11-02 19:48                             ` Lucas Stach
2022-11-17  9:35                             ` Tomasz Figa
2022-11-17 12:10                               ` Christian König
2022-11-17 15:38                                 ` Nicolas Dufresne
2022-11-18 19:32                                   ` Rob Clark
2022-11-19 20:35                                     ` Nicolas Dufresne
2022-11-22 14:36                                     ` Daniel Vetter
2022-11-22 17:33                                       ` Christian König
2022-11-22 18:26                                         ` Daniel Vetter
2022-11-23  8:33                                         ` Pekka Paalanen
2022-11-23 16:33                                           ` Daniel Vetter
2022-11-25 16:40                                             ` Nicolas Dufresne
2022-11-30 10:30                                               ` Daniel Vetter
2022-12-02 15:27                                                 ` Christian König
2023-01-05 11:46                                                   ` Daniel Vetter
2022-12-05  6:41                                 ` Tomasz Figa
2022-12-05  8:28                                   ` Christian König
2022-12-06 18:26                                     ` Nicolas Dufresne
2022-12-06 18:37                                       ` Christian König
2022-12-09  8:26                                     ` Tomasz Figa
2022-12-09  9:32                                       ` Pekka Paalanen
2022-12-09 17:07                                         ` Alex Deucher
2023-01-05 11:50                                           ` [Linaro-mm-sig] " Daniel Vetter
2022-12-12  3:13                                         ` Tomasz Figa
2022-12-09 10:27                                       ` Christian König
2022-12-12  3:00                                         ` Tomasz Figa
2022-12-12 11:15                                           ` Christian König
2023-01-05 20:39                                         ` Sebastian Wick
2022-11-04 14:58                         ` Rob Clark
2022-11-04 15:00                           ` Christian König
2022-11-02 12:19                     ` Pekka Paalanen
2022-11-02 12:27                       ` Christian König
2022-11-02 12:50                         ` Pekka Paalanen
2022-11-02 12:56                           ` Christian König
2022-11-03 22:16                     ` Nicolas Dufresne
2022-11-04  9:03                       ` Christian König
2022-11-04 13:38                         ` Nicolas Dufresne
2022-11-04 14:51                           ` Christian König

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=20221020121316.3946-2-christian.koenig@amd.com \
    --to=ckoenig.leichtzumerken@gmail.com \
    --cc=christian.koenig@amd.com \
    --cc=daniel@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=l.stach@pengutronix.de \
    --cc=linaro-mm-sig@lists.linaro.org \
    --cc=linux-media@vger.kernel.org \
    --cc=nicolas@ndufresne.ca \
    --cc=ppaalanen@gmail.com \
    --cc=robdclark@gmail.com \
    --cc=sumit.semwal@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox