All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marek Szyprowski <m.szyprowski@samsung.com>
To: dri-devel@lists.freedesktop.org,
	iommu@lists.linux-foundation.org, linaro-mm-sig@lists.linaro.org,
	linux-kernel@vger.kernel.org
Cc: Marek Szyprowski <m.szyprowski@samsung.com>,
	Christoph Hellwig <hch@lst.de>,
	Robin Murphy <robin.murphy@arm.com>,
	Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>,
	linux-arm-kernel@lists.infradead.org,
	David Airlie <airlied@linux.ie>, Daniel Vetter <daniel@ffwll.ch>
Subject: [PATCH v5 01/38] dma-mapping: add generic helpers for mapping sgtable objects
Date: Wed, 13 May 2020 15:32:08 +0200	[thread overview]
Message-ID: <20200513133245.6408-1-m.szyprowski@samsung.com> (raw)
In-Reply-To: <20200513132114.6046-1-m.szyprowski@samsung.com>

struct sg_table is a common structure used for describing a memory
buffer. It consists of a scatterlist with memory pages and DMA addresses
(sgl entry), as well as the number of scatterlist entries: CPU pages
(orig_nents entry) and DMA mapped pages (nents entry).

It turned out that it was a common mistake to misuse nents and orig_nents
entries, calling DMA-mapping functions with a wrong number of entries or
ignoring the number of mapped entries returned by the dma_map_sg
function.

To avoid such issues, let's introduce a common wrappers operating directly
on the struct sg_table objects, which take care of the proper use of
the nents and orig_nents entries.

Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Robin Murphy <robin.murphy@arm.com> 
---
For more information, see '[PATCH v5 00/38] DRM: fix struct sg_table nents
vs. orig_nents misuse' thread:
https://lore.kernel.org/linux-iommu/20200513132114.6046-1-m.szyprowski@samsung.com/T/
---
 include/linux/dma-mapping.h | 78 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 78 insertions(+)

diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h
index b43116a..b50fe36 100644
--- a/include/linux/dma-mapping.h
+++ b/include/linux/dma-mapping.h
@@ -609,6 +609,84 @@ static inline void dma_sync_single_range_for_device(struct device *dev,
 	return dma_sync_single_for_device(dev, addr + offset, size, dir);
 }
 
+/**
+ * dma_map_sgtable - Map the given buffer for DMA
+ * @dev:	The device for which to perform the DMA operation
+ * @sgt:	The sg_table object describing the buffer
+ * @dir:	DMA direction
+ * @attrs:	Optional DMA attributes for the map operation
+ *
+ * Maps a buffer described by a scatterlist stored in the given sg_table
+ * object for the @dir DMA operation by the @dev device. After success
+ * the ownership for the buffer is transferred to the DMA domain. One has
+ * to call dma_sync_sgtable_for_cpu() or dma_unmap_sgtable() to move the
+ * ownership of the buffer back to the CPU domain before touching the
+ * buffer by the CPU.
+ * Returns 0 on success or -EINVAL on error during mapping the buffer.
+ */
+static inline int dma_map_sgtable(struct device *dev, struct sg_table *sgt,
+		enum dma_data_direction dir, unsigned long attrs)
+{
+	int n = dma_map_sg_attrs(dev, sgt->sgl, sgt->orig_nents, dir, attrs);
+
+	if (n <= 0)
+		return -EINVAL;
+	sgt->nents = n;
+	return 0;
+}
+
+/**
+ * dma_unmap_sgtable - Unmap the given buffer for DMA
+ * @dev:	The device for which to perform the DMA operation
+ * @sgt:	The sg_table object describing the buffer
+ * @dir:	DMA direction
+ * @attrs:	Optional DMA attributes for the unmap operation
+ *
+ * Unmaps a buffer described by a scatterlist stored in the given sg_table
+ * object for the @dir DMA operation by the @dev device. After this function
+ * the ownership of the buffer is transferred back to the CPU domain.
+ */
+static inline void dma_unmap_sgtable(struct device *dev, struct sg_table *sgt,
+		enum dma_data_direction dir, unsigned long attrs)
+{
+	dma_unmap_sg_attrs(dev, sgt->sgl, sgt->orig_nents, dir, attrs);
+}
+
+/**
+ * dma_sync_sgtable_for_cpu - Synchronize the given buffer for CPU access
+ * @dev:	The device for which to perform the DMA operation
+ * @sgt:	The sg_table object describing the buffer
+ * @dir:	DMA direction
+ *
+ * Performs the needed cache synchronization and moves the ownership of the
+ * buffer back to the CPU domain, so it is safe to perform any access to it
+ * by the CPU. Before doing any further DMA operations, one has to transfer
+ * the ownership of the buffer back to the DMA domain by calling the
+ * dma_sync_sgtable_for_device().
+ */
+static inline void dma_sync_sgtable_for_cpu(struct device *dev,
+		struct sg_table *sgt, enum dma_data_direction dir)
+{
+	dma_sync_sg_for_cpu(dev, sgt->sgl, sgt->orig_nents, dir);
+}
+
+/**
+ * dma_sync_sgtable_for_device - Synchronize the given buffer for DMA
+ * @dev:	The device for which to perform the DMA operation
+ * @sgt:	The sg_table object describing the buffer
+ * @dir:	DMA direction
+ *
+ * Performs the needed cache synchronization and moves the ownership of the
+ * buffer back to the DMA domain, so it is safe to perform the DMA operation.
+ * Once finished, one has to call dma_sync_sgtable_for_cpu() or
+ * dma_unmap_sgtable().
+ */
+static inline void dma_sync_sgtable_for_device(struct device *dev,
+		struct sg_table *sgt, enum dma_data_direction dir)
+{
+	dma_sync_sg_for_device(dev, sgt->sgl, sgt->orig_nents, dir);
+}
+
 #define dma_map_single(d, a, s, r) dma_map_single_attrs(d, a, s, r, 0)
 #define dma_unmap_single(d, a, s, r) dma_unmap_single_attrs(d, a, s, r, 0)
 #define dma_map_sg(d, s, n, r) dma_map_sg_attrs(d, s, n, r, 0)
-- 
1.9.1


WARNING: multiple messages have this Message-ID (diff)
From: Marek Szyprowski <m.szyprowski@samsung.com>
To: dri-devel@lists.freedesktop.org,
	iommu@lists.linux-foundation.org, linaro-mm-sig@lists.linaro.org,
	linux-kernel@vger.kernel.org
Cc: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>,
	David Airlie <airlied@linux.ie>, Daniel Vetter <daniel@ffwll.ch>,
	Robin Murphy <robin.murphy@arm.com>,
	Christoph Hellwig <hch@lst.de>,
	linux-arm-kernel@lists.infradead.org
Subject: [PATCH v5 01/38] dma-mapping: add generic helpers for mapping sgtable objects
Date: Wed, 13 May 2020 15:32:08 +0200	[thread overview]
Message-ID: <20200513133245.6408-1-m.szyprowski@samsung.com> (raw)
In-Reply-To: <20200513132114.6046-1-m.szyprowski@samsung.com>

struct sg_table is a common structure used for describing a memory
buffer. It consists of a scatterlist with memory pages and DMA addresses
(sgl entry), as well as the number of scatterlist entries: CPU pages
(orig_nents entry) and DMA mapped pages (nents entry).

It turned out that it was a common mistake to misuse nents and orig_nents
entries, calling DMA-mapping functions with a wrong number of entries or
ignoring the number of mapped entries returned by the dma_map_sg
function.

To avoid such issues, let's introduce a common wrappers operating directly
on the struct sg_table objects, which take care of the proper use of
the nents and orig_nents entries.

Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Robin Murphy <robin.murphy@arm.com> 
---
For more information, see '[PATCH v5 00/38] DRM: fix struct sg_table nents
vs. orig_nents misuse' thread:
https://lore.kernel.org/linux-iommu/20200513132114.6046-1-m.szyprowski@samsung.com/T/
---
 include/linux/dma-mapping.h | 78 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 78 insertions(+)

diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h
index b43116a..b50fe36 100644
--- a/include/linux/dma-mapping.h
+++ b/include/linux/dma-mapping.h
@@ -609,6 +609,84 @@ static inline void dma_sync_single_range_for_device(struct device *dev,
 	return dma_sync_single_for_device(dev, addr + offset, size, dir);
 }
 
+/**
+ * dma_map_sgtable - Map the given buffer for DMA
+ * @dev:	The device for which to perform the DMA operation
+ * @sgt:	The sg_table object describing the buffer
+ * @dir:	DMA direction
+ * @attrs:	Optional DMA attributes for the map operation
+ *
+ * Maps a buffer described by a scatterlist stored in the given sg_table
+ * object for the @dir DMA operation by the @dev device. After success
+ * the ownership for the buffer is transferred to the DMA domain. One has
+ * to call dma_sync_sgtable_for_cpu() or dma_unmap_sgtable() to move the
+ * ownership of the buffer back to the CPU domain before touching the
+ * buffer by the CPU.
+ * Returns 0 on success or -EINVAL on error during mapping the buffer.
+ */
+static inline int dma_map_sgtable(struct device *dev, struct sg_table *sgt,
+		enum dma_data_direction dir, unsigned long attrs)
+{
+	int n = dma_map_sg_attrs(dev, sgt->sgl, sgt->orig_nents, dir, attrs);
+
+	if (n <= 0)
+		return -EINVAL;
+	sgt->nents = n;
+	return 0;
+}
+
+/**
+ * dma_unmap_sgtable - Unmap the given buffer for DMA
+ * @dev:	The device for which to perform the DMA operation
+ * @sgt:	The sg_table object describing the buffer
+ * @dir:	DMA direction
+ * @attrs:	Optional DMA attributes for the unmap operation
+ *
+ * Unmaps a buffer described by a scatterlist stored in the given sg_table
+ * object for the @dir DMA operation by the @dev device. After this function
+ * the ownership of the buffer is transferred back to the CPU domain.
+ */
+static inline void dma_unmap_sgtable(struct device *dev, struct sg_table *sgt,
+		enum dma_data_direction dir, unsigned long attrs)
+{
+	dma_unmap_sg_attrs(dev, sgt->sgl, sgt->orig_nents, dir, attrs);
+}
+
+/**
+ * dma_sync_sgtable_for_cpu - Synchronize the given buffer for CPU access
+ * @dev:	The device for which to perform the DMA operation
+ * @sgt:	The sg_table object describing the buffer
+ * @dir:	DMA direction
+ *
+ * Performs the needed cache synchronization and moves the ownership of the
+ * buffer back to the CPU domain, so it is safe to perform any access to it
+ * by the CPU. Before doing any further DMA operations, one has to transfer
+ * the ownership of the buffer back to the DMA domain by calling the
+ * dma_sync_sgtable_for_device().
+ */
+static inline void dma_sync_sgtable_for_cpu(struct device *dev,
+		struct sg_table *sgt, enum dma_data_direction dir)
+{
+	dma_sync_sg_for_cpu(dev, sgt->sgl, sgt->orig_nents, dir);
+}
+
+/**
+ * dma_sync_sgtable_for_device - Synchronize the given buffer for DMA
+ * @dev:	The device for which to perform the DMA operation
+ * @sgt:	The sg_table object describing the buffer
+ * @dir:	DMA direction
+ *
+ * Performs the needed cache synchronization and moves the ownership of the
+ * buffer back to the DMA domain, so it is safe to perform the DMA operation.
+ * Once finished, one has to call dma_sync_sgtable_for_cpu() or
+ * dma_unmap_sgtable().
+ */
+static inline void dma_sync_sgtable_for_device(struct device *dev,
+		struct sg_table *sgt, enum dma_data_direction dir)
+{
+	dma_sync_sg_for_device(dev, sgt->sgl, sgt->orig_nents, dir);
+}
+
 #define dma_map_single(d, a, s, r) dma_map_single_attrs(d, a, s, r, 0)
 #define dma_unmap_single(d, a, s, r) dma_unmap_single_attrs(d, a, s, r, 0)
 #define dma_map_sg(d, s, n, r) dma_map_sg_attrs(d, s, n, r, 0)
-- 
1.9.1

_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

WARNING: multiple messages have this Message-ID (diff)
From: Marek Szyprowski <m.szyprowski@samsung.com>
To: dri-devel@lists.freedesktop.org,
	iommu@lists.linux-foundation.org, linaro-mm-sig@lists.linaro.org,
	linux-kernel@vger.kernel.org
Cc: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>,
	David Airlie <airlied@linux.ie>, Daniel Vetter <daniel@ffwll.ch>,
	Robin Murphy <robin.murphy@arm.com>,
	Christoph Hellwig <hch@lst.de>,
	linux-arm-kernel@lists.infradead.org,
	Marek Szyprowski <m.szyprowski@samsung.com>
Subject: [PATCH v5 01/38] dma-mapping: add generic helpers for mapping sgtable objects
Date: Wed, 13 May 2020 15:32:08 +0200	[thread overview]
Message-ID: <20200513133245.6408-1-m.szyprowski@samsung.com> (raw)
In-Reply-To: <20200513132114.6046-1-m.szyprowski@samsung.com>

struct sg_table is a common structure used for describing a memory
buffer. It consists of a scatterlist with memory pages and DMA addresses
(sgl entry), as well as the number of scatterlist entries: CPU pages
(orig_nents entry) and DMA mapped pages (nents entry).

It turned out that it was a common mistake to misuse nents and orig_nents
entries, calling DMA-mapping functions with a wrong number of entries or
ignoring the number of mapped entries returned by the dma_map_sg
function.

To avoid such issues, let's introduce a common wrappers operating directly
on the struct sg_table objects, which take care of the proper use of
the nents and orig_nents entries.

Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Robin Murphy <robin.murphy@arm.com> 
---
For more information, see '[PATCH v5 00/38] DRM: fix struct sg_table nents
vs. orig_nents misuse' thread:
https://lore.kernel.org/linux-iommu/20200513132114.6046-1-m.szyprowski@samsung.com/T/
---
 include/linux/dma-mapping.h | 78 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 78 insertions(+)

diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h
index b43116a..b50fe36 100644
--- a/include/linux/dma-mapping.h
+++ b/include/linux/dma-mapping.h
@@ -609,6 +609,84 @@ static inline void dma_sync_single_range_for_device(struct device *dev,
 	return dma_sync_single_for_device(dev, addr + offset, size, dir);
 }
 
+/**
+ * dma_map_sgtable - Map the given buffer for DMA
+ * @dev:	The device for which to perform the DMA operation
+ * @sgt:	The sg_table object describing the buffer
+ * @dir:	DMA direction
+ * @attrs:	Optional DMA attributes for the map operation
+ *
+ * Maps a buffer described by a scatterlist stored in the given sg_table
+ * object for the @dir DMA operation by the @dev device. After success
+ * the ownership for the buffer is transferred to the DMA domain. One has
+ * to call dma_sync_sgtable_for_cpu() or dma_unmap_sgtable() to move the
+ * ownership of the buffer back to the CPU domain before touching the
+ * buffer by the CPU.
+ * Returns 0 on success or -EINVAL on error during mapping the buffer.
+ */
+static inline int dma_map_sgtable(struct device *dev, struct sg_table *sgt,
+		enum dma_data_direction dir, unsigned long attrs)
+{
+	int n = dma_map_sg_attrs(dev, sgt->sgl, sgt->orig_nents, dir, attrs);
+
+	if (n <= 0)
+		return -EINVAL;
+	sgt->nents = n;
+	return 0;
+}
+
+/**
+ * dma_unmap_sgtable - Unmap the given buffer for DMA
+ * @dev:	The device for which to perform the DMA operation
+ * @sgt:	The sg_table object describing the buffer
+ * @dir:	DMA direction
+ * @attrs:	Optional DMA attributes for the unmap operation
+ *
+ * Unmaps a buffer described by a scatterlist stored in the given sg_table
+ * object for the @dir DMA operation by the @dev device. After this function
+ * the ownership of the buffer is transferred back to the CPU domain.
+ */
+static inline void dma_unmap_sgtable(struct device *dev, struct sg_table *sgt,
+		enum dma_data_direction dir, unsigned long attrs)
+{
+	dma_unmap_sg_attrs(dev, sgt->sgl, sgt->orig_nents, dir, attrs);
+}
+
+/**
+ * dma_sync_sgtable_for_cpu - Synchronize the given buffer for CPU access
+ * @dev:	The device for which to perform the DMA operation
+ * @sgt:	The sg_table object describing the buffer
+ * @dir:	DMA direction
+ *
+ * Performs the needed cache synchronization and moves the ownership of the
+ * buffer back to the CPU domain, so it is safe to perform any access to it
+ * by the CPU. Before doing any further DMA operations, one has to transfer
+ * the ownership of the buffer back to the DMA domain by calling the
+ * dma_sync_sgtable_for_device().
+ */
+static inline void dma_sync_sgtable_for_cpu(struct device *dev,
+		struct sg_table *sgt, enum dma_data_direction dir)
+{
+	dma_sync_sg_for_cpu(dev, sgt->sgl, sgt->orig_nents, dir);
+}
+
+/**
+ * dma_sync_sgtable_for_device - Synchronize the given buffer for DMA
+ * @dev:	The device for which to perform the DMA operation
+ * @sgt:	The sg_table object describing the buffer
+ * @dir:	DMA direction
+ *
+ * Performs the needed cache synchronization and moves the ownership of the
+ * buffer back to the DMA domain, so it is safe to perform the DMA operation.
+ * Once finished, one has to call dma_sync_sgtable_for_cpu() or
+ * dma_unmap_sgtable().
+ */
+static inline void dma_sync_sgtable_for_device(struct device *dev,
+		struct sg_table *sgt, enum dma_data_direction dir)
+{
+	dma_sync_sg_for_device(dev, sgt->sgl, sgt->orig_nents, dir);
+}
+
 #define dma_map_single(d, a, s, r) dma_map_single_attrs(d, a, s, r, 0)
 #define dma_unmap_single(d, a, s, r) dma_unmap_single_attrs(d, a, s, r, 0)
 #define dma_map_sg(d, s, n, r) dma_map_sg_attrs(d, s, n, r, 0)
-- 
1.9.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

WARNING: multiple messages have this Message-ID (diff)
From: Marek Szyprowski <m.szyprowski@samsung.com>
To: dri-devel@lists.freedesktop.org,
	iommu@lists.linux-foundation.org, linaro-mm-sig@lists.linaro.org,
	linux-kernel@vger.kernel.org
Cc: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>,
	David Airlie <airlied@linux.ie>,
	Robin Murphy <robin.murphy@arm.com>,
	Christoph Hellwig <hch@lst.de>,
	linux-arm-kernel@lists.infradead.org,
	Marek Szyprowski <m.szyprowski@samsung.com>
Subject: [PATCH v5 01/38] dma-mapping: add generic helpers for mapping sgtable objects
Date: Wed, 13 May 2020 15:32:08 +0200	[thread overview]
Message-ID: <20200513133245.6408-1-m.szyprowski@samsung.com> (raw)
In-Reply-To: <20200513132114.6046-1-m.szyprowski@samsung.com>

struct sg_table is a common structure used for describing a memory
buffer. It consists of a scatterlist with memory pages and DMA addresses
(sgl entry), as well as the number of scatterlist entries: CPU pages
(orig_nents entry) and DMA mapped pages (nents entry).

It turned out that it was a common mistake to misuse nents and orig_nents
entries, calling DMA-mapping functions with a wrong number of entries or
ignoring the number of mapped entries returned by the dma_map_sg
function.

To avoid such issues, let's introduce a common wrappers operating directly
on the struct sg_table objects, which take care of the proper use of
the nents and orig_nents entries.

Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Robin Murphy <robin.murphy@arm.com> 
---
For more information, see '[PATCH v5 00/38] DRM: fix struct sg_table nents
vs. orig_nents misuse' thread:
https://lore.kernel.org/linux-iommu/20200513132114.6046-1-m.szyprowski@samsung.com/T/
---
 include/linux/dma-mapping.h | 78 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 78 insertions(+)

diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h
index b43116a..b50fe36 100644
--- a/include/linux/dma-mapping.h
+++ b/include/linux/dma-mapping.h
@@ -609,6 +609,84 @@ static inline void dma_sync_single_range_for_device(struct device *dev,
 	return dma_sync_single_for_device(dev, addr + offset, size, dir);
 }
 
+/**
+ * dma_map_sgtable - Map the given buffer for DMA
+ * @dev:	The device for which to perform the DMA operation
+ * @sgt:	The sg_table object describing the buffer
+ * @dir:	DMA direction
+ * @attrs:	Optional DMA attributes for the map operation
+ *
+ * Maps a buffer described by a scatterlist stored in the given sg_table
+ * object for the @dir DMA operation by the @dev device. After success
+ * the ownership for the buffer is transferred to the DMA domain. One has
+ * to call dma_sync_sgtable_for_cpu() or dma_unmap_sgtable() to move the
+ * ownership of the buffer back to the CPU domain before touching the
+ * buffer by the CPU.
+ * Returns 0 on success or -EINVAL on error during mapping the buffer.
+ */
+static inline int dma_map_sgtable(struct device *dev, struct sg_table *sgt,
+		enum dma_data_direction dir, unsigned long attrs)
+{
+	int n = dma_map_sg_attrs(dev, sgt->sgl, sgt->orig_nents, dir, attrs);
+
+	if (n <= 0)
+		return -EINVAL;
+	sgt->nents = n;
+	return 0;
+}
+
+/**
+ * dma_unmap_sgtable - Unmap the given buffer for DMA
+ * @dev:	The device for which to perform the DMA operation
+ * @sgt:	The sg_table object describing the buffer
+ * @dir:	DMA direction
+ * @attrs:	Optional DMA attributes for the unmap operation
+ *
+ * Unmaps a buffer described by a scatterlist stored in the given sg_table
+ * object for the @dir DMA operation by the @dev device. After this function
+ * the ownership of the buffer is transferred back to the CPU domain.
+ */
+static inline void dma_unmap_sgtable(struct device *dev, struct sg_table *sgt,
+		enum dma_data_direction dir, unsigned long attrs)
+{
+	dma_unmap_sg_attrs(dev, sgt->sgl, sgt->orig_nents, dir, attrs);
+}
+
+/**
+ * dma_sync_sgtable_for_cpu - Synchronize the given buffer for CPU access
+ * @dev:	The device for which to perform the DMA operation
+ * @sgt:	The sg_table object describing the buffer
+ * @dir:	DMA direction
+ *
+ * Performs the needed cache synchronization and moves the ownership of the
+ * buffer back to the CPU domain, so it is safe to perform any access to it
+ * by the CPU. Before doing any further DMA operations, one has to transfer
+ * the ownership of the buffer back to the DMA domain by calling the
+ * dma_sync_sgtable_for_device().
+ */
+static inline void dma_sync_sgtable_for_cpu(struct device *dev,
+		struct sg_table *sgt, enum dma_data_direction dir)
+{
+	dma_sync_sg_for_cpu(dev, sgt->sgl, sgt->orig_nents, dir);
+}
+
+/**
+ * dma_sync_sgtable_for_device - Synchronize the given buffer for DMA
+ * @dev:	The device for which to perform the DMA operation
+ * @sgt:	The sg_table object describing the buffer
+ * @dir:	DMA direction
+ *
+ * Performs the needed cache synchronization and moves the ownership of the
+ * buffer back to the DMA domain, so it is safe to perform the DMA operation.
+ * Once finished, one has to call dma_sync_sgtable_for_cpu() or
+ * dma_unmap_sgtable().
+ */
+static inline void dma_sync_sgtable_for_device(struct device *dev,
+		struct sg_table *sgt, enum dma_data_direction dir)
+{
+	dma_sync_sg_for_device(dev, sgt->sgl, sgt->orig_nents, dir);
+}
+
 #define dma_map_single(d, a, s, r) dma_map_single_attrs(d, a, s, r, 0)
 #define dma_unmap_single(d, a, s, r) dma_unmap_single_attrs(d, a, s, r, 0)
 #define dma_map_sg(d, s, n, r) dma_map_sg_attrs(d, s, n, r, 0)
-- 
1.9.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

  parent reply	other threads:[~2020-05-13 13:33 UTC|newest]

Thread overview: 241+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20200513132127eucas1p23f6be10bbd627e69e36d2451068b3204@eucas1p2.samsung.com>
2020-05-13 13:21 ` [PATCH v5 00/38] DRM: fix struct sg_table nents vs. orig_nents misuse Marek Szyprowski
2020-05-13 13:21   ` Marek Szyprowski
2020-05-13 13:21   ` Marek Szyprowski
2020-05-13 13:21   ` Marek Szyprowski
     [not found]   ` <CGME20200513133256eucas1p273110d0c8f67e52fc7385acef776efaa@eucas1p2.samsung.com>
2020-05-13 13:32     ` Marek Szyprowski [this message]
2020-05-13 13:32       ` [PATCH v5 01/38] dma-mapping: add generic helpers for mapping sgtable objects Marek Szyprowski
2020-05-13 13:32       ` Marek Szyprowski
2020-05-13 13:32       ` Marek Szyprowski
     [not found]       ` <CGME20200513133257eucas1p1613a28a71a6c328c406397f7094534d1@eucas1p1.samsung.com>
2020-05-13 13:32         ` [PATCH v5 02/38] scatterlist: add generic wrappers for iterating over " Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
     [not found]       ` <CGME20200513133258eucas1p2e8ffb90e5553c12419a5af5261b48f5e@eucas1p2.samsung.com>
2020-05-13 13:32         ` [PATCH v5 03/38] iommu: add generic helper for mapping " Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
     [not found]       ` <CGME20200513133258eucas1p1eba6e0ced0c749655f028206d5f84b7a@eucas1p1.samsung.com>
2020-05-13 13:32         ` [PATCH v5 04/38] drm: prime: add common helper to check scatterlist contiguity Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
     [not found]       ` <CGME20200513133259eucas1p273f0e05005b7b1158d884295d35745fd@eucas1p2.samsung.com>
2020-05-13 13:32         ` [PATCH v5 05/38] drm: prime: use sgtable iterators in drm_prime_sg_to_page_addr_arrays() Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-09-21 23:15           ` Alex Goins
2020-09-21 23:15             ` Alex Goins
2020-09-21 23:15             ` Alex Goins
2020-09-21 23:15             ` Alex Goins
2020-09-22  6:27             ` Marek Szyprowski
2020-09-22  6:27               ` Marek Szyprowski
2020-09-22  6:27               ` Marek Szyprowski
2020-09-22  6:27               ` Marek Szyprowski
2020-09-22 21:12               ` Alex Goins
2020-09-22 21:12                 ` Alex Goins
2020-09-22 21:12                 ` Alex Goins
2020-09-22 21:12                 ` Alex Goins
2020-09-25 21:23               ` [Linaro-mm-sig] " Alex Deucher
2020-09-25 21:23                 ` Alex Deucher
2020-09-25 21:23                 ` Alex Deucher
2020-09-25 21:23                 ` Alex Deucher
2020-09-30  7:15                 ` Marek Szyprowski
2020-09-30  7:15                   ` Marek Szyprowski
2020-09-30  7:15                   ` Marek Szyprowski
2020-09-30  7:15                   ` Marek Szyprowski
     [not found]       ` <CGME20200513133300eucas1p2fced04876641789a0f5623e70c910690@eucas1p2.samsung.com>
2020-05-13 13:32         ` [PATCH v5 06/38] drm: core: fix common struct sg_table related issues Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
     [not found]       ` <CGME20200513133301eucas1p244d094c774ad0efd5ea9125747d5cb1b@eucas1p2.samsung.com>
2020-05-13 13:32         ` [PATCH v5 07/38] drm: amdgpu: " Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
     [not found]       ` <CGME20200513133301eucas1p28c059d25e488ed5ec10feb8f414a1af2@eucas1p2.samsung.com>
2020-05-13 13:32         ` [PATCH v5 08/38] drm: armada: " Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
     [not found]       ` <CGME20200513133302eucas1p1edbd033e0137d0c973f82c409d3a4e5d@eucas1p1.samsung.com>
2020-05-13 13:32         ` [PATCH v5 09/38] drm: etnaviv: " Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
     [not found]       ` <CGME20200513133303eucas1p1e3ede8aa38f730d2be317dff27c03019@eucas1p1.samsung.com>
2020-05-13 13:32         ` [PATCH v5 10/38] drm: exynos: use common helper for a scatterlist contiguity check Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
     [not found]       ` <CGME20200513133304eucas1p1114334ce7250cf8189553a22080b69f4@eucas1p1.samsung.com>
2020-05-13 13:32         ` [PATCH v5 11/38] drm: exynos: fix common struct sg_table related issues Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
     [not found]       ` <CGME20200513133304eucas1p2d24ddf9d7d60aad254486010db86e6bc@eucas1p2.samsung.com>
2020-05-13 13:32         ` [PATCH v5 12/38] drm: i915: " Marek Szyprowski
2020-05-13 13:32           ` [Intel-gfx] " Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
     [not found]       ` <CGME20200513133305eucas1p15187ed8fa1e4af181cafa5c65ddab4cd@eucas1p1.samsung.com>
2020-05-13 13:32         ` [PATCH v5 13/38] drm: lima: " Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-18  1:27           ` Qiang Yu
2020-05-18  1:27             ` Qiang Yu
2020-05-18  1:27             ` Qiang Yu
2020-05-18  1:27             ` Qiang Yu
     [not found]       ` <CGME20200513133306eucas1p1ab15386cc4bbcf09052a8175d3660997@eucas1p1.samsung.com>
2020-05-13 13:32         ` [PATCH v5 14/38] drm: mediatek: use common helper for a scatterlist contiguity check Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
     [not found]       ` <CGME20200513133307eucas1p1da70ed30775467792f4898ccce829d02@eucas1p1.samsung.com>
2020-05-13 13:32         ` [PATCH v5 15/38] drm: mediatek: use common helper for extracting pages array Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
     [not found]       ` <CGME20200513133308eucas1p205607f34ec3d6df747e21c9b27204ca3@eucas1p2.samsung.com>
2020-05-13 13:32         ` [PATCH v5 16/38] drm: msm: fix common struct sg_table related issues Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
     [not found]       ` <CGME20200513133308eucas1p248892466634483dfa3b23f11e4da0e68@eucas1p2.samsung.com>
2020-05-13 13:32         ` [PATCH v5 17/38] drm: omapdrm: use common helper for extracting pages array Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
     [not found]       ` <CGME20200513133309eucas1p1b5b2505556566570e6fb3433397c6168@eucas1p1.samsung.com>
2020-05-13 13:32         ` [PATCH v5 18/38] drm: omapdrm: fix common struct sg_table related issues Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
     [not found]       ` <CGME20200513133310eucas1p176c920345e7f05f670e26e330b358d7f@eucas1p1.samsung.com>
2020-05-13 13:32         ` [PATCH v5 19/38] drm: panfrost: " Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-14 13:51           ` Rob Herring
2020-05-14 13:51             ` Rob Herring
2020-05-14 13:51             ` Rob Herring
2020-05-14 13:51             ` Rob Herring
     [not found]       ` <CGME20200513133311eucas1p261d84f947b03e4fc733137048aab55fb@eucas1p2.samsung.com>
2020-05-13 13:32         ` [PATCH v5 20/38] drm: radeon: " Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
     [not found]       ` <CGME20200513133312eucas1p15e5e3bb3ba8e74b923fdccc7decab375@eucas1p1.samsung.com>
2020-05-13 13:32         ` [PATCH v5 21/38] drm: rockchip: use common helper for a scatterlist contiguity check Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
     [not found]       ` <CGME20200513133312eucas1p2fc1186c0aeee2367898fc0c146f1ed52@eucas1p2.samsung.com>
2020-05-13 13:32         ` [PATCH v5 22/38] drm: rockchip: fix common struct sg_table related issues Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
     [not found]       ` <CGME20200513133314eucas1p1a607b556e32887e7f5ca60eb09a476c6@eucas1p1.samsung.com>
2020-05-13 13:32         ` [PATCH v5 24/38] drm: v3d: " Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 21:51           ` Eric Anholt
2020-05-13 21:51             ` Eric Anholt
2020-05-13 21:51             ` Eric Anholt
2020-05-13 21:51             ` Eric Anholt
     [not found]       ` <CGME20200513133314eucas1p2f04e32d65e71c613a2a9aacb29064a7d@eucas1p2.samsung.com>
2020-05-13 13:32         ` [PATCH v5 25/38] drm: virtio: " Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-15 10:12           ` Gerd Hoffmann
2020-05-15 10:12             ` Gerd Hoffmann
2020-05-15 10:12             ` Gerd Hoffmann
2020-05-15 10:12             ` Gerd Hoffmann
     [not found]       ` <CGME20200513133315eucas1p17499a099b78c332b30911345c3963368@eucas1p1.samsung.com>
2020-05-13 13:32         ` [PATCH v5 26/38] drm: vmwgfx: " Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
     [not found]       ` <CGME20200513133316eucas1p2ad01d27ea4388cb50424bcf112d710ef@eucas1p2.samsung.com>
2020-05-13 13:32         ` [PATCH v5 27/38] xen: gntdev: " Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-18  5:17           ` Jürgen Groß
2020-05-18  5:17             ` Jürgen Groß
2020-05-18  5:17             ` Jürgen Groß
2020-05-18  5:17             ` Jürgen Groß
2020-05-18  5:17             ` Jürgen Groß
     [not found]       ` <CGME20200513133313eucas1p1fa06e23680b6d983578f598166e64cd0@eucas1p1.samsung.com>
     [not found]         ` <20200513133245.6408-1-m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2020-05-13 13:32           ` [PATCH v5 23/38] drm: tegra: " Marek Szyprowski
2020-05-13 13:32             ` Marek Szyprowski
2020-05-13 13:32             ` Marek Szyprowski
2020-05-13 13:32             ` Marek Szyprowski
2020-05-13 13:32             ` Marek Szyprowski
2020-05-13 13:32           ` [PATCH v5 28/38] drm: host1x: " Marek Szyprowski
2020-05-13 13:32             ` Marek Szyprowski
2020-05-13 13:32             ` Marek Szyprowski
2020-05-13 13:32             ` Marek Szyprowski
2020-05-13 13:32             ` Marek Szyprowski
2020-05-13 13:32           ` [PATCH v5 33/38] staging: tegra-vde: " Marek Szyprowski
2020-05-13 13:32             ` Marek Szyprowski
2020-05-13 13:32             ` Marek Szyprowski
2020-05-13 13:32             ` Marek Szyprowski
2020-05-13 13:32             ` Marek Szyprowski
2020-05-13 13:32             ` Marek Szyprowski
     [not found]             ` <20200513133245.6408-33-m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2020-05-14 20:07               ` Dmitry Osipenko
2020-05-14 20:07                 ` Dmitry Osipenko
2020-05-14 20:07                 ` Dmitry Osipenko
2020-05-14 20:07                 ` Dmitry Osipenko
2020-05-14 20:07                 ` Dmitry Osipenko
2020-05-14 20:07                 ` Dmitry Osipenko
     [not found]       ` <CGME20200513133317eucas1p27aead4025db2da13e5b7c3e14a7cd79d@eucas1p2.samsung.com>
2020-05-13 13:32         ` [PATCH v5 29/38] drm: rcar-du: " Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 14:23           ` Laurent Pinchart
2020-05-13 14:23             ` Laurent Pinchart
2020-05-13 14:23             ` Laurent Pinchart
2020-05-13 14:23             ` Laurent Pinchart
     [not found]       ` <CGME20200513133318eucas1p1dd6c1ac6a777874c115070d8b5197f34@eucas1p1.samsung.com>
2020-05-13 13:32         ` [PATCH v5 30/38] dmabuf: " Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-15 10:13           ` Gerd Hoffmann
2020-05-15 10:13             ` Gerd Hoffmann
2020-05-15 10:13             ` Gerd Hoffmann
2020-05-15 10:13             ` Gerd Hoffmann
     [not found]       ` <CGME20200513133319eucas1p2eaae7e606163ec1b211a07a80a52655d@eucas1p2.samsung.com>
2020-05-13 13:32         ` [PATCH v5 31/38] staging: ion: remove dead code Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
     [not found]       ` <CGME20200513133320eucas1p14cc8a7155b3d9ac2e0e30db2128c1477@eucas1p1.samsung.com>
2020-05-13 13:32         ` [PATCH v5 32/38] staging: ion: fix common struct sg_table related issues Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
     [not found]       ` <CGME20200513133322eucas1p19b55463a3926b7c1459034f2b02969f8@eucas1p1.samsung.com>
2020-05-13 13:32         ` [PATCH v5 34/38] misc: fastrpc: " Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
     [not found]       ` <CGME20200513133323eucas1p1344fe42c8710f0ed84cf3c9fdb5ca515@eucas1p1.samsung.com>
2020-05-13 13:32         ` [PATCH v5 35/38] rapidio: " Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
     [not found]       ` <CGME20200513133323eucas1p1519f5901d2a4ee85b781fcc36e9601f7@eucas1p1.samsung.com>
2020-05-13 13:32         ` [PATCH v5 36/38] samples: vfio-mdev/mbochs: " Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
     [not found]       ` <CGME20200513133324eucas1p25dc380046c516ca8f07677ed14f93e63@eucas1p2.samsung.com>
2020-05-13 13:32         ` [PATCH v5 37/38] media: pci: fix common ALSA DMA-mapping related codes Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
     [not found]       ` <CGME20200513133325eucas1p1c8faf557b23b5d171b7c328eca5f6482@eucas1p1.samsung.com>
2020-05-13 13:32         ` [PATCH v5 38/38] videobuf2: use sgtable-based scatterlist wrappers Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:32           ` Marek Szyprowski
2020-05-13 13:47   ` [PATCH v5 00/38] DRM: fix struct sg_table nents vs. orig_nents misuse Christoph Hellwig
2020-05-13 13:47     ` Christoph Hellwig
2020-05-13 13:47     ` Christoph Hellwig
2020-05-26  7:01     ` Marek Szyprowski
2020-05-26  7:01       ` Marek Szyprowski
2020-05-26  7:01       ` Marek Szyprowski
2020-05-26  7:01       ` Marek Szyprowski
2020-05-26 11:31       ` Daniel Vetter
2020-05-26 11:31         ` Daniel Vetter
2020-05-26 11:31         ` Daniel Vetter
2020-05-26 11:31         ` Daniel Vetter
     [not found]   ` <CGME20200522125708eucas1p233b80b0741f087a84d47f24b6d91985f@eucas1p2.samsung.com>
2020-05-22 12:56     ` [PATCH v5 39/38] drm: xen: fix common struct sg_table related issues Marek Szyprowski
2020-05-22 12:56       ` Marek Szyprowski
2020-05-22 12:56       ` Marek Szyprowski
2020-05-22 12:56       ` Marek Szyprowski
2020-05-22 12:56       ` 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=20200513133245.6408-1-m.szyprowski@samsung.com \
    --to=m.szyprowski@samsung.com \
    --cc=airlied@linux.ie \
    --cc=b.zolnierkie@samsung.com \
    --cc=daniel@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=hch@lst.de \
    --cc=iommu@lists.linux-foundation.org \
    --cc=linaro-mm-sig@lists.linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=robin.murphy@arm.com \
    /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.