All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/5] dma_buf: remove device parameter from attach callback
@ 2018-06-01 12:00 ` Christian König
  0 siblings, 0 replies; 58+ messages in thread
From: Christian König @ 2018-06-01 12:00 UTC (permalink / raw)
  To: linaro-mm-sig, linux-media, dri-devel, amd-gfx; +Cc: sumit.semwal

The device parameter is completely unused because it is available in the
attachment structure as well.

Signed-off-by: Christian König <christian.koenig@amd.com>
---
 drivers/dma-buf/dma-buf.c                             | 2 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c             | 3 +--
 drivers/gpu/drm/drm_prime.c                           | 3 +--
 drivers/gpu/drm/udl/udl_dmabuf.c                      | 1 -
 drivers/gpu/drm/vmwgfx/vmwgfx_prime.c                 | 1 -
 drivers/media/common/videobuf2/videobuf2-dma-contig.c | 2 +-
 drivers/media/common/videobuf2/videobuf2-dma-sg.c     | 2 +-
 drivers/media/common/videobuf2/videobuf2-vmalloc.c    | 2 +-
 include/drm/drm_prime.h                               | 2 +-
 include/linux/dma-buf.h                               | 3 +--
 10 files changed, 8 insertions(+), 13 deletions(-)

diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
index d78d5fc173dc..e99a8d19991b 100644
--- a/drivers/dma-buf/dma-buf.c
+++ b/drivers/dma-buf/dma-buf.c
@@ -568,7 +568,7 @@ struct dma_buf_attachment *dma_buf_attach(struct dma_buf *dmabuf,
 	mutex_lock(&dmabuf->lock);
 
 	if (dmabuf->ops->attach) {
-		ret = dmabuf->ops->attach(dmabuf, dev, attach);
+		ret = dmabuf->ops->attach(dmabuf, attach);
 		if (ret)
 			goto err_attach;
 	}
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
index 4683626b065f..f1500f1ec0f5 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
@@ -133,7 +133,6 @@ amdgpu_gem_prime_import_sg_table(struct drm_device *dev,
 }
 
 static int amdgpu_gem_map_attach(struct dma_buf *dma_buf,
-				 struct device *target_dev,
 				 struct dma_buf_attachment *attach)
 {
 	struct drm_gem_object *obj = dma_buf->priv;
@@ -141,7 +140,7 @@ static int amdgpu_gem_map_attach(struct dma_buf *dma_buf,
 	struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
 	long r;
 
-	r = drm_gem_map_attach(dma_buf, target_dev, attach);
+	r = drm_gem_map_attach(dma_buf, attach);
 	if (r)
 		return r;
 
diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
index 7856a9b3f8a8..4a3a232fea67 100644
--- a/drivers/gpu/drm/drm_prime.c
+++ b/drivers/gpu/drm/drm_prime.c
@@ -186,7 +186,6 @@ static int drm_prime_lookup_buf_handle(struct drm_prime_file_private *prime_fpri
 /**
  * drm_gem_map_attach - dma_buf attach implementation for GEM
  * @dma_buf: buffer to attach device to
- * @target_dev: not used
  * @attach: buffer attachment data
  *
  * Allocates &drm_prime_attachment and calls &drm_driver.gem_prime_pin for
@@ -195,7 +194,7 @@ static int drm_prime_lookup_buf_handle(struct drm_prime_file_private *prime_fpri
  *
  * Returns 0 on success, negative error code on failure.
  */
-int drm_gem_map_attach(struct dma_buf *dma_buf, struct device *target_dev,
+int drm_gem_map_attach(struct dma_buf *dma_buf,
 		       struct dma_buf_attachment *attach)
 {
 	struct drm_prime_attachment *prime_attach;
diff --git a/drivers/gpu/drm/udl/udl_dmabuf.c b/drivers/gpu/drm/udl/udl_dmabuf.c
index 2867ed155ff6..5fdc8bdc2026 100644
--- a/drivers/gpu/drm/udl/udl_dmabuf.c
+++ b/drivers/gpu/drm/udl/udl_dmabuf.c
@@ -29,7 +29,6 @@ struct udl_drm_dmabuf_attachment {
 };
 
 static int udl_attach_dma_buf(struct dma_buf *dmabuf,
-			      struct device *dev,
 			      struct dma_buf_attachment *attach)
 {
 	struct udl_drm_dmabuf_attachment *udl_attach;
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
index 0d42a46521fc..fbffb37ccf42 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
@@ -40,7 +40,6 @@
  */
 
 static int vmw_prime_map_attach(struct dma_buf *dma_buf,
-				struct device *target_dev,
 				struct dma_buf_attachment *attach)
 {
 	return -ENOSYS;
diff --git a/drivers/media/common/videobuf2/videobuf2-dma-contig.c b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
index f1178f6f434d..12d0072c52c2 100644
--- a/drivers/media/common/videobuf2/videobuf2-dma-contig.c
+++ b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
@@ -222,7 +222,7 @@ struct vb2_dc_attachment {
 	enum dma_data_direction dma_dir;
 };
 
-static int vb2_dc_dmabuf_ops_attach(struct dma_buf *dbuf, struct device *dev,
+static int vb2_dc_dmabuf_ops_attach(struct dma_buf *dbuf,
 	struct dma_buf_attachment *dbuf_attach)
 {
 	struct vb2_dc_attachment *attach;
diff --git a/drivers/media/common/videobuf2/videobuf2-dma-sg.c b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
index 753ed3138dcc..cf94765e593f 100644
--- a/drivers/media/common/videobuf2/videobuf2-dma-sg.c
+++ b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
@@ -371,7 +371,7 @@ struct vb2_dma_sg_attachment {
 	enum dma_data_direction dma_dir;
 };
 
-static int vb2_dma_sg_dmabuf_ops_attach(struct dma_buf *dbuf, struct device *dev,
+static int vb2_dma_sg_dmabuf_ops_attach(struct dma_buf *dbuf,
 	struct dma_buf_attachment *dbuf_attach)
 {
 	struct vb2_dma_sg_attachment *attach;
diff --git a/drivers/media/common/videobuf2/videobuf2-vmalloc.c b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
index 3a7c80cd1a17..298ffb9ecdae 100644
--- a/drivers/media/common/videobuf2/videobuf2-vmalloc.c
+++ b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
@@ -209,7 +209,7 @@ struct vb2_vmalloc_attachment {
 	enum dma_data_direction dma_dir;
 };
 
-static int vb2_vmalloc_dmabuf_ops_attach(struct dma_buf *dbuf, struct device *dev,
+static int vb2_vmalloc_dmabuf_ops_attach(struct dma_buf *dbuf,
 	struct dma_buf_attachment *dbuf_attach)
 {
 	struct vb2_vmalloc_attachment *attach;
diff --git a/include/drm/drm_prime.h b/include/drm/drm_prime.h
index 4d5f5d6cf6a6..ef338151cea8 100644
--- a/include/drm/drm_prime.h
+++ b/include/drm/drm_prime.h
@@ -82,7 +82,7 @@ int drm_gem_prime_fd_to_handle(struct drm_device *dev,
 struct dma_buf *drm_gem_dmabuf_export(struct drm_device *dev,
 				      struct dma_buf_export_info *exp_info);
 void drm_gem_dmabuf_release(struct dma_buf *dma_buf);
-int drm_gem_map_attach(struct dma_buf *dma_buf, struct device *target_dev,
+int drm_gem_map_attach(struct dma_buf *dma_buf,
 		       struct dma_buf_attachment *attach);
 void drm_gem_map_detach(struct dma_buf *dma_buf,
 			struct dma_buf_attachment *attach);
diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
index 085db2fee2d7..346caf77937f 100644
--- a/include/linux/dma-buf.h
+++ b/include/linux/dma-buf.h
@@ -77,8 +77,7 @@ struct dma_buf_ops {
 	 * to signal that backing storage is already allocated and incompatible
 	 * with the requirements of requesting device.
 	 */
-	int (*attach)(struct dma_buf *, struct device *,
-		      struct dma_buf_attachment *);
+	int (*attach)(struct dma_buf *, struct dma_buf_attachment *);
 
 	/**
 	 * @detach:
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 58+ messages in thread

* [PATCH 1/5] dma_buf: remove device parameter from attach callback
@ 2018-06-01 12:00 ` Christian König
  0 siblings, 0 replies; 58+ messages in thread
From: Christian König @ 2018-06-01 12:00 UTC (permalink / raw)
  To: linaro-mm-sig, linux-media, dri-devel, amd-gfx

The device parameter is completely unused because it is available in the
attachment structure as well.

Signed-off-by: Christian König <christian.koenig@amd.com>
---
 drivers/dma-buf/dma-buf.c                             | 2 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c             | 3 +--
 drivers/gpu/drm/drm_prime.c                           | 3 +--
 drivers/gpu/drm/udl/udl_dmabuf.c                      | 1 -
 drivers/gpu/drm/vmwgfx/vmwgfx_prime.c                 | 1 -
 drivers/media/common/videobuf2/videobuf2-dma-contig.c | 2 +-
 drivers/media/common/videobuf2/videobuf2-dma-sg.c     | 2 +-
 drivers/media/common/videobuf2/videobuf2-vmalloc.c    | 2 +-
 include/drm/drm_prime.h                               | 2 +-
 include/linux/dma-buf.h                               | 3 +--
 10 files changed, 8 insertions(+), 13 deletions(-)

diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
index d78d5fc173dc..e99a8d19991b 100644
--- a/drivers/dma-buf/dma-buf.c
+++ b/drivers/dma-buf/dma-buf.c
@@ -568,7 +568,7 @@ struct dma_buf_attachment *dma_buf_attach(struct dma_buf *dmabuf,
 	mutex_lock(&dmabuf->lock);
 
 	if (dmabuf->ops->attach) {
-		ret = dmabuf->ops->attach(dmabuf, dev, attach);
+		ret = dmabuf->ops->attach(dmabuf, attach);
 		if (ret)
 			goto err_attach;
 	}
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
index 4683626b065f..f1500f1ec0f5 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
@@ -133,7 +133,6 @@ amdgpu_gem_prime_import_sg_table(struct drm_device *dev,
 }
 
 static int amdgpu_gem_map_attach(struct dma_buf *dma_buf,
-				 struct device *target_dev,
 				 struct dma_buf_attachment *attach)
 {
 	struct drm_gem_object *obj = dma_buf->priv;
@@ -141,7 +140,7 @@ static int amdgpu_gem_map_attach(struct dma_buf *dma_buf,
 	struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
 	long r;
 
-	r = drm_gem_map_attach(dma_buf, target_dev, attach);
+	r = drm_gem_map_attach(dma_buf, attach);
 	if (r)
 		return r;
 
diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
index 7856a9b3f8a8..4a3a232fea67 100644
--- a/drivers/gpu/drm/drm_prime.c
+++ b/drivers/gpu/drm/drm_prime.c
@@ -186,7 +186,6 @@ static int drm_prime_lookup_buf_handle(struct drm_prime_file_private *prime_fpri
 /**
  * drm_gem_map_attach - dma_buf attach implementation for GEM
  * @dma_buf: buffer to attach device to
- * @target_dev: not used
  * @attach: buffer attachment data
  *
  * Allocates &drm_prime_attachment and calls &drm_driver.gem_prime_pin for
@@ -195,7 +194,7 @@ static int drm_prime_lookup_buf_handle(struct drm_prime_file_private *prime_fpri
  *
  * Returns 0 on success, negative error code on failure.
  */
-int drm_gem_map_attach(struct dma_buf *dma_buf, struct device *target_dev,
+int drm_gem_map_attach(struct dma_buf *dma_buf,
 		       struct dma_buf_attachment *attach)
 {
 	struct drm_prime_attachment *prime_attach;
diff --git a/drivers/gpu/drm/udl/udl_dmabuf.c b/drivers/gpu/drm/udl/udl_dmabuf.c
index 2867ed155ff6..5fdc8bdc2026 100644
--- a/drivers/gpu/drm/udl/udl_dmabuf.c
+++ b/drivers/gpu/drm/udl/udl_dmabuf.c
@@ -29,7 +29,6 @@ struct udl_drm_dmabuf_attachment {
 };
 
 static int udl_attach_dma_buf(struct dma_buf *dmabuf,
-			      struct device *dev,
 			      struct dma_buf_attachment *attach)
 {
 	struct udl_drm_dmabuf_attachment *udl_attach;
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
index 0d42a46521fc..fbffb37ccf42 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
@@ -40,7 +40,6 @@
  */
 
 static int vmw_prime_map_attach(struct dma_buf *dma_buf,
-				struct device *target_dev,
 				struct dma_buf_attachment *attach)
 {
 	return -ENOSYS;
diff --git a/drivers/media/common/videobuf2/videobuf2-dma-contig.c b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
index f1178f6f434d..12d0072c52c2 100644
--- a/drivers/media/common/videobuf2/videobuf2-dma-contig.c
+++ b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
@@ -222,7 +222,7 @@ struct vb2_dc_attachment {
 	enum dma_data_direction dma_dir;
 };
 
-static int vb2_dc_dmabuf_ops_attach(struct dma_buf *dbuf, struct device *dev,
+static int vb2_dc_dmabuf_ops_attach(struct dma_buf *dbuf,
 	struct dma_buf_attachment *dbuf_attach)
 {
 	struct vb2_dc_attachment *attach;
diff --git a/drivers/media/common/videobuf2/videobuf2-dma-sg.c b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
index 753ed3138dcc..cf94765e593f 100644
--- a/drivers/media/common/videobuf2/videobuf2-dma-sg.c
+++ b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
@@ -371,7 +371,7 @@ struct vb2_dma_sg_attachment {
 	enum dma_data_direction dma_dir;
 };
 
-static int vb2_dma_sg_dmabuf_ops_attach(struct dma_buf *dbuf, struct device *dev,
+static int vb2_dma_sg_dmabuf_ops_attach(struct dma_buf *dbuf,
 	struct dma_buf_attachment *dbuf_attach)
 {
 	struct vb2_dma_sg_attachment *attach;
diff --git a/drivers/media/common/videobuf2/videobuf2-vmalloc.c b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
index 3a7c80cd1a17..298ffb9ecdae 100644
--- a/drivers/media/common/videobuf2/videobuf2-vmalloc.c
+++ b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
@@ -209,7 +209,7 @@ struct vb2_vmalloc_attachment {
 	enum dma_data_direction dma_dir;
 };
 
-static int vb2_vmalloc_dmabuf_ops_attach(struct dma_buf *dbuf, struct device *dev,
+static int vb2_vmalloc_dmabuf_ops_attach(struct dma_buf *dbuf,
 	struct dma_buf_attachment *dbuf_attach)
 {
 	struct vb2_vmalloc_attachment *attach;
diff --git a/include/drm/drm_prime.h b/include/drm/drm_prime.h
index 4d5f5d6cf6a6..ef338151cea8 100644
--- a/include/drm/drm_prime.h
+++ b/include/drm/drm_prime.h
@@ -82,7 +82,7 @@ int drm_gem_prime_fd_to_handle(struct drm_device *dev,
 struct dma_buf *drm_gem_dmabuf_export(struct drm_device *dev,
 				      struct dma_buf_export_info *exp_info);
 void drm_gem_dmabuf_release(struct dma_buf *dma_buf);
-int drm_gem_map_attach(struct dma_buf *dma_buf, struct device *target_dev,
+int drm_gem_map_attach(struct dma_buf *dma_buf,
 		       struct dma_buf_attachment *attach);
 void drm_gem_map_detach(struct dma_buf *dma_buf,
 			struct dma_buf_attachment *attach);
diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
index 085db2fee2d7..346caf77937f 100644
--- a/include/linux/dma-buf.h
+++ b/include/linux/dma-buf.h
@@ -77,8 +77,7 @@ struct dma_buf_ops {
 	 * to signal that backing storage is already allocated and incompatible
 	 * with the requirements of requesting device.
 	 */
-	int (*attach)(struct dma_buf *, struct device *,
-		      struct dma_buf_attachment *);
+	int (*attach)(struct dma_buf *, struct dma_buf_attachment *);
 
 	/**
 	 * @detach:
-- 
2.14.1

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

^ permalink raw reply related	[flat|nested] 58+ messages in thread

* [PATCH 2/5] dma-buf: remove kmap_atomic interface
@ 2018-06-01 12:00   ` Christian König
  0 siblings, 0 replies; 58+ messages in thread
From: Christian König @ 2018-06-01 12:00 UTC (permalink / raw)
  To: linaro-mm-sig, linux-media, dri-devel, amd-gfx; +Cc: sumit.semwal

Neither used nor correctly implemented anywhere. Just completely remove
the interface.

Signed-off-by: Christian König <christian.koenig@amd.com>
---
 drivers/dma-buf/dma-buf.c                          | 44 ----------------------
 drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c          |  2 -
 drivers/gpu/drm/armada/armada_gem.c                |  2 -
 drivers/gpu/drm/drm_prime.c                        | 26 -------------
 drivers/gpu/drm/i915/i915_gem_dmabuf.c             | 11 ------
 drivers/gpu/drm/i915/selftests/mock_dmabuf.c       |  2 -
 drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c          |  2 -
 drivers/gpu/drm/tegra/gem.c                        | 14 -------
 drivers/gpu/drm/udl/udl_dmabuf.c                   | 17 ---------
 drivers/gpu/drm/vmwgfx/vmwgfx_prime.c              | 13 -------
 .../media/common/videobuf2/videobuf2-dma-contig.c  |  1 -
 drivers/media/common/videobuf2/videobuf2-dma-sg.c  |  1 -
 drivers/media/common/videobuf2/videobuf2-vmalloc.c |  1 -
 drivers/staging/android/ion/ion.c                  |  2 -
 drivers/tee/tee_shm.c                              |  6 ---
 include/drm/drm_prime.h                            |  4 --
 include/linux/dma-buf.h                            |  4 --
 17 files changed, 152 deletions(-)

diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
index e99a8d19991b..e4c657d9fad7 100644
--- a/drivers/dma-buf/dma-buf.c
+++ b/drivers/dma-buf/dma-buf.c
@@ -405,7 +405,6 @@ struct dma_buf *dma_buf_export(const struct dma_buf_export_info *exp_info)
 			  || !exp_info->ops->map_dma_buf
 			  || !exp_info->ops->unmap_dma_buf
 			  || !exp_info->ops->release
-			  || !exp_info->ops->map_atomic
 			  || !exp_info->ops->map
 			  || !exp_info->ops->mmap)) {
 		return ERR_PTR(-EINVAL);
@@ -687,14 +686,6 @@ EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment);
  *      void \*dma_buf_kmap(struct dma_buf \*, unsigned long);
  *      void dma_buf_kunmap(struct dma_buf \*, unsigned long, void \*);
  *
- *   There are also atomic variants of these interfaces. Like for kmap they
- *   facilitate non-blocking fast-paths. Neither the importer nor the exporter
- *   (in the callback) is allowed to block when using these.
- *
- *   Interfaces::
- *      void \*dma_buf_kmap_atomic(struct dma_buf \*, unsigned long);
- *      void dma_buf_kunmap_atomic(struct dma_buf \*, unsigned long, void \*);
- *
  *   For importers all the restrictions of using kmap apply, like the limited
  *   supply of kmap_atomic slots. Hence an importer shall only hold onto at
  *   max 2 atomic dma_buf kmaps at the same time (in any given process context).
@@ -859,41 +850,6 @@ int dma_buf_end_cpu_access(struct dma_buf *dmabuf,
 }
 EXPORT_SYMBOL_GPL(dma_buf_end_cpu_access);
 
-/**
- * dma_buf_kmap_atomic - Map a page of the buffer object into kernel address
- * space. The same restrictions as for kmap_atomic and friends apply.
- * @dmabuf:	[in]	buffer to map page from.
- * @page_num:	[in]	page in PAGE_SIZE units to map.
- *
- * This call must always succeed, any necessary preparations that might fail
- * need to be done in begin_cpu_access.
- */
-void *dma_buf_kmap_atomic(struct dma_buf *dmabuf, unsigned long page_num)
-{
-	WARN_ON(!dmabuf);
-
-	return dmabuf->ops->map_atomic(dmabuf, page_num);
-}
-EXPORT_SYMBOL_GPL(dma_buf_kmap_atomic);
-
-/**
- * dma_buf_kunmap_atomic - Unmap a page obtained by dma_buf_kmap_atomic.
- * @dmabuf:	[in]	buffer to unmap page from.
- * @page_num:	[in]	page in PAGE_SIZE units to unmap.
- * @vaddr:	[in]	kernel space pointer obtained from dma_buf_kmap_atomic.
- *
- * This call must always succeed.
- */
-void dma_buf_kunmap_atomic(struct dma_buf *dmabuf, unsigned long page_num,
-			   void *vaddr)
-{
-	WARN_ON(!dmabuf);
-
-	if (dmabuf->ops->unmap_atomic)
-		dmabuf->ops->unmap_atomic(dmabuf, page_num, vaddr);
-}
-EXPORT_SYMBOL_GPL(dma_buf_kunmap_atomic);
-
 /**
  * dma_buf_kmap - Map a page of the buffer object into kernel address space. The
  * same restrictions as for kmap and friends apply.
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
index f1500f1ec0f5..a156b3891a3f 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
@@ -244,9 +244,7 @@ static const struct dma_buf_ops amdgpu_dmabuf_ops = {
 	.release = drm_gem_dmabuf_release,
 	.begin_cpu_access = amdgpu_gem_begin_cpu_access,
 	.map = drm_gem_dmabuf_kmap,
-	.map_atomic = drm_gem_dmabuf_kmap_atomic,
 	.unmap = drm_gem_dmabuf_kunmap,
-	.unmap_atomic = drm_gem_dmabuf_kunmap_atomic,
 	.mmap = drm_gem_dmabuf_mmap,
 	.vmap = drm_gem_dmabuf_vmap,
 	.vunmap = drm_gem_dmabuf_vunmap,
diff --git a/drivers/gpu/drm/armada/armada_gem.c b/drivers/gpu/drm/armada/armada_gem.c
index a97f509743a5..3fb37c75c065 100644
--- a/drivers/gpu/drm/armada/armada_gem.c
+++ b/drivers/gpu/drm/armada/armada_gem.c
@@ -490,8 +490,6 @@ static const struct dma_buf_ops armada_gem_prime_dmabuf_ops = {
 	.map_dma_buf	= armada_gem_prime_map_dma_buf,
 	.unmap_dma_buf	= armada_gem_prime_unmap_dma_buf,
 	.release	= drm_gem_dmabuf_release,
-	.map_atomic	= armada_gem_dmabuf_no_kmap,
-	.unmap_atomic	= armada_gem_dmabuf_no_kunmap,
 	.map		= armada_gem_dmabuf_no_kmap,
 	.unmap		= armada_gem_dmabuf_no_kunmap,
 	.mmap		= armada_gem_dmabuf_mmap,
diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
index 4a3a232fea67..b28fa8f44c8b 100644
--- a/drivers/gpu/drm/drm_prime.c
+++ b/drivers/gpu/drm/drm_prime.c
@@ -426,30 +426,6 @@ void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr)
 }
 EXPORT_SYMBOL(drm_gem_dmabuf_vunmap);
 
-/**
- * drm_gem_dmabuf_kmap_atomic - map_atomic implementation for GEM
- *
- * Not implemented. This can be used as the &dma_buf_ops.map_atomic callback.
- */
-void *drm_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
-				 unsigned long page_num)
-{
-	return NULL;
-}
-EXPORT_SYMBOL(drm_gem_dmabuf_kmap_atomic);
-
-/**
- * drm_gem_dmabuf_kunmap_atomic - unmap_atomic implementation for GEM
- *
- * Not implemented. This can be used as the &dma_buf_ops.unmap_atomic callback.
- */
-void drm_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
-				  unsigned long page_num, void *addr)
-{
-
-}
-EXPORT_SYMBOL(drm_gem_dmabuf_kunmap_atomic);
-
 /**
  * drm_gem_dmabuf_kmap - map implementation for GEM
  *
@@ -502,9 +478,7 @@ static const struct dma_buf_ops drm_gem_prime_dmabuf_ops =  {
 	.unmap_dma_buf = drm_gem_unmap_dma_buf,
 	.release = drm_gem_dmabuf_release,
 	.map = drm_gem_dmabuf_kmap,
-	.map_atomic = drm_gem_dmabuf_kmap_atomic,
 	.unmap = drm_gem_dmabuf_kunmap,
-	.unmap_atomic = drm_gem_dmabuf_kunmap_atomic,
 	.mmap = drm_gem_dmabuf_mmap,
 	.vmap = drm_gem_dmabuf_vmap,
 	.vunmap = drm_gem_dmabuf_vunmap,
diff --git a/drivers/gpu/drm/i915/i915_gem_dmabuf.c b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
index 69a7aec49e84..82e2ca17a441 100644
--- a/drivers/gpu/drm/i915/i915_gem_dmabuf.c
+++ b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
@@ -111,15 +111,6 @@ static void i915_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr)
 	i915_gem_object_unpin_map(obj);
 }
 
-static void *i915_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf, unsigned long page_num)
-{
-	return NULL;
-}
-
-static void i915_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf, unsigned long page_num, void *addr)
-{
-
-}
 static void *i915_gem_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long page_num)
 {
 	struct drm_i915_gem_object *obj = dma_buf_to_obj(dma_buf);
@@ -225,9 +216,7 @@ static const struct dma_buf_ops i915_dmabuf_ops =  {
 	.unmap_dma_buf = i915_gem_unmap_dma_buf,
 	.release = drm_gem_dmabuf_release,
 	.map = i915_gem_dmabuf_kmap,
-	.map_atomic = i915_gem_dmabuf_kmap_atomic,
 	.unmap = i915_gem_dmabuf_kunmap,
-	.unmap_atomic = i915_gem_dmabuf_kunmap_atomic,
 	.mmap = i915_gem_dmabuf_mmap,
 	.vmap = i915_gem_dmabuf_vmap,
 	.vunmap = i915_gem_dmabuf_vunmap,
diff --git a/drivers/gpu/drm/i915/selftests/mock_dmabuf.c b/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
index 302f7d103635..f81fda8ea45e 100644
--- a/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
+++ b/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
@@ -130,9 +130,7 @@ static const struct dma_buf_ops mock_dmabuf_ops =  {
 	.unmap_dma_buf = mock_unmap_dma_buf,
 	.release = mock_dmabuf_release,
 	.map = mock_dmabuf_kmap,
-	.map_atomic = mock_dmabuf_kmap_atomic,
 	.unmap = mock_dmabuf_kunmap,
-	.unmap_atomic = mock_dmabuf_kunmap_atomic,
 	.mmap = mock_dmabuf_mmap,
 	.vmap = mock_dmabuf_vmap,
 	.vunmap = mock_dmabuf_vunmap,
diff --git a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
index 8e41d649e248..1a073f9b2834 100644
--- a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
+++ b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
@@ -148,8 +148,6 @@ static const struct dma_buf_ops omap_dmabuf_ops = {
 	.release = drm_gem_dmabuf_release,
 	.begin_cpu_access = omap_gem_dmabuf_begin_cpu_access,
 	.end_cpu_access = omap_gem_dmabuf_end_cpu_access,
-	.map_atomic = omap_gem_dmabuf_kmap_atomic,
-	.unmap_atomic = omap_gem_dmabuf_kunmap_atomic,
 	.map = omap_gem_dmabuf_kmap,
 	.unmap = omap_gem_dmabuf_kunmap,
 	.mmap = omap_gem_dmabuf_mmap,
diff --git a/drivers/gpu/drm/tegra/gem.c b/drivers/gpu/drm/tegra/gem.c
index 8b0b4ff64bb4..d7661702c11c 100644
--- a/drivers/gpu/drm/tegra/gem.c
+++ b/drivers/gpu/drm/tegra/gem.c
@@ -596,18 +596,6 @@ static int tegra_gem_prime_end_cpu_access(struct dma_buf *buf,
 	return 0;
 }
 
-static void *tegra_gem_prime_kmap_atomic(struct dma_buf *buf,
-					 unsigned long page)
-{
-	return NULL;
-}
-
-static void tegra_gem_prime_kunmap_atomic(struct dma_buf *buf,
-					  unsigned long page,
-					  void *addr)
-{
-}
-
 static void *tegra_gem_prime_kmap(struct dma_buf *buf, unsigned long page)
 {
 	return NULL;
@@ -648,8 +636,6 @@ static const struct dma_buf_ops tegra_gem_prime_dmabuf_ops = {
 	.release = tegra_gem_prime_release,
 	.begin_cpu_access = tegra_gem_prime_begin_cpu_access,
 	.end_cpu_access = tegra_gem_prime_end_cpu_access,
-	.map_atomic = tegra_gem_prime_kmap_atomic,
-	.unmap_atomic = tegra_gem_prime_kunmap_atomic,
 	.map = tegra_gem_prime_kmap,
 	.unmap = tegra_gem_prime_kunmap,
 	.mmap = tegra_gem_prime_mmap,
diff --git a/drivers/gpu/drm/udl/udl_dmabuf.c b/drivers/gpu/drm/udl/udl_dmabuf.c
index 5fdc8bdc2026..ae7225dedc30 100644
--- a/drivers/gpu/drm/udl/udl_dmabuf.c
+++ b/drivers/gpu/drm/udl/udl_dmabuf.c
@@ -156,27 +156,12 @@ static void *udl_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long page_num)
 	return NULL;
 }
 
-static void *udl_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
-				    unsigned long page_num)
-{
-	/* TODO */
-
-	return NULL;
-}
-
 static void udl_dmabuf_kunmap(struct dma_buf *dma_buf,
 			      unsigned long page_num, void *addr)
 {
 	/* TODO */
 }
 
-static void udl_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
-				     unsigned long page_num,
-				     void *addr)
-{
-	/* TODO */
-}
-
 static int udl_dmabuf_mmap(struct dma_buf *dma_buf,
 			   struct vm_area_struct *vma)
 {
@@ -191,9 +176,7 @@ static const struct dma_buf_ops udl_dmabuf_ops = {
 	.map_dma_buf		= udl_map_dma_buf,
 	.unmap_dma_buf		= udl_unmap_dma_buf,
 	.map			= udl_dmabuf_kmap,
-	.map_atomic		= udl_dmabuf_kmap_atomic,
 	.unmap			= udl_dmabuf_kunmap,
-	.unmap_atomic		= udl_dmabuf_kunmap_atomic,
 	.mmap			= udl_dmabuf_mmap,
 	.release		= drm_gem_dmabuf_release,
 };
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
index fbffb37ccf42..373bc6da2f84 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
@@ -71,17 +71,6 @@ static void vmw_prime_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr)
 {
 }
 
-static void *vmw_prime_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
-		unsigned long page_num)
-{
-	return NULL;
-}
-
-static void vmw_prime_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
-		unsigned long page_num, void *addr)
-{
-
-}
 static void *vmw_prime_dmabuf_kmap(struct dma_buf *dma_buf,
 		unsigned long page_num)
 {
@@ -108,9 +97,7 @@ const struct dma_buf_ops vmw_prime_dmabuf_ops =  {
 	.unmap_dma_buf = vmw_prime_unmap_dma_buf,
 	.release = NULL,
 	.map = vmw_prime_dmabuf_kmap,
-	.map_atomic = vmw_prime_dmabuf_kmap_atomic,
 	.unmap = vmw_prime_dmabuf_kunmap,
-	.unmap_atomic = vmw_prime_dmabuf_kunmap_atomic,
 	.mmap = vmw_prime_dmabuf_mmap,
 	.vmap = vmw_prime_dmabuf_vmap,
 	.vunmap = vmw_prime_dmabuf_vunmap,
diff --git a/drivers/media/common/videobuf2/videobuf2-dma-contig.c b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
index 12d0072c52c2..aff0ab7bf83d 100644
--- a/drivers/media/common/videobuf2/videobuf2-dma-contig.c
+++ b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
@@ -358,7 +358,6 @@ static const struct dma_buf_ops vb2_dc_dmabuf_ops = {
 	.map_dma_buf = vb2_dc_dmabuf_ops_map,
 	.unmap_dma_buf = vb2_dc_dmabuf_ops_unmap,
 	.map = vb2_dc_dmabuf_ops_kmap,
-	.map_atomic = vb2_dc_dmabuf_ops_kmap,
 	.vmap = vb2_dc_dmabuf_ops_vmap,
 	.mmap = vb2_dc_dmabuf_ops_mmap,
 	.release = vb2_dc_dmabuf_ops_release,
diff --git a/drivers/media/common/videobuf2/videobuf2-dma-sg.c b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
index cf94765e593f..015e737095cd 100644
--- a/drivers/media/common/videobuf2/videobuf2-dma-sg.c
+++ b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
@@ -507,7 +507,6 @@ static const struct dma_buf_ops vb2_dma_sg_dmabuf_ops = {
 	.map_dma_buf = vb2_dma_sg_dmabuf_ops_map,
 	.unmap_dma_buf = vb2_dma_sg_dmabuf_ops_unmap,
 	.map = vb2_dma_sg_dmabuf_ops_kmap,
-	.map_atomic = vb2_dma_sg_dmabuf_ops_kmap,
 	.vmap = vb2_dma_sg_dmabuf_ops_vmap,
 	.mmap = vb2_dma_sg_dmabuf_ops_mmap,
 	.release = vb2_dma_sg_dmabuf_ops_release,
diff --git a/drivers/media/common/videobuf2/videobuf2-vmalloc.c b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
index 298ffb9ecdae..467a4005164b 100644
--- a/drivers/media/common/videobuf2/videobuf2-vmalloc.c
+++ b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
@@ -346,7 +346,6 @@ static const struct dma_buf_ops vb2_vmalloc_dmabuf_ops = {
 	.map_dma_buf = vb2_vmalloc_dmabuf_ops_map,
 	.unmap_dma_buf = vb2_vmalloc_dmabuf_ops_unmap,
 	.map = vb2_vmalloc_dmabuf_ops_kmap,
-	.map_atomic = vb2_vmalloc_dmabuf_ops_kmap,
 	.vmap = vb2_vmalloc_dmabuf_ops_vmap,
 	.mmap = vb2_vmalloc_dmabuf_ops_mmap,
 	.release = vb2_vmalloc_dmabuf_ops_release,
diff --git a/drivers/staging/android/ion/ion.c b/drivers/staging/android/ion/ion.c
index 57e0d8035b2e..a46219ff5e16 100644
--- a/drivers/staging/android/ion/ion.c
+++ b/drivers/staging/android/ion/ion.c
@@ -374,8 +374,6 @@ static const struct dma_buf_ops dma_buf_ops = {
 	.detach = ion_dma_buf_detatch,
 	.begin_cpu_access = ion_dma_buf_begin_cpu_access,
 	.end_cpu_access = ion_dma_buf_end_cpu_access,
-	.map_atomic = ion_dma_buf_kmap,
-	.unmap_atomic = ion_dma_buf_kunmap,
 	.map = ion_dma_buf_kmap,
 	.unmap = ion_dma_buf_kunmap,
 };
diff --git a/drivers/tee/tee_shm.c b/drivers/tee/tee_shm.c
index 556960a1bab3..df4a1553b78b 100644
--- a/drivers/tee/tee_shm.c
+++ b/drivers/tee/tee_shm.c
@@ -80,11 +80,6 @@ static void tee_shm_op_release(struct dma_buf *dmabuf)
 	tee_shm_release(shm);
 }
 
-static void *tee_shm_op_map_atomic(struct dma_buf *dmabuf, unsigned long pgnum)
-{
-	return NULL;
-}
-
 static void *tee_shm_op_map(struct dma_buf *dmabuf, unsigned long pgnum)
 {
 	return NULL;
@@ -107,7 +102,6 @@ static const struct dma_buf_ops tee_shm_dma_buf_ops = {
 	.map_dma_buf = tee_shm_op_map_dma_buf,
 	.unmap_dma_buf = tee_shm_op_unmap_dma_buf,
 	.release = tee_shm_op_release,
-	.map_atomic = tee_shm_op_map_atomic,
 	.map = tee_shm_op_map,
 	.mmap = tee_shm_op_mmap,
 };
diff --git a/include/drm/drm_prime.h b/include/drm/drm_prime.h
index ef338151cea8..d716d653b096 100644
--- a/include/drm/drm_prime.h
+++ b/include/drm/drm_prime.h
@@ -93,10 +93,6 @@ void drm_gem_unmap_dma_buf(struct dma_buf_attachment *attach,
 			   enum dma_data_direction dir);
 void *drm_gem_dmabuf_vmap(struct dma_buf *dma_buf);
 void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr);
-void *drm_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
-				 unsigned long page_num);
-void drm_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
-				  unsigned long page_num, void *addr);
 void *drm_gem_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long page_num);
 void drm_gem_dmabuf_kunmap(struct dma_buf *dma_buf, unsigned long page_num,
 			   void *addr);
diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
index 346caf77937f..d17cadd76802 100644
--- a/include/linux/dma-buf.h
+++ b/include/linux/dma-buf.h
@@ -205,8 +205,6 @@ struct dma_buf_ops {
 	 * to be restarted.
 	 */
 	int (*end_cpu_access)(struct dma_buf *, enum dma_data_direction);
-	void *(*map_atomic)(struct dma_buf *, unsigned long);
-	void (*unmap_atomic)(struct dma_buf *, unsigned long, void *);
 	void *(*map)(struct dma_buf *, unsigned long);
 	void (*unmap)(struct dma_buf *, unsigned long, void *);
 
@@ -394,8 +392,6 @@ int dma_buf_begin_cpu_access(struct dma_buf *dma_buf,
 			     enum dma_data_direction dir);
 int dma_buf_end_cpu_access(struct dma_buf *dma_buf,
 			   enum dma_data_direction dir);
-void *dma_buf_kmap_atomic(struct dma_buf *, unsigned long);
-void dma_buf_kunmap_atomic(struct dma_buf *, unsigned long, void *);
 void *dma_buf_kmap(struct dma_buf *, unsigned long);
 void dma_buf_kunmap(struct dma_buf *, unsigned long, void *);
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 58+ messages in thread

* [PATCH 2/5] dma-buf: remove kmap_atomic interface
@ 2018-06-01 12:00   ` Christian König
  0 siblings, 0 replies; 58+ messages in thread
From: Christian König @ 2018-06-01 12:00 UTC (permalink / raw)
  To: linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw,
	linux-media-u79uwXL29TY76Z2rM5mHXA,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
  Cc: sumit.semwal-QSEj5FYQhm4dnm+yROfE0A

Neither used nor correctly implemented anywhere. Just completely remove
the interface.

Signed-off-by: Christian König <christian.koenig@amd.com>
---
 drivers/dma-buf/dma-buf.c                          | 44 ----------------------
 drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c          |  2 -
 drivers/gpu/drm/armada/armada_gem.c                |  2 -
 drivers/gpu/drm/drm_prime.c                        | 26 -------------
 drivers/gpu/drm/i915/i915_gem_dmabuf.c             | 11 ------
 drivers/gpu/drm/i915/selftests/mock_dmabuf.c       |  2 -
 drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c          |  2 -
 drivers/gpu/drm/tegra/gem.c                        | 14 -------
 drivers/gpu/drm/udl/udl_dmabuf.c                   | 17 ---------
 drivers/gpu/drm/vmwgfx/vmwgfx_prime.c              | 13 -------
 .../media/common/videobuf2/videobuf2-dma-contig.c  |  1 -
 drivers/media/common/videobuf2/videobuf2-dma-sg.c  |  1 -
 drivers/media/common/videobuf2/videobuf2-vmalloc.c |  1 -
 drivers/staging/android/ion/ion.c                  |  2 -
 drivers/tee/tee_shm.c                              |  6 ---
 include/drm/drm_prime.h                            |  4 --
 include/linux/dma-buf.h                            |  4 --
 17 files changed, 152 deletions(-)

diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
index e99a8d19991b..e4c657d9fad7 100644
--- a/drivers/dma-buf/dma-buf.c
+++ b/drivers/dma-buf/dma-buf.c
@@ -405,7 +405,6 @@ struct dma_buf *dma_buf_export(const struct dma_buf_export_info *exp_info)
 			  || !exp_info->ops->map_dma_buf
 			  || !exp_info->ops->unmap_dma_buf
 			  || !exp_info->ops->release
-			  || !exp_info->ops->map_atomic
 			  || !exp_info->ops->map
 			  || !exp_info->ops->mmap)) {
 		return ERR_PTR(-EINVAL);
@@ -687,14 +686,6 @@ EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment);
  *      void \*dma_buf_kmap(struct dma_buf \*, unsigned long);
  *      void dma_buf_kunmap(struct dma_buf \*, unsigned long, void \*);
  *
- *   There are also atomic variants of these interfaces. Like for kmap they
- *   facilitate non-blocking fast-paths. Neither the importer nor the exporter
- *   (in the callback) is allowed to block when using these.
- *
- *   Interfaces::
- *      void \*dma_buf_kmap_atomic(struct dma_buf \*, unsigned long);
- *      void dma_buf_kunmap_atomic(struct dma_buf \*, unsigned long, void \*);
- *
  *   For importers all the restrictions of using kmap apply, like the limited
  *   supply of kmap_atomic slots. Hence an importer shall only hold onto at
  *   max 2 atomic dma_buf kmaps at the same time (in any given process context).
@@ -859,41 +850,6 @@ int dma_buf_end_cpu_access(struct dma_buf *dmabuf,
 }
 EXPORT_SYMBOL_GPL(dma_buf_end_cpu_access);
 
-/**
- * dma_buf_kmap_atomic - Map a page of the buffer object into kernel address
- * space. The same restrictions as for kmap_atomic and friends apply.
- * @dmabuf:	[in]	buffer to map page from.
- * @page_num:	[in]	page in PAGE_SIZE units to map.
- *
- * This call must always succeed, any necessary preparations that might fail
- * need to be done in begin_cpu_access.
- */
-void *dma_buf_kmap_atomic(struct dma_buf *dmabuf, unsigned long page_num)
-{
-	WARN_ON(!dmabuf);
-
-	return dmabuf->ops->map_atomic(dmabuf, page_num);
-}
-EXPORT_SYMBOL_GPL(dma_buf_kmap_atomic);
-
-/**
- * dma_buf_kunmap_atomic - Unmap a page obtained by dma_buf_kmap_atomic.
- * @dmabuf:	[in]	buffer to unmap page from.
- * @page_num:	[in]	page in PAGE_SIZE units to unmap.
- * @vaddr:	[in]	kernel space pointer obtained from dma_buf_kmap_atomic.
- *
- * This call must always succeed.
- */
-void dma_buf_kunmap_atomic(struct dma_buf *dmabuf, unsigned long page_num,
-			   void *vaddr)
-{
-	WARN_ON(!dmabuf);
-
-	if (dmabuf->ops->unmap_atomic)
-		dmabuf->ops->unmap_atomic(dmabuf, page_num, vaddr);
-}
-EXPORT_SYMBOL_GPL(dma_buf_kunmap_atomic);
-
 /**
  * dma_buf_kmap - Map a page of the buffer object into kernel address space. The
  * same restrictions as for kmap and friends apply.
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
index f1500f1ec0f5..a156b3891a3f 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
@@ -244,9 +244,7 @@ static const struct dma_buf_ops amdgpu_dmabuf_ops = {
 	.release = drm_gem_dmabuf_release,
 	.begin_cpu_access = amdgpu_gem_begin_cpu_access,
 	.map = drm_gem_dmabuf_kmap,
-	.map_atomic = drm_gem_dmabuf_kmap_atomic,
 	.unmap = drm_gem_dmabuf_kunmap,
-	.unmap_atomic = drm_gem_dmabuf_kunmap_atomic,
 	.mmap = drm_gem_dmabuf_mmap,
 	.vmap = drm_gem_dmabuf_vmap,
 	.vunmap = drm_gem_dmabuf_vunmap,
diff --git a/drivers/gpu/drm/armada/armada_gem.c b/drivers/gpu/drm/armada/armada_gem.c
index a97f509743a5..3fb37c75c065 100644
--- a/drivers/gpu/drm/armada/armada_gem.c
+++ b/drivers/gpu/drm/armada/armada_gem.c
@@ -490,8 +490,6 @@ static const struct dma_buf_ops armada_gem_prime_dmabuf_ops = {
 	.map_dma_buf	= armada_gem_prime_map_dma_buf,
 	.unmap_dma_buf	= armada_gem_prime_unmap_dma_buf,
 	.release	= drm_gem_dmabuf_release,
-	.map_atomic	= armada_gem_dmabuf_no_kmap,
-	.unmap_atomic	= armada_gem_dmabuf_no_kunmap,
 	.map		= armada_gem_dmabuf_no_kmap,
 	.unmap		= armada_gem_dmabuf_no_kunmap,
 	.mmap		= armada_gem_dmabuf_mmap,
diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
index 4a3a232fea67..b28fa8f44c8b 100644
--- a/drivers/gpu/drm/drm_prime.c
+++ b/drivers/gpu/drm/drm_prime.c
@@ -426,30 +426,6 @@ void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr)
 }
 EXPORT_SYMBOL(drm_gem_dmabuf_vunmap);
 
-/**
- * drm_gem_dmabuf_kmap_atomic - map_atomic implementation for GEM
- *
- * Not implemented. This can be used as the &dma_buf_ops.map_atomic callback.
- */
-void *drm_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
-				 unsigned long page_num)
-{
-	return NULL;
-}
-EXPORT_SYMBOL(drm_gem_dmabuf_kmap_atomic);
-
-/**
- * drm_gem_dmabuf_kunmap_atomic - unmap_atomic implementation for GEM
- *
- * Not implemented. This can be used as the &dma_buf_ops.unmap_atomic callback.
- */
-void drm_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
-				  unsigned long page_num, void *addr)
-{
-
-}
-EXPORT_SYMBOL(drm_gem_dmabuf_kunmap_atomic);
-
 /**
  * drm_gem_dmabuf_kmap - map implementation for GEM
  *
@@ -502,9 +478,7 @@ static const struct dma_buf_ops drm_gem_prime_dmabuf_ops =  {
 	.unmap_dma_buf = drm_gem_unmap_dma_buf,
 	.release = drm_gem_dmabuf_release,
 	.map = drm_gem_dmabuf_kmap,
-	.map_atomic = drm_gem_dmabuf_kmap_atomic,
 	.unmap = drm_gem_dmabuf_kunmap,
-	.unmap_atomic = drm_gem_dmabuf_kunmap_atomic,
 	.mmap = drm_gem_dmabuf_mmap,
 	.vmap = drm_gem_dmabuf_vmap,
 	.vunmap = drm_gem_dmabuf_vunmap,
diff --git a/drivers/gpu/drm/i915/i915_gem_dmabuf.c b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
index 69a7aec49e84..82e2ca17a441 100644
--- a/drivers/gpu/drm/i915/i915_gem_dmabuf.c
+++ b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
@@ -111,15 +111,6 @@ static void i915_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr)
 	i915_gem_object_unpin_map(obj);
 }
 
-static void *i915_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf, unsigned long page_num)
-{
-	return NULL;
-}
-
-static void i915_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf, unsigned long page_num, void *addr)
-{
-
-}
 static void *i915_gem_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long page_num)
 {
 	struct drm_i915_gem_object *obj = dma_buf_to_obj(dma_buf);
@@ -225,9 +216,7 @@ static const struct dma_buf_ops i915_dmabuf_ops =  {
 	.unmap_dma_buf = i915_gem_unmap_dma_buf,
 	.release = drm_gem_dmabuf_release,
 	.map = i915_gem_dmabuf_kmap,
-	.map_atomic = i915_gem_dmabuf_kmap_atomic,
 	.unmap = i915_gem_dmabuf_kunmap,
-	.unmap_atomic = i915_gem_dmabuf_kunmap_atomic,
 	.mmap = i915_gem_dmabuf_mmap,
 	.vmap = i915_gem_dmabuf_vmap,
 	.vunmap = i915_gem_dmabuf_vunmap,
diff --git a/drivers/gpu/drm/i915/selftests/mock_dmabuf.c b/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
index 302f7d103635..f81fda8ea45e 100644
--- a/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
+++ b/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
@@ -130,9 +130,7 @@ static const struct dma_buf_ops mock_dmabuf_ops =  {
 	.unmap_dma_buf = mock_unmap_dma_buf,
 	.release = mock_dmabuf_release,
 	.map = mock_dmabuf_kmap,
-	.map_atomic = mock_dmabuf_kmap_atomic,
 	.unmap = mock_dmabuf_kunmap,
-	.unmap_atomic = mock_dmabuf_kunmap_atomic,
 	.mmap = mock_dmabuf_mmap,
 	.vmap = mock_dmabuf_vmap,
 	.vunmap = mock_dmabuf_vunmap,
diff --git a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
index 8e41d649e248..1a073f9b2834 100644
--- a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
+++ b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
@@ -148,8 +148,6 @@ static const struct dma_buf_ops omap_dmabuf_ops = {
 	.release = drm_gem_dmabuf_release,
 	.begin_cpu_access = omap_gem_dmabuf_begin_cpu_access,
 	.end_cpu_access = omap_gem_dmabuf_end_cpu_access,
-	.map_atomic = omap_gem_dmabuf_kmap_atomic,
-	.unmap_atomic = omap_gem_dmabuf_kunmap_atomic,
 	.map = omap_gem_dmabuf_kmap,
 	.unmap = omap_gem_dmabuf_kunmap,
 	.mmap = omap_gem_dmabuf_mmap,
diff --git a/drivers/gpu/drm/tegra/gem.c b/drivers/gpu/drm/tegra/gem.c
index 8b0b4ff64bb4..d7661702c11c 100644
--- a/drivers/gpu/drm/tegra/gem.c
+++ b/drivers/gpu/drm/tegra/gem.c
@@ -596,18 +596,6 @@ static int tegra_gem_prime_end_cpu_access(struct dma_buf *buf,
 	return 0;
 }
 
-static void *tegra_gem_prime_kmap_atomic(struct dma_buf *buf,
-					 unsigned long page)
-{
-	return NULL;
-}
-
-static void tegra_gem_prime_kunmap_atomic(struct dma_buf *buf,
-					  unsigned long page,
-					  void *addr)
-{
-}
-
 static void *tegra_gem_prime_kmap(struct dma_buf *buf, unsigned long page)
 {
 	return NULL;
@@ -648,8 +636,6 @@ static const struct dma_buf_ops tegra_gem_prime_dmabuf_ops = {
 	.release = tegra_gem_prime_release,
 	.begin_cpu_access = tegra_gem_prime_begin_cpu_access,
 	.end_cpu_access = tegra_gem_prime_end_cpu_access,
-	.map_atomic = tegra_gem_prime_kmap_atomic,
-	.unmap_atomic = tegra_gem_prime_kunmap_atomic,
 	.map = tegra_gem_prime_kmap,
 	.unmap = tegra_gem_prime_kunmap,
 	.mmap = tegra_gem_prime_mmap,
diff --git a/drivers/gpu/drm/udl/udl_dmabuf.c b/drivers/gpu/drm/udl/udl_dmabuf.c
index 5fdc8bdc2026..ae7225dedc30 100644
--- a/drivers/gpu/drm/udl/udl_dmabuf.c
+++ b/drivers/gpu/drm/udl/udl_dmabuf.c
@@ -156,27 +156,12 @@ static void *udl_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long page_num)
 	return NULL;
 }
 
-static void *udl_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
-				    unsigned long page_num)
-{
-	/* TODO */
-
-	return NULL;
-}
-
 static void udl_dmabuf_kunmap(struct dma_buf *dma_buf,
 			      unsigned long page_num, void *addr)
 {
 	/* TODO */
 }
 
-static void udl_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
-				     unsigned long page_num,
-				     void *addr)
-{
-	/* TODO */
-}
-
 static int udl_dmabuf_mmap(struct dma_buf *dma_buf,
 			   struct vm_area_struct *vma)
 {
@@ -191,9 +176,7 @@ static const struct dma_buf_ops udl_dmabuf_ops = {
 	.map_dma_buf		= udl_map_dma_buf,
 	.unmap_dma_buf		= udl_unmap_dma_buf,
 	.map			= udl_dmabuf_kmap,
-	.map_atomic		= udl_dmabuf_kmap_atomic,
 	.unmap			= udl_dmabuf_kunmap,
-	.unmap_atomic		= udl_dmabuf_kunmap_atomic,
 	.mmap			= udl_dmabuf_mmap,
 	.release		= drm_gem_dmabuf_release,
 };
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
index fbffb37ccf42..373bc6da2f84 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
@@ -71,17 +71,6 @@ static void vmw_prime_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr)
 {
 }
 
-static void *vmw_prime_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
-		unsigned long page_num)
-{
-	return NULL;
-}
-
-static void vmw_prime_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
-		unsigned long page_num, void *addr)
-{
-
-}
 static void *vmw_prime_dmabuf_kmap(struct dma_buf *dma_buf,
 		unsigned long page_num)
 {
@@ -108,9 +97,7 @@ const struct dma_buf_ops vmw_prime_dmabuf_ops =  {
 	.unmap_dma_buf = vmw_prime_unmap_dma_buf,
 	.release = NULL,
 	.map = vmw_prime_dmabuf_kmap,
-	.map_atomic = vmw_prime_dmabuf_kmap_atomic,
 	.unmap = vmw_prime_dmabuf_kunmap,
-	.unmap_atomic = vmw_prime_dmabuf_kunmap_atomic,
 	.mmap = vmw_prime_dmabuf_mmap,
 	.vmap = vmw_prime_dmabuf_vmap,
 	.vunmap = vmw_prime_dmabuf_vunmap,
diff --git a/drivers/media/common/videobuf2/videobuf2-dma-contig.c b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
index 12d0072c52c2..aff0ab7bf83d 100644
--- a/drivers/media/common/videobuf2/videobuf2-dma-contig.c
+++ b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
@@ -358,7 +358,6 @@ static const struct dma_buf_ops vb2_dc_dmabuf_ops = {
 	.map_dma_buf = vb2_dc_dmabuf_ops_map,
 	.unmap_dma_buf = vb2_dc_dmabuf_ops_unmap,
 	.map = vb2_dc_dmabuf_ops_kmap,
-	.map_atomic = vb2_dc_dmabuf_ops_kmap,
 	.vmap = vb2_dc_dmabuf_ops_vmap,
 	.mmap = vb2_dc_dmabuf_ops_mmap,
 	.release = vb2_dc_dmabuf_ops_release,
diff --git a/drivers/media/common/videobuf2/videobuf2-dma-sg.c b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
index cf94765e593f..015e737095cd 100644
--- a/drivers/media/common/videobuf2/videobuf2-dma-sg.c
+++ b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
@@ -507,7 +507,6 @@ static const struct dma_buf_ops vb2_dma_sg_dmabuf_ops = {
 	.map_dma_buf = vb2_dma_sg_dmabuf_ops_map,
 	.unmap_dma_buf = vb2_dma_sg_dmabuf_ops_unmap,
 	.map = vb2_dma_sg_dmabuf_ops_kmap,
-	.map_atomic = vb2_dma_sg_dmabuf_ops_kmap,
 	.vmap = vb2_dma_sg_dmabuf_ops_vmap,
 	.mmap = vb2_dma_sg_dmabuf_ops_mmap,
 	.release = vb2_dma_sg_dmabuf_ops_release,
diff --git a/drivers/media/common/videobuf2/videobuf2-vmalloc.c b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
index 298ffb9ecdae..467a4005164b 100644
--- a/drivers/media/common/videobuf2/videobuf2-vmalloc.c
+++ b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
@@ -346,7 +346,6 @@ static const struct dma_buf_ops vb2_vmalloc_dmabuf_ops = {
 	.map_dma_buf = vb2_vmalloc_dmabuf_ops_map,
 	.unmap_dma_buf = vb2_vmalloc_dmabuf_ops_unmap,
 	.map = vb2_vmalloc_dmabuf_ops_kmap,
-	.map_atomic = vb2_vmalloc_dmabuf_ops_kmap,
 	.vmap = vb2_vmalloc_dmabuf_ops_vmap,
 	.mmap = vb2_vmalloc_dmabuf_ops_mmap,
 	.release = vb2_vmalloc_dmabuf_ops_release,
diff --git a/drivers/staging/android/ion/ion.c b/drivers/staging/android/ion/ion.c
index 57e0d8035b2e..a46219ff5e16 100644
--- a/drivers/staging/android/ion/ion.c
+++ b/drivers/staging/android/ion/ion.c
@@ -374,8 +374,6 @@ static const struct dma_buf_ops dma_buf_ops = {
 	.detach = ion_dma_buf_detatch,
 	.begin_cpu_access = ion_dma_buf_begin_cpu_access,
 	.end_cpu_access = ion_dma_buf_end_cpu_access,
-	.map_atomic = ion_dma_buf_kmap,
-	.unmap_atomic = ion_dma_buf_kunmap,
 	.map = ion_dma_buf_kmap,
 	.unmap = ion_dma_buf_kunmap,
 };
diff --git a/drivers/tee/tee_shm.c b/drivers/tee/tee_shm.c
index 556960a1bab3..df4a1553b78b 100644
--- a/drivers/tee/tee_shm.c
+++ b/drivers/tee/tee_shm.c
@@ -80,11 +80,6 @@ static void tee_shm_op_release(struct dma_buf *dmabuf)
 	tee_shm_release(shm);
 }
 
-static void *tee_shm_op_map_atomic(struct dma_buf *dmabuf, unsigned long pgnum)
-{
-	return NULL;
-}
-
 static void *tee_shm_op_map(struct dma_buf *dmabuf, unsigned long pgnum)
 {
 	return NULL;
@@ -107,7 +102,6 @@ static const struct dma_buf_ops tee_shm_dma_buf_ops = {
 	.map_dma_buf = tee_shm_op_map_dma_buf,
 	.unmap_dma_buf = tee_shm_op_unmap_dma_buf,
 	.release = tee_shm_op_release,
-	.map_atomic = tee_shm_op_map_atomic,
 	.map = tee_shm_op_map,
 	.mmap = tee_shm_op_mmap,
 };
diff --git a/include/drm/drm_prime.h b/include/drm/drm_prime.h
index ef338151cea8..d716d653b096 100644
--- a/include/drm/drm_prime.h
+++ b/include/drm/drm_prime.h
@@ -93,10 +93,6 @@ void drm_gem_unmap_dma_buf(struct dma_buf_attachment *attach,
 			   enum dma_data_direction dir);
 void *drm_gem_dmabuf_vmap(struct dma_buf *dma_buf);
 void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr);
-void *drm_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
-				 unsigned long page_num);
-void drm_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
-				  unsigned long page_num, void *addr);
 void *drm_gem_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long page_num);
 void drm_gem_dmabuf_kunmap(struct dma_buf *dma_buf, unsigned long page_num,
 			   void *addr);
diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
index 346caf77937f..d17cadd76802 100644
--- a/include/linux/dma-buf.h
+++ b/include/linux/dma-buf.h
@@ -205,8 +205,6 @@ struct dma_buf_ops {
 	 * to be restarted.
 	 */
 	int (*end_cpu_access)(struct dma_buf *, enum dma_data_direction);
-	void *(*map_atomic)(struct dma_buf *, unsigned long);
-	void (*unmap_atomic)(struct dma_buf *, unsigned long, void *);
 	void *(*map)(struct dma_buf *, unsigned long);
 	void (*unmap)(struct dma_buf *, unsigned long, void *);
 
@@ -394,8 +392,6 @@ int dma_buf_begin_cpu_access(struct dma_buf *dma_buf,
 			     enum dma_data_direction dir);
 int dma_buf_end_cpu_access(struct dma_buf *dma_buf,
 			   enum dma_data_direction dir);
-void *dma_buf_kmap_atomic(struct dma_buf *, unsigned long);
-void dma_buf_kunmap_atomic(struct dma_buf *, unsigned long, void *);
 void *dma_buf_kmap(struct dma_buf *, unsigned long);
 void dma_buf_kunmap(struct dma_buf *, unsigned long, void *);
 
-- 
2.14.1

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 58+ messages in thread

* [PATCH 3/5] dma-buf: lock the reservation object during (un)map_dma_buf
@ 2018-06-01 12:00   ` Christian König
  0 siblings, 0 replies; 58+ messages in thread
From: Christian König @ 2018-06-01 12:00 UTC (permalink / raw)
  To: linaro-mm-sig, linux-media, dri-devel, amd-gfx; +Cc: sumit.semwal

First step towards unpinned DMA buf operation.

I've checked the DRM drivers to potential locking of the reservation
object, but essentially we need to audit all implementations of the
dma_buf _ops for this to work.

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

diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
index e4c657d9fad7..4f0708cb58a7 100644
--- a/drivers/dma-buf/dma-buf.c
+++ b/drivers/dma-buf/dma-buf.c
@@ -631,7 +631,9 @@ struct sg_table *dma_buf_map_attachment(struct dma_buf_attachment *attach,
 	if (WARN_ON(!attach || !attach->dmabuf))
 		return ERR_PTR(-EINVAL);
 
+	reservation_object_lock(attach->dmabuf->resv, NULL);
 	sg_table = attach->dmabuf->ops->map_dma_buf(attach, direction);
+	reservation_object_unlock(attach->dmabuf->resv);
 	if (!sg_table)
 		sg_table = ERR_PTR(-ENOMEM);
 
@@ -658,8 +660,10 @@ void dma_buf_unmap_attachment(struct dma_buf_attachment *attach,
 	if (WARN_ON(!attach || !attach->dmabuf || !sg_table))
 		return;
 
+	reservation_object_lock(attach->dmabuf->resv, NULL);
 	attach->dmabuf->ops->unmap_dma_buf(attach, sg_table,
 						direction);
+	reservation_object_unlock(attach->dmabuf->resv);
 }
 EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment);
 
diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
index d17cadd76802..d2ba7a027a78 100644
--- a/include/linux/dma-buf.h
+++ b/include/linux/dma-buf.h
@@ -118,6 +118,8 @@ struct dma_buf_ops {
 	 * any other kind of sharing that the exporter might wish to make
 	 * available to buffer-users.
 	 *
+	 * This is called with the dmabuf->resv object locked.
+	 *
 	 * Returns:
 	 *
 	 * A &sg_table scatter list of or the backing storage of the DMA buffer,
@@ -138,6 +140,8 @@ struct dma_buf_ops {
 	 * It should also unpin the backing storage if this is the last mapping
 	 * of the DMA buffer, it the exporter supports backing storage
 	 * migration.
+	 *
+	 * This is called with the dmabuf->resv object locked.
 	 */
 	void (*unmap_dma_buf)(struct dma_buf_attachment *,
 			      struct sg_table *,
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 58+ messages in thread

* [PATCH 3/5] dma-buf: lock the reservation object during (un)map_dma_buf
@ 2018-06-01 12:00   ` Christian König
  0 siblings, 0 replies; 58+ messages in thread
From: Christian König @ 2018-06-01 12:00 UTC (permalink / raw)
  To: linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw,
	linux-media-u79uwXL29TY76Z2rM5mHXA,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
  Cc: sumit.semwal-QSEj5FYQhm4dnm+yROfE0A

First step towards unpinned DMA buf operation.

I've checked the DRM drivers to potential locking of the reservation
object, but essentially we need to audit all implementations of the
dma_buf _ops for this to work.

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

diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
index e4c657d9fad7..4f0708cb58a7 100644
--- a/drivers/dma-buf/dma-buf.c
+++ b/drivers/dma-buf/dma-buf.c
@@ -631,7 +631,9 @@ struct sg_table *dma_buf_map_attachment(struct dma_buf_attachment *attach,
 	if (WARN_ON(!attach || !attach->dmabuf))
 		return ERR_PTR(-EINVAL);
 
+	reservation_object_lock(attach->dmabuf->resv, NULL);
 	sg_table = attach->dmabuf->ops->map_dma_buf(attach, direction);
+	reservation_object_unlock(attach->dmabuf->resv);
 	if (!sg_table)
 		sg_table = ERR_PTR(-ENOMEM);
 
@@ -658,8 +660,10 @@ void dma_buf_unmap_attachment(struct dma_buf_attachment *attach,
 	if (WARN_ON(!attach || !attach->dmabuf || !sg_table))
 		return;
 
+	reservation_object_lock(attach->dmabuf->resv, NULL);
 	attach->dmabuf->ops->unmap_dma_buf(attach, sg_table,
 						direction);
+	reservation_object_unlock(attach->dmabuf->resv);
 }
 EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment);
 
diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
index d17cadd76802..d2ba7a027a78 100644
--- a/include/linux/dma-buf.h
+++ b/include/linux/dma-buf.h
@@ -118,6 +118,8 @@ struct dma_buf_ops {
 	 * any other kind of sharing that the exporter might wish to make
 	 * available to buffer-users.
 	 *
+	 * This is called with the dmabuf->resv object locked.
+	 *
 	 * Returns:
 	 *
 	 * A &sg_table scatter list of or the backing storage of the DMA buffer,
@@ -138,6 +140,8 @@ struct dma_buf_ops {
 	 * It should also unpin the backing storage if this is the last mapping
 	 * of the DMA buffer, it the exporter supports backing storage
 	 * migration.
+	 *
+	 * This is called with the dmabuf->resv object locked.
 	 */
 	void (*unmap_dma_buf)(struct dma_buf_attachment *,
 			      struct sg_table *,
-- 
2.14.1

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 58+ messages in thread

* [PATCH 4/5] dma-buf: add dma_buf_(un)map_attachment_locked variants
@ 2018-06-01 12:00   ` Christian König
  0 siblings, 0 replies; 58+ messages in thread
From: Christian König @ 2018-06-01 12:00 UTC (permalink / raw)
  To: linaro-mm-sig, linux-media, dri-devel, amd-gfx; +Cc: sumit.semwal

Add function variants which can be called with the reservation lock
already held.

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

diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
index 4f0708cb58a7..3371509b468e 100644
--- a/drivers/dma-buf/dma-buf.c
+++ b/drivers/dma-buf/dma-buf.c
@@ -606,6 +606,38 @@ void dma_buf_detach(struct dma_buf *dmabuf, struct dma_buf_attachment *attach)
 }
 EXPORT_SYMBOL_GPL(dma_buf_detach);
 
+/**
+ * dma_buf_map_attachment_locked - Maps the buffer into _device_ address space
+ * with the reservation lock held. Is a wrapper for map_dma_buf() of the
+ *
+ * Returns the scatterlist table of the attachment;
+ * dma_buf_ops.
+ * @attach:	[in]	attachment whose scatterlist is to be returned
+ * @direction:	[in]	direction of DMA transfer
+ *
+ * Returns sg_table containing the scatterlist to be returned; returns ERR_PTR
+ * on error. May return -EINTR if it is interrupted by a signal.
+ *
+ * A mapping must be unmapped by using dma_buf_unmap_attachment(). Note that
+ * the underlying backing storage is pinned for as long as a mapping exists,
+ * therefore users/importers should not hold onto a mapping for undue amounts of
+ * time.
+ */
+struct sg_table *
+dma_buf_map_attachment_locked(struct dma_buf_attachment *attach,
+			      enum dma_data_direction direction)
+{
+	struct sg_table *sg_table;
+
+	might_sleep();
+	sg_table = attach->dmabuf->ops->map_dma_buf(attach, direction);
+	if (!sg_table)
+		sg_table = ERR_PTR(-ENOMEM);
+
+	return sg_table;
+}
+EXPORT_SYMBOL_GPL(dma_buf_map_attachment_locked);
+
 /**
  * dma_buf_map_attachment - Returns the scatterlist table of the attachment;
  * mapped into _device_ address space. Is a wrapper for map_dma_buf() of the
@@ -626,13 +658,12 @@ struct sg_table *dma_buf_map_attachment(struct dma_buf_attachment *attach,
 {
 	struct sg_table *sg_table;
 
-	might_sleep();
 
 	if (WARN_ON(!attach || !attach->dmabuf))
 		return ERR_PTR(-EINVAL);
 
 	reservation_object_lock(attach->dmabuf->resv, NULL);
-	sg_table = attach->dmabuf->ops->map_dma_buf(attach, direction);
+	sg_table = dma_buf_map_attachment_locked(attach, direction);
 	reservation_object_unlock(attach->dmabuf->resv);
 	if (!sg_table)
 		sg_table = ERR_PTR(-ENOMEM);
@@ -641,6 +672,26 @@ struct sg_table *dma_buf_map_attachment(struct dma_buf_attachment *attach,
 }
 EXPORT_SYMBOL_GPL(dma_buf_map_attachment);
 
+/**
+ * dma_buf_unmap_attachment_locked - unmaps the buffer with reservation lock
+ * held, should deallocate the associated scatterlist. Is a wrapper for
+ * unmap_dma_buf() of dma_buf_ops.
+ * @attach:	[in]	attachment to unmap buffer from
+ * @sg_table:	[in]	scatterlist info of the buffer to unmap
+ * @direction:  [in]    direction of DMA transfer
+ *
+ * This unmaps a DMA mapping for @attached obtained by dma_buf_map_attachment().
+ */
+void dma_buf_unmap_attachment_locked(struct dma_buf_attachment *attach,
+				     struct sg_table *sg_table,
+				     enum dma_data_direction direction)
+{
+	might_sleep();
+	attach->dmabuf->ops->unmap_dma_buf(attach, sg_table,
+						direction);
+}
+EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment_locked);
+
 /**
  * dma_buf_unmap_attachment - unmaps and decreases usecount of the buffer;might
  * deallocate the scatterlist associated. Is a wrapper for unmap_dma_buf() of
@@ -655,14 +706,11 @@ void dma_buf_unmap_attachment(struct dma_buf_attachment *attach,
 				struct sg_table *sg_table,
 				enum dma_data_direction direction)
 {
-	might_sleep();
-
 	if (WARN_ON(!attach || !attach->dmabuf || !sg_table))
 		return;
 
 	reservation_object_lock(attach->dmabuf->resv, NULL);
-	attach->dmabuf->ops->unmap_dma_buf(attach, sg_table,
-						direction);
+	dma_buf_unmap_attachment_locked(attach, sg_table, direction);
 	reservation_object_unlock(attach->dmabuf->resv);
 }
 EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment);
diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
index d2ba7a027a78..968777e8c662 100644
--- a/include/linux/dma-buf.h
+++ b/include/linux/dma-buf.h
@@ -388,8 +388,13 @@ int dma_buf_fd(struct dma_buf *dmabuf, int flags);
 struct dma_buf *dma_buf_get(int fd);
 void dma_buf_put(struct dma_buf *dmabuf);
 
+struct sg_table *dma_buf_map_attachment_locked(struct dma_buf_attachment *,
+					       enum dma_data_direction);
 struct sg_table *dma_buf_map_attachment(struct dma_buf_attachment *,
 					enum dma_data_direction);
+void dma_buf_unmap_attachment_locked(struct dma_buf_attachment *,
+				     struct sg_table *,
+				     enum dma_data_direction);
 void dma_buf_unmap_attachment(struct dma_buf_attachment *, struct sg_table *,
 				enum dma_data_direction);
 int dma_buf_begin_cpu_access(struct dma_buf *dma_buf,
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 58+ messages in thread

* [PATCH 4/5] dma-buf: add dma_buf_(un)map_attachment_locked variants
@ 2018-06-01 12:00   ` Christian König
  0 siblings, 0 replies; 58+ messages in thread
From: Christian König @ 2018-06-01 12:00 UTC (permalink / raw)
  To: linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw,
	linux-media-u79uwXL29TY76Z2rM5mHXA,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
  Cc: sumit.semwal-QSEj5FYQhm4dnm+yROfE0A

Add function variants which can be called with the reservation lock
already held.

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

diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
index 4f0708cb58a7..3371509b468e 100644
--- a/drivers/dma-buf/dma-buf.c
+++ b/drivers/dma-buf/dma-buf.c
@@ -606,6 +606,38 @@ void dma_buf_detach(struct dma_buf *dmabuf, struct dma_buf_attachment *attach)
 }
 EXPORT_SYMBOL_GPL(dma_buf_detach);
 
+/**
+ * dma_buf_map_attachment_locked - Maps the buffer into _device_ address space
+ * with the reservation lock held. Is a wrapper for map_dma_buf() of the
+ *
+ * Returns the scatterlist table of the attachment;
+ * dma_buf_ops.
+ * @attach:	[in]	attachment whose scatterlist is to be returned
+ * @direction:	[in]	direction of DMA transfer
+ *
+ * Returns sg_table containing the scatterlist to be returned; returns ERR_PTR
+ * on error. May return -EINTR if it is interrupted by a signal.
+ *
+ * A mapping must be unmapped by using dma_buf_unmap_attachment(). Note that
+ * the underlying backing storage is pinned for as long as a mapping exists,
+ * therefore users/importers should not hold onto a mapping for undue amounts of
+ * time.
+ */
+struct sg_table *
+dma_buf_map_attachment_locked(struct dma_buf_attachment *attach,
+			      enum dma_data_direction direction)
+{
+	struct sg_table *sg_table;
+
+	might_sleep();
+	sg_table = attach->dmabuf->ops->map_dma_buf(attach, direction);
+	if (!sg_table)
+		sg_table = ERR_PTR(-ENOMEM);
+
+	return sg_table;
+}
+EXPORT_SYMBOL_GPL(dma_buf_map_attachment_locked);
+
 /**
  * dma_buf_map_attachment - Returns the scatterlist table of the attachment;
  * mapped into _device_ address space. Is a wrapper for map_dma_buf() of the
@@ -626,13 +658,12 @@ struct sg_table *dma_buf_map_attachment(struct dma_buf_attachment *attach,
 {
 	struct sg_table *sg_table;
 
-	might_sleep();
 
 	if (WARN_ON(!attach || !attach->dmabuf))
 		return ERR_PTR(-EINVAL);
 
 	reservation_object_lock(attach->dmabuf->resv, NULL);
-	sg_table = attach->dmabuf->ops->map_dma_buf(attach, direction);
+	sg_table = dma_buf_map_attachment_locked(attach, direction);
 	reservation_object_unlock(attach->dmabuf->resv);
 	if (!sg_table)
 		sg_table = ERR_PTR(-ENOMEM);
@@ -641,6 +672,26 @@ struct sg_table *dma_buf_map_attachment(struct dma_buf_attachment *attach,
 }
 EXPORT_SYMBOL_GPL(dma_buf_map_attachment);
 
+/**
+ * dma_buf_unmap_attachment_locked - unmaps the buffer with reservation lock
+ * held, should deallocate the associated scatterlist. Is a wrapper for
+ * unmap_dma_buf() of dma_buf_ops.
+ * @attach:	[in]	attachment to unmap buffer from
+ * @sg_table:	[in]	scatterlist info of the buffer to unmap
+ * @direction:  [in]    direction of DMA transfer
+ *
+ * This unmaps a DMA mapping for @attached obtained by dma_buf_map_attachment().
+ */
+void dma_buf_unmap_attachment_locked(struct dma_buf_attachment *attach,
+				     struct sg_table *sg_table,
+				     enum dma_data_direction direction)
+{
+	might_sleep();
+	attach->dmabuf->ops->unmap_dma_buf(attach, sg_table,
+						direction);
+}
+EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment_locked);
+
 /**
  * dma_buf_unmap_attachment - unmaps and decreases usecount of the buffer;might
  * deallocate the scatterlist associated. Is a wrapper for unmap_dma_buf() of
@@ -655,14 +706,11 @@ void dma_buf_unmap_attachment(struct dma_buf_attachment *attach,
 				struct sg_table *sg_table,
 				enum dma_data_direction direction)
 {
-	might_sleep();
-
 	if (WARN_ON(!attach || !attach->dmabuf || !sg_table))
 		return;
 
 	reservation_object_lock(attach->dmabuf->resv, NULL);
-	attach->dmabuf->ops->unmap_dma_buf(attach, sg_table,
-						direction);
+	dma_buf_unmap_attachment_locked(attach, sg_table, direction);
 	reservation_object_unlock(attach->dmabuf->resv);
 }
 EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment);
diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
index d2ba7a027a78..968777e8c662 100644
--- a/include/linux/dma-buf.h
+++ b/include/linux/dma-buf.h
@@ -388,8 +388,13 @@ int dma_buf_fd(struct dma_buf *dmabuf, int flags);
 struct dma_buf *dma_buf_get(int fd);
 void dma_buf_put(struct dma_buf *dmabuf);
 
+struct sg_table *dma_buf_map_attachment_locked(struct dma_buf_attachment *,
+					       enum dma_data_direction);
 struct sg_table *dma_buf_map_attachment(struct dma_buf_attachment *,
 					enum dma_data_direction);
+void dma_buf_unmap_attachment_locked(struct dma_buf_attachment *,
+				     struct sg_table *,
+				     enum dma_data_direction);
 void dma_buf_unmap_attachment(struct dma_buf_attachment *, struct sg_table *,
 				enum dma_data_direction);
 int dma_buf_begin_cpu_access(struct dma_buf *dma_buf,
-- 
2.14.1

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 58+ messages in thread

* [PATCH 5/5] drm/amdgpu: add independent DMA-buf export v3
@ 2018-06-01 12:00   ` Christian König
  0 siblings, 0 replies; 58+ messages in thread
From: Christian König @ 2018-06-01 12:00 UTC (permalink / raw)
  To: linaro-mm-sig, linux-media, dri-devel, amd-gfx; +Cc: sumit.semwal

The caching of SGT's done by the DRM code is actually quite harmful and
should probably removed altogether in the long term.

Start by providing a separate DMA-buf export implementation in amdgpu. This is
also a prerequisite of unpinned DMA-buf handling.

v2: fix unintended recursion, remove debugging leftovers
v3: split out from unpinned DMA-buf work

Signed-off-by: Christian König <christian.koenig@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu.h       |  1 -
 drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c   |  1 -
 drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c | 73 ++++++++++++++-----------------
 3 files changed, 32 insertions(+), 43 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index 2d7500921c0b..93dc57d74fc2 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -373,7 +373,6 @@ int amdgpu_gem_object_open(struct drm_gem_object *obj,
 void amdgpu_gem_object_close(struct drm_gem_object *obj,
 				struct drm_file *file_priv);
 unsigned long amdgpu_gem_timeout(uint64_t timeout_ns);
-struct sg_table *amdgpu_gem_prime_get_sg_table(struct drm_gem_object *obj);
 struct drm_gem_object *
 amdgpu_gem_prime_import_sg_table(struct drm_device *dev,
 				 struct dma_buf_attachment *attach,
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
index b0bf2f24da48..270b8ad927ea 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
@@ -907,7 +907,6 @@ static struct drm_driver kms_driver = {
 	.gem_prime_export = amdgpu_gem_prime_export,
 	.gem_prime_import = amdgpu_gem_prime_import,
 	.gem_prime_res_obj = amdgpu_gem_prime_res_obj,
-	.gem_prime_get_sg_table = amdgpu_gem_prime_get_sg_table,
 	.gem_prime_import_sg_table = amdgpu_gem_prime_import_sg_table,
 	.gem_prime_vmap = amdgpu_gem_prime_vmap,
 	.gem_prime_vunmap = amdgpu_gem_prime_vunmap,
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
index a156b3891a3f..0c5a75b06648 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
@@ -32,14 +32,6 @@
 
 static const struct dma_buf_ops amdgpu_dmabuf_ops;
 
-struct sg_table *amdgpu_gem_prime_get_sg_table(struct drm_gem_object *obj)
-{
-	struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
-	int npages = bo->tbo.num_pages;
-
-	return drm_prime_pages_to_sg(bo->tbo.ttm->pages, npages);
-}
-
 void *amdgpu_gem_prime_vmap(struct drm_gem_object *obj)
 {
 	struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
@@ -132,23 +124,17 @@ amdgpu_gem_prime_import_sg_table(struct drm_device *dev,
 	return ERR_PTR(ret);
 }
 
-static int amdgpu_gem_map_attach(struct dma_buf *dma_buf,
-				 struct dma_buf_attachment *attach)
+static struct sg_table *
+amdgpu_gem_map_dma_buf(struct dma_buf_attachment *attach,
+		       enum dma_data_direction dir)
 {
+	struct dma_buf *dma_buf = attach->dmabuf;
 	struct drm_gem_object *obj = dma_buf->priv;
 	struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
 	struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
+	struct sg_table *sgt;
 	long r;
 
-	r = drm_gem_map_attach(dma_buf, attach);
-	if (r)
-		return r;
-
-	r = amdgpu_bo_reserve(bo, false);
-	if (unlikely(r != 0))
-		goto error_detach;
-
-
 	if (attach->dev->driver != adev->dev->driver) {
 		/*
 		 * Wait for all shared fences to complete before we switch to future
@@ -159,46 +145,53 @@ static int amdgpu_gem_map_attach(struct dma_buf *dma_buf,
 							MAX_SCHEDULE_TIMEOUT);
 		if (unlikely(r < 0)) {
 			DRM_DEBUG_PRIME("Fence wait failed: %li\n", r);
-			goto error_unreserve;
+			return ERR_PTR(r);
 		}
 	}
 
 	/* pin buffer into GTT */
 	r = amdgpu_bo_pin(bo, AMDGPU_GEM_DOMAIN_GTT, NULL);
 	if (r)
-		goto error_unreserve;
+		return ERR_PTR(r);
+
+	sgt = drm_prime_pages_to_sg(bo->tbo.ttm->pages, bo->tbo.num_pages);
+	if (IS_ERR(sgt))
+		return sgt;
+
+	if (!dma_map_sg_attrs(attach->dev, sgt->sgl, sgt->nents, dir,
+			      DMA_ATTR_SKIP_CPU_SYNC))
+		goto error_free;
 
 	if (attach->dev->driver != adev->dev->driver)
 		bo->prime_shared_count++;
 
-error_unreserve:
-	amdgpu_bo_unreserve(bo);
+	return sgt;
 
-error_detach:
-	if (r)
-		drm_gem_map_detach(dma_buf, attach);
-	return r;
+error_free:
+	sg_free_table(sgt);
+	kfree(sgt);
+	return ERR_PTR(-ENOMEM);
 }
 
-static void amdgpu_gem_map_detach(struct dma_buf *dma_buf,
-				  struct dma_buf_attachment *attach)
+static void amdgpu_gem_unmap_dma_buf(struct dma_buf_attachment *attach,
+				     struct sg_table *sgt,
+				     enum dma_data_direction dir)
 {
+	struct dma_buf *dma_buf = attach->dmabuf;
 	struct drm_gem_object *obj = dma_buf->priv;
 	struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
 	struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
-	int ret = 0;
-
-	ret = amdgpu_bo_reserve(bo, true);
-	if (unlikely(ret != 0))
-		goto error;
 
 	amdgpu_bo_unpin(bo);
+
 	if (attach->dev->driver != adev->dev->driver && bo->prime_shared_count)
 		bo->prime_shared_count--;
-	amdgpu_bo_unreserve(bo);
 
-error:
-	drm_gem_map_detach(dma_buf, attach);
+	if (sgt) {
+		dma_unmap_sg(attach->dev, sgt->sgl, sgt->nents, dir);
+		sg_free_table(sgt);
+		kfree(sgt);
+	}
 }
 
 struct reservation_object *amdgpu_gem_prime_res_obj(struct drm_gem_object *obj)
@@ -237,10 +230,8 @@ static int amdgpu_gem_begin_cpu_access(struct dma_buf *dma_buf,
 }
 
 static const struct dma_buf_ops amdgpu_dmabuf_ops = {
-	.attach = amdgpu_gem_map_attach,
-	.detach = amdgpu_gem_map_detach,
-	.map_dma_buf = drm_gem_map_dma_buf,
-	.unmap_dma_buf = drm_gem_unmap_dma_buf,
+	.map_dma_buf = amdgpu_gem_map_dma_buf,
+	.unmap_dma_buf = amdgpu_gem_unmap_dma_buf,
 	.release = drm_gem_dmabuf_release,
 	.begin_cpu_access = amdgpu_gem_begin_cpu_access,
 	.map = drm_gem_dmabuf_kmap,
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 58+ messages in thread

* [PATCH 5/5] drm/amdgpu: add independent DMA-buf export v3
@ 2018-06-01 12:00   ` Christian König
  0 siblings, 0 replies; 58+ messages in thread
From: Christian König @ 2018-06-01 12:00 UTC (permalink / raw)
  To: linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw,
	linux-media-u79uwXL29TY76Z2rM5mHXA,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
  Cc: sumit.semwal-QSEj5FYQhm4dnm+yROfE0A

The caching of SGT's done by the DRM code is actually quite harmful and
should probably removed altogether in the long term.

Start by providing a separate DMA-buf export implementation in amdgpu. This is
also a prerequisite of unpinned DMA-buf handling.

v2: fix unintended recursion, remove debugging leftovers
v3: split out from unpinned DMA-buf work

Signed-off-by: Christian König <christian.koenig@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu.h       |  1 -
 drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c   |  1 -
 drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c | 73 ++++++++++++++-----------------
 3 files changed, 32 insertions(+), 43 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index 2d7500921c0b..93dc57d74fc2 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -373,7 +373,6 @@ int amdgpu_gem_object_open(struct drm_gem_object *obj,
 void amdgpu_gem_object_close(struct drm_gem_object *obj,
 				struct drm_file *file_priv);
 unsigned long amdgpu_gem_timeout(uint64_t timeout_ns);
-struct sg_table *amdgpu_gem_prime_get_sg_table(struct drm_gem_object *obj);
 struct drm_gem_object *
 amdgpu_gem_prime_import_sg_table(struct drm_device *dev,
 				 struct dma_buf_attachment *attach,
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
index b0bf2f24da48..270b8ad927ea 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
@@ -907,7 +907,6 @@ static struct drm_driver kms_driver = {
 	.gem_prime_export = amdgpu_gem_prime_export,
 	.gem_prime_import = amdgpu_gem_prime_import,
 	.gem_prime_res_obj = amdgpu_gem_prime_res_obj,
-	.gem_prime_get_sg_table = amdgpu_gem_prime_get_sg_table,
 	.gem_prime_import_sg_table = amdgpu_gem_prime_import_sg_table,
 	.gem_prime_vmap = amdgpu_gem_prime_vmap,
 	.gem_prime_vunmap = amdgpu_gem_prime_vunmap,
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
index a156b3891a3f..0c5a75b06648 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
@@ -32,14 +32,6 @@
 
 static const struct dma_buf_ops amdgpu_dmabuf_ops;
 
-struct sg_table *amdgpu_gem_prime_get_sg_table(struct drm_gem_object *obj)
-{
-	struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
-	int npages = bo->tbo.num_pages;
-
-	return drm_prime_pages_to_sg(bo->tbo.ttm->pages, npages);
-}
-
 void *amdgpu_gem_prime_vmap(struct drm_gem_object *obj)
 {
 	struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
@@ -132,23 +124,17 @@ amdgpu_gem_prime_import_sg_table(struct drm_device *dev,
 	return ERR_PTR(ret);
 }
 
-static int amdgpu_gem_map_attach(struct dma_buf *dma_buf,
-				 struct dma_buf_attachment *attach)
+static struct sg_table *
+amdgpu_gem_map_dma_buf(struct dma_buf_attachment *attach,
+		       enum dma_data_direction dir)
 {
+	struct dma_buf *dma_buf = attach->dmabuf;
 	struct drm_gem_object *obj = dma_buf->priv;
 	struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
 	struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
+	struct sg_table *sgt;
 	long r;
 
-	r = drm_gem_map_attach(dma_buf, attach);
-	if (r)
-		return r;
-
-	r = amdgpu_bo_reserve(bo, false);
-	if (unlikely(r != 0))
-		goto error_detach;
-
-
 	if (attach->dev->driver != adev->dev->driver) {
 		/*
 		 * Wait for all shared fences to complete before we switch to future
@@ -159,46 +145,53 @@ static int amdgpu_gem_map_attach(struct dma_buf *dma_buf,
 							MAX_SCHEDULE_TIMEOUT);
 		if (unlikely(r < 0)) {
 			DRM_DEBUG_PRIME("Fence wait failed: %li\n", r);
-			goto error_unreserve;
+			return ERR_PTR(r);
 		}
 	}
 
 	/* pin buffer into GTT */
 	r = amdgpu_bo_pin(bo, AMDGPU_GEM_DOMAIN_GTT, NULL);
 	if (r)
-		goto error_unreserve;
+		return ERR_PTR(r);
+
+	sgt = drm_prime_pages_to_sg(bo->tbo.ttm->pages, bo->tbo.num_pages);
+	if (IS_ERR(sgt))
+		return sgt;
+
+	if (!dma_map_sg_attrs(attach->dev, sgt->sgl, sgt->nents, dir,
+			      DMA_ATTR_SKIP_CPU_SYNC))
+		goto error_free;
 
 	if (attach->dev->driver != adev->dev->driver)
 		bo->prime_shared_count++;
 
-error_unreserve:
-	amdgpu_bo_unreserve(bo);
+	return sgt;
 
-error_detach:
-	if (r)
-		drm_gem_map_detach(dma_buf, attach);
-	return r;
+error_free:
+	sg_free_table(sgt);
+	kfree(sgt);
+	return ERR_PTR(-ENOMEM);
 }
 
-static void amdgpu_gem_map_detach(struct dma_buf *dma_buf,
-				  struct dma_buf_attachment *attach)
+static void amdgpu_gem_unmap_dma_buf(struct dma_buf_attachment *attach,
+				     struct sg_table *sgt,
+				     enum dma_data_direction dir)
 {
+	struct dma_buf *dma_buf = attach->dmabuf;
 	struct drm_gem_object *obj = dma_buf->priv;
 	struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
 	struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
-	int ret = 0;
-
-	ret = amdgpu_bo_reserve(bo, true);
-	if (unlikely(ret != 0))
-		goto error;
 
 	amdgpu_bo_unpin(bo);
+
 	if (attach->dev->driver != adev->dev->driver && bo->prime_shared_count)
 		bo->prime_shared_count--;
-	amdgpu_bo_unreserve(bo);
 
-error:
-	drm_gem_map_detach(dma_buf, attach);
+	if (sgt) {
+		dma_unmap_sg(attach->dev, sgt->sgl, sgt->nents, dir);
+		sg_free_table(sgt);
+		kfree(sgt);
+	}
 }
 
 struct reservation_object *amdgpu_gem_prime_res_obj(struct drm_gem_object *obj)
@@ -237,10 +230,8 @@ static int amdgpu_gem_begin_cpu_access(struct dma_buf *dma_buf,
 }
 
 static const struct dma_buf_ops amdgpu_dmabuf_ops = {
-	.attach = amdgpu_gem_map_attach,
-	.detach = amdgpu_gem_map_detach,
-	.map_dma_buf = drm_gem_map_dma_buf,
-	.unmap_dma_buf = drm_gem_unmap_dma_buf,
+	.map_dma_buf = amdgpu_gem_map_dma_buf,
+	.unmap_dma_buf = amdgpu_gem_unmap_dma_buf,
 	.release = drm_gem_dmabuf_release,
 	.begin_cpu_access = amdgpu_gem_begin_cpu_access,
 	.map = drm_gem_dmabuf_kmap,
-- 
2.14.1

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 58+ messages in thread

* Re: [PATCH 1/5] dma_buf: remove device parameter from attach callback
@ 2018-06-01 12:11   ` Christian König
  0 siblings, 0 replies; 58+ messages in thread
From: Christian König @ 2018-06-01 12:11 UTC (permalink / raw)
  To: linaro-mm-sig, linux-media, dri-devel, amd-gfx; +Cc: sumit.semwal

Sorry, accidentally send this series without a cover letter.

This is a cleanup to the DMA-buf interface, which is also a prerequisite 
to unpinned DMA-buf operation.

Patch #1 and #2 just remove unused functionality and clean up callback 
parameters.

Patch #3 and #4 introduce taking the reservation lock during 
mapping/unmapping of DMA-bufs.

This introduces a common lock where both exporter as well as importer 
can then use in the future for unpinned DMA-buf operation.

This of course means that exporters should now not take this reservation 
lock manually any more. The DRM drivers don't seem to actually do that, 
but I'm not 100% sure about other implementations.

Patch #5 then makes use of the new lock to simplify the DMA-buf import 
handling in amdgpu.

Please review and or comment,
Christian.

Am 01.06.2018 um 14:00 schrieb Christian König:
> The device parameter is completely unused because it is available in the
> attachment structure as well.
>
> Signed-off-by: Christian König <christian.koenig@amd.com>
> ---
>   drivers/dma-buf/dma-buf.c                             | 2 +-
>   drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c             | 3 +--
>   drivers/gpu/drm/drm_prime.c                           | 3 +--
>   drivers/gpu/drm/udl/udl_dmabuf.c                      | 1 -
>   drivers/gpu/drm/vmwgfx/vmwgfx_prime.c                 | 1 -
>   drivers/media/common/videobuf2/videobuf2-dma-contig.c | 2 +-
>   drivers/media/common/videobuf2/videobuf2-dma-sg.c     | 2 +-
>   drivers/media/common/videobuf2/videobuf2-vmalloc.c    | 2 +-
>   include/drm/drm_prime.h                               | 2 +-
>   include/linux/dma-buf.h                               | 3 +--
>   10 files changed, 8 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
> index d78d5fc173dc..e99a8d19991b 100644
> --- a/drivers/dma-buf/dma-buf.c
> +++ b/drivers/dma-buf/dma-buf.c
> @@ -568,7 +568,7 @@ struct dma_buf_attachment *dma_buf_attach(struct dma_buf *dmabuf,
>   	mutex_lock(&dmabuf->lock);
>   
>   	if (dmabuf->ops->attach) {
> -		ret = dmabuf->ops->attach(dmabuf, dev, attach);
> +		ret = dmabuf->ops->attach(dmabuf, attach);
>   		if (ret)
>   			goto err_attach;
>   	}
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> index 4683626b065f..f1500f1ec0f5 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> @@ -133,7 +133,6 @@ amdgpu_gem_prime_import_sg_table(struct drm_device *dev,
>   }
>   
>   static int amdgpu_gem_map_attach(struct dma_buf *dma_buf,
> -				 struct device *target_dev,
>   				 struct dma_buf_attachment *attach)
>   {
>   	struct drm_gem_object *obj = dma_buf->priv;
> @@ -141,7 +140,7 @@ static int amdgpu_gem_map_attach(struct dma_buf *dma_buf,
>   	struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
>   	long r;
>   
> -	r = drm_gem_map_attach(dma_buf, target_dev, attach);
> +	r = drm_gem_map_attach(dma_buf, attach);
>   	if (r)
>   		return r;
>   
> diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
> index 7856a9b3f8a8..4a3a232fea67 100644
> --- a/drivers/gpu/drm/drm_prime.c
> +++ b/drivers/gpu/drm/drm_prime.c
> @@ -186,7 +186,6 @@ static int drm_prime_lookup_buf_handle(struct drm_prime_file_private *prime_fpri
>   /**
>    * drm_gem_map_attach - dma_buf attach implementation for GEM
>    * @dma_buf: buffer to attach device to
> - * @target_dev: not used
>    * @attach: buffer attachment data
>    *
>    * Allocates &drm_prime_attachment and calls &drm_driver.gem_prime_pin for
> @@ -195,7 +194,7 @@ static int drm_prime_lookup_buf_handle(struct drm_prime_file_private *prime_fpri
>    *
>    * Returns 0 on success, negative error code on failure.
>    */
> -int drm_gem_map_attach(struct dma_buf *dma_buf, struct device *target_dev,
> +int drm_gem_map_attach(struct dma_buf *dma_buf,
>   		       struct dma_buf_attachment *attach)
>   {
>   	struct drm_prime_attachment *prime_attach;
> diff --git a/drivers/gpu/drm/udl/udl_dmabuf.c b/drivers/gpu/drm/udl/udl_dmabuf.c
> index 2867ed155ff6..5fdc8bdc2026 100644
> --- a/drivers/gpu/drm/udl/udl_dmabuf.c
> +++ b/drivers/gpu/drm/udl/udl_dmabuf.c
> @@ -29,7 +29,6 @@ struct udl_drm_dmabuf_attachment {
>   };
>   
>   static int udl_attach_dma_buf(struct dma_buf *dmabuf,
> -			      struct device *dev,
>   			      struct dma_buf_attachment *attach)
>   {
>   	struct udl_drm_dmabuf_attachment *udl_attach;
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
> index 0d42a46521fc..fbffb37ccf42 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
> @@ -40,7 +40,6 @@
>    */
>   
>   static int vmw_prime_map_attach(struct dma_buf *dma_buf,
> -				struct device *target_dev,
>   				struct dma_buf_attachment *attach)
>   {
>   	return -ENOSYS;
> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-contig.c b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> index f1178f6f434d..12d0072c52c2 100644
> --- a/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> +++ b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> @@ -222,7 +222,7 @@ struct vb2_dc_attachment {
>   	enum dma_data_direction dma_dir;
>   };
>   
> -static int vb2_dc_dmabuf_ops_attach(struct dma_buf *dbuf, struct device *dev,
> +static int vb2_dc_dmabuf_ops_attach(struct dma_buf *dbuf,
>   	struct dma_buf_attachment *dbuf_attach)
>   {
>   	struct vb2_dc_attachment *attach;
> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-sg.c b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
> index 753ed3138dcc..cf94765e593f 100644
> --- a/drivers/media/common/videobuf2/videobuf2-dma-sg.c
> +++ b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
> @@ -371,7 +371,7 @@ struct vb2_dma_sg_attachment {
>   	enum dma_data_direction dma_dir;
>   };
>   
> -static int vb2_dma_sg_dmabuf_ops_attach(struct dma_buf *dbuf, struct device *dev,
> +static int vb2_dma_sg_dmabuf_ops_attach(struct dma_buf *dbuf,
>   	struct dma_buf_attachment *dbuf_attach)
>   {
>   	struct vb2_dma_sg_attachment *attach;
> diff --git a/drivers/media/common/videobuf2/videobuf2-vmalloc.c b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
> index 3a7c80cd1a17..298ffb9ecdae 100644
> --- a/drivers/media/common/videobuf2/videobuf2-vmalloc.c
> +++ b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
> @@ -209,7 +209,7 @@ struct vb2_vmalloc_attachment {
>   	enum dma_data_direction dma_dir;
>   };
>   
> -static int vb2_vmalloc_dmabuf_ops_attach(struct dma_buf *dbuf, struct device *dev,
> +static int vb2_vmalloc_dmabuf_ops_attach(struct dma_buf *dbuf,
>   	struct dma_buf_attachment *dbuf_attach)
>   {
>   	struct vb2_vmalloc_attachment *attach;
> diff --git a/include/drm/drm_prime.h b/include/drm/drm_prime.h
> index 4d5f5d6cf6a6..ef338151cea8 100644
> --- a/include/drm/drm_prime.h
> +++ b/include/drm/drm_prime.h
> @@ -82,7 +82,7 @@ int drm_gem_prime_fd_to_handle(struct drm_device *dev,
>   struct dma_buf *drm_gem_dmabuf_export(struct drm_device *dev,
>   				      struct dma_buf_export_info *exp_info);
>   void drm_gem_dmabuf_release(struct dma_buf *dma_buf);
> -int drm_gem_map_attach(struct dma_buf *dma_buf, struct device *target_dev,
> +int drm_gem_map_attach(struct dma_buf *dma_buf,
>   		       struct dma_buf_attachment *attach);
>   void drm_gem_map_detach(struct dma_buf *dma_buf,
>   			struct dma_buf_attachment *attach);
> diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
> index 085db2fee2d7..346caf77937f 100644
> --- a/include/linux/dma-buf.h
> +++ b/include/linux/dma-buf.h
> @@ -77,8 +77,7 @@ struct dma_buf_ops {
>   	 * to signal that backing storage is already allocated and incompatible
>   	 * with the requirements of requesting device.
>   	 */
> -	int (*attach)(struct dma_buf *, struct device *,
> -		      struct dma_buf_attachment *);
> +	int (*attach)(struct dma_buf *, struct dma_buf_attachment *);
>   
>   	/**
>   	 * @detach:

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 1/5] dma_buf: remove device parameter from attach callback
@ 2018-06-01 12:11   ` Christian König
  0 siblings, 0 replies; 58+ messages in thread
From: Christian König @ 2018-06-01 12:11 UTC (permalink / raw)
  To: linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw,
	linux-media-u79uwXL29TY76Z2rM5mHXA,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
  Cc: sumit.semwal-QSEj5FYQhm4dnm+yROfE0A

Sorry, accidentally send this series without a cover letter.

This is a cleanup to the DMA-buf interface, which is also a prerequisite 
to unpinned DMA-buf operation.

Patch #1 and #2 just remove unused functionality and clean up callback 
parameters.

Patch #3 and #4 introduce taking the reservation lock during 
mapping/unmapping of DMA-bufs.

This introduces a common lock where both exporter as well as importer 
can then use in the future for unpinned DMA-buf operation.

This of course means that exporters should now not take this reservation 
lock manually any more. The DRM drivers don't seem to actually do that, 
but I'm not 100% sure about other implementations.

Patch #5 then makes use of the new lock to simplify the DMA-buf import 
handling in amdgpu.

Please review and or comment,
Christian.

Am 01.06.2018 um 14:00 schrieb Christian König:
> The device parameter is completely unused because it is available in the
> attachment structure as well.
>
> Signed-off-by: Christian König <christian.koenig@amd.com>
> ---
>   drivers/dma-buf/dma-buf.c                             | 2 +-
>   drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c             | 3 +--
>   drivers/gpu/drm/drm_prime.c                           | 3 +--
>   drivers/gpu/drm/udl/udl_dmabuf.c                      | 1 -
>   drivers/gpu/drm/vmwgfx/vmwgfx_prime.c                 | 1 -
>   drivers/media/common/videobuf2/videobuf2-dma-contig.c | 2 +-
>   drivers/media/common/videobuf2/videobuf2-dma-sg.c     | 2 +-
>   drivers/media/common/videobuf2/videobuf2-vmalloc.c    | 2 +-
>   include/drm/drm_prime.h                               | 2 +-
>   include/linux/dma-buf.h                               | 3 +--
>   10 files changed, 8 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
> index d78d5fc173dc..e99a8d19991b 100644
> --- a/drivers/dma-buf/dma-buf.c
> +++ b/drivers/dma-buf/dma-buf.c
> @@ -568,7 +568,7 @@ struct dma_buf_attachment *dma_buf_attach(struct dma_buf *dmabuf,
>   	mutex_lock(&dmabuf->lock);
>   
>   	if (dmabuf->ops->attach) {
> -		ret = dmabuf->ops->attach(dmabuf, dev, attach);
> +		ret = dmabuf->ops->attach(dmabuf, attach);
>   		if (ret)
>   			goto err_attach;
>   	}
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> index 4683626b065f..f1500f1ec0f5 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> @@ -133,7 +133,6 @@ amdgpu_gem_prime_import_sg_table(struct drm_device *dev,
>   }
>   
>   static int amdgpu_gem_map_attach(struct dma_buf *dma_buf,
> -				 struct device *target_dev,
>   				 struct dma_buf_attachment *attach)
>   {
>   	struct drm_gem_object *obj = dma_buf->priv;
> @@ -141,7 +140,7 @@ static int amdgpu_gem_map_attach(struct dma_buf *dma_buf,
>   	struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
>   	long r;
>   
> -	r = drm_gem_map_attach(dma_buf, target_dev, attach);
> +	r = drm_gem_map_attach(dma_buf, attach);
>   	if (r)
>   		return r;
>   
> diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
> index 7856a9b3f8a8..4a3a232fea67 100644
> --- a/drivers/gpu/drm/drm_prime.c
> +++ b/drivers/gpu/drm/drm_prime.c
> @@ -186,7 +186,6 @@ static int drm_prime_lookup_buf_handle(struct drm_prime_file_private *prime_fpri
>   /**
>    * drm_gem_map_attach - dma_buf attach implementation for GEM
>    * @dma_buf: buffer to attach device to
> - * @target_dev: not used
>    * @attach: buffer attachment data
>    *
>    * Allocates &drm_prime_attachment and calls &drm_driver.gem_prime_pin for
> @@ -195,7 +194,7 @@ static int drm_prime_lookup_buf_handle(struct drm_prime_file_private *prime_fpri
>    *
>    * Returns 0 on success, negative error code on failure.
>    */
> -int drm_gem_map_attach(struct dma_buf *dma_buf, struct device *target_dev,
> +int drm_gem_map_attach(struct dma_buf *dma_buf,
>   		       struct dma_buf_attachment *attach)
>   {
>   	struct drm_prime_attachment *prime_attach;
> diff --git a/drivers/gpu/drm/udl/udl_dmabuf.c b/drivers/gpu/drm/udl/udl_dmabuf.c
> index 2867ed155ff6..5fdc8bdc2026 100644
> --- a/drivers/gpu/drm/udl/udl_dmabuf.c
> +++ b/drivers/gpu/drm/udl/udl_dmabuf.c
> @@ -29,7 +29,6 @@ struct udl_drm_dmabuf_attachment {
>   };
>   
>   static int udl_attach_dma_buf(struct dma_buf *dmabuf,
> -			      struct device *dev,
>   			      struct dma_buf_attachment *attach)
>   {
>   	struct udl_drm_dmabuf_attachment *udl_attach;
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
> index 0d42a46521fc..fbffb37ccf42 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
> @@ -40,7 +40,6 @@
>    */
>   
>   static int vmw_prime_map_attach(struct dma_buf *dma_buf,
> -				struct device *target_dev,
>   				struct dma_buf_attachment *attach)
>   {
>   	return -ENOSYS;
> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-contig.c b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> index f1178f6f434d..12d0072c52c2 100644
> --- a/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> +++ b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> @@ -222,7 +222,7 @@ struct vb2_dc_attachment {
>   	enum dma_data_direction dma_dir;
>   };
>   
> -static int vb2_dc_dmabuf_ops_attach(struct dma_buf *dbuf, struct device *dev,
> +static int vb2_dc_dmabuf_ops_attach(struct dma_buf *dbuf,
>   	struct dma_buf_attachment *dbuf_attach)
>   {
>   	struct vb2_dc_attachment *attach;
> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-sg.c b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
> index 753ed3138dcc..cf94765e593f 100644
> --- a/drivers/media/common/videobuf2/videobuf2-dma-sg.c
> +++ b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
> @@ -371,7 +371,7 @@ struct vb2_dma_sg_attachment {
>   	enum dma_data_direction dma_dir;
>   };
>   
> -static int vb2_dma_sg_dmabuf_ops_attach(struct dma_buf *dbuf, struct device *dev,
> +static int vb2_dma_sg_dmabuf_ops_attach(struct dma_buf *dbuf,
>   	struct dma_buf_attachment *dbuf_attach)
>   {
>   	struct vb2_dma_sg_attachment *attach;
> diff --git a/drivers/media/common/videobuf2/videobuf2-vmalloc.c b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
> index 3a7c80cd1a17..298ffb9ecdae 100644
> --- a/drivers/media/common/videobuf2/videobuf2-vmalloc.c
> +++ b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
> @@ -209,7 +209,7 @@ struct vb2_vmalloc_attachment {
>   	enum dma_data_direction dma_dir;
>   };
>   
> -static int vb2_vmalloc_dmabuf_ops_attach(struct dma_buf *dbuf, struct device *dev,
> +static int vb2_vmalloc_dmabuf_ops_attach(struct dma_buf *dbuf,
>   	struct dma_buf_attachment *dbuf_attach)
>   {
>   	struct vb2_vmalloc_attachment *attach;
> diff --git a/include/drm/drm_prime.h b/include/drm/drm_prime.h
> index 4d5f5d6cf6a6..ef338151cea8 100644
> --- a/include/drm/drm_prime.h
> +++ b/include/drm/drm_prime.h
> @@ -82,7 +82,7 @@ int drm_gem_prime_fd_to_handle(struct drm_device *dev,
>   struct dma_buf *drm_gem_dmabuf_export(struct drm_device *dev,
>   				      struct dma_buf_export_info *exp_info);
>   void drm_gem_dmabuf_release(struct dma_buf *dma_buf);
> -int drm_gem_map_attach(struct dma_buf *dma_buf, struct device *target_dev,
> +int drm_gem_map_attach(struct dma_buf *dma_buf,
>   		       struct dma_buf_attachment *attach);
>   void drm_gem_map_detach(struct dma_buf *dma_buf,
>   			struct dma_buf_attachment *attach);
> diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
> index 085db2fee2d7..346caf77937f 100644
> --- a/include/linux/dma-buf.h
> +++ b/include/linux/dma-buf.h
> @@ -77,8 +77,7 @@ struct dma_buf_ops {
>   	 * to signal that backing storage is already allocated and incompatible
>   	 * with the requirements of requesting device.
>   	 */
> -	int (*attach)(struct dma_buf *, struct device *,
> -		      struct dma_buf_attachment *);
> +	int (*attach)(struct dma_buf *, struct dma_buf_attachment *);
>   
>   	/**
>   	 * @detach:

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 1/5] dma_buf: remove device parameter from attach callback
@ 2018-06-01 14:02     ` Michel Dänzer
  0 siblings, 0 replies; 58+ messages in thread
From: Michel Dänzer @ 2018-06-01 14:02 UTC (permalink / raw)
  To: Christian König; +Cc: linaro-mm-sig, linux-media, dri-devel, amd-gfx

On 2018-06-01 02:11 PM, Christian König wrote:
> Sorry, accidentally send this series without a cover letter.
> 
> This is a cleanup to the DMA-buf interface, which is also a prerequisite
> to unpinned DMA-buf operation.
> 
> Patch #1 and #2 just remove unused functionality and clean up callback
> parameters.
> 
> Patch #3 and #4 introduce taking the reservation lock during
> mapping/unmapping of DMA-bufs.
> 
> This introduces a common lock where both exporter as well as importer
> can then use in the future for unpinned DMA-buf operation.
> 
> This of course means that exporters should now not take this reservation
> lock manually any more. The DRM drivers don't seem to actually do that,
> but I'm not 100% sure about other implementations.
> 
> Patch #5 then makes use of the new lock to simplify the DMA-buf import
> handling in amdgpu.

Please rebase this series on top of
https://patchwork.freedesktop.org/patch/226311/ and update the
documentation in amdgpu_prime.c as needed in each patch.


-- 
Earthling Michel Dänzer               |               http://www.amd.com
Libre software enthusiast             |             Mesa and X developer

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 1/5] dma_buf: remove device parameter from attach callback
@ 2018-06-01 14:02     ` Michel Dänzer
  0 siblings, 0 replies; 58+ messages in thread
From: Michel Dänzer @ 2018-06-01 14:02 UTC (permalink / raw)
  To: Christian König
  Cc: linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw,
	amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	linux-media-u79uwXL29TY76Z2rM5mHXA

On 2018-06-01 02:11 PM, Christian König wrote:
> Sorry, accidentally send this series without a cover letter.
> 
> This is a cleanup to the DMA-buf interface, which is also a prerequisite
> to unpinned DMA-buf operation.
> 
> Patch #1 and #2 just remove unused functionality and clean up callback
> parameters.
> 
> Patch #3 and #4 introduce taking the reservation lock during
> mapping/unmapping of DMA-bufs.
> 
> This introduces a common lock where both exporter as well as importer
> can then use in the future for unpinned DMA-buf operation.
> 
> This of course means that exporters should now not take this reservation
> lock manually any more. The DRM drivers don't seem to actually do that,
> but I'm not 100% sure about other implementations.
> 
> Patch #5 then makes use of the new lock to simplify the DMA-buf import
> handling in amdgpu.

Please rebase this series on top of
https://patchwork.freedesktop.org/patch/226311/ and update the
documentation in amdgpu_prime.c as needed in each patch.


-- 
Earthling Michel Dänzer               |               http://www.amd.com
Libre software enthusiast             |             Mesa and X developer
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 1/5] dma_buf: remove device parameter from attach callback
@ 2018-06-01 15:17       ` Christian König
  0 siblings, 0 replies; 58+ messages in thread
From: Christian König @ 2018-06-01 15:17 UTC (permalink / raw)
  To: Michel Dänzer; +Cc: linaro-mm-sig, linux-media, dri-devel, amd-gfx

Am 01.06.2018 um 16:02 schrieb Michel Dänzer:
> On 2018-06-01 02:11 PM, Christian König wrote:
>> Sorry, accidentally send this series without a cover letter.
>>
>> This is a cleanup to the DMA-buf interface, which is also a prerequisite
>> to unpinned DMA-buf operation.
>>
>> Patch #1 and #2 just remove unused functionality and clean up callback
>> parameters.
>>
>> Patch #3 and #4 introduce taking the reservation lock during
>> mapping/unmapping of DMA-bufs.
>>
>> This introduces a common lock where both exporter as well as importer
>> can then use in the future for unpinned DMA-buf operation.
>>
>> This of course means that exporters should now not take this reservation
>> lock manually any more. The DRM drivers don't seem to actually do that,
>> but I'm not 100% sure about other implementations.
>>
>> Patch #5 then makes use of the new lock to simplify the DMA-buf import
>> handling in amdgpu.
> Please rebase this series on top of
> https://patchwork.freedesktop.org/patch/226311/ and update the
> documentation in amdgpu_prime.c as needed in each patch.

Sure. In this case can we get your patches committed to 
amd-staging-drm-next ASAP?

Thanks,
Christian.

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 1/5] dma_buf: remove device parameter from attach callback
@ 2018-06-01 15:17       ` Christian König
  0 siblings, 0 replies; 58+ messages in thread
From: Christian König @ 2018-06-01 15:17 UTC (permalink / raw)
  To: Michel Dänzer
  Cc: linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw,
	amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	linux-media-u79uwXL29TY76Z2rM5mHXA

Am 01.06.2018 um 16:02 schrieb Michel Dänzer:
> On 2018-06-01 02:11 PM, Christian König wrote:
>> Sorry, accidentally send this series without a cover letter.
>>
>> This is a cleanup to the DMA-buf interface, which is also a prerequisite
>> to unpinned DMA-buf operation.
>>
>> Patch #1 and #2 just remove unused functionality and clean up callback
>> parameters.
>>
>> Patch #3 and #4 introduce taking the reservation lock during
>> mapping/unmapping of DMA-bufs.
>>
>> This introduces a common lock where both exporter as well as importer
>> can then use in the future for unpinned DMA-buf operation.
>>
>> This of course means that exporters should now not take this reservation
>> lock manually any more. The DRM drivers don't seem to actually do that,
>> but I'm not 100% sure about other implementations.
>>
>> Patch #5 then makes use of the new lock to simplify the DMA-buf import
>> handling in amdgpu.
> Please rebase this series on top of
> https://patchwork.freedesktop.org/patch/226311/ and update the
> documentation in amdgpu_prime.c as needed in each patch.

Sure. In this case can we get your patches committed to 
amd-staging-drm-next ASAP?

Thanks,
Christian.
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 1/5] dma_buf: remove device parameter from attach callback
@ 2018-06-01 15:30         ` Michel Dänzer
  0 siblings, 0 replies; 58+ messages in thread
From: Michel Dänzer @ 2018-06-01 15:30 UTC (permalink / raw)
  To: christian.koenig; +Cc: linaro-mm-sig, amd-gfx, dri-devel, linux-media

On 2018-06-01 05:17 PM, Christian König wrote:
> Am 01.06.2018 um 16:02 schrieb Michel Dänzer:
>> On 2018-06-01 02:11 PM, Christian König wrote:
>>> Sorry, accidentally send this series without a cover letter.
>>>
>>> This is a cleanup to the DMA-buf interface, which is also a prerequisite
>>> to unpinned DMA-buf operation.
>>>
>>> Patch #1 and #2 just remove unused functionality and clean up callback
>>> parameters.
>>>
>>> Patch #3 and #4 introduce taking the reservation lock during
>>> mapping/unmapping of DMA-bufs.
>>>
>>> This introduces a common lock where both exporter as well as importer
>>> can then use in the future for unpinned DMA-buf operation.
>>>
>>> This of course means that exporters should now not take this reservation
>>> lock manually any more. The DRM drivers don't seem to actually do that,
>>> but I'm not 100% sure about other implementations.
>>>
>>> Patch #5 then makes use of the new lock to simplify the DMA-buf import
>>> handling in amdgpu.
>> Please rebase this series on top of
>> https://patchwork.freedesktop.org/patch/226311/ and update the
>> documentation in amdgpu_prime.c as needed in each patch.
> 
> Sure. In this case can we get your patches committed to
> amd-staging-drm-next ASAP?

Sure, done.


-- 
Earthling Michel Dänzer               |               http://www.amd.com
Libre software enthusiast             |             Mesa and X developer

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 1/5] dma_buf: remove device parameter from attach callback
@ 2018-06-01 15:30         ` Michel Dänzer
  0 siblings, 0 replies; 58+ messages in thread
From: Michel Dänzer @ 2018-06-01 15:30 UTC (permalink / raw)
  To: christian.koenig-5C7GfCeVMHo
  Cc: linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	linux-media-u79uwXL29TY76Z2rM5mHXA

On 2018-06-01 05:17 PM, Christian König wrote:
> Am 01.06.2018 um 16:02 schrieb Michel Dänzer:
>> On 2018-06-01 02:11 PM, Christian König wrote:
>>> Sorry, accidentally send this series without a cover letter.
>>>
>>> This is a cleanup to the DMA-buf interface, which is also a prerequisite
>>> to unpinned DMA-buf operation.
>>>
>>> Patch #1 and #2 just remove unused functionality and clean up callback
>>> parameters.
>>>
>>> Patch #3 and #4 introduce taking the reservation lock during
>>> mapping/unmapping of DMA-bufs.
>>>
>>> This introduces a common lock where both exporter as well as importer
>>> can then use in the future for unpinned DMA-buf operation.
>>>
>>> This of course means that exporters should now not take this reservation
>>> lock manually any more. The DRM drivers don't seem to actually do that,
>>> but I'm not 100% sure about other implementations.
>>>
>>> Patch #5 then makes use of the new lock to simplify the DMA-buf import
>>> handling in amdgpu.
>> Please rebase this series on top of
>> https://patchwork.freedesktop.org/patch/226311/ and update the
>> documentation in amdgpu_prime.c as needed in each patch.
> 
> Sure. In this case can we get your patches committed to
> amd-staging-drm-next ASAP?

Sure, done.


-- 
Earthling Michel Dänzer               |               http://www.amd.com
Libre software enthusiast             |             Mesa and X developer
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 1/5] dma_buf: remove device parameter from attach callback
@ 2018-06-06 11:24   ` Christian König
  0 siblings, 0 replies; 58+ messages in thread
From: Christian König @ 2018-06-06 11:24 UTC (permalink / raw)
  To: linaro-mm-sig, linux-media, dri-devel, amd-gfx
  Cc: sumit.semwal, Daniel Vetter, Chris Wilson

Just a gentle ping.

Daniel, Chris and all the other usual suspects for infrastructure stuff: 
What do you think about that?

The cleanup patches are rather obvious correct, but #3 could result in 
some fallout.

I really think it is the right thing in the long term.

Regards,
Christian.

Am 01.06.2018 um 14:00 schrieb Christian König:
> The device parameter is completely unused because it is available in the
> attachment structure as well.
>
> Signed-off-by: Christian König <christian.koenig@amd.com>
> ---
>   drivers/dma-buf/dma-buf.c                             | 2 +-
>   drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c             | 3 +--
>   drivers/gpu/drm/drm_prime.c                           | 3 +--
>   drivers/gpu/drm/udl/udl_dmabuf.c                      | 1 -
>   drivers/gpu/drm/vmwgfx/vmwgfx_prime.c                 | 1 -
>   drivers/media/common/videobuf2/videobuf2-dma-contig.c | 2 +-
>   drivers/media/common/videobuf2/videobuf2-dma-sg.c     | 2 +-
>   drivers/media/common/videobuf2/videobuf2-vmalloc.c    | 2 +-
>   include/drm/drm_prime.h                               | 2 +-
>   include/linux/dma-buf.h                               | 3 +--
>   10 files changed, 8 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
> index d78d5fc173dc..e99a8d19991b 100644
> --- a/drivers/dma-buf/dma-buf.c
> +++ b/drivers/dma-buf/dma-buf.c
> @@ -568,7 +568,7 @@ struct dma_buf_attachment *dma_buf_attach(struct dma_buf *dmabuf,
>   	mutex_lock(&dmabuf->lock);
>   
>   	if (dmabuf->ops->attach) {
> -		ret = dmabuf->ops->attach(dmabuf, dev, attach);
> +		ret = dmabuf->ops->attach(dmabuf, attach);
>   		if (ret)
>   			goto err_attach;
>   	}
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> index 4683626b065f..f1500f1ec0f5 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> @@ -133,7 +133,6 @@ amdgpu_gem_prime_import_sg_table(struct drm_device *dev,
>   }
>   
>   static int amdgpu_gem_map_attach(struct dma_buf *dma_buf,
> -				 struct device *target_dev,
>   				 struct dma_buf_attachment *attach)
>   {
>   	struct drm_gem_object *obj = dma_buf->priv;
> @@ -141,7 +140,7 @@ static int amdgpu_gem_map_attach(struct dma_buf *dma_buf,
>   	struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
>   	long r;
>   
> -	r = drm_gem_map_attach(dma_buf, target_dev, attach);
> +	r = drm_gem_map_attach(dma_buf, attach);
>   	if (r)
>   		return r;
>   
> diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
> index 7856a9b3f8a8..4a3a232fea67 100644
> --- a/drivers/gpu/drm/drm_prime.c
> +++ b/drivers/gpu/drm/drm_prime.c
> @@ -186,7 +186,6 @@ static int drm_prime_lookup_buf_handle(struct drm_prime_file_private *prime_fpri
>   /**
>    * drm_gem_map_attach - dma_buf attach implementation for GEM
>    * @dma_buf: buffer to attach device to
> - * @target_dev: not used
>    * @attach: buffer attachment data
>    *
>    * Allocates &drm_prime_attachment and calls &drm_driver.gem_prime_pin for
> @@ -195,7 +194,7 @@ static int drm_prime_lookup_buf_handle(struct drm_prime_file_private *prime_fpri
>    *
>    * Returns 0 on success, negative error code on failure.
>    */
> -int drm_gem_map_attach(struct dma_buf *dma_buf, struct device *target_dev,
> +int drm_gem_map_attach(struct dma_buf *dma_buf,
>   		       struct dma_buf_attachment *attach)
>   {
>   	struct drm_prime_attachment *prime_attach;
> diff --git a/drivers/gpu/drm/udl/udl_dmabuf.c b/drivers/gpu/drm/udl/udl_dmabuf.c
> index 2867ed155ff6..5fdc8bdc2026 100644
> --- a/drivers/gpu/drm/udl/udl_dmabuf.c
> +++ b/drivers/gpu/drm/udl/udl_dmabuf.c
> @@ -29,7 +29,6 @@ struct udl_drm_dmabuf_attachment {
>   };
>   
>   static int udl_attach_dma_buf(struct dma_buf *dmabuf,
> -			      struct device *dev,
>   			      struct dma_buf_attachment *attach)
>   {
>   	struct udl_drm_dmabuf_attachment *udl_attach;
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
> index 0d42a46521fc..fbffb37ccf42 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
> @@ -40,7 +40,6 @@
>    */
>   
>   static int vmw_prime_map_attach(struct dma_buf *dma_buf,
> -				struct device *target_dev,
>   				struct dma_buf_attachment *attach)
>   {
>   	return -ENOSYS;
> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-contig.c b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> index f1178f6f434d..12d0072c52c2 100644
> --- a/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> +++ b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> @@ -222,7 +222,7 @@ struct vb2_dc_attachment {
>   	enum dma_data_direction dma_dir;
>   };
>   
> -static int vb2_dc_dmabuf_ops_attach(struct dma_buf *dbuf, struct device *dev,
> +static int vb2_dc_dmabuf_ops_attach(struct dma_buf *dbuf,
>   	struct dma_buf_attachment *dbuf_attach)
>   {
>   	struct vb2_dc_attachment *attach;
> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-sg.c b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
> index 753ed3138dcc..cf94765e593f 100644
> --- a/drivers/media/common/videobuf2/videobuf2-dma-sg.c
> +++ b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
> @@ -371,7 +371,7 @@ struct vb2_dma_sg_attachment {
>   	enum dma_data_direction dma_dir;
>   };
>   
> -static int vb2_dma_sg_dmabuf_ops_attach(struct dma_buf *dbuf, struct device *dev,
> +static int vb2_dma_sg_dmabuf_ops_attach(struct dma_buf *dbuf,
>   	struct dma_buf_attachment *dbuf_attach)
>   {
>   	struct vb2_dma_sg_attachment *attach;
> diff --git a/drivers/media/common/videobuf2/videobuf2-vmalloc.c b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
> index 3a7c80cd1a17..298ffb9ecdae 100644
> --- a/drivers/media/common/videobuf2/videobuf2-vmalloc.c
> +++ b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
> @@ -209,7 +209,7 @@ struct vb2_vmalloc_attachment {
>   	enum dma_data_direction dma_dir;
>   };
>   
> -static int vb2_vmalloc_dmabuf_ops_attach(struct dma_buf *dbuf, struct device *dev,
> +static int vb2_vmalloc_dmabuf_ops_attach(struct dma_buf *dbuf,
>   	struct dma_buf_attachment *dbuf_attach)
>   {
>   	struct vb2_vmalloc_attachment *attach;
> diff --git a/include/drm/drm_prime.h b/include/drm/drm_prime.h
> index 4d5f5d6cf6a6..ef338151cea8 100644
> --- a/include/drm/drm_prime.h
> +++ b/include/drm/drm_prime.h
> @@ -82,7 +82,7 @@ int drm_gem_prime_fd_to_handle(struct drm_device *dev,
>   struct dma_buf *drm_gem_dmabuf_export(struct drm_device *dev,
>   				      struct dma_buf_export_info *exp_info);
>   void drm_gem_dmabuf_release(struct dma_buf *dma_buf);
> -int drm_gem_map_attach(struct dma_buf *dma_buf, struct device *target_dev,
> +int drm_gem_map_attach(struct dma_buf *dma_buf,
>   		       struct dma_buf_attachment *attach);
>   void drm_gem_map_detach(struct dma_buf *dma_buf,
>   			struct dma_buf_attachment *attach);
> diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
> index 085db2fee2d7..346caf77937f 100644
> --- a/include/linux/dma-buf.h
> +++ b/include/linux/dma-buf.h
> @@ -77,8 +77,7 @@ struct dma_buf_ops {
>   	 * to signal that backing storage is already allocated and incompatible
>   	 * with the requirements of requesting device.
>   	 */
> -	int (*attach)(struct dma_buf *, struct device *,
> -		      struct dma_buf_attachment *);
> +	int (*attach)(struct dma_buf *, struct dma_buf_attachment *);
>   
>   	/**
>   	 * @detach:

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 1/5] dma_buf: remove device parameter from attach callback
@ 2018-06-06 11:24   ` Christian König
  0 siblings, 0 replies; 58+ messages in thread
From: Christian König @ 2018-06-06 11:24 UTC (permalink / raw)
  To: linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw,
	linux-media-u79uwXL29TY76Z2rM5mHXA,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
  Cc: Daniel Vetter, sumit.semwal-QSEj5FYQhm4dnm+yROfE0A, Chris Wilson

Just a gentle ping.

Daniel, Chris and all the other usual suspects for infrastructure stuff: 
What do you think about that?

The cleanup patches are rather obvious correct, but #3 could result in 
some fallout.

I really think it is the right thing in the long term.

Regards,
Christian.

Am 01.06.2018 um 14:00 schrieb Christian König:
> The device parameter is completely unused because it is available in the
> attachment structure as well.
>
> Signed-off-by: Christian König <christian.koenig@amd.com>
> ---
>   drivers/dma-buf/dma-buf.c                             | 2 +-
>   drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c             | 3 +--
>   drivers/gpu/drm/drm_prime.c                           | 3 +--
>   drivers/gpu/drm/udl/udl_dmabuf.c                      | 1 -
>   drivers/gpu/drm/vmwgfx/vmwgfx_prime.c                 | 1 -
>   drivers/media/common/videobuf2/videobuf2-dma-contig.c | 2 +-
>   drivers/media/common/videobuf2/videobuf2-dma-sg.c     | 2 +-
>   drivers/media/common/videobuf2/videobuf2-vmalloc.c    | 2 +-
>   include/drm/drm_prime.h                               | 2 +-
>   include/linux/dma-buf.h                               | 3 +--
>   10 files changed, 8 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
> index d78d5fc173dc..e99a8d19991b 100644
> --- a/drivers/dma-buf/dma-buf.c
> +++ b/drivers/dma-buf/dma-buf.c
> @@ -568,7 +568,7 @@ struct dma_buf_attachment *dma_buf_attach(struct dma_buf *dmabuf,
>   	mutex_lock(&dmabuf->lock);
>   
>   	if (dmabuf->ops->attach) {
> -		ret = dmabuf->ops->attach(dmabuf, dev, attach);
> +		ret = dmabuf->ops->attach(dmabuf, attach);
>   		if (ret)
>   			goto err_attach;
>   	}
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> index 4683626b065f..f1500f1ec0f5 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> @@ -133,7 +133,6 @@ amdgpu_gem_prime_import_sg_table(struct drm_device *dev,
>   }
>   
>   static int amdgpu_gem_map_attach(struct dma_buf *dma_buf,
> -				 struct device *target_dev,
>   				 struct dma_buf_attachment *attach)
>   {
>   	struct drm_gem_object *obj = dma_buf->priv;
> @@ -141,7 +140,7 @@ static int amdgpu_gem_map_attach(struct dma_buf *dma_buf,
>   	struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
>   	long r;
>   
> -	r = drm_gem_map_attach(dma_buf, target_dev, attach);
> +	r = drm_gem_map_attach(dma_buf, attach);
>   	if (r)
>   		return r;
>   
> diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
> index 7856a9b3f8a8..4a3a232fea67 100644
> --- a/drivers/gpu/drm/drm_prime.c
> +++ b/drivers/gpu/drm/drm_prime.c
> @@ -186,7 +186,6 @@ static int drm_prime_lookup_buf_handle(struct drm_prime_file_private *prime_fpri
>   /**
>    * drm_gem_map_attach - dma_buf attach implementation for GEM
>    * @dma_buf: buffer to attach device to
> - * @target_dev: not used
>    * @attach: buffer attachment data
>    *
>    * Allocates &drm_prime_attachment and calls &drm_driver.gem_prime_pin for
> @@ -195,7 +194,7 @@ static int drm_prime_lookup_buf_handle(struct drm_prime_file_private *prime_fpri
>    *
>    * Returns 0 on success, negative error code on failure.
>    */
> -int drm_gem_map_attach(struct dma_buf *dma_buf, struct device *target_dev,
> +int drm_gem_map_attach(struct dma_buf *dma_buf,
>   		       struct dma_buf_attachment *attach)
>   {
>   	struct drm_prime_attachment *prime_attach;
> diff --git a/drivers/gpu/drm/udl/udl_dmabuf.c b/drivers/gpu/drm/udl/udl_dmabuf.c
> index 2867ed155ff6..5fdc8bdc2026 100644
> --- a/drivers/gpu/drm/udl/udl_dmabuf.c
> +++ b/drivers/gpu/drm/udl/udl_dmabuf.c
> @@ -29,7 +29,6 @@ struct udl_drm_dmabuf_attachment {
>   };
>   
>   static int udl_attach_dma_buf(struct dma_buf *dmabuf,
> -			      struct device *dev,
>   			      struct dma_buf_attachment *attach)
>   {
>   	struct udl_drm_dmabuf_attachment *udl_attach;
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
> index 0d42a46521fc..fbffb37ccf42 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
> @@ -40,7 +40,6 @@
>    */
>   
>   static int vmw_prime_map_attach(struct dma_buf *dma_buf,
> -				struct device *target_dev,
>   				struct dma_buf_attachment *attach)
>   {
>   	return -ENOSYS;
> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-contig.c b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> index f1178f6f434d..12d0072c52c2 100644
> --- a/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> +++ b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> @@ -222,7 +222,7 @@ struct vb2_dc_attachment {
>   	enum dma_data_direction dma_dir;
>   };
>   
> -static int vb2_dc_dmabuf_ops_attach(struct dma_buf *dbuf, struct device *dev,
> +static int vb2_dc_dmabuf_ops_attach(struct dma_buf *dbuf,
>   	struct dma_buf_attachment *dbuf_attach)
>   {
>   	struct vb2_dc_attachment *attach;
> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-sg.c b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
> index 753ed3138dcc..cf94765e593f 100644
> --- a/drivers/media/common/videobuf2/videobuf2-dma-sg.c
> +++ b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
> @@ -371,7 +371,7 @@ struct vb2_dma_sg_attachment {
>   	enum dma_data_direction dma_dir;
>   };
>   
> -static int vb2_dma_sg_dmabuf_ops_attach(struct dma_buf *dbuf, struct device *dev,
> +static int vb2_dma_sg_dmabuf_ops_attach(struct dma_buf *dbuf,
>   	struct dma_buf_attachment *dbuf_attach)
>   {
>   	struct vb2_dma_sg_attachment *attach;
> diff --git a/drivers/media/common/videobuf2/videobuf2-vmalloc.c b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
> index 3a7c80cd1a17..298ffb9ecdae 100644
> --- a/drivers/media/common/videobuf2/videobuf2-vmalloc.c
> +++ b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
> @@ -209,7 +209,7 @@ struct vb2_vmalloc_attachment {
>   	enum dma_data_direction dma_dir;
>   };
>   
> -static int vb2_vmalloc_dmabuf_ops_attach(struct dma_buf *dbuf, struct device *dev,
> +static int vb2_vmalloc_dmabuf_ops_attach(struct dma_buf *dbuf,
>   	struct dma_buf_attachment *dbuf_attach)
>   {
>   	struct vb2_vmalloc_attachment *attach;
> diff --git a/include/drm/drm_prime.h b/include/drm/drm_prime.h
> index 4d5f5d6cf6a6..ef338151cea8 100644
> --- a/include/drm/drm_prime.h
> +++ b/include/drm/drm_prime.h
> @@ -82,7 +82,7 @@ int drm_gem_prime_fd_to_handle(struct drm_device *dev,
>   struct dma_buf *drm_gem_dmabuf_export(struct drm_device *dev,
>   				      struct dma_buf_export_info *exp_info);
>   void drm_gem_dmabuf_release(struct dma_buf *dma_buf);
> -int drm_gem_map_attach(struct dma_buf *dma_buf, struct device *target_dev,
> +int drm_gem_map_attach(struct dma_buf *dma_buf,
>   		       struct dma_buf_attachment *attach);
>   void drm_gem_map_detach(struct dma_buf *dma_buf,
>   			struct dma_buf_attachment *attach);
> diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
> index 085db2fee2d7..346caf77937f 100644
> --- a/include/linux/dma-buf.h
> +++ b/include/linux/dma-buf.h
> @@ -77,8 +77,7 @@ struct dma_buf_ops {
>   	 * to signal that backing storage is already allocated and incompatible
>   	 * with the requirements of requesting device.
>   	 */
> -	int (*attach)(struct dma_buf *, struct device *,
> -		      struct dma_buf_attachment *);
> +	int (*attach)(struct dma_buf *, struct dma_buf_attachment *);
>   
>   	/**
>   	 * @detach:

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 1/5] dma_buf: remove device parameter from attach callback
@ 2018-06-18  8:14   ` Daniel Vetter
  0 siblings, 0 replies; 58+ messages in thread
From: Daniel Vetter @ 2018-06-18  8:14 UTC (permalink / raw)
  To: Christian König; +Cc: linaro-mm-sig, linux-media, dri-devel, amd-gfx

On Fri, Jun 01, 2018 at 02:00:16PM +0200, Christian König wrote:
> The device parameter is completely unused because it is available in the
> attachment structure as well.
> 
> Signed-off-by: Christian König <christian.koenig@amd.com>
> ---
>  drivers/dma-buf/dma-buf.c                             | 2 +-
>  drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c             | 3 +--
>  drivers/gpu/drm/drm_prime.c                           | 3 +--
>  drivers/gpu/drm/udl/udl_dmabuf.c                      | 1 -
>  drivers/gpu/drm/vmwgfx/vmwgfx_prime.c                 | 1 -
>  drivers/media/common/videobuf2/videobuf2-dma-contig.c | 2 +-
>  drivers/media/common/videobuf2/videobuf2-dma-sg.c     | 2 +-
>  drivers/media/common/videobuf2/videobuf2-vmalloc.c    | 2 +-
>  include/drm/drm_prime.h                               | 2 +-
>  include/linux/dma-buf.h                               | 3 +--
>  10 files changed, 8 insertions(+), 13 deletions(-)
> 
> diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
> index d78d5fc173dc..e99a8d19991b 100644
> --- a/drivers/dma-buf/dma-buf.c
> +++ b/drivers/dma-buf/dma-buf.c
> @@ -568,7 +568,7 @@ struct dma_buf_attachment *dma_buf_attach(struct dma_buf *dmabuf,
>  	mutex_lock(&dmabuf->lock);
>  
>  	if (dmabuf->ops->attach) {
> -		ret = dmabuf->ops->attach(dmabuf, dev, attach);
> +		ret = dmabuf->ops->attach(dmabuf, attach);
>  		if (ret)
>  			goto err_attach;
>  	}
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> index 4683626b065f..f1500f1ec0f5 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> @@ -133,7 +133,6 @@ amdgpu_gem_prime_import_sg_table(struct drm_device *dev,
>  }
>  
>  static int amdgpu_gem_map_attach(struct dma_buf *dma_buf,
> -				 struct device *target_dev,
>  				 struct dma_buf_attachment *attach)
>  {
>  	struct drm_gem_object *obj = dma_buf->priv;
> @@ -141,7 +140,7 @@ static int amdgpu_gem_map_attach(struct dma_buf *dma_buf,
>  	struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
>  	long r;
>  
> -	r = drm_gem_map_attach(dma_buf, target_dev, attach);
> +	r = drm_gem_map_attach(dma_buf, attach);
>  	if (r)
>  		return r;
>  
> diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
> index 7856a9b3f8a8..4a3a232fea67 100644
> --- a/drivers/gpu/drm/drm_prime.c
> +++ b/drivers/gpu/drm/drm_prime.c
> @@ -186,7 +186,6 @@ static int drm_prime_lookup_buf_handle(struct drm_prime_file_private *prime_fpri
>  /**
>   * drm_gem_map_attach - dma_buf attach implementation for GEM
>   * @dma_buf: buffer to attach device to
> - * @target_dev: not used
>   * @attach: buffer attachment data
>   *
>   * Allocates &drm_prime_attachment and calls &drm_driver.gem_prime_pin for
> @@ -195,7 +194,7 @@ static int drm_prime_lookup_buf_handle(struct drm_prime_file_private *prime_fpri
>   *
>   * Returns 0 on success, negative error code on failure.
>   */
> -int drm_gem_map_attach(struct dma_buf *dma_buf, struct device *target_dev,
> +int drm_gem_map_attach(struct dma_buf *dma_buf,
>  		       struct dma_buf_attachment *attach)
>  {
>  	struct drm_prime_attachment *prime_attach;
> diff --git a/drivers/gpu/drm/udl/udl_dmabuf.c b/drivers/gpu/drm/udl/udl_dmabuf.c
> index 2867ed155ff6..5fdc8bdc2026 100644
> --- a/drivers/gpu/drm/udl/udl_dmabuf.c
> +++ b/drivers/gpu/drm/udl/udl_dmabuf.c
> @@ -29,7 +29,6 @@ struct udl_drm_dmabuf_attachment {
>  };
>  
>  static int udl_attach_dma_buf(struct dma_buf *dmabuf,
> -			      struct device *dev,
>  			      struct dma_buf_attachment *attach)
>  {
>  	struct udl_drm_dmabuf_attachment *udl_attach;
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
> index 0d42a46521fc..fbffb37ccf42 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
> @@ -40,7 +40,6 @@
>   */
>  
>  static int vmw_prime_map_attach(struct dma_buf *dma_buf,
> -				struct device *target_dev,
>  				struct dma_buf_attachment *attach)
>  {
>  	return -ENOSYS;
> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-contig.c b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> index f1178f6f434d..12d0072c52c2 100644
> --- a/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> +++ b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> @@ -222,7 +222,7 @@ struct vb2_dc_attachment {
>  	enum dma_data_direction dma_dir;
>  };
>  
> -static int vb2_dc_dmabuf_ops_attach(struct dma_buf *dbuf, struct device *dev,
> +static int vb2_dc_dmabuf_ops_attach(struct dma_buf *dbuf,
>  	struct dma_buf_attachment *dbuf_attach)
>  {
>  	struct vb2_dc_attachment *attach;
> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-sg.c b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
> index 753ed3138dcc..cf94765e593f 100644
> --- a/drivers/media/common/videobuf2/videobuf2-dma-sg.c
> +++ b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
> @@ -371,7 +371,7 @@ struct vb2_dma_sg_attachment {
>  	enum dma_data_direction dma_dir;
>  };
>  
> -static int vb2_dma_sg_dmabuf_ops_attach(struct dma_buf *dbuf, struct device *dev,
> +static int vb2_dma_sg_dmabuf_ops_attach(struct dma_buf *dbuf,
>  	struct dma_buf_attachment *dbuf_attach)
>  {
>  	struct vb2_dma_sg_attachment *attach;
> diff --git a/drivers/media/common/videobuf2/videobuf2-vmalloc.c b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
> index 3a7c80cd1a17..298ffb9ecdae 100644
> --- a/drivers/media/common/videobuf2/videobuf2-vmalloc.c
> +++ b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
> @@ -209,7 +209,7 @@ struct vb2_vmalloc_attachment {
>  	enum dma_data_direction dma_dir;
>  };
>  
> -static int vb2_vmalloc_dmabuf_ops_attach(struct dma_buf *dbuf, struct device *dev,
> +static int vb2_vmalloc_dmabuf_ops_attach(struct dma_buf *dbuf,
>  	struct dma_buf_attachment *dbuf_attach)
>  {
>  	struct vb2_vmalloc_attachment *attach;
> diff --git a/include/drm/drm_prime.h b/include/drm/drm_prime.h
> index 4d5f5d6cf6a6..ef338151cea8 100644
> --- a/include/drm/drm_prime.h
> +++ b/include/drm/drm_prime.h
> @@ -82,7 +82,7 @@ int drm_gem_prime_fd_to_handle(struct drm_device *dev,
>  struct dma_buf *drm_gem_dmabuf_export(struct drm_device *dev,
>  				      struct dma_buf_export_info *exp_info);
>  void drm_gem_dmabuf_release(struct dma_buf *dma_buf);
> -int drm_gem_map_attach(struct dma_buf *dma_buf, struct device *target_dev,
> +int drm_gem_map_attach(struct dma_buf *dma_buf,
>  		       struct dma_buf_attachment *attach);
>  void drm_gem_map_detach(struct dma_buf *dma_buf,
>  			struct dma_buf_attachment *attach);
> diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
> index 085db2fee2d7..346caf77937f 100644
> --- a/include/linux/dma-buf.h
> +++ b/include/linux/dma-buf.h
> @@ -77,8 +77,7 @@ struct dma_buf_ops {
>  	 * to signal that backing storage is already allocated and incompatible
>  	 * with the requirements of requesting device.

Needs the the kerneldoc above updated slightly, which still references the
device paramater. Replacing that with struct &dma_buf_attachment.dev (pls
double-check the hyperlink keeps working) is all that's needed I think.

With that fixed:

Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>

>  	 */
> -	int (*attach)(struct dma_buf *, struct device *,
> -		      struct dma_buf_attachment *);
> +	int (*attach)(struct dma_buf *, struct dma_buf_attachment *);
>  
>  	/**
>  	 * @detach:
> -- 
> 2.14.1
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 1/5] dma_buf: remove device parameter from attach callback
@ 2018-06-18  8:14   ` Daniel Vetter
  0 siblings, 0 replies; 58+ messages in thread
From: Daniel Vetter @ 2018-06-18  8:14 UTC (permalink / raw)
  To: Christian König
  Cc: linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw,
	amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	linux-media-u79uwXL29TY76Z2rM5mHXA

On Fri, Jun 01, 2018 at 02:00:16PM +0200, Christian König wrote:
> The device parameter is completely unused because it is available in the
> attachment structure as well.
> 
> Signed-off-by: Christian König <christian.koenig@amd.com>
> ---
>  drivers/dma-buf/dma-buf.c                             | 2 +-
>  drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c             | 3 +--
>  drivers/gpu/drm/drm_prime.c                           | 3 +--
>  drivers/gpu/drm/udl/udl_dmabuf.c                      | 1 -
>  drivers/gpu/drm/vmwgfx/vmwgfx_prime.c                 | 1 -
>  drivers/media/common/videobuf2/videobuf2-dma-contig.c | 2 +-
>  drivers/media/common/videobuf2/videobuf2-dma-sg.c     | 2 +-
>  drivers/media/common/videobuf2/videobuf2-vmalloc.c    | 2 +-
>  include/drm/drm_prime.h                               | 2 +-
>  include/linux/dma-buf.h                               | 3 +--
>  10 files changed, 8 insertions(+), 13 deletions(-)
> 
> diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
> index d78d5fc173dc..e99a8d19991b 100644
> --- a/drivers/dma-buf/dma-buf.c
> +++ b/drivers/dma-buf/dma-buf.c
> @@ -568,7 +568,7 @@ struct dma_buf_attachment *dma_buf_attach(struct dma_buf *dmabuf,
>  	mutex_lock(&dmabuf->lock);
>  
>  	if (dmabuf->ops->attach) {
> -		ret = dmabuf->ops->attach(dmabuf, dev, attach);
> +		ret = dmabuf->ops->attach(dmabuf, attach);
>  		if (ret)
>  			goto err_attach;
>  	}
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> index 4683626b065f..f1500f1ec0f5 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> @@ -133,7 +133,6 @@ amdgpu_gem_prime_import_sg_table(struct drm_device *dev,
>  }
>  
>  static int amdgpu_gem_map_attach(struct dma_buf *dma_buf,
> -				 struct device *target_dev,
>  				 struct dma_buf_attachment *attach)
>  {
>  	struct drm_gem_object *obj = dma_buf->priv;
> @@ -141,7 +140,7 @@ static int amdgpu_gem_map_attach(struct dma_buf *dma_buf,
>  	struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
>  	long r;
>  
> -	r = drm_gem_map_attach(dma_buf, target_dev, attach);
> +	r = drm_gem_map_attach(dma_buf, attach);
>  	if (r)
>  		return r;
>  
> diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
> index 7856a9b3f8a8..4a3a232fea67 100644
> --- a/drivers/gpu/drm/drm_prime.c
> +++ b/drivers/gpu/drm/drm_prime.c
> @@ -186,7 +186,6 @@ static int drm_prime_lookup_buf_handle(struct drm_prime_file_private *prime_fpri
>  /**
>   * drm_gem_map_attach - dma_buf attach implementation for GEM
>   * @dma_buf: buffer to attach device to
> - * @target_dev: not used
>   * @attach: buffer attachment data
>   *
>   * Allocates &drm_prime_attachment and calls &drm_driver.gem_prime_pin for
> @@ -195,7 +194,7 @@ static int drm_prime_lookup_buf_handle(struct drm_prime_file_private *prime_fpri
>   *
>   * Returns 0 on success, negative error code on failure.
>   */
> -int drm_gem_map_attach(struct dma_buf *dma_buf, struct device *target_dev,
> +int drm_gem_map_attach(struct dma_buf *dma_buf,
>  		       struct dma_buf_attachment *attach)
>  {
>  	struct drm_prime_attachment *prime_attach;
> diff --git a/drivers/gpu/drm/udl/udl_dmabuf.c b/drivers/gpu/drm/udl/udl_dmabuf.c
> index 2867ed155ff6..5fdc8bdc2026 100644
> --- a/drivers/gpu/drm/udl/udl_dmabuf.c
> +++ b/drivers/gpu/drm/udl/udl_dmabuf.c
> @@ -29,7 +29,6 @@ struct udl_drm_dmabuf_attachment {
>  };
>  
>  static int udl_attach_dma_buf(struct dma_buf *dmabuf,
> -			      struct device *dev,
>  			      struct dma_buf_attachment *attach)
>  {
>  	struct udl_drm_dmabuf_attachment *udl_attach;
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
> index 0d42a46521fc..fbffb37ccf42 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
> @@ -40,7 +40,6 @@
>   */
>  
>  static int vmw_prime_map_attach(struct dma_buf *dma_buf,
> -				struct device *target_dev,
>  				struct dma_buf_attachment *attach)
>  {
>  	return -ENOSYS;
> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-contig.c b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> index f1178f6f434d..12d0072c52c2 100644
> --- a/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> +++ b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> @@ -222,7 +222,7 @@ struct vb2_dc_attachment {
>  	enum dma_data_direction dma_dir;
>  };
>  
> -static int vb2_dc_dmabuf_ops_attach(struct dma_buf *dbuf, struct device *dev,
> +static int vb2_dc_dmabuf_ops_attach(struct dma_buf *dbuf,
>  	struct dma_buf_attachment *dbuf_attach)
>  {
>  	struct vb2_dc_attachment *attach;
> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-sg.c b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
> index 753ed3138dcc..cf94765e593f 100644
> --- a/drivers/media/common/videobuf2/videobuf2-dma-sg.c
> +++ b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
> @@ -371,7 +371,7 @@ struct vb2_dma_sg_attachment {
>  	enum dma_data_direction dma_dir;
>  };
>  
> -static int vb2_dma_sg_dmabuf_ops_attach(struct dma_buf *dbuf, struct device *dev,
> +static int vb2_dma_sg_dmabuf_ops_attach(struct dma_buf *dbuf,
>  	struct dma_buf_attachment *dbuf_attach)
>  {
>  	struct vb2_dma_sg_attachment *attach;
> diff --git a/drivers/media/common/videobuf2/videobuf2-vmalloc.c b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
> index 3a7c80cd1a17..298ffb9ecdae 100644
> --- a/drivers/media/common/videobuf2/videobuf2-vmalloc.c
> +++ b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
> @@ -209,7 +209,7 @@ struct vb2_vmalloc_attachment {
>  	enum dma_data_direction dma_dir;
>  };
>  
> -static int vb2_vmalloc_dmabuf_ops_attach(struct dma_buf *dbuf, struct device *dev,
> +static int vb2_vmalloc_dmabuf_ops_attach(struct dma_buf *dbuf,
>  	struct dma_buf_attachment *dbuf_attach)
>  {
>  	struct vb2_vmalloc_attachment *attach;
> diff --git a/include/drm/drm_prime.h b/include/drm/drm_prime.h
> index 4d5f5d6cf6a6..ef338151cea8 100644
> --- a/include/drm/drm_prime.h
> +++ b/include/drm/drm_prime.h
> @@ -82,7 +82,7 @@ int drm_gem_prime_fd_to_handle(struct drm_device *dev,
>  struct dma_buf *drm_gem_dmabuf_export(struct drm_device *dev,
>  				      struct dma_buf_export_info *exp_info);
>  void drm_gem_dmabuf_release(struct dma_buf *dma_buf);
> -int drm_gem_map_attach(struct dma_buf *dma_buf, struct device *target_dev,
> +int drm_gem_map_attach(struct dma_buf *dma_buf,
>  		       struct dma_buf_attachment *attach);
>  void drm_gem_map_detach(struct dma_buf *dma_buf,
>  			struct dma_buf_attachment *attach);
> diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
> index 085db2fee2d7..346caf77937f 100644
> --- a/include/linux/dma-buf.h
> +++ b/include/linux/dma-buf.h
> @@ -77,8 +77,7 @@ struct dma_buf_ops {
>  	 * to signal that backing storage is already allocated and incompatible
>  	 * with the requirements of requesting device.

Needs the the kerneldoc above updated slightly, which still references the
device paramater. Replacing that with struct &dma_buf_attachment.dev (pls
double-check the hyperlink keeps working) is all that's needed I think.

With that fixed:

Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>

>  	 */
> -	int (*attach)(struct dma_buf *, struct device *,
> -		      struct dma_buf_attachment *);
> +	int (*attach)(struct dma_buf *, struct dma_buf_attachment *);
>  
>  	/**
>  	 * @detach:
> -- 
> 2.14.1
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 2/5] dma-buf: remove kmap_atomic interface
@ 2018-06-18  8:18     ` Daniel Vetter
  0 siblings, 0 replies; 58+ messages in thread
From: Daniel Vetter @ 2018-06-18  8:18 UTC (permalink / raw)
  To: Christian König; +Cc: linaro-mm-sig, linux-media, dri-devel, amd-gfx

On Fri, Jun 01, 2018 at 02:00:17PM +0200, Christian König wrote:
> Neither used nor correctly implemented anywhere. Just completely remove
> the interface.
> 
> Signed-off-by: Christian König <christian.koenig@amd.com>

I wonder whether we can nuke the normal kmap stuff too ... everyone seems
to want/use the vmap stuff for kernel-internal mapping needs.

Anyway, this looks good.
> ---
>  drivers/dma-buf/dma-buf.c                          | 44 ----------------------
>  drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c          |  2 -
>  drivers/gpu/drm/armada/armada_gem.c                |  2 -
>  drivers/gpu/drm/drm_prime.c                        | 26 -------------
>  drivers/gpu/drm/i915/i915_gem_dmabuf.c             | 11 ------
>  drivers/gpu/drm/i915/selftests/mock_dmabuf.c       |  2 -
>  drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c          |  2 -
>  drivers/gpu/drm/tegra/gem.c                        | 14 -------
>  drivers/gpu/drm/udl/udl_dmabuf.c                   | 17 ---------
>  drivers/gpu/drm/vmwgfx/vmwgfx_prime.c              | 13 -------
>  .../media/common/videobuf2/videobuf2-dma-contig.c  |  1 -
>  drivers/media/common/videobuf2/videobuf2-dma-sg.c  |  1 -
>  drivers/media/common/videobuf2/videobuf2-vmalloc.c |  1 -
>  drivers/staging/android/ion/ion.c                  |  2 -
>  drivers/tee/tee_shm.c                              |  6 ---
>  include/drm/drm_prime.h                            |  4 --
>  include/linux/dma-buf.h                            |  4 --
>  17 files changed, 152 deletions(-)
> 
> diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
> index e99a8d19991b..e4c657d9fad7 100644
> --- a/drivers/dma-buf/dma-buf.c
> +++ b/drivers/dma-buf/dma-buf.c
> @@ -405,7 +405,6 @@ struct dma_buf *dma_buf_export(const struct dma_buf_export_info *exp_info)
>  			  || !exp_info->ops->map_dma_buf
>  			  || !exp_info->ops->unmap_dma_buf
>  			  || !exp_info->ops->release
> -			  || !exp_info->ops->map_atomic
>  			  || !exp_info->ops->map
>  			  || !exp_info->ops->mmap)) {
>  		return ERR_PTR(-EINVAL);
> @@ -687,14 +686,6 @@ EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment);
>   *      void \*dma_buf_kmap(struct dma_buf \*, unsigned long);
>   *      void dma_buf_kunmap(struct dma_buf \*, unsigned long, void \*);
>   *
> - *   There are also atomic variants of these interfaces. Like for kmap they
> - *   facilitate non-blocking fast-paths. Neither the importer nor the exporter
> - *   (in the callback) is allowed to block when using these.
> - *
> - *   Interfaces::
> - *      void \*dma_buf_kmap_atomic(struct dma_buf \*, unsigned long);
> - *      void dma_buf_kunmap_atomic(struct dma_buf \*, unsigned long, void \*);
> - *
>   *   For importers all the restrictions of using kmap apply, like the limited
>   *   supply of kmap_atomic slots. Hence an importer shall only hold onto at
>   *   max 2 atomic dma_buf kmaps at the same time (in any given process context).

This is also about atomic kmap ...

And the subsequent language around "Note that these calls need to always
succeed." is also not true, might be good to update that stating that kmap
is optional (like we say already for vmap).

With those docs nits addressed:

Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>

> @@ -859,41 +850,6 @@ int dma_buf_end_cpu_access(struct dma_buf *dmabuf,
>  }
>  EXPORT_SYMBOL_GPL(dma_buf_end_cpu_access);
>  
> -/**
> - * dma_buf_kmap_atomic - Map a page of the buffer object into kernel address
> - * space. The same restrictions as for kmap_atomic and friends apply.
> - * @dmabuf:	[in]	buffer to map page from.
> - * @page_num:	[in]	page in PAGE_SIZE units to map.
> - *
> - * This call must always succeed, any necessary preparations that might fail
> - * need to be done in begin_cpu_access.
> - */
> -void *dma_buf_kmap_atomic(struct dma_buf *dmabuf, unsigned long page_num)
> -{
> -	WARN_ON(!dmabuf);
> -
> -	return dmabuf->ops->map_atomic(dmabuf, page_num);
> -}
> -EXPORT_SYMBOL_GPL(dma_buf_kmap_atomic);
> -
> -/**
> - * dma_buf_kunmap_atomic - Unmap a page obtained by dma_buf_kmap_atomic.
> - * @dmabuf:	[in]	buffer to unmap page from.
> - * @page_num:	[in]	page in PAGE_SIZE units to unmap.
> - * @vaddr:	[in]	kernel space pointer obtained from dma_buf_kmap_atomic.
> - *
> - * This call must always succeed.
> - */
> -void dma_buf_kunmap_atomic(struct dma_buf *dmabuf, unsigned long page_num,
> -			   void *vaddr)
> -{
> -	WARN_ON(!dmabuf);
> -
> -	if (dmabuf->ops->unmap_atomic)
> -		dmabuf->ops->unmap_atomic(dmabuf, page_num, vaddr);
> -}
> -EXPORT_SYMBOL_GPL(dma_buf_kunmap_atomic);
> -
>  /**
>   * dma_buf_kmap - Map a page of the buffer object into kernel address space. The
>   * same restrictions as for kmap and friends apply.
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> index f1500f1ec0f5..a156b3891a3f 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> @@ -244,9 +244,7 @@ static const struct dma_buf_ops amdgpu_dmabuf_ops = {
>  	.release = drm_gem_dmabuf_release,
>  	.begin_cpu_access = amdgpu_gem_begin_cpu_access,
>  	.map = drm_gem_dmabuf_kmap,
> -	.map_atomic = drm_gem_dmabuf_kmap_atomic,
>  	.unmap = drm_gem_dmabuf_kunmap,
> -	.unmap_atomic = drm_gem_dmabuf_kunmap_atomic,
>  	.mmap = drm_gem_dmabuf_mmap,
>  	.vmap = drm_gem_dmabuf_vmap,
>  	.vunmap = drm_gem_dmabuf_vunmap,
> diff --git a/drivers/gpu/drm/armada/armada_gem.c b/drivers/gpu/drm/armada/armada_gem.c
> index a97f509743a5..3fb37c75c065 100644
> --- a/drivers/gpu/drm/armada/armada_gem.c
> +++ b/drivers/gpu/drm/armada/armada_gem.c
> @@ -490,8 +490,6 @@ static const struct dma_buf_ops armada_gem_prime_dmabuf_ops = {
>  	.map_dma_buf	= armada_gem_prime_map_dma_buf,
>  	.unmap_dma_buf	= armada_gem_prime_unmap_dma_buf,
>  	.release	= drm_gem_dmabuf_release,
> -	.map_atomic	= armada_gem_dmabuf_no_kmap,
> -	.unmap_atomic	= armada_gem_dmabuf_no_kunmap,
>  	.map		= armada_gem_dmabuf_no_kmap,
>  	.unmap		= armada_gem_dmabuf_no_kunmap,
>  	.mmap		= armada_gem_dmabuf_mmap,
> diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
> index 4a3a232fea67..b28fa8f44c8b 100644
> --- a/drivers/gpu/drm/drm_prime.c
> +++ b/drivers/gpu/drm/drm_prime.c
> @@ -426,30 +426,6 @@ void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr)
>  }
>  EXPORT_SYMBOL(drm_gem_dmabuf_vunmap);
>  
> -/**
> - * drm_gem_dmabuf_kmap_atomic - map_atomic implementation for GEM
> - *
> - * Not implemented. This can be used as the &dma_buf_ops.map_atomic callback.
> - */
> -void *drm_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
> -				 unsigned long page_num)
> -{
> -	return NULL;
> -}
> -EXPORT_SYMBOL(drm_gem_dmabuf_kmap_atomic);
> -
> -/**
> - * drm_gem_dmabuf_kunmap_atomic - unmap_atomic implementation for GEM
> - *
> - * Not implemented. This can be used as the &dma_buf_ops.unmap_atomic callback.
> - */
> -void drm_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
> -				  unsigned long page_num, void *addr)
> -{
> -
> -}
> -EXPORT_SYMBOL(drm_gem_dmabuf_kunmap_atomic);
> -
>  /**
>   * drm_gem_dmabuf_kmap - map implementation for GEM
>   *
> @@ -502,9 +478,7 @@ static const struct dma_buf_ops drm_gem_prime_dmabuf_ops =  {
>  	.unmap_dma_buf = drm_gem_unmap_dma_buf,
>  	.release = drm_gem_dmabuf_release,
>  	.map = drm_gem_dmabuf_kmap,
> -	.map_atomic = drm_gem_dmabuf_kmap_atomic,
>  	.unmap = drm_gem_dmabuf_kunmap,
> -	.unmap_atomic = drm_gem_dmabuf_kunmap_atomic,
>  	.mmap = drm_gem_dmabuf_mmap,
>  	.vmap = drm_gem_dmabuf_vmap,
>  	.vunmap = drm_gem_dmabuf_vunmap,
> diff --git a/drivers/gpu/drm/i915/i915_gem_dmabuf.c b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
> index 69a7aec49e84..82e2ca17a441 100644
> --- a/drivers/gpu/drm/i915/i915_gem_dmabuf.c
> +++ b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
> @@ -111,15 +111,6 @@ static void i915_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr)
>  	i915_gem_object_unpin_map(obj);
>  }
>  
> -static void *i915_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf, unsigned long page_num)
> -{
> -	return NULL;
> -}
> -
> -static void i915_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf, unsigned long page_num, void *addr)
> -{
> -
> -}
>  static void *i915_gem_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long page_num)
>  {
>  	struct drm_i915_gem_object *obj = dma_buf_to_obj(dma_buf);
> @@ -225,9 +216,7 @@ static const struct dma_buf_ops i915_dmabuf_ops =  {
>  	.unmap_dma_buf = i915_gem_unmap_dma_buf,
>  	.release = drm_gem_dmabuf_release,
>  	.map = i915_gem_dmabuf_kmap,
> -	.map_atomic = i915_gem_dmabuf_kmap_atomic,
>  	.unmap = i915_gem_dmabuf_kunmap,
> -	.unmap_atomic = i915_gem_dmabuf_kunmap_atomic,
>  	.mmap = i915_gem_dmabuf_mmap,
>  	.vmap = i915_gem_dmabuf_vmap,
>  	.vunmap = i915_gem_dmabuf_vunmap,
> diff --git a/drivers/gpu/drm/i915/selftests/mock_dmabuf.c b/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
> index 302f7d103635..f81fda8ea45e 100644
> --- a/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
> +++ b/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
> @@ -130,9 +130,7 @@ static const struct dma_buf_ops mock_dmabuf_ops =  {
>  	.unmap_dma_buf = mock_unmap_dma_buf,
>  	.release = mock_dmabuf_release,
>  	.map = mock_dmabuf_kmap,
> -	.map_atomic = mock_dmabuf_kmap_atomic,
>  	.unmap = mock_dmabuf_kunmap,
> -	.unmap_atomic = mock_dmabuf_kunmap_atomic,
>  	.mmap = mock_dmabuf_mmap,
>  	.vmap = mock_dmabuf_vmap,
>  	.vunmap = mock_dmabuf_vunmap,
> diff --git a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
> index 8e41d649e248..1a073f9b2834 100644
> --- a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
> +++ b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
> @@ -148,8 +148,6 @@ static const struct dma_buf_ops omap_dmabuf_ops = {
>  	.release = drm_gem_dmabuf_release,
>  	.begin_cpu_access = omap_gem_dmabuf_begin_cpu_access,
>  	.end_cpu_access = omap_gem_dmabuf_end_cpu_access,
> -	.map_atomic = omap_gem_dmabuf_kmap_atomic,
> -	.unmap_atomic = omap_gem_dmabuf_kunmap_atomic,
>  	.map = omap_gem_dmabuf_kmap,
>  	.unmap = omap_gem_dmabuf_kunmap,
>  	.mmap = omap_gem_dmabuf_mmap,
> diff --git a/drivers/gpu/drm/tegra/gem.c b/drivers/gpu/drm/tegra/gem.c
> index 8b0b4ff64bb4..d7661702c11c 100644
> --- a/drivers/gpu/drm/tegra/gem.c
> +++ b/drivers/gpu/drm/tegra/gem.c
> @@ -596,18 +596,6 @@ static int tegra_gem_prime_end_cpu_access(struct dma_buf *buf,
>  	return 0;
>  }
>  
> -static void *tegra_gem_prime_kmap_atomic(struct dma_buf *buf,
> -					 unsigned long page)
> -{
> -	return NULL;
> -}
> -
> -static void tegra_gem_prime_kunmap_atomic(struct dma_buf *buf,
> -					  unsigned long page,
> -					  void *addr)
> -{
> -}
> -
>  static void *tegra_gem_prime_kmap(struct dma_buf *buf, unsigned long page)
>  {
>  	return NULL;
> @@ -648,8 +636,6 @@ static const struct dma_buf_ops tegra_gem_prime_dmabuf_ops = {
>  	.release = tegra_gem_prime_release,
>  	.begin_cpu_access = tegra_gem_prime_begin_cpu_access,
>  	.end_cpu_access = tegra_gem_prime_end_cpu_access,
> -	.map_atomic = tegra_gem_prime_kmap_atomic,
> -	.unmap_atomic = tegra_gem_prime_kunmap_atomic,
>  	.map = tegra_gem_prime_kmap,
>  	.unmap = tegra_gem_prime_kunmap,
>  	.mmap = tegra_gem_prime_mmap,
> diff --git a/drivers/gpu/drm/udl/udl_dmabuf.c b/drivers/gpu/drm/udl/udl_dmabuf.c
> index 5fdc8bdc2026..ae7225dedc30 100644
> --- a/drivers/gpu/drm/udl/udl_dmabuf.c
> +++ b/drivers/gpu/drm/udl/udl_dmabuf.c
> @@ -156,27 +156,12 @@ static void *udl_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long page_num)
>  	return NULL;
>  }
>  
> -static void *udl_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
> -				    unsigned long page_num)
> -{
> -	/* TODO */
> -
> -	return NULL;
> -}
> -
>  static void udl_dmabuf_kunmap(struct dma_buf *dma_buf,
>  			      unsigned long page_num, void *addr)
>  {
>  	/* TODO */
>  }
>  
> -static void udl_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
> -				     unsigned long page_num,
> -				     void *addr)
> -{
> -	/* TODO */
> -}
> -
>  static int udl_dmabuf_mmap(struct dma_buf *dma_buf,
>  			   struct vm_area_struct *vma)
>  {
> @@ -191,9 +176,7 @@ static const struct dma_buf_ops udl_dmabuf_ops = {
>  	.map_dma_buf		= udl_map_dma_buf,
>  	.unmap_dma_buf		= udl_unmap_dma_buf,
>  	.map			= udl_dmabuf_kmap,
> -	.map_atomic		= udl_dmabuf_kmap_atomic,
>  	.unmap			= udl_dmabuf_kunmap,
> -	.unmap_atomic		= udl_dmabuf_kunmap_atomic,
>  	.mmap			= udl_dmabuf_mmap,
>  	.release		= drm_gem_dmabuf_release,
>  };
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
> index fbffb37ccf42..373bc6da2f84 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
> @@ -71,17 +71,6 @@ static void vmw_prime_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr)
>  {
>  }
>  
> -static void *vmw_prime_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
> -		unsigned long page_num)
> -{
> -	return NULL;
> -}
> -
> -static void vmw_prime_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
> -		unsigned long page_num, void *addr)
> -{
> -
> -}
>  static void *vmw_prime_dmabuf_kmap(struct dma_buf *dma_buf,
>  		unsigned long page_num)
>  {
> @@ -108,9 +97,7 @@ const struct dma_buf_ops vmw_prime_dmabuf_ops =  {
>  	.unmap_dma_buf = vmw_prime_unmap_dma_buf,
>  	.release = NULL,
>  	.map = vmw_prime_dmabuf_kmap,
> -	.map_atomic = vmw_prime_dmabuf_kmap_atomic,
>  	.unmap = vmw_prime_dmabuf_kunmap,
> -	.unmap_atomic = vmw_prime_dmabuf_kunmap_atomic,
>  	.mmap = vmw_prime_dmabuf_mmap,
>  	.vmap = vmw_prime_dmabuf_vmap,
>  	.vunmap = vmw_prime_dmabuf_vunmap,
> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-contig.c b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> index 12d0072c52c2..aff0ab7bf83d 100644
> --- a/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> +++ b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> @@ -358,7 +358,6 @@ static const struct dma_buf_ops vb2_dc_dmabuf_ops = {
>  	.map_dma_buf = vb2_dc_dmabuf_ops_map,
>  	.unmap_dma_buf = vb2_dc_dmabuf_ops_unmap,
>  	.map = vb2_dc_dmabuf_ops_kmap,
> -	.map_atomic = vb2_dc_dmabuf_ops_kmap,
>  	.vmap = vb2_dc_dmabuf_ops_vmap,
>  	.mmap = vb2_dc_dmabuf_ops_mmap,
>  	.release = vb2_dc_dmabuf_ops_release,
> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-sg.c b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
> index cf94765e593f..015e737095cd 100644
> --- a/drivers/media/common/videobuf2/videobuf2-dma-sg.c
> +++ b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
> @@ -507,7 +507,6 @@ static const struct dma_buf_ops vb2_dma_sg_dmabuf_ops = {
>  	.map_dma_buf = vb2_dma_sg_dmabuf_ops_map,
>  	.unmap_dma_buf = vb2_dma_sg_dmabuf_ops_unmap,
>  	.map = vb2_dma_sg_dmabuf_ops_kmap,
> -	.map_atomic = vb2_dma_sg_dmabuf_ops_kmap,
>  	.vmap = vb2_dma_sg_dmabuf_ops_vmap,
>  	.mmap = vb2_dma_sg_dmabuf_ops_mmap,
>  	.release = vb2_dma_sg_dmabuf_ops_release,
> diff --git a/drivers/media/common/videobuf2/videobuf2-vmalloc.c b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
> index 298ffb9ecdae..467a4005164b 100644
> --- a/drivers/media/common/videobuf2/videobuf2-vmalloc.c
> +++ b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
> @@ -346,7 +346,6 @@ static const struct dma_buf_ops vb2_vmalloc_dmabuf_ops = {
>  	.map_dma_buf = vb2_vmalloc_dmabuf_ops_map,
>  	.unmap_dma_buf = vb2_vmalloc_dmabuf_ops_unmap,
>  	.map = vb2_vmalloc_dmabuf_ops_kmap,
> -	.map_atomic = vb2_vmalloc_dmabuf_ops_kmap,
>  	.vmap = vb2_vmalloc_dmabuf_ops_vmap,
>  	.mmap = vb2_vmalloc_dmabuf_ops_mmap,
>  	.release = vb2_vmalloc_dmabuf_ops_release,
> diff --git a/drivers/staging/android/ion/ion.c b/drivers/staging/android/ion/ion.c
> index 57e0d8035b2e..a46219ff5e16 100644
> --- a/drivers/staging/android/ion/ion.c
> +++ b/drivers/staging/android/ion/ion.c
> @@ -374,8 +374,6 @@ static const struct dma_buf_ops dma_buf_ops = {
>  	.detach = ion_dma_buf_detatch,
>  	.begin_cpu_access = ion_dma_buf_begin_cpu_access,
>  	.end_cpu_access = ion_dma_buf_end_cpu_access,
> -	.map_atomic = ion_dma_buf_kmap,
> -	.unmap_atomic = ion_dma_buf_kunmap,
>  	.map = ion_dma_buf_kmap,
>  	.unmap = ion_dma_buf_kunmap,
>  };
> diff --git a/drivers/tee/tee_shm.c b/drivers/tee/tee_shm.c
> index 556960a1bab3..df4a1553b78b 100644
> --- a/drivers/tee/tee_shm.c
> +++ b/drivers/tee/tee_shm.c
> @@ -80,11 +80,6 @@ static void tee_shm_op_release(struct dma_buf *dmabuf)
>  	tee_shm_release(shm);
>  }
>  
> -static void *tee_shm_op_map_atomic(struct dma_buf *dmabuf, unsigned long pgnum)
> -{
> -	return NULL;
> -}
> -
>  static void *tee_shm_op_map(struct dma_buf *dmabuf, unsigned long pgnum)
>  {
>  	return NULL;
> @@ -107,7 +102,6 @@ static const struct dma_buf_ops tee_shm_dma_buf_ops = {
>  	.map_dma_buf = tee_shm_op_map_dma_buf,
>  	.unmap_dma_buf = tee_shm_op_unmap_dma_buf,
>  	.release = tee_shm_op_release,
> -	.map_atomic = tee_shm_op_map_atomic,
>  	.map = tee_shm_op_map,
>  	.mmap = tee_shm_op_mmap,
>  };
> diff --git a/include/drm/drm_prime.h b/include/drm/drm_prime.h
> index ef338151cea8..d716d653b096 100644
> --- a/include/drm/drm_prime.h
> +++ b/include/drm/drm_prime.h
> @@ -93,10 +93,6 @@ void drm_gem_unmap_dma_buf(struct dma_buf_attachment *attach,
>  			   enum dma_data_direction dir);
>  void *drm_gem_dmabuf_vmap(struct dma_buf *dma_buf);
>  void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr);
> -void *drm_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
> -				 unsigned long page_num);
> -void drm_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
> -				  unsigned long page_num, void *addr);
>  void *drm_gem_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long page_num);
>  void drm_gem_dmabuf_kunmap(struct dma_buf *dma_buf, unsigned long page_num,
>  			   void *addr);
> diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
> index 346caf77937f..d17cadd76802 100644
> --- a/include/linux/dma-buf.h
> +++ b/include/linux/dma-buf.h
> @@ -205,8 +205,6 @@ struct dma_buf_ops {
>  	 * to be restarted.
>  	 */
>  	int (*end_cpu_access)(struct dma_buf *, enum dma_data_direction);
> -	void *(*map_atomic)(struct dma_buf *, unsigned long);
> -	void (*unmap_atomic)(struct dma_buf *, unsigned long, void *);
>  	void *(*map)(struct dma_buf *, unsigned long);
>  	void (*unmap)(struct dma_buf *, unsigned long, void *);
>  
> @@ -394,8 +392,6 @@ int dma_buf_begin_cpu_access(struct dma_buf *dma_buf,
>  			     enum dma_data_direction dir);
>  int dma_buf_end_cpu_access(struct dma_buf *dma_buf,
>  			   enum dma_data_direction dir);
> -void *dma_buf_kmap_atomic(struct dma_buf *, unsigned long);
> -void dma_buf_kunmap_atomic(struct dma_buf *, unsigned long, void *);
>  void *dma_buf_kmap(struct dma_buf *, unsigned long);
>  void dma_buf_kunmap(struct dma_buf *, unsigned long, void *);
>  
> -- 
> 2.14.1
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 2/5] dma-buf: remove kmap_atomic interface
@ 2018-06-18  8:18     ` Daniel Vetter
  0 siblings, 0 replies; 58+ messages in thread
From: Daniel Vetter @ 2018-06-18  8:18 UTC (permalink / raw)
  To: Christian König
  Cc: linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw,
	amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	linux-media-u79uwXL29TY76Z2rM5mHXA

On Fri, Jun 01, 2018 at 02:00:17PM +0200, Christian König wrote:
> Neither used nor correctly implemented anywhere. Just completely remove
> the interface.
> 
> Signed-off-by: Christian König <christian.koenig@amd.com>

I wonder whether we can nuke the normal kmap stuff too ... everyone seems
to want/use the vmap stuff for kernel-internal mapping needs.

Anyway, this looks good.
> ---
>  drivers/dma-buf/dma-buf.c                          | 44 ----------------------
>  drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c          |  2 -
>  drivers/gpu/drm/armada/armada_gem.c                |  2 -
>  drivers/gpu/drm/drm_prime.c                        | 26 -------------
>  drivers/gpu/drm/i915/i915_gem_dmabuf.c             | 11 ------
>  drivers/gpu/drm/i915/selftests/mock_dmabuf.c       |  2 -
>  drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c          |  2 -
>  drivers/gpu/drm/tegra/gem.c                        | 14 -------
>  drivers/gpu/drm/udl/udl_dmabuf.c                   | 17 ---------
>  drivers/gpu/drm/vmwgfx/vmwgfx_prime.c              | 13 -------
>  .../media/common/videobuf2/videobuf2-dma-contig.c  |  1 -
>  drivers/media/common/videobuf2/videobuf2-dma-sg.c  |  1 -
>  drivers/media/common/videobuf2/videobuf2-vmalloc.c |  1 -
>  drivers/staging/android/ion/ion.c                  |  2 -
>  drivers/tee/tee_shm.c                              |  6 ---
>  include/drm/drm_prime.h                            |  4 --
>  include/linux/dma-buf.h                            |  4 --
>  17 files changed, 152 deletions(-)
> 
> diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
> index e99a8d19991b..e4c657d9fad7 100644
> --- a/drivers/dma-buf/dma-buf.c
> +++ b/drivers/dma-buf/dma-buf.c
> @@ -405,7 +405,6 @@ struct dma_buf *dma_buf_export(const struct dma_buf_export_info *exp_info)
>  			  || !exp_info->ops->map_dma_buf
>  			  || !exp_info->ops->unmap_dma_buf
>  			  || !exp_info->ops->release
> -			  || !exp_info->ops->map_atomic
>  			  || !exp_info->ops->map
>  			  || !exp_info->ops->mmap)) {
>  		return ERR_PTR(-EINVAL);
> @@ -687,14 +686,6 @@ EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment);
>   *      void \*dma_buf_kmap(struct dma_buf \*, unsigned long);
>   *      void dma_buf_kunmap(struct dma_buf \*, unsigned long, void \*);
>   *
> - *   There are also atomic variants of these interfaces. Like for kmap they
> - *   facilitate non-blocking fast-paths. Neither the importer nor the exporter
> - *   (in the callback) is allowed to block when using these.
> - *
> - *   Interfaces::
> - *      void \*dma_buf_kmap_atomic(struct dma_buf \*, unsigned long);
> - *      void dma_buf_kunmap_atomic(struct dma_buf \*, unsigned long, void \*);
> - *
>   *   For importers all the restrictions of using kmap apply, like the limited
>   *   supply of kmap_atomic slots. Hence an importer shall only hold onto at
>   *   max 2 atomic dma_buf kmaps at the same time (in any given process context).

This is also about atomic kmap ...

And the subsequent language around "Note that these calls need to always
succeed." is also not true, might be good to update that stating that kmap
is optional (like we say already for vmap).

With those docs nits addressed:

Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>

> @@ -859,41 +850,6 @@ int dma_buf_end_cpu_access(struct dma_buf *dmabuf,
>  }
>  EXPORT_SYMBOL_GPL(dma_buf_end_cpu_access);
>  
> -/**
> - * dma_buf_kmap_atomic - Map a page of the buffer object into kernel address
> - * space. The same restrictions as for kmap_atomic and friends apply.
> - * @dmabuf:	[in]	buffer to map page from.
> - * @page_num:	[in]	page in PAGE_SIZE units to map.
> - *
> - * This call must always succeed, any necessary preparations that might fail
> - * need to be done in begin_cpu_access.
> - */
> -void *dma_buf_kmap_atomic(struct dma_buf *dmabuf, unsigned long page_num)
> -{
> -	WARN_ON(!dmabuf);
> -
> -	return dmabuf->ops->map_atomic(dmabuf, page_num);
> -}
> -EXPORT_SYMBOL_GPL(dma_buf_kmap_atomic);
> -
> -/**
> - * dma_buf_kunmap_atomic - Unmap a page obtained by dma_buf_kmap_atomic.
> - * @dmabuf:	[in]	buffer to unmap page from.
> - * @page_num:	[in]	page in PAGE_SIZE units to unmap.
> - * @vaddr:	[in]	kernel space pointer obtained from dma_buf_kmap_atomic.
> - *
> - * This call must always succeed.
> - */
> -void dma_buf_kunmap_atomic(struct dma_buf *dmabuf, unsigned long page_num,
> -			   void *vaddr)
> -{
> -	WARN_ON(!dmabuf);
> -
> -	if (dmabuf->ops->unmap_atomic)
> -		dmabuf->ops->unmap_atomic(dmabuf, page_num, vaddr);
> -}
> -EXPORT_SYMBOL_GPL(dma_buf_kunmap_atomic);
> -
>  /**
>   * dma_buf_kmap - Map a page of the buffer object into kernel address space. The
>   * same restrictions as for kmap and friends apply.
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> index f1500f1ec0f5..a156b3891a3f 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> @@ -244,9 +244,7 @@ static const struct dma_buf_ops amdgpu_dmabuf_ops = {
>  	.release = drm_gem_dmabuf_release,
>  	.begin_cpu_access = amdgpu_gem_begin_cpu_access,
>  	.map = drm_gem_dmabuf_kmap,
> -	.map_atomic = drm_gem_dmabuf_kmap_atomic,
>  	.unmap = drm_gem_dmabuf_kunmap,
> -	.unmap_atomic = drm_gem_dmabuf_kunmap_atomic,
>  	.mmap = drm_gem_dmabuf_mmap,
>  	.vmap = drm_gem_dmabuf_vmap,
>  	.vunmap = drm_gem_dmabuf_vunmap,
> diff --git a/drivers/gpu/drm/armada/armada_gem.c b/drivers/gpu/drm/armada/armada_gem.c
> index a97f509743a5..3fb37c75c065 100644
> --- a/drivers/gpu/drm/armada/armada_gem.c
> +++ b/drivers/gpu/drm/armada/armada_gem.c
> @@ -490,8 +490,6 @@ static const struct dma_buf_ops armada_gem_prime_dmabuf_ops = {
>  	.map_dma_buf	= armada_gem_prime_map_dma_buf,
>  	.unmap_dma_buf	= armada_gem_prime_unmap_dma_buf,
>  	.release	= drm_gem_dmabuf_release,
> -	.map_atomic	= armada_gem_dmabuf_no_kmap,
> -	.unmap_atomic	= armada_gem_dmabuf_no_kunmap,
>  	.map		= armada_gem_dmabuf_no_kmap,
>  	.unmap		= armada_gem_dmabuf_no_kunmap,
>  	.mmap		= armada_gem_dmabuf_mmap,
> diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
> index 4a3a232fea67..b28fa8f44c8b 100644
> --- a/drivers/gpu/drm/drm_prime.c
> +++ b/drivers/gpu/drm/drm_prime.c
> @@ -426,30 +426,6 @@ void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr)
>  }
>  EXPORT_SYMBOL(drm_gem_dmabuf_vunmap);
>  
> -/**
> - * drm_gem_dmabuf_kmap_atomic - map_atomic implementation for GEM
> - *
> - * Not implemented. This can be used as the &dma_buf_ops.map_atomic callback.
> - */
> -void *drm_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
> -				 unsigned long page_num)
> -{
> -	return NULL;
> -}
> -EXPORT_SYMBOL(drm_gem_dmabuf_kmap_atomic);
> -
> -/**
> - * drm_gem_dmabuf_kunmap_atomic - unmap_atomic implementation for GEM
> - *
> - * Not implemented. This can be used as the &dma_buf_ops.unmap_atomic callback.
> - */
> -void drm_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
> -				  unsigned long page_num, void *addr)
> -{
> -
> -}
> -EXPORT_SYMBOL(drm_gem_dmabuf_kunmap_atomic);
> -
>  /**
>   * drm_gem_dmabuf_kmap - map implementation for GEM
>   *
> @@ -502,9 +478,7 @@ static const struct dma_buf_ops drm_gem_prime_dmabuf_ops =  {
>  	.unmap_dma_buf = drm_gem_unmap_dma_buf,
>  	.release = drm_gem_dmabuf_release,
>  	.map = drm_gem_dmabuf_kmap,
> -	.map_atomic = drm_gem_dmabuf_kmap_atomic,
>  	.unmap = drm_gem_dmabuf_kunmap,
> -	.unmap_atomic = drm_gem_dmabuf_kunmap_atomic,
>  	.mmap = drm_gem_dmabuf_mmap,
>  	.vmap = drm_gem_dmabuf_vmap,
>  	.vunmap = drm_gem_dmabuf_vunmap,
> diff --git a/drivers/gpu/drm/i915/i915_gem_dmabuf.c b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
> index 69a7aec49e84..82e2ca17a441 100644
> --- a/drivers/gpu/drm/i915/i915_gem_dmabuf.c
> +++ b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
> @@ -111,15 +111,6 @@ static void i915_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr)
>  	i915_gem_object_unpin_map(obj);
>  }
>  
> -static void *i915_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf, unsigned long page_num)
> -{
> -	return NULL;
> -}
> -
> -static void i915_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf, unsigned long page_num, void *addr)
> -{
> -
> -}
>  static void *i915_gem_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long page_num)
>  {
>  	struct drm_i915_gem_object *obj = dma_buf_to_obj(dma_buf);
> @@ -225,9 +216,7 @@ static const struct dma_buf_ops i915_dmabuf_ops =  {
>  	.unmap_dma_buf = i915_gem_unmap_dma_buf,
>  	.release = drm_gem_dmabuf_release,
>  	.map = i915_gem_dmabuf_kmap,
> -	.map_atomic = i915_gem_dmabuf_kmap_atomic,
>  	.unmap = i915_gem_dmabuf_kunmap,
> -	.unmap_atomic = i915_gem_dmabuf_kunmap_atomic,
>  	.mmap = i915_gem_dmabuf_mmap,
>  	.vmap = i915_gem_dmabuf_vmap,
>  	.vunmap = i915_gem_dmabuf_vunmap,
> diff --git a/drivers/gpu/drm/i915/selftests/mock_dmabuf.c b/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
> index 302f7d103635..f81fda8ea45e 100644
> --- a/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
> +++ b/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
> @@ -130,9 +130,7 @@ static const struct dma_buf_ops mock_dmabuf_ops =  {
>  	.unmap_dma_buf = mock_unmap_dma_buf,
>  	.release = mock_dmabuf_release,
>  	.map = mock_dmabuf_kmap,
> -	.map_atomic = mock_dmabuf_kmap_atomic,
>  	.unmap = mock_dmabuf_kunmap,
> -	.unmap_atomic = mock_dmabuf_kunmap_atomic,
>  	.mmap = mock_dmabuf_mmap,
>  	.vmap = mock_dmabuf_vmap,
>  	.vunmap = mock_dmabuf_vunmap,
> diff --git a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
> index 8e41d649e248..1a073f9b2834 100644
> --- a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
> +++ b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
> @@ -148,8 +148,6 @@ static const struct dma_buf_ops omap_dmabuf_ops = {
>  	.release = drm_gem_dmabuf_release,
>  	.begin_cpu_access = omap_gem_dmabuf_begin_cpu_access,
>  	.end_cpu_access = omap_gem_dmabuf_end_cpu_access,
> -	.map_atomic = omap_gem_dmabuf_kmap_atomic,
> -	.unmap_atomic = omap_gem_dmabuf_kunmap_atomic,
>  	.map = omap_gem_dmabuf_kmap,
>  	.unmap = omap_gem_dmabuf_kunmap,
>  	.mmap = omap_gem_dmabuf_mmap,
> diff --git a/drivers/gpu/drm/tegra/gem.c b/drivers/gpu/drm/tegra/gem.c
> index 8b0b4ff64bb4..d7661702c11c 100644
> --- a/drivers/gpu/drm/tegra/gem.c
> +++ b/drivers/gpu/drm/tegra/gem.c
> @@ -596,18 +596,6 @@ static int tegra_gem_prime_end_cpu_access(struct dma_buf *buf,
>  	return 0;
>  }
>  
> -static void *tegra_gem_prime_kmap_atomic(struct dma_buf *buf,
> -					 unsigned long page)
> -{
> -	return NULL;
> -}
> -
> -static void tegra_gem_prime_kunmap_atomic(struct dma_buf *buf,
> -					  unsigned long page,
> -					  void *addr)
> -{
> -}
> -
>  static void *tegra_gem_prime_kmap(struct dma_buf *buf, unsigned long page)
>  {
>  	return NULL;
> @@ -648,8 +636,6 @@ static const struct dma_buf_ops tegra_gem_prime_dmabuf_ops = {
>  	.release = tegra_gem_prime_release,
>  	.begin_cpu_access = tegra_gem_prime_begin_cpu_access,
>  	.end_cpu_access = tegra_gem_prime_end_cpu_access,
> -	.map_atomic = tegra_gem_prime_kmap_atomic,
> -	.unmap_atomic = tegra_gem_prime_kunmap_atomic,
>  	.map = tegra_gem_prime_kmap,
>  	.unmap = tegra_gem_prime_kunmap,
>  	.mmap = tegra_gem_prime_mmap,
> diff --git a/drivers/gpu/drm/udl/udl_dmabuf.c b/drivers/gpu/drm/udl/udl_dmabuf.c
> index 5fdc8bdc2026..ae7225dedc30 100644
> --- a/drivers/gpu/drm/udl/udl_dmabuf.c
> +++ b/drivers/gpu/drm/udl/udl_dmabuf.c
> @@ -156,27 +156,12 @@ static void *udl_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long page_num)
>  	return NULL;
>  }
>  
> -static void *udl_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
> -				    unsigned long page_num)
> -{
> -	/* TODO */
> -
> -	return NULL;
> -}
> -
>  static void udl_dmabuf_kunmap(struct dma_buf *dma_buf,
>  			      unsigned long page_num, void *addr)
>  {
>  	/* TODO */
>  }
>  
> -static void udl_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
> -				     unsigned long page_num,
> -				     void *addr)
> -{
> -	/* TODO */
> -}
> -
>  static int udl_dmabuf_mmap(struct dma_buf *dma_buf,
>  			   struct vm_area_struct *vma)
>  {
> @@ -191,9 +176,7 @@ static const struct dma_buf_ops udl_dmabuf_ops = {
>  	.map_dma_buf		= udl_map_dma_buf,
>  	.unmap_dma_buf		= udl_unmap_dma_buf,
>  	.map			= udl_dmabuf_kmap,
> -	.map_atomic		= udl_dmabuf_kmap_atomic,
>  	.unmap			= udl_dmabuf_kunmap,
> -	.unmap_atomic		= udl_dmabuf_kunmap_atomic,
>  	.mmap			= udl_dmabuf_mmap,
>  	.release		= drm_gem_dmabuf_release,
>  };
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
> index fbffb37ccf42..373bc6da2f84 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
> @@ -71,17 +71,6 @@ static void vmw_prime_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr)
>  {
>  }
>  
> -static void *vmw_prime_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
> -		unsigned long page_num)
> -{
> -	return NULL;
> -}
> -
> -static void vmw_prime_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
> -		unsigned long page_num, void *addr)
> -{
> -
> -}
>  static void *vmw_prime_dmabuf_kmap(struct dma_buf *dma_buf,
>  		unsigned long page_num)
>  {
> @@ -108,9 +97,7 @@ const struct dma_buf_ops vmw_prime_dmabuf_ops =  {
>  	.unmap_dma_buf = vmw_prime_unmap_dma_buf,
>  	.release = NULL,
>  	.map = vmw_prime_dmabuf_kmap,
> -	.map_atomic = vmw_prime_dmabuf_kmap_atomic,
>  	.unmap = vmw_prime_dmabuf_kunmap,
> -	.unmap_atomic = vmw_prime_dmabuf_kunmap_atomic,
>  	.mmap = vmw_prime_dmabuf_mmap,
>  	.vmap = vmw_prime_dmabuf_vmap,
>  	.vunmap = vmw_prime_dmabuf_vunmap,
> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-contig.c b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> index 12d0072c52c2..aff0ab7bf83d 100644
> --- a/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> +++ b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> @@ -358,7 +358,6 @@ static const struct dma_buf_ops vb2_dc_dmabuf_ops = {
>  	.map_dma_buf = vb2_dc_dmabuf_ops_map,
>  	.unmap_dma_buf = vb2_dc_dmabuf_ops_unmap,
>  	.map = vb2_dc_dmabuf_ops_kmap,
> -	.map_atomic = vb2_dc_dmabuf_ops_kmap,
>  	.vmap = vb2_dc_dmabuf_ops_vmap,
>  	.mmap = vb2_dc_dmabuf_ops_mmap,
>  	.release = vb2_dc_dmabuf_ops_release,
> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-sg.c b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
> index cf94765e593f..015e737095cd 100644
> --- a/drivers/media/common/videobuf2/videobuf2-dma-sg.c
> +++ b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
> @@ -507,7 +507,6 @@ static const struct dma_buf_ops vb2_dma_sg_dmabuf_ops = {
>  	.map_dma_buf = vb2_dma_sg_dmabuf_ops_map,
>  	.unmap_dma_buf = vb2_dma_sg_dmabuf_ops_unmap,
>  	.map = vb2_dma_sg_dmabuf_ops_kmap,
> -	.map_atomic = vb2_dma_sg_dmabuf_ops_kmap,
>  	.vmap = vb2_dma_sg_dmabuf_ops_vmap,
>  	.mmap = vb2_dma_sg_dmabuf_ops_mmap,
>  	.release = vb2_dma_sg_dmabuf_ops_release,
> diff --git a/drivers/media/common/videobuf2/videobuf2-vmalloc.c b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
> index 298ffb9ecdae..467a4005164b 100644
> --- a/drivers/media/common/videobuf2/videobuf2-vmalloc.c
> +++ b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
> @@ -346,7 +346,6 @@ static const struct dma_buf_ops vb2_vmalloc_dmabuf_ops = {
>  	.map_dma_buf = vb2_vmalloc_dmabuf_ops_map,
>  	.unmap_dma_buf = vb2_vmalloc_dmabuf_ops_unmap,
>  	.map = vb2_vmalloc_dmabuf_ops_kmap,
> -	.map_atomic = vb2_vmalloc_dmabuf_ops_kmap,
>  	.vmap = vb2_vmalloc_dmabuf_ops_vmap,
>  	.mmap = vb2_vmalloc_dmabuf_ops_mmap,
>  	.release = vb2_vmalloc_dmabuf_ops_release,
> diff --git a/drivers/staging/android/ion/ion.c b/drivers/staging/android/ion/ion.c
> index 57e0d8035b2e..a46219ff5e16 100644
> --- a/drivers/staging/android/ion/ion.c
> +++ b/drivers/staging/android/ion/ion.c
> @@ -374,8 +374,6 @@ static const struct dma_buf_ops dma_buf_ops = {
>  	.detach = ion_dma_buf_detatch,
>  	.begin_cpu_access = ion_dma_buf_begin_cpu_access,
>  	.end_cpu_access = ion_dma_buf_end_cpu_access,
> -	.map_atomic = ion_dma_buf_kmap,
> -	.unmap_atomic = ion_dma_buf_kunmap,
>  	.map = ion_dma_buf_kmap,
>  	.unmap = ion_dma_buf_kunmap,
>  };
> diff --git a/drivers/tee/tee_shm.c b/drivers/tee/tee_shm.c
> index 556960a1bab3..df4a1553b78b 100644
> --- a/drivers/tee/tee_shm.c
> +++ b/drivers/tee/tee_shm.c
> @@ -80,11 +80,6 @@ static void tee_shm_op_release(struct dma_buf *dmabuf)
>  	tee_shm_release(shm);
>  }
>  
> -static void *tee_shm_op_map_atomic(struct dma_buf *dmabuf, unsigned long pgnum)
> -{
> -	return NULL;
> -}
> -
>  static void *tee_shm_op_map(struct dma_buf *dmabuf, unsigned long pgnum)
>  {
>  	return NULL;
> @@ -107,7 +102,6 @@ static const struct dma_buf_ops tee_shm_dma_buf_ops = {
>  	.map_dma_buf = tee_shm_op_map_dma_buf,
>  	.unmap_dma_buf = tee_shm_op_unmap_dma_buf,
>  	.release = tee_shm_op_release,
> -	.map_atomic = tee_shm_op_map_atomic,
>  	.map = tee_shm_op_map,
>  	.mmap = tee_shm_op_mmap,
>  };
> diff --git a/include/drm/drm_prime.h b/include/drm/drm_prime.h
> index ef338151cea8..d716d653b096 100644
> --- a/include/drm/drm_prime.h
> +++ b/include/drm/drm_prime.h
> @@ -93,10 +93,6 @@ void drm_gem_unmap_dma_buf(struct dma_buf_attachment *attach,
>  			   enum dma_data_direction dir);
>  void *drm_gem_dmabuf_vmap(struct dma_buf *dma_buf);
>  void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr);
> -void *drm_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
> -				 unsigned long page_num);
> -void drm_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
> -				  unsigned long page_num, void *addr);
>  void *drm_gem_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long page_num);
>  void drm_gem_dmabuf_kunmap(struct dma_buf *dma_buf, unsigned long page_num,
>  			   void *addr);
> diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
> index 346caf77937f..d17cadd76802 100644
> --- a/include/linux/dma-buf.h
> +++ b/include/linux/dma-buf.h
> @@ -205,8 +205,6 @@ struct dma_buf_ops {
>  	 * to be restarted.
>  	 */
>  	int (*end_cpu_access)(struct dma_buf *, enum dma_data_direction);
> -	void *(*map_atomic)(struct dma_buf *, unsigned long);
> -	void (*unmap_atomic)(struct dma_buf *, unsigned long, void *);
>  	void *(*map)(struct dma_buf *, unsigned long);
>  	void (*unmap)(struct dma_buf *, unsigned long, void *);
>  
> @@ -394,8 +392,6 @@ int dma_buf_begin_cpu_access(struct dma_buf *dma_buf,
>  			     enum dma_data_direction dir);
>  int dma_buf_end_cpu_access(struct dma_buf *dma_buf,
>  			   enum dma_data_direction dir);
> -void *dma_buf_kmap_atomic(struct dma_buf *, unsigned long);
> -void dma_buf_kunmap_atomic(struct dma_buf *, unsigned long, void *);
>  void *dma_buf_kmap(struct dma_buf *, unsigned long);
>  void dma_buf_kunmap(struct dma_buf *, unsigned long, void *);
>  
> -- 
> 2.14.1
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 3/5] dma-buf: lock the reservation object during (un)map_dma_buf
@ 2018-06-18  8:22     ` Daniel Vetter
  0 siblings, 0 replies; 58+ messages in thread
From: Daniel Vetter @ 2018-06-18  8:22 UTC (permalink / raw)
  To: Christian König; +Cc: linaro-mm-sig, linux-media, dri-devel, amd-gfx

On Fri, Jun 01, 2018 at 02:00:18PM +0200, Christian König wrote:
> First step towards unpinned DMA buf operation.
> 
> I've checked the DRM drivers to potential locking of the reservation
> object, but essentially we need to audit all implementations of the
> dma_buf _ops for this to work.
> 
> Signed-off-by: Christian König <christian.koenig@amd.com>

Agreed in principle, but I expect a fireworks show with just this patch
applied. It's not just that we need to audit all the implementations of
dma-buf-ops, we also need to audit all the callers.

No idea yet how to go about merging this, but for a start might be good to
throw this at the intel-gfx CI (just Cc: the intel-gfx mailing lists, but
make sure your series applies without amd-staging-next stuff which isn't
in drm.git yet).
-Daniel

> ---
>  drivers/dma-buf/dma-buf.c | 4 ++++
>  include/linux/dma-buf.h   | 4 ++++
>  2 files changed, 8 insertions(+)
> 
> diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
> index e4c657d9fad7..4f0708cb58a7 100644
> --- a/drivers/dma-buf/dma-buf.c
> +++ b/drivers/dma-buf/dma-buf.c
> @@ -631,7 +631,9 @@ struct sg_table *dma_buf_map_attachment(struct dma_buf_attachment *attach,
>  	if (WARN_ON(!attach || !attach->dmabuf))
>  		return ERR_PTR(-EINVAL);
>  
> +	reservation_object_lock(attach->dmabuf->resv, NULL);
>  	sg_table = attach->dmabuf->ops->map_dma_buf(attach, direction);
> +	reservation_object_unlock(attach->dmabuf->resv);
>  	if (!sg_table)
>  		sg_table = ERR_PTR(-ENOMEM);
>  
> @@ -658,8 +660,10 @@ void dma_buf_unmap_attachment(struct dma_buf_attachment *attach,
>  	if (WARN_ON(!attach || !attach->dmabuf || !sg_table))
>  		return;
>  
> +	reservation_object_lock(attach->dmabuf->resv, NULL);
>  	attach->dmabuf->ops->unmap_dma_buf(attach, sg_table,
>  						direction);
> +	reservation_object_unlock(attach->dmabuf->resv);
>  }
>  EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment);
>  
> diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
> index d17cadd76802..d2ba7a027a78 100644
> --- a/include/linux/dma-buf.h
> +++ b/include/linux/dma-buf.h
> @@ -118,6 +118,8 @@ struct dma_buf_ops {
>  	 * any other kind of sharing that the exporter might wish to make
>  	 * available to buffer-users.
>  	 *
> +	 * This is called with the dmabuf->resv object locked.
> +	 *
>  	 * Returns:
>  	 *
>  	 * A &sg_table scatter list of or the backing storage of the DMA buffer,
> @@ -138,6 +140,8 @@ struct dma_buf_ops {
>  	 * It should also unpin the backing storage if this is the last mapping
>  	 * of the DMA buffer, it the exporter supports backing storage
>  	 * migration.
> +	 *
> +	 * This is called with the dmabuf->resv object locked.
>  	 */
>  	void (*unmap_dma_buf)(struct dma_buf_attachment *,
>  			      struct sg_table *,
> -- 
> 2.14.1
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 3/5] dma-buf: lock the reservation object during (un)map_dma_buf
@ 2018-06-18  8:22     ` Daniel Vetter
  0 siblings, 0 replies; 58+ messages in thread
From: Daniel Vetter @ 2018-06-18  8:22 UTC (permalink / raw)
  To: Christian König
  Cc: linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw,
	amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	linux-media-u79uwXL29TY76Z2rM5mHXA

On Fri, Jun 01, 2018 at 02:00:18PM +0200, Christian König wrote:
> First step towards unpinned DMA buf operation.
> 
> I've checked the DRM drivers to potential locking of the reservation
> object, but essentially we need to audit all implementations of the
> dma_buf _ops for this to work.
> 
> Signed-off-by: Christian König <christian.koenig@amd.com>

Agreed in principle, but I expect a fireworks show with just this patch
applied. It's not just that we need to audit all the implementations of
dma-buf-ops, we also need to audit all the callers.

No idea yet how to go about merging this, but for a start might be good to
throw this at the intel-gfx CI (just Cc: the intel-gfx mailing lists, but
make sure your series applies without amd-staging-next stuff which isn't
in drm.git yet).
-Daniel

> ---
>  drivers/dma-buf/dma-buf.c | 4 ++++
>  include/linux/dma-buf.h   | 4 ++++
>  2 files changed, 8 insertions(+)
> 
> diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
> index e4c657d9fad7..4f0708cb58a7 100644
> --- a/drivers/dma-buf/dma-buf.c
> +++ b/drivers/dma-buf/dma-buf.c
> @@ -631,7 +631,9 @@ struct sg_table *dma_buf_map_attachment(struct dma_buf_attachment *attach,
>  	if (WARN_ON(!attach || !attach->dmabuf))
>  		return ERR_PTR(-EINVAL);
>  
> +	reservation_object_lock(attach->dmabuf->resv, NULL);
>  	sg_table = attach->dmabuf->ops->map_dma_buf(attach, direction);
> +	reservation_object_unlock(attach->dmabuf->resv);
>  	if (!sg_table)
>  		sg_table = ERR_PTR(-ENOMEM);
>  
> @@ -658,8 +660,10 @@ void dma_buf_unmap_attachment(struct dma_buf_attachment *attach,
>  	if (WARN_ON(!attach || !attach->dmabuf || !sg_table))
>  		return;
>  
> +	reservation_object_lock(attach->dmabuf->resv, NULL);
>  	attach->dmabuf->ops->unmap_dma_buf(attach, sg_table,
>  						direction);
> +	reservation_object_unlock(attach->dmabuf->resv);
>  }
>  EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment);
>  
> diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
> index d17cadd76802..d2ba7a027a78 100644
> --- a/include/linux/dma-buf.h
> +++ b/include/linux/dma-buf.h
> @@ -118,6 +118,8 @@ struct dma_buf_ops {
>  	 * any other kind of sharing that the exporter might wish to make
>  	 * available to buffer-users.
>  	 *
> +	 * This is called with the dmabuf->resv object locked.
> +	 *
>  	 * Returns:
>  	 *
>  	 * A &sg_table scatter list of or the backing storage of the DMA buffer,
> @@ -138,6 +140,8 @@ struct dma_buf_ops {
>  	 * It should also unpin the backing storage if this is the last mapping
>  	 * of the DMA buffer, it the exporter supports backing storage
>  	 * migration.
> +	 *
> +	 * This is called with the dmabuf->resv object locked.
>  	 */
>  	void (*unmap_dma_buf)(struct dma_buf_attachment *,
>  			      struct sg_table *,
> -- 
> 2.14.1
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 4/5] dma-buf: add dma_buf_(un)map_attachment_locked variants
  2018-06-01 12:00   ` Christian König
@ 2018-06-18  8:27     ` Daniel Vetter
  -1 siblings, 0 replies; 58+ messages in thread
From: Daniel Vetter @ 2018-06-18  8:27 UTC (permalink / raw)
  To: Christian König; +Cc: linaro-mm-sig, linux-media, dri-devel, amd-gfx

On Fri, Jun 01, 2018 at 02:00:19PM +0200, Christian König wrote:
> Add function variants which can be called with the reservation lock
> already held.
> 
> Signed-off-by: Christian König <christian.koenig@amd.com>

I expect that we'll need this patch before patch 3 and then roll it out to
drivers doing reservation locking already, before we can add the
reservation stuff for all other callers.
> ---
>  drivers/dma-buf/dma-buf.c | 60 ++++++++++++++++++++++++++++++++++++++++++-----
>  include/linux/dma-buf.h   |  5 ++++
>  2 files changed, 59 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
> index 4f0708cb58a7..3371509b468e 100644
> --- a/drivers/dma-buf/dma-buf.c
> +++ b/drivers/dma-buf/dma-buf.c
> @@ -606,6 +606,38 @@ void dma_buf_detach(struct dma_buf *dmabuf, struct dma_buf_attachment *attach)
>  }
>  EXPORT_SYMBOL_GPL(dma_buf_detach);
>  
> +/**
> + * dma_buf_map_attachment_locked - Maps the buffer into _device_ address space
> + * with the reservation lock held. Is a wrapper for map_dma_buf() of the
> + *
> + * Returns the scatterlist table of the attachment;
> + * dma_buf_ops.
> + * @attach:	[in]	attachment whose scatterlist is to be returned
> + * @direction:	[in]	direction of DMA transfer
> + *
> + * Returns sg_table containing the scatterlist to be returned; returns ERR_PTR
> + * on error. May return -EINTR if it is interrupted by a signal.
> + *
> + * A mapping must be unmapped by using dma_buf_unmap_attachment(). Note that
_locked

Also please reference the other variants here for doc completeness.

> + * the underlying backing storage is pinned for as long as a mapping exists,
> + * therefore users/importers should not hold onto a mapping for undue amounts of
> + * time.
> + */
> +struct sg_table *
> +dma_buf_map_attachment_locked(struct dma_buf_attachment *attach,
> +			      enum dma_data_direction direction)
> +{
> +	struct sg_table *sg_table;
> +
> +	might_sleep();

Needs a lockdep_assert_held here.

> +	sg_table = attach->dmabuf->ops->map_dma_buf(attach, direction);
> +	if (!sg_table)
> +		sg_table = ERR_PTR(-ENOMEM);
> +
> +	return sg_table;
> +}
> +EXPORT_SYMBOL_GPL(dma_buf_map_attachment_locked);
> +
>  /**
>   * dma_buf_map_attachment - Returns the scatterlist table of the attachment;
>   * mapped into _device_ address space. Is a wrapper for map_dma_buf() of the
> @@ -626,13 +658,12 @@ struct sg_table *dma_buf_map_attachment(struct dma_buf_attachment *attach,
>  {
>  	struct sg_table *sg_table;
>  
> -	might_sleep();
>  
>  	if (WARN_ON(!attach || !attach->dmabuf))
>  		return ERR_PTR(-EINVAL);
>  
>  	reservation_object_lock(attach->dmabuf->resv, NULL);
> -	sg_table = attach->dmabuf->ops->map_dma_buf(attach, direction);
> +	sg_table = dma_buf_map_attachment_locked(attach, direction);
>  	reservation_object_unlock(attach->dmabuf->resv);
>  	if (!sg_table)
>  		sg_table = ERR_PTR(-ENOMEM);
> @@ -641,6 +672,26 @@ struct sg_table *dma_buf_map_attachment(struct dma_buf_attachment *attach,
>  }
>  EXPORT_SYMBOL_GPL(dma_buf_map_attachment);
>  
> +/**
> + * dma_buf_unmap_attachment_locked - unmaps the buffer with reservation lock
> + * held, should deallocate the associated scatterlist. Is a wrapper for
> + * unmap_dma_buf() of dma_buf_ops.
> + * @attach:	[in]	attachment to unmap buffer from
> + * @sg_table:	[in]	scatterlist info of the buffer to unmap
> + * @direction:  [in]    direction of DMA transfer
> + *
> + * This unmaps a DMA mapping for @attached obtained by dma_buf_map_attachment().

_locked

> + */
> +void dma_buf_unmap_attachment_locked(struct dma_buf_attachment *attach,
> +				     struct sg_table *sg_table,
> +				     enum dma_data_direction direction)
> +{
> +	might_sleep();

Needs a lockdep_assert_held here.

Otherwise lgtm, but there's the big caveat of that I expect lockdep
fireworks on mass with this, but drivers not yet converted.
-Daniel

> +	attach->dmabuf->ops->unmap_dma_buf(attach, sg_table,
> +						direction);
> +}
> +EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment_locked);
> +
>  /**
>   * dma_buf_unmap_attachment - unmaps and decreases usecount of the buffer;might
>   * deallocate the scatterlist associated. Is a wrapper for unmap_dma_buf() of
> @@ -655,14 +706,11 @@ void dma_buf_unmap_attachment(struct dma_buf_attachment *attach,
>  				struct sg_table *sg_table,
>  				enum dma_data_direction direction)
>  {
> -	might_sleep();
> -
>  	if (WARN_ON(!attach || !attach->dmabuf || !sg_table))
>  		return;
>  
>  	reservation_object_lock(attach->dmabuf->resv, NULL);
> -	attach->dmabuf->ops->unmap_dma_buf(attach, sg_table,
> -						direction);
> +	dma_buf_unmap_attachment_locked(attach, sg_table, direction);
>  	reservation_object_unlock(attach->dmabuf->resv);
>  }
>  EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment);
> diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
> index d2ba7a027a78..968777e8c662 100644
> --- a/include/linux/dma-buf.h
> +++ b/include/linux/dma-buf.h
> @@ -388,8 +388,13 @@ int dma_buf_fd(struct dma_buf *dmabuf, int flags);
>  struct dma_buf *dma_buf_get(int fd);
>  void dma_buf_put(struct dma_buf *dmabuf);
>  
> +struct sg_table *dma_buf_map_attachment_locked(struct dma_buf_attachment *,
> +					       enum dma_data_direction);
>  struct sg_table *dma_buf_map_attachment(struct dma_buf_attachment *,
>  					enum dma_data_direction);
> +void dma_buf_unmap_attachment_locked(struct dma_buf_attachment *,
> +				     struct sg_table *,
> +				     enum dma_data_direction);
>  void dma_buf_unmap_attachment(struct dma_buf_attachment *, struct sg_table *,
>  				enum dma_data_direction);
>  int dma_buf_begin_cpu_access(struct dma_buf *dma_buf,
> -- 
> 2.14.1
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 4/5] dma-buf: add dma_buf_(un)map_attachment_locked variants
@ 2018-06-18  8:27     ` Daniel Vetter
  0 siblings, 0 replies; 58+ messages in thread
From: Daniel Vetter @ 2018-06-18  8:27 UTC (permalink / raw)
  To: Christian König; +Cc: linaro-mm-sig, amd-gfx, dri-devel, linux-media

On Fri, Jun 01, 2018 at 02:00:19PM +0200, Christian König wrote:
> Add function variants which can be called with the reservation lock
> already held.
> 
> Signed-off-by: Christian König <christian.koenig@amd.com>

I expect that we'll need this patch before patch 3 and then roll it out to
drivers doing reservation locking already, before we can add the
reservation stuff for all other callers.
> ---
>  drivers/dma-buf/dma-buf.c | 60 ++++++++++++++++++++++++++++++++++++++++++-----
>  include/linux/dma-buf.h   |  5 ++++
>  2 files changed, 59 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
> index 4f0708cb58a7..3371509b468e 100644
> --- a/drivers/dma-buf/dma-buf.c
> +++ b/drivers/dma-buf/dma-buf.c
> @@ -606,6 +606,38 @@ void dma_buf_detach(struct dma_buf *dmabuf, struct dma_buf_attachment *attach)
>  }
>  EXPORT_SYMBOL_GPL(dma_buf_detach);
>  
> +/**
> + * dma_buf_map_attachment_locked - Maps the buffer into _device_ address space
> + * with the reservation lock held. Is a wrapper for map_dma_buf() of the
> + *
> + * Returns the scatterlist table of the attachment;
> + * dma_buf_ops.
> + * @attach:	[in]	attachment whose scatterlist is to be returned
> + * @direction:	[in]	direction of DMA transfer
> + *
> + * Returns sg_table containing the scatterlist to be returned; returns ERR_PTR
> + * on error. May return -EINTR if it is interrupted by a signal.
> + *
> + * A mapping must be unmapped by using dma_buf_unmap_attachment(). Note that
_locked

Also please reference the other variants here for doc completeness.

> + * the underlying backing storage is pinned for as long as a mapping exists,
> + * therefore users/importers should not hold onto a mapping for undue amounts of
> + * time.
> + */
> +struct sg_table *
> +dma_buf_map_attachment_locked(struct dma_buf_attachment *attach,
> +			      enum dma_data_direction direction)
> +{
> +	struct sg_table *sg_table;
> +
> +	might_sleep();

Needs a lockdep_assert_held here.

> +	sg_table = attach->dmabuf->ops->map_dma_buf(attach, direction);
> +	if (!sg_table)
> +		sg_table = ERR_PTR(-ENOMEM);
> +
> +	return sg_table;
> +}
> +EXPORT_SYMBOL_GPL(dma_buf_map_attachment_locked);
> +
>  /**
>   * dma_buf_map_attachment - Returns the scatterlist table of the attachment;
>   * mapped into _device_ address space. Is a wrapper for map_dma_buf() of the
> @@ -626,13 +658,12 @@ struct sg_table *dma_buf_map_attachment(struct dma_buf_attachment *attach,
>  {
>  	struct sg_table *sg_table;
>  
> -	might_sleep();
>  
>  	if (WARN_ON(!attach || !attach->dmabuf))
>  		return ERR_PTR(-EINVAL);
>  
>  	reservation_object_lock(attach->dmabuf->resv, NULL);
> -	sg_table = attach->dmabuf->ops->map_dma_buf(attach, direction);
> +	sg_table = dma_buf_map_attachment_locked(attach, direction);
>  	reservation_object_unlock(attach->dmabuf->resv);
>  	if (!sg_table)
>  		sg_table = ERR_PTR(-ENOMEM);
> @@ -641,6 +672,26 @@ struct sg_table *dma_buf_map_attachment(struct dma_buf_attachment *attach,
>  }
>  EXPORT_SYMBOL_GPL(dma_buf_map_attachment);
>  
> +/**
> + * dma_buf_unmap_attachment_locked - unmaps the buffer with reservation lock
> + * held, should deallocate the associated scatterlist. Is a wrapper for
> + * unmap_dma_buf() of dma_buf_ops.
> + * @attach:	[in]	attachment to unmap buffer from
> + * @sg_table:	[in]	scatterlist info of the buffer to unmap
> + * @direction:  [in]    direction of DMA transfer
> + *
> + * This unmaps a DMA mapping for @attached obtained by dma_buf_map_attachment().

_locked

> + */
> +void dma_buf_unmap_attachment_locked(struct dma_buf_attachment *attach,
> +				     struct sg_table *sg_table,
> +				     enum dma_data_direction direction)
> +{
> +	might_sleep();

Needs a lockdep_assert_held here.

Otherwise lgtm, but there's the big caveat of that I expect lockdep
fireworks on mass with this, but drivers not yet converted.
-Daniel

> +	attach->dmabuf->ops->unmap_dma_buf(attach, sg_table,
> +						direction);
> +}
> +EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment_locked);
> +
>  /**
>   * dma_buf_unmap_attachment - unmaps and decreases usecount of the buffer;might
>   * deallocate the scatterlist associated. Is a wrapper for unmap_dma_buf() of
> @@ -655,14 +706,11 @@ void dma_buf_unmap_attachment(struct dma_buf_attachment *attach,
>  				struct sg_table *sg_table,
>  				enum dma_data_direction direction)
>  {
> -	might_sleep();
> -
>  	if (WARN_ON(!attach || !attach->dmabuf || !sg_table))
>  		return;
>  
>  	reservation_object_lock(attach->dmabuf->resv, NULL);
> -	attach->dmabuf->ops->unmap_dma_buf(attach, sg_table,
> -						direction);
> +	dma_buf_unmap_attachment_locked(attach, sg_table, direction);
>  	reservation_object_unlock(attach->dmabuf->resv);
>  }
>  EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment);
> diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
> index d2ba7a027a78..968777e8c662 100644
> --- a/include/linux/dma-buf.h
> +++ b/include/linux/dma-buf.h
> @@ -388,8 +388,13 @@ int dma_buf_fd(struct dma_buf *dmabuf, int flags);
>  struct dma_buf *dma_buf_get(int fd);
>  void dma_buf_put(struct dma_buf *dmabuf);
>  
> +struct sg_table *dma_buf_map_attachment_locked(struct dma_buf_attachment *,
> +					       enum dma_data_direction);
>  struct sg_table *dma_buf_map_attachment(struct dma_buf_attachment *,
>  					enum dma_data_direction);
> +void dma_buf_unmap_attachment_locked(struct dma_buf_attachment *,
> +				     struct sg_table *,
> +				     enum dma_data_direction);
>  void dma_buf_unmap_attachment(struct dma_buf_attachment *, struct sg_table *,
>  				enum dma_data_direction);
>  int dma_buf_begin_cpu_access(struct dma_buf *dma_buf,
> -- 
> 2.14.1
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 5/5] drm/amdgpu: add independent DMA-buf export v3
@ 2018-06-18  8:28     ` Daniel Vetter
  0 siblings, 0 replies; 58+ messages in thread
From: Daniel Vetter @ 2018-06-18  8:28 UTC (permalink / raw)
  To: Christian König; +Cc: linaro-mm-sig, linux-media, dri-devel, amd-gfx

On Fri, Jun 01, 2018 at 02:00:20PM +0200, Christian König wrote:
> The caching of SGT's done by the DRM code is actually quite harmful and
> should probably removed altogether in the long term.

Hm, why is it harmful? We've done it because it's expensive, and people
started screaming about the overhead ... hence the caching. Doing an
amdgpu copypasta seems like working around issues in shared code.
-Daniel

> 
> Start by providing a separate DMA-buf export implementation in amdgpu. This is
> also a prerequisite of unpinned DMA-buf handling.
> 
> v2: fix unintended recursion, remove debugging leftovers
> v3: split out from unpinned DMA-buf work
> 
> Signed-off-by: Christian König <christian.koenig@amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu.h       |  1 -
>  drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c   |  1 -
>  drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c | 73 ++++++++++++++-----------------
>  3 files changed, 32 insertions(+), 43 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> index 2d7500921c0b..93dc57d74fc2 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> @@ -373,7 +373,6 @@ int amdgpu_gem_object_open(struct drm_gem_object *obj,
>  void amdgpu_gem_object_close(struct drm_gem_object *obj,
>  				struct drm_file *file_priv);
>  unsigned long amdgpu_gem_timeout(uint64_t timeout_ns);
> -struct sg_table *amdgpu_gem_prime_get_sg_table(struct drm_gem_object *obj);
>  struct drm_gem_object *
>  amdgpu_gem_prime_import_sg_table(struct drm_device *dev,
>  				 struct dma_buf_attachment *attach,
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> index b0bf2f24da48..270b8ad927ea 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> @@ -907,7 +907,6 @@ static struct drm_driver kms_driver = {
>  	.gem_prime_export = amdgpu_gem_prime_export,
>  	.gem_prime_import = amdgpu_gem_prime_import,
>  	.gem_prime_res_obj = amdgpu_gem_prime_res_obj,
> -	.gem_prime_get_sg_table = amdgpu_gem_prime_get_sg_table,
>  	.gem_prime_import_sg_table = amdgpu_gem_prime_import_sg_table,
>  	.gem_prime_vmap = amdgpu_gem_prime_vmap,
>  	.gem_prime_vunmap = amdgpu_gem_prime_vunmap,
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> index a156b3891a3f..0c5a75b06648 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> @@ -32,14 +32,6 @@
>  
>  static const struct dma_buf_ops amdgpu_dmabuf_ops;
>  
> -struct sg_table *amdgpu_gem_prime_get_sg_table(struct drm_gem_object *obj)
> -{
> -	struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
> -	int npages = bo->tbo.num_pages;
> -
> -	return drm_prime_pages_to_sg(bo->tbo.ttm->pages, npages);
> -}
> -
>  void *amdgpu_gem_prime_vmap(struct drm_gem_object *obj)
>  {
>  	struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
> @@ -132,23 +124,17 @@ amdgpu_gem_prime_import_sg_table(struct drm_device *dev,
>  	return ERR_PTR(ret);
>  }
>  
> -static int amdgpu_gem_map_attach(struct dma_buf *dma_buf,
> -				 struct dma_buf_attachment *attach)
> +static struct sg_table *
> +amdgpu_gem_map_dma_buf(struct dma_buf_attachment *attach,
> +		       enum dma_data_direction dir)
>  {
> +	struct dma_buf *dma_buf = attach->dmabuf;
>  	struct drm_gem_object *obj = dma_buf->priv;
>  	struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
>  	struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
> +	struct sg_table *sgt;
>  	long r;
>  
> -	r = drm_gem_map_attach(dma_buf, attach);
> -	if (r)
> -		return r;
> -
> -	r = amdgpu_bo_reserve(bo, false);
> -	if (unlikely(r != 0))
> -		goto error_detach;
> -
> -
>  	if (attach->dev->driver != adev->dev->driver) {
>  		/*
>  		 * Wait for all shared fences to complete before we switch to future
> @@ -159,46 +145,53 @@ static int amdgpu_gem_map_attach(struct dma_buf *dma_buf,
>  							MAX_SCHEDULE_TIMEOUT);
>  		if (unlikely(r < 0)) {
>  			DRM_DEBUG_PRIME("Fence wait failed: %li\n", r);
> -			goto error_unreserve;
> +			return ERR_PTR(r);
>  		}
>  	}
>  
>  	/* pin buffer into GTT */
>  	r = amdgpu_bo_pin(bo, AMDGPU_GEM_DOMAIN_GTT, NULL);
>  	if (r)
> -		goto error_unreserve;
> +		return ERR_PTR(r);
> +
> +	sgt = drm_prime_pages_to_sg(bo->tbo.ttm->pages, bo->tbo.num_pages);
> +	if (IS_ERR(sgt))
> +		return sgt;
> +
> +	if (!dma_map_sg_attrs(attach->dev, sgt->sgl, sgt->nents, dir,
> +			      DMA_ATTR_SKIP_CPU_SYNC))
> +		goto error_free;
>  
>  	if (attach->dev->driver != adev->dev->driver)
>  		bo->prime_shared_count++;
>  
> -error_unreserve:
> -	amdgpu_bo_unreserve(bo);
> +	return sgt;
>  
> -error_detach:
> -	if (r)
> -		drm_gem_map_detach(dma_buf, attach);
> -	return r;
> +error_free:
> +	sg_free_table(sgt);
> +	kfree(sgt);
> +	return ERR_PTR(-ENOMEM);
>  }
>  
> -static void amdgpu_gem_map_detach(struct dma_buf *dma_buf,
> -				  struct dma_buf_attachment *attach)
> +static void amdgpu_gem_unmap_dma_buf(struct dma_buf_attachment *attach,
> +				     struct sg_table *sgt,
> +				     enum dma_data_direction dir)
>  {
> +	struct dma_buf *dma_buf = attach->dmabuf;
>  	struct drm_gem_object *obj = dma_buf->priv;
>  	struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
>  	struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
> -	int ret = 0;
> -
> -	ret = amdgpu_bo_reserve(bo, true);
> -	if (unlikely(ret != 0))
> -		goto error;
>  
>  	amdgpu_bo_unpin(bo);
> +
>  	if (attach->dev->driver != adev->dev->driver && bo->prime_shared_count)
>  		bo->prime_shared_count--;
> -	amdgpu_bo_unreserve(bo);
>  
> -error:
> -	drm_gem_map_detach(dma_buf, attach);
> +	if (sgt) {
> +		dma_unmap_sg(attach->dev, sgt->sgl, sgt->nents, dir);
> +		sg_free_table(sgt);
> +		kfree(sgt);
> +	}
>  }
>  
>  struct reservation_object *amdgpu_gem_prime_res_obj(struct drm_gem_object *obj)
> @@ -237,10 +230,8 @@ static int amdgpu_gem_begin_cpu_access(struct dma_buf *dma_buf,
>  }
>  
>  static const struct dma_buf_ops amdgpu_dmabuf_ops = {
> -	.attach = amdgpu_gem_map_attach,
> -	.detach = amdgpu_gem_map_detach,
> -	.map_dma_buf = drm_gem_map_dma_buf,
> -	.unmap_dma_buf = drm_gem_unmap_dma_buf,
> +	.map_dma_buf = amdgpu_gem_map_dma_buf,
> +	.unmap_dma_buf = amdgpu_gem_unmap_dma_buf,
>  	.release = drm_gem_dmabuf_release,
>  	.begin_cpu_access = amdgpu_gem_begin_cpu_access,
>  	.map = drm_gem_dmabuf_kmap,
> -- 
> 2.14.1
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 5/5] drm/amdgpu: add independent DMA-buf export v3
@ 2018-06-18  8:28     ` Daniel Vetter
  0 siblings, 0 replies; 58+ messages in thread
From: Daniel Vetter @ 2018-06-18  8:28 UTC (permalink / raw)
  To: Christian König
  Cc: linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw,
	amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	linux-media-u79uwXL29TY76Z2rM5mHXA

On Fri, Jun 01, 2018 at 02:00:20PM +0200, Christian König wrote:
> The caching of SGT's done by the DRM code is actually quite harmful and
> should probably removed altogether in the long term.

Hm, why is it harmful? We've done it because it's expensive, and people
started screaming about the overhead ... hence the caching. Doing an
amdgpu copypasta seems like working around issues in shared code.
-Daniel

> 
> Start by providing a separate DMA-buf export implementation in amdgpu. This is
> also a prerequisite of unpinned DMA-buf handling.
> 
> v2: fix unintended recursion, remove debugging leftovers
> v3: split out from unpinned DMA-buf work
> 
> Signed-off-by: Christian König <christian.koenig@amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu.h       |  1 -
>  drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c   |  1 -
>  drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c | 73 ++++++++++++++-----------------
>  3 files changed, 32 insertions(+), 43 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> index 2d7500921c0b..93dc57d74fc2 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> @@ -373,7 +373,6 @@ int amdgpu_gem_object_open(struct drm_gem_object *obj,
>  void amdgpu_gem_object_close(struct drm_gem_object *obj,
>  				struct drm_file *file_priv);
>  unsigned long amdgpu_gem_timeout(uint64_t timeout_ns);
> -struct sg_table *amdgpu_gem_prime_get_sg_table(struct drm_gem_object *obj);
>  struct drm_gem_object *
>  amdgpu_gem_prime_import_sg_table(struct drm_device *dev,
>  				 struct dma_buf_attachment *attach,
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> index b0bf2f24da48..270b8ad927ea 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> @@ -907,7 +907,6 @@ static struct drm_driver kms_driver = {
>  	.gem_prime_export = amdgpu_gem_prime_export,
>  	.gem_prime_import = amdgpu_gem_prime_import,
>  	.gem_prime_res_obj = amdgpu_gem_prime_res_obj,
> -	.gem_prime_get_sg_table = amdgpu_gem_prime_get_sg_table,
>  	.gem_prime_import_sg_table = amdgpu_gem_prime_import_sg_table,
>  	.gem_prime_vmap = amdgpu_gem_prime_vmap,
>  	.gem_prime_vunmap = amdgpu_gem_prime_vunmap,
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> index a156b3891a3f..0c5a75b06648 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> @@ -32,14 +32,6 @@
>  
>  static const struct dma_buf_ops amdgpu_dmabuf_ops;
>  
> -struct sg_table *amdgpu_gem_prime_get_sg_table(struct drm_gem_object *obj)
> -{
> -	struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
> -	int npages = bo->tbo.num_pages;
> -
> -	return drm_prime_pages_to_sg(bo->tbo.ttm->pages, npages);
> -}
> -
>  void *amdgpu_gem_prime_vmap(struct drm_gem_object *obj)
>  {
>  	struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
> @@ -132,23 +124,17 @@ amdgpu_gem_prime_import_sg_table(struct drm_device *dev,
>  	return ERR_PTR(ret);
>  }
>  
> -static int amdgpu_gem_map_attach(struct dma_buf *dma_buf,
> -				 struct dma_buf_attachment *attach)
> +static struct sg_table *
> +amdgpu_gem_map_dma_buf(struct dma_buf_attachment *attach,
> +		       enum dma_data_direction dir)
>  {
> +	struct dma_buf *dma_buf = attach->dmabuf;
>  	struct drm_gem_object *obj = dma_buf->priv;
>  	struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
>  	struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
> +	struct sg_table *sgt;
>  	long r;
>  
> -	r = drm_gem_map_attach(dma_buf, attach);
> -	if (r)
> -		return r;
> -
> -	r = amdgpu_bo_reserve(bo, false);
> -	if (unlikely(r != 0))
> -		goto error_detach;
> -
> -
>  	if (attach->dev->driver != adev->dev->driver) {
>  		/*
>  		 * Wait for all shared fences to complete before we switch to future
> @@ -159,46 +145,53 @@ static int amdgpu_gem_map_attach(struct dma_buf *dma_buf,
>  							MAX_SCHEDULE_TIMEOUT);
>  		if (unlikely(r < 0)) {
>  			DRM_DEBUG_PRIME("Fence wait failed: %li\n", r);
> -			goto error_unreserve;
> +			return ERR_PTR(r);
>  		}
>  	}
>  
>  	/* pin buffer into GTT */
>  	r = amdgpu_bo_pin(bo, AMDGPU_GEM_DOMAIN_GTT, NULL);
>  	if (r)
> -		goto error_unreserve;
> +		return ERR_PTR(r);
> +
> +	sgt = drm_prime_pages_to_sg(bo->tbo.ttm->pages, bo->tbo.num_pages);
> +	if (IS_ERR(sgt))
> +		return sgt;
> +
> +	if (!dma_map_sg_attrs(attach->dev, sgt->sgl, sgt->nents, dir,
> +			      DMA_ATTR_SKIP_CPU_SYNC))
> +		goto error_free;
>  
>  	if (attach->dev->driver != adev->dev->driver)
>  		bo->prime_shared_count++;
>  
> -error_unreserve:
> -	amdgpu_bo_unreserve(bo);
> +	return sgt;
>  
> -error_detach:
> -	if (r)
> -		drm_gem_map_detach(dma_buf, attach);
> -	return r;
> +error_free:
> +	sg_free_table(sgt);
> +	kfree(sgt);
> +	return ERR_PTR(-ENOMEM);
>  }
>  
> -static void amdgpu_gem_map_detach(struct dma_buf *dma_buf,
> -				  struct dma_buf_attachment *attach)
> +static void amdgpu_gem_unmap_dma_buf(struct dma_buf_attachment *attach,
> +				     struct sg_table *sgt,
> +				     enum dma_data_direction dir)
>  {
> +	struct dma_buf *dma_buf = attach->dmabuf;
>  	struct drm_gem_object *obj = dma_buf->priv;
>  	struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
>  	struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
> -	int ret = 0;
> -
> -	ret = amdgpu_bo_reserve(bo, true);
> -	if (unlikely(ret != 0))
> -		goto error;
>  
>  	amdgpu_bo_unpin(bo);
> +
>  	if (attach->dev->driver != adev->dev->driver && bo->prime_shared_count)
>  		bo->prime_shared_count--;
> -	amdgpu_bo_unreserve(bo);
>  
> -error:
> -	drm_gem_map_detach(dma_buf, attach);
> +	if (sgt) {
> +		dma_unmap_sg(attach->dev, sgt->sgl, sgt->nents, dir);
> +		sg_free_table(sgt);
> +		kfree(sgt);
> +	}
>  }
>  
>  struct reservation_object *amdgpu_gem_prime_res_obj(struct drm_gem_object *obj)
> @@ -237,10 +230,8 @@ static int amdgpu_gem_begin_cpu_access(struct dma_buf *dma_buf,
>  }
>  
>  static const struct dma_buf_ops amdgpu_dmabuf_ops = {
> -	.attach = amdgpu_gem_map_attach,
> -	.detach = amdgpu_gem_map_detach,
> -	.map_dma_buf = drm_gem_map_dma_buf,
> -	.unmap_dma_buf = drm_gem_unmap_dma_buf,
> +	.map_dma_buf = amdgpu_gem_map_dma_buf,
> +	.unmap_dma_buf = amdgpu_gem_unmap_dma_buf,
>  	.release = drm_gem_dmabuf_release,
>  	.begin_cpu_access = amdgpu_gem_begin_cpu_access,
>  	.map = drm_gem_dmabuf_kmap,
> -- 
> 2.14.1
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 3/5] dma-buf: lock the reservation object during (un)map_dma_buf
@ 2018-06-18 12:43       ` Christian König
  0 siblings, 0 replies; 58+ messages in thread
From: Christian König @ 2018-06-18 12:43 UTC (permalink / raw)
  To: Daniel Vetter; +Cc: linaro-mm-sig, linux-media, dri-devel, amd-gfx

Am 18.06.2018 um 10:22 schrieb Daniel Vetter:
> On Fri, Jun 01, 2018 at 02:00:18PM +0200, Christian König wrote:
>> First step towards unpinned DMA buf operation.
>>
>> I've checked the DRM drivers to potential locking of the reservation
>> object, but essentially we need to audit all implementations of the
>> dma_buf _ops for this to work.
>>
>> Signed-off-by: Christian König <christian.koenig@amd.com>
> Agreed in principle, but I expect a fireworks show with just this patch
> applied. It's not just that we need to audit all the implementations of
> dma-buf-ops, we also need to audit all the callers.

Ah, yeah of course a good point.

> No idea yet how to go about merging this, but for a start might be good to
> throw this at the intel-gfx CI (just Cc: the intel-gfx mailing lists, but
> make sure your series applies without amd-staging-next stuff which isn't
> in drm.git yet).

Ok, going to incorporate all your other comments as well and then send 
the next round of this with CCing intel-gfx as well.

Thanks for the review,
Christian.

> -Daniel
>
>> ---
>>   drivers/dma-buf/dma-buf.c | 4 ++++
>>   include/linux/dma-buf.h   | 4 ++++
>>   2 files changed, 8 insertions(+)
>>
>> diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
>> index e4c657d9fad7..4f0708cb58a7 100644
>> --- a/drivers/dma-buf/dma-buf.c
>> +++ b/drivers/dma-buf/dma-buf.c
>> @@ -631,7 +631,9 @@ struct sg_table *dma_buf_map_attachment(struct dma_buf_attachment *attach,
>>   	if (WARN_ON(!attach || !attach->dmabuf))
>>   		return ERR_PTR(-EINVAL);
>>   
>> +	reservation_object_lock(attach->dmabuf->resv, NULL);
>>   	sg_table = attach->dmabuf->ops->map_dma_buf(attach, direction);
>> +	reservation_object_unlock(attach->dmabuf->resv);
>>   	if (!sg_table)
>>   		sg_table = ERR_PTR(-ENOMEM);
>>   
>> @@ -658,8 +660,10 @@ void dma_buf_unmap_attachment(struct dma_buf_attachment *attach,
>>   	if (WARN_ON(!attach || !attach->dmabuf || !sg_table))
>>   		return;
>>   
>> +	reservation_object_lock(attach->dmabuf->resv, NULL);
>>   	attach->dmabuf->ops->unmap_dma_buf(attach, sg_table,
>>   						direction);
>> +	reservation_object_unlock(attach->dmabuf->resv);
>>   }
>>   EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment);
>>   
>> diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
>> index d17cadd76802..d2ba7a027a78 100644
>> --- a/include/linux/dma-buf.h
>> +++ b/include/linux/dma-buf.h
>> @@ -118,6 +118,8 @@ struct dma_buf_ops {
>>   	 * any other kind of sharing that the exporter might wish to make
>>   	 * available to buffer-users.
>>   	 *
>> +	 * This is called with the dmabuf->resv object locked.
>> +	 *
>>   	 * Returns:
>>   	 *
>>   	 * A &sg_table scatter list of or the backing storage of the DMA buffer,
>> @@ -138,6 +140,8 @@ struct dma_buf_ops {
>>   	 * It should also unpin the backing storage if this is the last mapping
>>   	 * of the DMA buffer, it the exporter supports backing storage
>>   	 * migration.
>> +	 *
>> +	 * This is called with the dmabuf->resv object locked.
>>   	 */
>>   	void (*unmap_dma_buf)(struct dma_buf_attachment *,
>>   			      struct sg_table *,
>> -- 
>> 2.14.1
>>
>> _______________________________________________
>> dri-devel mailing list
>> dri-devel@lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 3/5] dma-buf: lock the reservation object during (un)map_dma_buf
@ 2018-06-18 12:43       ` Christian König
  0 siblings, 0 replies; 58+ messages in thread
From: Christian König @ 2018-06-18 12:43 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw,
	amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	linux-media-u79uwXL29TY76Z2rM5mHXA

Am 18.06.2018 um 10:22 schrieb Daniel Vetter:
> On Fri, Jun 01, 2018 at 02:00:18PM +0200, Christian König wrote:
>> First step towards unpinned DMA buf operation.
>>
>> I've checked the DRM drivers to potential locking of the reservation
>> object, but essentially we need to audit all implementations of the
>> dma_buf _ops for this to work.
>>
>> Signed-off-by: Christian König <christian.koenig@amd.com>
> Agreed in principle, but I expect a fireworks show with just this patch
> applied. It's not just that we need to audit all the implementations of
> dma-buf-ops, we also need to audit all the callers.

Ah, yeah of course a good point.

> No idea yet how to go about merging this, but for a start might be good to
> throw this at the intel-gfx CI (just Cc: the intel-gfx mailing lists, but
> make sure your series applies without amd-staging-next stuff which isn't
> in drm.git yet).

Ok, going to incorporate all your other comments as well and then send 
the next round of this with CCing intel-gfx as well.

Thanks for the review,
Christian.

> -Daniel
>
>> ---
>>   drivers/dma-buf/dma-buf.c | 4 ++++
>>   include/linux/dma-buf.h   | 4 ++++
>>   2 files changed, 8 insertions(+)
>>
>> diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
>> index e4c657d9fad7..4f0708cb58a7 100644
>> --- a/drivers/dma-buf/dma-buf.c
>> +++ b/drivers/dma-buf/dma-buf.c
>> @@ -631,7 +631,9 @@ struct sg_table *dma_buf_map_attachment(struct dma_buf_attachment *attach,
>>   	if (WARN_ON(!attach || !attach->dmabuf))
>>   		return ERR_PTR(-EINVAL);
>>   
>> +	reservation_object_lock(attach->dmabuf->resv, NULL);
>>   	sg_table = attach->dmabuf->ops->map_dma_buf(attach, direction);
>> +	reservation_object_unlock(attach->dmabuf->resv);
>>   	if (!sg_table)
>>   		sg_table = ERR_PTR(-ENOMEM);
>>   
>> @@ -658,8 +660,10 @@ void dma_buf_unmap_attachment(struct dma_buf_attachment *attach,
>>   	if (WARN_ON(!attach || !attach->dmabuf || !sg_table))
>>   		return;
>>   
>> +	reservation_object_lock(attach->dmabuf->resv, NULL);
>>   	attach->dmabuf->ops->unmap_dma_buf(attach, sg_table,
>>   						direction);
>> +	reservation_object_unlock(attach->dmabuf->resv);
>>   }
>>   EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment);
>>   
>> diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
>> index d17cadd76802..d2ba7a027a78 100644
>> --- a/include/linux/dma-buf.h
>> +++ b/include/linux/dma-buf.h
>> @@ -118,6 +118,8 @@ struct dma_buf_ops {
>>   	 * any other kind of sharing that the exporter might wish to make
>>   	 * available to buffer-users.
>>   	 *
>> +	 * This is called with the dmabuf->resv object locked.
>> +	 *
>>   	 * Returns:
>>   	 *
>>   	 * A &sg_table scatter list of or the backing storage of the DMA buffer,
>> @@ -138,6 +140,8 @@ struct dma_buf_ops {
>>   	 * It should also unpin the backing storage if this is the last mapping
>>   	 * of the DMA buffer, it the exporter supports backing storage
>>   	 * migration.
>> +	 *
>> +	 * This is called with the dmabuf->resv object locked.
>>   	 */
>>   	void (*unmap_dma_buf)(struct dma_buf_attachment *,
>>   			      struct sg_table *,
>> -- 
>> 2.14.1
>>
>> _______________________________________________
>> dri-devel mailing list
>> dri-devel@lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/dri-devel

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 2/5] dma-buf: remove kmap_atomic interface
  2018-06-18  8:18     ` Daniel Vetter
@ 2018-06-19 14:47       ` Christian König
  -1 siblings, 0 replies; 58+ messages in thread
From: Christian König @ 2018-06-19 14:47 UTC (permalink / raw)
  To: Daniel Vetter; +Cc: linaro-mm-sig, linux-media, dri-devel, amd-gfx

Am 18.06.2018 um 10:18 schrieb Daniel Vetter:
> On Fri, Jun 01, 2018 at 02:00:17PM +0200, Christian König wrote:
>> Neither used nor correctly implemented anywhere. Just completely remove
>> the interface.
>>
>> Signed-off-by: Christian König <christian.koenig@amd.com>
> I wonder whether we can nuke the normal kmap stuff too ... everyone seems
> to want/use the vmap stuff for kernel-internal mapping needs.
>
> Anyway, this looks good.
>> ---
>>   drivers/dma-buf/dma-buf.c                          | 44 ----------------------
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c          |  2 -
>>   drivers/gpu/drm/armada/armada_gem.c                |  2 -
>>   drivers/gpu/drm/drm_prime.c                        | 26 -------------
>>   drivers/gpu/drm/i915/i915_gem_dmabuf.c             | 11 ------
>>   drivers/gpu/drm/i915/selftests/mock_dmabuf.c       |  2 -
>>   drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c          |  2 -
>>   drivers/gpu/drm/tegra/gem.c                        | 14 -------
>>   drivers/gpu/drm/udl/udl_dmabuf.c                   | 17 ---------
>>   drivers/gpu/drm/vmwgfx/vmwgfx_prime.c              | 13 -------
>>   .../media/common/videobuf2/videobuf2-dma-contig.c  |  1 -
>>   drivers/media/common/videobuf2/videobuf2-dma-sg.c  |  1 -
>>   drivers/media/common/videobuf2/videobuf2-vmalloc.c |  1 -
>>   drivers/staging/android/ion/ion.c                  |  2 -
>>   drivers/tee/tee_shm.c                              |  6 ---
>>   include/drm/drm_prime.h                            |  4 --
>>   include/linux/dma-buf.h                            |  4 --
>>   17 files changed, 152 deletions(-)
>>
>> diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
>> index e99a8d19991b..e4c657d9fad7 100644
>> --- a/drivers/dma-buf/dma-buf.c
>> +++ b/drivers/dma-buf/dma-buf.c
>> @@ -405,7 +405,6 @@ struct dma_buf *dma_buf_export(const struct dma_buf_export_info *exp_info)
>>   			  || !exp_info->ops->map_dma_buf
>>   			  || !exp_info->ops->unmap_dma_buf
>>   			  || !exp_info->ops->release
>> -			  || !exp_info->ops->map_atomic
>>   			  || !exp_info->ops->map
>>   			  || !exp_info->ops->mmap)) {
>>   		return ERR_PTR(-EINVAL);
>> @@ -687,14 +686,6 @@ EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment);
>>    *      void \*dma_buf_kmap(struct dma_buf \*, unsigned long);
>>    *      void dma_buf_kunmap(struct dma_buf \*, unsigned long, void \*);
>>    *
>> - *   There are also atomic variants of these interfaces. Like for kmap they
>> - *   facilitate non-blocking fast-paths. Neither the importer nor the exporter
>> - *   (in the callback) is allowed to block when using these.
>> - *
>> - *   Interfaces::
>> - *      void \*dma_buf_kmap_atomic(struct dma_buf \*, unsigned long);
>> - *      void dma_buf_kunmap_atomic(struct dma_buf \*, unsigned long, void \*);
>> - *
>>    *   For importers all the restrictions of using kmap apply, like the limited
>>    *   supply of kmap_atomic slots. Hence an importer shall only hold onto at
>>    *   max 2 atomic dma_buf kmaps at the same time (in any given process context).
> This is also about atomic kmap ...
>
> And the subsequent language around "Note that these calls need to always
> succeed." is also not true, might be good to update that stating that kmap
> is optional (like we say already for vmap).
>
> With those docs nits addressed:
>
> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>

I've fixed up patch #1 and #2 and added your Reviewed-by tag.

Since I finally had time to install dim do you have any objections that 
I now run "dim push drm-misc-next" with those two applied?

Regards,
Christian.

>
>> @@ -859,41 +850,6 @@ int dma_buf_end_cpu_access(struct dma_buf *dmabuf,
>>   }
>>   EXPORT_SYMBOL_GPL(dma_buf_end_cpu_access);
>>   
>> -/**
>> - * dma_buf_kmap_atomic - Map a page of the buffer object into kernel address
>> - * space. The same restrictions as for kmap_atomic and friends apply.
>> - * @dmabuf:	[in]	buffer to map page from.
>> - * @page_num:	[in]	page in PAGE_SIZE units to map.
>> - *
>> - * This call must always succeed, any necessary preparations that might fail
>> - * need to be done in begin_cpu_access.
>> - */
>> -void *dma_buf_kmap_atomic(struct dma_buf *dmabuf, unsigned long page_num)
>> -{
>> -	WARN_ON(!dmabuf);
>> -
>> -	return dmabuf->ops->map_atomic(dmabuf, page_num);
>> -}
>> -EXPORT_SYMBOL_GPL(dma_buf_kmap_atomic);
>> -
>> -/**
>> - * dma_buf_kunmap_atomic - Unmap a page obtained by dma_buf_kmap_atomic.
>> - * @dmabuf:	[in]	buffer to unmap page from.
>> - * @page_num:	[in]	page in PAGE_SIZE units to unmap.
>> - * @vaddr:	[in]	kernel space pointer obtained from dma_buf_kmap_atomic.
>> - *
>> - * This call must always succeed.
>> - */
>> -void dma_buf_kunmap_atomic(struct dma_buf *dmabuf, unsigned long page_num,
>> -			   void *vaddr)
>> -{
>> -	WARN_ON(!dmabuf);
>> -
>> -	if (dmabuf->ops->unmap_atomic)
>> -		dmabuf->ops->unmap_atomic(dmabuf, page_num, vaddr);
>> -}
>> -EXPORT_SYMBOL_GPL(dma_buf_kunmap_atomic);
>> -
>>   /**
>>    * dma_buf_kmap - Map a page of the buffer object into kernel address space. The
>>    * same restrictions as for kmap and friends apply.
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>> index f1500f1ec0f5..a156b3891a3f 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>> @@ -244,9 +244,7 @@ static const struct dma_buf_ops amdgpu_dmabuf_ops = {
>>   	.release = drm_gem_dmabuf_release,
>>   	.begin_cpu_access = amdgpu_gem_begin_cpu_access,
>>   	.map = drm_gem_dmabuf_kmap,
>> -	.map_atomic = drm_gem_dmabuf_kmap_atomic,
>>   	.unmap = drm_gem_dmabuf_kunmap,
>> -	.unmap_atomic = drm_gem_dmabuf_kunmap_atomic,
>>   	.mmap = drm_gem_dmabuf_mmap,
>>   	.vmap = drm_gem_dmabuf_vmap,
>>   	.vunmap = drm_gem_dmabuf_vunmap,
>> diff --git a/drivers/gpu/drm/armada/armada_gem.c b/drivers/gpu/drm/armada/armada_gem.c
>> index a97f509743a5..3fb37c75c065 100644
>> --- a/drivers/gpu/drm/armada/armada_gem.c
>> +++ b/drivers/gpu/drm/armada/armada_gem.c
>> @@ -490,8 +490,6 @@ static const struct dma_buf_ops armada_gem_prime_dmabuf_ops = {
>>   	.map_dma_buf	= armada_gem_prime_map_dma_buf,
>>   	.unmap_dma_buf	= armada_gem_prime_unmap_dma_buf,
>>   	.release	= drm_gem_dmabuf_release,
>> -	.map_atomic	= armada_gem_dmabuf_no_kmap,
>> -	.unmap_atomic	= armada_gem_dmabuf_no_kunmap,
>>   	.map		= armada_gem_dmabuf_no_kmap,
>>   	.unmap		= armada_gem_dmabuf_no_kunmap,
>>   	.mmap		= armada_gem_dmabuf_mmap,
>> diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
>> index 4a3a232fea67..b28fa8f44c8b 100644
>> --- a/drivers/gpu/drm/drm_prime.c
>> +++ b/drivers/gpu/drm/drm_prime.c
>> @@ -426,30 +426,6 @@ void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr)
>>   }
>>   EXPORT_SYMBOL(drm_gem_dmabuf_vunmap);
>>   
>> -/**
>> - * drm_gem_dmabuf_kmap_atomic - map_atomic implementation for GEM
>> - *
>> - * Not implemented. This can be used as the &dma_buf_ops.map_atomic callback.
>> - */
>> -void *drm_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>> -				 unsigned long page_num)
>> -{
>> -	return NULL;
>> -}
>> -EXPORT_SYMBOL(drm_gem_dmabuf_kmap_atomic);
>> -
>> -/**
>> - * drm_gem_dmabuf_kunmap_atomic - unmap_atomic implementation for GEM
>> - *
>> - * Not implemented. This can be used as the &dma_buf_ops.unmap_atomic callback.
>> - */
>> -void drm_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>> -				  unsigned long page_num, void *addr)
>> -{
>> -
>> -}
>> -EXPORT_SYMBOL(drm_gem_dmabuf_kunmap_atomic);
>> -
>>   /**
>>    * drm_gem_dmabuf_kmap - map implementation for GEM
>>    *
>> @@ -502,9 +478,7 @@ static const struct dma_buf_ops drm_gem_prime_dmabuf_ops =  {
>>   	.unmap_dma_buf = drm_gem_unmap_dma_buf,
>>   	.release = drm_gem_dmabuf_release,
>>   	.map = drm_gem_dmabuf_kmap,
>> -	.map_atomic = drm_gem_dmabuf_kmap_atomic,
>>   	.unmap = drm_gem_dmabuf_kunmap,
>> -	.unmap_atomic = drm_gem_dmabuf_kunmap_atomic,
>>   	.mmap = drm_gem_dmabuf_mmap,
>>   	.vmap = drm_gem_dmabuf_vmap,
>>   	.vunmap = drm_gem_dmabuf_vunmap,
>> diff --git a/drivers/gpu/drm/i915/i915_gem_dmabuf.c b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>> index 69a7aec49e84..82e2ca17a441 100644
>> --- a/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>> +++ b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>> @@ -111,15 +111,6 @@ static void i915_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr)
>>   	i915_gem_object_unpin_map(obj);
>>   }
>>   
>> -static void *i915_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf, unsigned long page_num)
>> -{
>> -	return NULL;
>> -}
>> -
>> -static void i915_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf, unsigned long page_num, void *addr)
>> -{
>> -
>> -}
>>   static void *i915_gem_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long page_num)
>>   {
>>   	struct drm_i915_gem_object *obj = dma_buf_to_obj(dma_buf);
>> @@ -225,9 +216,7 @@ static const struct dma_buf_ops i915_dmabuf_ops =  {
>>   	.unmap_dma_buf = i915_gem_unmap_dma_buf,
>>   	.release = drm_gem_dmabuf_release,
>>   	.map = i915_gem_dmabuf_kmap,
>> -	.map_atomic = i915_gem_dmabuf_kmap_atomic,
>>   	.unmap = i915_gem_dmabuf_kunmap,
>> -	.unmap_atomic = i915_gem_dmabuf_kunmap_atomic,
>>   	.mmap = i915_gem_dmabuf_mmap,
>>   	.vmap = i915_gem_dmabuf_vmap,
>>   	.vunmap = i915_gem_dmabuf_vunmap,
>> diff --git a/drivers/gpu/drm/i915/selftests/mock_dmabuf.c b/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>> index 302f7d103635..f81fda8ea45e 100644
>> --- a/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>> +++ b/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>> @@ -130,9 +130,7 @@ static const struct dma_buf_ops mock_dmabuf_ops =  {
>>   	.unmap_dma_buf = mock_unmap_dma_buf,
>>   	.release = mock_dmabuf_release,
>>   	.map = mock_dmabuf_kmap,
>> -	.map_atomic = mock_dmabuf_kmap_atomic,
>>   	.unmap = mock_dmabuf_kunmap,
>> -	.unmap_atomic = mock_dmabuf_kunmap_atomic,
>>   	.mmap = mock_dmabuf_mmap,
>>   	.vmap = mock_dmabuf_vmap,
>>   	.vunmap = mock_dmabuf_vunmap,
>> diff --git a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>> index 8e41d649e248..1a073f9b2834 100644
>> --- a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>> +++ b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>> @@ -148,8 +148,6 @@ static const struct dma_buf_ops omap_dmabuf_ops = {
>>   	.release = drm_gem_dmabuf_release,
>>   	.begin_cpu_access = omap_gem_dmabuf_begin_cpu_access,
>>   	.end_cpu_access = omap_gem_dmabuf_end_cpu_access,
>> -	.map_atomic = omap_gem_dmabuf_kmap_atomic,
>> -	.unmap_atomic = omap_gem_dmabuf_kunmap_atomic,
>>   	.map = omap_gem_dmabuf_kmap,
>>   	.unmap = omap_gem_dmabuf_kunmap,
>>   	.mmap = omap_gem_dmabuf_mmap,
>> diff --git a/drivers/gpu/drm/tegra/gem.c b/drivers/gpu/drm/tegra/gem.c
>> index 8b0b4ff64bb4..d7661702c11c 100644
>> --- a/drivers/gpu/drm/tegra/gem.c
>> +++ b/drivers/gpu/drm/tegra/gem.c
>> @@ -596,18 +596,6 @@ static int tegra_gem_prime_end_cpu_access(struct dma_buf *buf,
>>   	return 0;
>>   }
>>   
>> -static void *tegra_gem_prime_kmap_atomic(struct dma_buf *buf,
>> -					 unsigned long page)
>> -{
>> -	return NULL;
>> -}
>> -
>> -static void tegra_gem_prime_kunmap_atomic(struct dma_buf *buf,
>> -					  unsigned long page,
>> -					  void *addr)
>> -{
>> -}
>> -
>>   static void *tegra_gem_prime_kmap(struct dma_buf *buf, unsigned long page)
>>   {
>>   	return NULL;
>> @@ -648,8 +636,6 @@ static const struct dma_buf_ops tegra_gem_prime_dmabuf_ops = {
>>   	.release = tegra_gem_prime_release,
>>   	.begin_cpu_access = tegra_gem_prime_begin_cpu_access,
>>   	.end_cpu_access = tegra_gem_prime_end_cpu_access,
>> -	.map_atomic = tegra_gem_prime_kmap_atomic,
>> -	.unmap_atomic = tegra_gem_prime_kunmap_atomic,
>>   	.map = tegra_gem_prime_kmap,
>>   	.unmap = tegra_gem_prime_kunmap,
>>   	.mmap = tegra_gem_prime_mmap,
>> diff --git a/drivers/gpu/drm/udl/udl_dmabuf.c b/drivers/gpu/drm/udl/udl_dmabuf.c
>> index 5fdc8bdc2026..ae7225dedc30 100644
>> --- a/drivers/gpu/drm/udl/udl_dmabuf.c
>> +++ b/drivers/gpu/drm/udl/udl_dmabuf.c
>> @@ -156,27 +156,12 @@ static void *udl_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long page_num)
>>   	return NULL;
>>   }
>>   
>> -static void *udl_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>> -				    unsigned long page_num)
>> -{
>> -	/* TODO */
>> -
>> -	return NULL;
>> -}
>> -
>>   static void udl_dmabuf_kunmap(struct dma_buf *dma_buf,
>>   			      unsigned long page_num, void *addr)
>>   {
>>   	/* TODO */
>>   }
>>   
>> -static void udl_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>> -				     unsigned long page_num,
>> -				     void *addr)
>> -{
>> -	/* TODO */
>> -}
>> -
>>   static int udl_dmabuf_mmap(struct dma_buf *dma_buf,
>>   			   struct vm_area_struct *vma)
>>   {
>> @@ -191,9 +176,7 @@ static const struct dma_buf_ops udl_dmabuf_ops = {
>>   	.map_dma_buf		= udl_map_dma_buf,
>>   	.unmap_dma_buf		= udl_unmap_dma_buf,
>>   	.map			= udl_dmabuf_kmap,
>> -	.map_atomic		= udl_dmabuf_kmap_atomic,
>>   	.unmap			= udl_dmabuf_kunmap,
>> -	.unmap_atomic		= udl_dmabuf_kunmap_atomic,
>>   	.mmap			= udl_dmabuf_mmap,
>>   	.release		= drm_gem_dmabuf_release,
>>   };
>> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>> index fbffb37ccf42..373bc6da2f84 100644
>> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>> @@ -71,17 +71,6 @@ static void vmw_prime_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr)
>>   {
>>   }
>>   
>> -static void *vmw_prime_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>> -		unsigned long page_num)
>> -{
>> -	return NULL;
>> -}
>> -
>> -static void vmw_prime_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>> -		unsigned long page_num, void *addr)
>> -{
>> -
>> -}
>>   static void *vmw_prime_dmabuf_kmap(struct dma_buf *dma_buf,
>>   		unsigned long page_num)
>>   {
>> @@ -108,9 +97,7 @@ const struct dma_buf_ops vmw_prime_dmabuf_ops =  {
>>   	.unmap_dma_buf = vmw_prime_unmap_dma_buf,
>>   	.release = NULL,
>>   	.map = vmw_prime_dmabuf_kmap,
>> -	.map_atomic = vmw_prime_dmabuf_kmap_atomic,
>>   	.unmap = vmw_prime_dmabuf_kunmap,
>> -	.unmap_atomic = vmw_prime_dmabuf_kunmap_atomic,
>>   	.mmap = vmw_prime_dmabuf_mmap,
>>   	.vmap = vmw_prime_dmabuf_vmap,
>>   	.vunmap = vmw_prime_dmabuf_vunmap,
>> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-contig.c b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>> index 12d0072c52c2..aff0ab7bf83d 100644
>> --- a/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>> +++ b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>> @@ -358,7 +358,6 @@ static const struct dma_buf_ops vb2_dc_dmabuf_ops = {
>>   	.map_dma_buf = vb2_dc_dmabuf_ops_map,
>>   	.unmap_dma_buf = vb2_dc_dmabuf_ops_unmap,
>>   	.map = vb2_dc_dmabuf_ops_kmap,
>> -	.map_atomic = vb2_dc_dmabuf_ops_kmap,
>>   	.vmap = vb2_dc_dmabuf_ops_vmap,
>>   	.mmap = vb2_dc_dmabuf_ops_mmap,
>>   	.release = vb2_dc_dmabuf_ops_release,
>> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-sg.c b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>> index cf94765e593f..015e737095cd 100644
>> --- a/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>> +++ b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>> @@ -507,7 +507,6 @@ static const struct dma_buf_ops vb2_dma_sg_dmabuf_ops = {
>>   	.map_dma_buf = vb2_dma_sg_dmabuf_ops_map,
>>   	.unmap_dma_buf = vb2_dma_sg_dmabuf_ops_unmap,
>>   	.map = vb2_dma_sg_dmabuf_ops_kmap,
>> -	.map_atomic = vb2_dma_sg_dmabuf_ops_kmap,
>>   	.vmap = vb2_dma_sg_dmabuf_ops_vmap,
>>   	.mmap = vb2_dma_sg_dmabuf_ops_mmap,
>>   	.release = vb2_dma_sg_dmabuf_ops_release,
>> diff --git a/drivers/media/common/videobuf2/videobuf2-vmalloc.c b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>> index 298ffb9ecdae..467a4005164b 100644
>> --- a/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>> +++ b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>> @@ -346,7 +346,6 @@ static const struct dma_buf_ops vb2_vmalloc_dmabuf_ops = {
>>   	.map_dma_buf = vb2_vmalloc_dmabuf_ops_map,
>>   	.unmap_dma_buf = vb2_vmalloc_dmabuf_ops_unmap,
>>   	.map = vb2_vmalloc_dmabuf_ops_kmap,
>> -	.map_atomic = vb2_vmalloc_dmabuf_ops_kmap,
>>   	.vmap = vb2_vmalloc_dmabuf_ops_vmap,
>>   	.mmap = vb2_vmalloc_dmabuf_ops_mmap,
>>   	.release = vb2_vmalloc_dmabuf_ops_release,
>> diff --git a/drivers/staging/android/ion/ion.c b/drivers/staging/android/ion/ion.c
>> index 57e0d8035b2e..a46219ff5e16 100644
>> --- a/drivers/staging/android/ion/ion.c
>> +++ b/drivers/staging/android/ion/ion.c
>> @@ -374,8 +374,6 @@ static const struct dma_buf_ops dma_buf_ops = {
>>   	.detach = ion_dma_buf_detatch,
>>   	.begin_cpu_access = ion_dma_buf_begin_cpu_access,
>>   	.end_cpu_access = ion_dma_buf_end_cpu_access,
>> -	.map_atomic = ion_dma_buf_kmap,
>> -	.unmap_atomic = ion_dma_buf_kunmap,
>>   	.map = ion_dma_buf_kmap,
>>   	.unmap = ion_dma_buf_kunmap,
>>   };
>> diff --git a/drivers/tee/tee_shm.c b/drivers/tee/tee_shm.c
>> index 556960a1bab3..df4a1553b78b 100644
>> --- a/drivers/tee/tee_shm.c
>> +++ b/drivers/tee/tee_shm.c
>> @@ -80,11 +80,6 @@ static void tee_shm_op_release(struct dma_buf *dmabuf)
>>   	tee_shm_release(shm);
>>   }
>>   
>> -static void *tee_shm_op_map_atomic(struct dma_buf *dmabuf, unsigned long pgnum)
>> -{
>> -	return NULL;
>> -}
>> -
>>   static void *tee_shm_op_map(struct dma_buf *dmabuf, unsigned long pgnum)
>>   {
>>   	return NULL;
>> @@ -107,7 +102,6 @@ static const struct dma_buf_ops tee_shm_dma_buf_ops = {
>>   	.map_dma_buf = tee_shm_op_map_dma_buf,
>>   	.unmap_dma_buf = tee_shm_op_unmap_dma_buf,
>>   	.release = tee_shm_op_release,
>> -	.map_atomic = tee_shm_op_map_atomic,
>>   	.map = tee_shm_op_map,
>>   	.mmap = tee_shm_op_mmap,
>>   };
>> diff --git a/include/drm/drm_prime.h b/include/drm/drm_prime.h
>> index ef338151cea8..d716d653b096 100644
>> --- a/include/drm/drm_prime.h
>> +++ b/include/drm/drm_prime.h
>> @@ -93,10 +93,6 @@ void drm_gem_unmap_dma_buf(struct dma_buf_attachment *attach,
>>   			   enum dma_data_direction dir);
>>   void *drm_gem_dmabuf_vmap(struct dma_buf *dma_buf);
>>   void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr);
>> -void *drm_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>> -				 unsigned long page_num);
>> -void drm_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>> -				  unsigned long page_num, void *addr);
>>   void *drm_gem_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long page_num);
>>   void drm_gem_dmabuf_kunmap(struct dma_buf *dma_buf, unsigned long page_num,
>>   			   void *addr);
>> diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
>> index 346caf77937f..d17cadd76802 100644
>> --- a/include/linux/dma-buf.h
>> +++ b/include/linux/dma-buf.h
>> @@ -205,8 +205,6 @@ struct dma_buf_ops {
>>   	 * to be restarted.
>>   	 */
>>   	int (*end_cpu_access)(struct dma_buf *, enum dma_data_direction);
>> -	void *(*map_atomic)(struct dma_buf *, unsigned long);
>> -	void (*unmap_atomic)(struct dma_buf *, unsigned long, void *);
>>   	void *(*map)(struct dma_buf *, unsigned long);
>>   	void (*unmap)(struct dma_buf *, unsigned long, void *);
>>   
>> @@ -394,8 +392,6 @@ int dma_buf_begin_cpu_access(struct dma_buf *dma_buf,
>>   			     enum dma_data_direction dir);
>>   int dma_buf_end_cpu_access(struct dma_buf *dma_buf,
>>   			   enum dma_data_direction dir);
>> -void *dma_buf_kmap_atomic(struct dma_buf *, unsigned long);
>> -void dma_buf_kunmap_atomic(struct dma_buf *, unsigned long, void *);
>>   void *dma_buf_kmap(struct dma_buf *, unsigned long);
>>   void dma_buf_kunmap(struct dma_buf *, unsigned long, void *);
>>   
>> -- 
>> 2.14.1
>>
>> _______________________________________________
>> dri-devel mailing list
>> dri-devel@lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 2/5] dma-buf: remove kmap_atomic interface
@ 2018-06-19 14:47       ` Christian König
  0 siblings, 0 replies; 58+ messages in thread
From: Christian König @ 2018-06-19 14:47 UTC (permalink / raw)
  To: Daniel Vetter; +Cc: linaro-mm-sig, amd-gfx, dri-devel, linux-media

Am 18.06.2018 um 10:18 schrieb Daniel Vetter:
> On Fri, Jun 01, 2018 at 02:00:17PM +0200, Christian König wrote:
>> Neither used nor correctly implemented anywhere. Just completely remove
>> the interface.
>>
>> Signed-off-by: Christian König <christian.koenig@amd.com>
> I wonder whether we can nuke the normal kmap stuff too ... everyone seems
> to want/use the vmap stuff for kernel-internal mapping needs.
>
> Anyway, this looks good.
>> ---
>>   drivers/dma-buf/dma-buf.c                          | 44 ----------------------
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c          |  2 -
>>   drivers/gpu/drm/armada/armada_gem.c                |  2 -
>>   drivers/gpu/drm/drm_prime.c                        | 26 -------------
>>   drivers/gpu/drm/i915/i915_gem_dmabuf.c             | 11 ------
>>   drivers/gpu/drm/i915/selftests/mock_dmabuf.c       |  2 -
>>   drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c          |  2 -
>>   drivers/gpu/drm/tegra/gem.c                        | 14 -------
>>   drivers/gpu/drm/udl/udl_dmabuf.c                   | 17 ---------
>>   drivers/gpu/drm/vmwgfx/vmwgfx_prime.c              | 13 -------
>>   .../media/common/videobuf2/videobuf2-dma-contig.c  |  1 -
>>   drivers/media/common/videobuf2/videobuf2-dma-sg.c  |  1 -
>>   drivers/media/common/videobuf2/videobuf2-vmalloc.c |  1 -
>>   drivers/staging/android/ion/ion.c                  |  2 -
>>   drivers/tee/tee_shm.c                              |  6 ---
>>   include/drm/drm_prime.h                            |  4 --
>>   include/linux/dma-buf.h                            |  4 --
>>   17 files changed, 152 deletions(-)
>>
>> diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
>> index e99a8d19991b..e4c657d9fad7 100644
>> --- a/drivers/dma-buf/dma-buf.c
>> +++ b/drivers/dma-buf/dma-buf.c
>> @@ -405,7 +405,6 @@ struct dma_buf *dma_buf_export(const struct dma_buf_export_info *exp_info)
>>   			  || !exp_info->ops->map_dma_buf
>>   			  || !exp_info->ops->unmap_dma_buf
>>   			  || !exp_info->ops->release
>> -			  || !exp_info->ops->map_atomic
>>   			  || !exp_info->ops->map
>>   			  || !exp_info->ops->mmap)) {
>>   		return ERR_PTR(-EINVAL);
>> @@ -687,14 +686,6 @@ EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment);
>>    *      void \*dma_buf_kmap(struct dma_buf \*, unsigned long);
>>    *      void dma_buf_kunmap(struct dma_buf \*, unsigned long, void \*);
>>    *
>> - *   There are also atomic variants of these interfaces. Like for kmap they
>> - *   facilitate non-blocking fast-paths. Neither the importer nor the exporter
>> - *   (in the callback) is allowed to block when using these.
>> - *
>> - *   Interfaces::
>> - *      void \*dma_buf_kmap_atomic(struct dma_buf \*, unsigned long);
>> - *      void dma_buf_kunmap_atomic(struct dma_buf \*, unsigned long, void \*);
>> - *
>>    *   For importers all the restrictions of using kmap apply, like the limited
>>    *   supply of kmap_atomic slots. Hence an importer shall only hold onto at
>>    *   max 2 atomic dma_buf kmaps at the same time (in any given process context).
> This is also about atomic kmap ...
>
> And the subsequent language around "Note that these calls need to always
> succeed." is also not true, might be good to update that stating that kmap
> is optional (like we say already for vmap).
>
> With those docs nits addressed:
>
> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>

I've fixed up patch #1 and #2 and added your Reviewed-by tag.

Since I finally had time to install dim do you have any objections that 
I now run "dim push drm-misc-next" with those two applied?

Regards,
Christian.

>
>> @@ -859,41 +850,6 @@ int dma_buf_end_cpu_access(struct dma_buf *dmabuf,
>>   }
>>   EXPORT_SYMBOL_GPL(dma_buf_end_cpu_access);
>>   
>> -/**
>> - * dma_buf_kmap_atomic - Map a page of the buffer object into kernel address
>> - * space. The same restrictions as for kmap_atomic and friends apply.
>> - * @dmabuf:	[in]	buffer to map page from.
>> - * @page_num:	[in]	page in PAGE_SIZE units to map.
>> - *
>> - * This call must always succeed, any necessary preparations that might fail
>> - * need to be done in begin_cpu_access.
>> - */
>> -void *dma_buf_kmap_atomic(struct dma_buf *dmabuf, unsigned long page_num)
>> -{
>> -	WARN_ON(!dmabuf);
>> -
>> -	return dmabuf->ops->map_atomic(dmabuf, page_num);
>> -}
>> -EXPORT_SYMBOL_GPL(dma_buf_kmap_atomic);
>> -
>> -/**
>> - * dma_buf_kunmap_atomic - Unmap a page obtained by dma_buf_kmap_atomic.
>> - * @dmabuf:	[in]	buffer to unmap page from.
>> - * @page_num:	[in]	page in PAGE_SIZE units to unmap.
>> - * @vaddr:	[in]	kernel space pointer obtained from dma_buf_kmap_atomic.
>> - *
>> - * This call must always succeed.
>> - */
>> -void dma_buf_kunmap_atomic(struct dma_buf *dmabuf, unsigned long page_num,
>> -			   void *vaddr)
>> -{
>> -	WARN_ON(!dmabuf);
>> -
>> -	if (dmabuf->ops->unmap_atomic)
>> -		dmabuf->ops->unmap_atomic(dmabuf, page_num, vaddr);
>> -}
>> -EXPORT_SYMBOL_GPL(dma_buf_kunmap_atomic);
>> -
>>   /**
>>    * dma_buf_kmap - Map a page of the buffer object into kernel address space. The
>>    * same restrictions as for kmap and friends apply.
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>> index f1500f1ec0f5..a156b3891a3f 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>> @@ -244,9 +244,7 @@ static const struct dma_buf_ops amdgpu_dmabuf_ops = {
>>   	.release = drm_gem_dmabuf_release,
>>   	.begin_cpu_access = amdgpu_gem_begin_cpu_access,
>>   	.map = drm_gem_dmabuf_kmap,
>> -	.map_atomic = drm_gem_dmabuf_kmap_atomic,
>>   	.unmap = drm_gem_dmabuf_kunmap,
>> -	.unmap_atomic = drm_gem_dmabuf_kunmap_atomic,
>>   	.mmap = drm_gem_dmabuf_mmap,
>>   	.vmap = drm_gem_dmabuf_vmap,
>>   	.vunmap = drm_gem_dmabuf_vunmap,
>> diff --git a/drivers/gpu/drm/armada/armada_gem.c b/drivers/gpu/drm/armada/armada_gem.c
>> index a97f509743a5..3fb37c75c065 100644
>> --- a/drivers/gpu/drm/armada/armada_gem.c
>> +++ b/drivers/gpu/drm/armada/armada_gem.c
>> @@ -490,8 +490,6 @@ static const struct dma_buf_ops armada_gem_prime_dmabuf_ops = {
>>   	.map_dma_buf	= armada_gem_prime_map_dma_buf,
>>   	.unmap_dma_buf	= armada_gem_prime_unmap_dma_buf,
>>   	.release	= drm_gem_dmabuf_release,
>> -	.map_atomic	= armada_gem_dmabuf_no_kmap,
>> -	.unmap_atomic	= armada_gem_dmabuf_no_kunmap,
>>   	.map		= armada_gem_dmabuf_no_kmap,
>>   	.unmap		= armada_gem_dmabuf_no_kunmap,
>>   	.mmap		= armada_gem_dmabuf_mmap,
>> diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
>> index 4a3a232fea67..b28fa8f44c8b 100644
>> --- a/drivers/gpu/drm/drm_prime.c
>> +++ b/drivers/gpu/drm/drm_prime.c
>> @@ -426,30 +426,6 @@ void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr)
>>   }
>>   EXPORT_SYMBOL(drm_gem_dmabuf_vunmap);
>>   
>> -/**
>> - * drm_gem_dmabuf_kmap_atomic - map_atomic implementation for GEM
>> - *
>> - * Not implemented. This can be used as the &dma_buf_ops.map_atomic callback.
>> - */
>> -void *drm_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>> -				 unsigned long page_num)
>> -{
>> -	return NULL;
>> -}
>> -EXPORT_SYMBOL(drm_gem_dmabuf_kmap_atomic);
>> -
>> -/**
>> - * drm_gem_dmabuf_kunmap_atomic - unmap_atomic implementation for GEM
>> - *
>> - * Not implemented. This can be used as the &dma_buf_ops.unmap_atomic callback.
>> - */
>> -void drm_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>> -				  unsigned long page_num, void *addr)
>> -{
>> -
>> -}
>> -EXPORT_SYMBOL(drm_gem_dmabuf_kunmap_atomic);
>> -
>>   /**
>>    * drm_gem_dmabuf_kmap - map implementation for GEM
>>    *
>> @@ -502,9 +478,7 @@ static const struct dma_buf_ops drm_gem_prime_dmabuf_ops =  {
>>   	.unmap_dma_buf = drm_gem_unmap_dma_buf,
>>   	.release = drm_gem_dmabuf_release,
>>   	.map = drm_gem_dmabuf_kmap,
>> -	.map_atomic = drm_gem_dmabuf_kmap_atomic,
>>   	.unmap = drm_gem_dmabuf_kunmap,
>> -	.unmap_atomic = drm_gem_dmabuf_kunmap_atomic,
>>   	.mmap = drm_gem_dmabuf_mmap,
>>   	.vmap = drm_gem_dmabuf_vmap,
>>   	.vunmap = drm_gem_dmabuf_vunmap,
>> diff --git a/drivers/gpu/drm/i915/i915_gem_dmabuf.c b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>> index 69a7aec49e84..82e2ca17a441 100644
>> --- a/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>> +++ b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>> @@ -111,15 +111,6 @@ static void i915_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr)
>>   	i915_gem_object_unpin_map(obj);
>>   }
>>   
>> -static void *i915_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf, unsigned long page_num)
>> -{
>> -	return NULL;
>> -}
>> -
>> -static void i915_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf, unsigned long page_num, void *addr)
>> -{
>> -
>> -}
>>   static void *i915_gem_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long page_num)
>>   {
>>   	struct drm_i915_gem_object *obj = dma_buf_to_obj(dma_buf);
>> @@ -225,9 +216,7 @@ static const struct dma_buf_ops i915_dmabuf_ops =  {
>>   	.unmap_dma_buf = i915_gem_unmap_dma_buf,
>>   	.release = drm_gem_dmabuf_release,
>>   	.map = i915_gem_dmabuf_kmap,
>> -	.map_atomic = i915_gem_dmabuf_kmap_atomic,
>>   	.unmap = i915_gem_dmabuf_kunmap,
>> -	.unmap_atomic = i915_gem_dmabuf_kunmap_atomic,
>>   	.mmap = i915_gem_dmabuf_mmap,
>>   	.vmap = i915_gem_dmabuf_vmap,
>>   	.vunmap = i915_gem_dmabuf_vunmap,
>> diff --git a/drivers/gpu/drm/i915/selftests/mock_dmabuf.c b/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>> index 302f7d103635..f81fda8ea45e 100644
>> --- a/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>> +++ b/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>> @@ -130,9 +130,7 @@ static const struct dma_buf_ops mock_dmabuf_ops =  {
>>   	.unmap_dma_buf = mock_unmap_dma_buf,
>>   	.release = mock_dmabuf_release,
>>   	.map = mock_dmabuf_kmap,
>> -	.map_atomic = mock_dmabuf_kmap_atomic,
>>   	.unmap = mock_dmabuf_kunmap,
>> -	.unmap_atomic = mock_dmabuf_kunmap_atomic,
>>   	.mmap = mock_dmabuf_mmap,
>>   	.vmap = mock_dmabuf_vmap,
>>   	.vunmap = mock_dmabuf_vunmap,
>> diff --git a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>> index 8e41d649e248..1a073f9b2834 100644
>> --- a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>> +++ b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>> @@ -148,8 +148,6 @@ static const struct dma_buf_ops omap_dmabuf_ops = {
>>   	.release = drm_gem_dmabuf_release,
>>   	.begin_cpu_access = omap_gem_dmabuf_begin_cpu_access,
>>   	.end_cpu_access = omap_gem_dmabuf_end_cpu_access,
>> -	.map_atomic = omap_gem_dmabuf_kmap_atomic,
>> -	.unmap_atomic = omap_gem_dmabuf_kunmap_atomic,
>>   	.map = omap_gem_dmabuf_kmap,
>>   	.unmap = omap_gem_dmabuf_kunmap,
>>   	.mmap = omap_gem_dmabuf_mmap,
>> diff --git a/drivers/gpu/drm/tegra/gem.c b/drivers/gpu/drm/tegra/gem.c
>> index 8b0b4ff64bb4..d7661702c11c 100644
>> --- a/drivers/gpu/drm/tegra/gem.c
>> +++ b/drivers/gpu/drm/tegra/gem.c
>> @@ -596,18 +596,6 @@ static int tegra_gem_prime_end_cpu_access(struct dma_buf *buf,
>>   	return 0;
>>   }
>>   
>> -static void *tegra_gem_prime_kmap_atomic(struct dma_buf *buf,
>> -					 unsigned long page)
>> -{
>> -	return NULL;
>> -}
>> -
>> -static void tegra_gem_prime_kunmap_atomic(struct dma_buf *buf,
>> -					  unsigned long page,
>> -					  void *addr)
>> -{
>> -}
>> -
>>   static void *tegra_gem_prime_kmap(struct dma_buf *buf, unsigned long page)
>>   {
>>   	return NULL;
>> @@ -648,8 +636,6 @@ static const struct dma_buf_ops tegra_gem_prime_dmabuf_ops = {
>>   	.release = tegra_gem_prime_release,
>>   	.begin_cpu_access = tegra_gem_prime_begin_cpu_access,
>>   	.end_cpu_access = tegra_gem_prime_end_cpu_access,
>> -	.map_atomic = tegra_gem_prime_kmap_atomic,
>> -	.unmap_atomic = tegra_gem_prime_kunmap_atomic,
>>   	.map = tegra_gem_prime_kmap,
>>   	.unmap = tegra_gem_prime_kunmap,
>>   	.mmap = tegra_gem_prime_mmap,
>> diff --git a/drivers/gpu/drm/udl/udl_dmabuf.c b/drivers/gpu/drm/udl/udl_dmabuf.c
>> index 5fdc8bdc2026..ae7225dedc30 100644
>> --- a/drivers/gpu/drm/udl/udl_dmabuf.c
>> +++ b/drivers/gpu/drm/udl/udl_dmabuf.c
>> @@ -156,27 +156,12 @@ static void *udl_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long page_num)
>>   	return NULL;
>>   }
>>   
>> -static void *udl_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>> -				    unsigned long page_num)
>> -{
>> -	/* TODO */
>> -
>> -	return NULL;
>> -}
>> -
>>   static void udl_dmabuf_kunmap(struct dma_buf *dma_buf,
>>   			      unsigned long page_num, void *addr)
>>   {
>>   	/* TODO */
>>   }
>>   
>> -static void udl_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>> -				     unsigned long page_num,
>> -				     void *addr)
>> -{
>> -	/* TODO */
>> -}
>> -
>>   static int udl_dmabuf_mmap(struct dma_buf *dma_buf,
>>   			   struct vm_area_struct *vma)
>>   {
>> @@ -191,9 +176,7 @@ static const struct dma_buf_ops udl_dmabuf_ops = {
>>   	.map_dma_buf		= udl_map_dma_buf,
>>   	.unmap_dma_buf		= udl_unmap_dma_buf,
>>   	.map			= udl_dmabuf_kmap,
>> -	.map_atomic		= udl_dmabuf_kmap_atomic,
>>   	.unmap			= udl_dmabuf_kunmap,
>> -	.unmap_atomic		= udl_dmabuf_kunmap_atomic,
>>   	.mmap			= udl_dmabuf_mmap,
>>   	.release		= drm_gem_dmabuf_release,
>>   };
>> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>> index fbffb37ccf42..373bc6da2f84 100644
>> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>> @@ -71,17 +71,6 @@ static void vmw_prime_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr)
>>   {
>>   }
>>   
>> -static void *vmw_prime_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>> -		unsigned long page_num)
>> -{
>> -	return NULL;
>> -}
>> -
>> -static void vmw_prime_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>> -		unsigned long page_num, void *addr)
>> -{
>> -
>> -}
>>   static void *vmw_prime_dmabuf_kmap(struct dma_buf *dma_buf,
>>   		unsigned long page_num)
>>   {
>> @@ -108,9 +97,7 @@ const struct dma_buf_ops vmw_prime_dmabuf_ops =  {
>>   	.unmap_dma_buf = vmw_prime_unmap_dma_buf,
>>   	.release = NULL,
>>   	.map = vmw_prime_dmabuf_kmap,
>> -	.map_atomic = vmw_prime_dmabuf_kmap_atomic,
>>   	.unmap = vmw_prime_dmabuf_kunmap,
>> -	.unmap_atomic = vmw_prime_dmabuf_kunmap_atomic,
>>   	.mmap = vmw_prime_dmabuf_mmap,
>>   	.vmap = vmw_prime_dmabuf_vmap,
>>   	.vunmap = vmw_prime_dmabuf_vunmap,
>> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-contig.c b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>> index 12d0072c52c2..aff0ab7bf83d 100644
>> --- a/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>> +++ b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>> @@ -358,7 +358,6 @@ static const struct dma_buf_ops vb2_dc_dmabuf_ops = {
>>   	.map_dma_buf = vb2_dc_dmabuf_ops_map,
>>   	.unmap_dma_buf = vb2_dc_dmabuf_ops_unmap,
>>   	.map = vb2_dc_dmabuf_ops_kmap,
>> -	.map_atomic = vb2_dc_dmabuf_ops_kmap,
>>   	.vmap = vb2_dc_dmabuf_ops_vmap,
>>   	.mmap = vb2_dc_dmabuf_ops_mmap,
>>   	.release = vb2_dc_dmabuf_ops_release,
>> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-sg.c b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>> index cf94765e593f..015e737095cd 100644
>> --- a/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>> +++ b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>> @@ -507,7 +507,6 @@ static const struct dma_buf_ops vb2_dma_sg_dmabuf_ops = {
>>   	.map_dma_buf = vb2_dma_sg_dmabuf_ops_map,
>>   	.unmap_dma_buf = vb2_dma_sg_dmabuf_ops_unmap,
>>   	.map = vb2_dma_sg_dmabuf_ops_kmap,
>> -	.map_atomic = vb2_dma_sg_dmabuf_ops_kmap,
>>   	.vmap = vb2_dma_sg_dmabuf_ops_vmap,
>>   	.mmap = vb2_dma_sg_dmabuf_ops_mmap,
>>   	.release = vb2_dma_sg_dmabuf_ops_release,
>> diff --git a/drivers/media/common/videobuf2/videobuf2-vmalloc.c b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>> index 298ffb9ecdae..467a4005164b 100644
>> --- a/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>> +++ b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>> @@ -346,7 +346,6 @@ static const struct dma_buf_ops vb2_vmalloc_dmabuf_ops = {
>>   	.map_dma_buf = vb2_vmalloc_dmabuf_ops_map,
>>   	.unmap_dma_buf = vb2_vmalloc_dmabuf_ops_unmap,
>>   	.map = vb2_vmalloc_dmabuf_ops_kmap,
>> -	.map_atomic = vb2_vmalloc_dmabuf_ops_kmap,
>>   	.vmap = vb2_vmalloc_dmabuf_ops_vmap,
>>   	.mmap = vb2_vmalloc_dmabuf_ops_mmap,
>>   	.release = vb2_vmalloc_dmabuf_ops_release,
>> diff --git a/drivers/staging/android/ion/ion.c b/drivers/staging/android/ion/ion.c
>> index 57e0d8035b2e..a46219ff5e16 100644
>> --- a/drivers/staging/android/ion/ion.c
>> +++ b/drivers/staging/android/ion/ion.c
>> @@ -374,8 +374,6 @@ static const struct dma_buf_ops dma_buf_ops = {
>>   	.detach = ion_dma_buf_detatch,
>>   	.begin_cpu_access = ion_dma_buf_begin_cpu_access,
>>   	.end_cpu_access = ion_dma_buf_end_cpu_access,
>> -	.map_atomic = ion_dma_buf_kmap,
>> -	.unmap_atomic = ion_dma_buf_kunmap,
>>   	.map = ion_dma_buf_kmap,
>>   	.unmap = ion_dma_buf_kunmap,
>>   };
>> diff --git a/drivers/tee/tee_shm.c b/drivers/tee/tee_shm.c
>> index 556960a1bab3..df4a1553b78b 100644
>> --- a/drivers/tee/tee_shm.c
>> +++ b/drivers/tee/tee_shm.c
>> @@ -80,11 +80,6 @@ static void tee_shm_op_release(struct dma_buf *dmabuf)
>>   	tee_shm_release(shm);
>>   }
>>   
>> -static void *tee_shm_op_map_atomic(struct dma_buf *dmabuf, unsigned long pgnum)
>> -{
>> -	return NULL;
>> -}
>> -
>>   static void *tee_shm_op_map(struct dma_buf *dmabuf, unsigned long pgnum)
>>   {
>>   	return NULL;
>> @@ -107,7 +102,6 @@ static const struct dma_buf_ops tee_shm_dma_buf_ops = {
>>   	.map_dma_buf = tee_shm_op_map_dma_buf,
>>   	.unmap_dma_buf = tee_shm_op_unmap_dma_buf,
>>   	.release = tee_shm_op_release,
>> -	.map_atomic = tee_shm_op_map_atomic,
>>   	.map = tee_shm_op_map,
>>   	.mmap = tee_shm_op_mmap,
>>   };
>> diff --git a/include/drm/drm_prime.h b/include/drm/drm_prime.h
>> index ef338151cea8..d716d653b096 100644
>> --- a/include/drm/drm_prime.h
>> +++ b/include/drm/drm_prime.h
>> @@ -93,10 +93,6 @@ void drm_gem_unmap_dma_buf(struct dma_buf_attachment *attach,
>>   			   enum dma_data_direction dir);
>>   void *drm_gem_dmabuf_vmap(struct dma_buf *dma_buf);
>>   void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr);
>> -void *drm_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>> -				 unsigned long page_num);
>> -void drm_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>> -				  unsigned long page_num, void *addr);
>>   void *drm_gem_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long page_num);
>>   void drm_gem_dmabuf_kunmap(struct dma_buf *dma_buf, unsigned long page_num,
>>   			   void *addr);
>> diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
>> index 346caf77937f..d17cadd76802 100644
>> --- a/include/linux/dma-buf.h
>> +++ b/include/linux/dma-buf.h
>> @@ -205,8 +205,6 @@ struct dma_buf_ops {
>>   	 * to be restarted.
>>   	 */
>>   	int (*end_cpu_access)(struct dma_buf *, enum dma_data_direction);
>> -	void *(*map_atomic)(struct dma_buf *, unsigned long);
>> -	void (*unmap_atomic)(struct dma_buf *, unsigned long, void *);
>>   	void *(*map)(struct dma_buf *, unsigned long);
>>   	void (*unmap)(struct dma_buf *, unsigned long, void *);
>>   
>> @@ -394,8 +392,6 @@ int dma_buf_begin_cpu_access(struct dma_buf *dma_buf,
>>   			     enum dma_data_direction dir);
>>   int dma_buf_end_cpu_access(struct dma_buf *dma_buf,
>>   			   enum dma_data_direction dir);
>> -void *dma_buf_kmap_atomic(struct dma_buf *, unsigned long);
>> -void dma_buf_kunmap_atomic(struct dma_buf *, unsigned long, void *);
>>   void *dma_buf_kmap(struct dma_buf *, unsigned long);
>>   void dma_buf_kunmap(struct dma_buf *, unsigned long, void *);
>>   
>> -- 
>> 2.14.1
>>
>> _______________________________________________
>> dri-devel mailing list
>> dri-devel@lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 2/5] dma-buf: remove kmap_atomic interface
  2018-06-19 14:47       ` Christian König
@ 2018-06-19 15:35         ` Daniel Vetter
  -1 siblings, 0 replies; 58+ messages in thread
From: Daniel Vetter @ 2018-06-19 15:35 UTC (permalink / raw)
  To: Christian König
  Cc: moderated list:DMA BUFFER SHARING FRAMEWORK,
	open list:DMA BUFFER SHARING FRAMEWORK, dri-devel, amd-gfx list

On Tue, Jun 19, 2018 at 4:47 PM, Christian König
<christian.koenig@amd.com> wrote:
> Am 18.06.2018 um 10:18 schrieb Daniel Vetter:
>>
>> On Fri, Jun 01, 2018 at 02:00:17PM +0200, Christian König wrote:
>>>
>>> Neither used nor correctly implemented anywhere. Just completely remove
>>> the interface.
>>>
>>> Signed-off-by: Christian König <christian.koenig@amd.com>
>>
>> I wonder whether we can nuke the normal kmap stuff too ... everyone seems
>> to want/use the vmap stuff for kernel-internal mapping needs.
>>
>> Anyway, this looks good.
>>>
>>> ---
>>>   drivers/dma-buf/dma-buf.c                          | 44
>>> ----------------------
>>>   drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c          |  2 -
>>>   drivers/gpu/drm/armada/armada_gem.c                |  2 -
>>>   drivers/gpu/drm/drm_prime.c                        | 26 -------------
>>>   drivers/gpu/drm/i915/i915_gem_dmabuf.c             | 11 ------
>>>   drivers/gpu/drm/i915/selftests/mock_dmabuf.c       |  2 -
>>>   drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c          |  2 -
>>>   drivers/gpu/drm/tegra/gem.c                        | 14 -------
>>>   drivers/gpu/drm/udl/udl_dmabuf.c                   | 17 ---------
>>>   drivers/gpu/drm/vmwgfx/vmwgfx_prime.c              | 13 -------
>>>   .../media/common/videobuf2/videobuf2-dma-contig.c  |  1 -
>>>   drivers/media/common/videobuf2/videobuf2-dma-sg.c  |  1 -
>>>   drivers/media/common/videobuf2/videobuf2-vmalloc.c |  1 -
>>>   drivers/staging/android/ion/ion.c                  |  2 -
>>>   drivers/tee/tee_shm.c                              |  6 ---
>>>   include/drm/drm_prime.h                            |  4 --
>>>   include/linux/dma-buf.h                            |  4 --
>>>   17 files changed, 152 deletions(-)
>>>
>>> diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
>>> index e99a8d19991b..e4c657d9fad7 100644
>>> --- a/drivers/dma-buf/dma-buf.c
>>> +++ b/drivers/dma-buf/dma-buf.c
>>> @@ -405,7 +405,6 @@ struct dma_buf *dma_buf_export(const struct
>>> dma_buf_export_info *exp_info)
>>>                           || !exp_info->ops->map_dma_buf
>>>                           || !exp_info->ops->unmap_dma_buf
>>>                           || !exp_info->ops->release
>>> -                         || !exp_info->ops->map_atomic
>>>                           || !exp_info->ops->map
>>>                           || !exp_info->ops->mmap)) {
>>>                 return ERR_PTR(-EINVAL);
>>> @@ -687,14 +686,6 @@ EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment);
>>>    *      void \*dma_buf_kmap(struct dma_buf \*, unsigned long);
>>>    *      void dma_buf_kunmap(struct dma_buf \*, unsigned long, void \*);
>>>    *
>>> - *   There are also atomic variants of these interfaces. Like for kmap
>>> they
>>> - *   facilitate non-blocking fast-paths. Neither the importer nor the
>>> exporter
>>> - *   (in the callback) is allowed to block when using these.
>>> - *
>>> - *   Interfaces::
>>> - *      void \*dma_buf_kmap_atomic(struct dma_buf \*, unsigned long);
>>> - *      void dma_buf_kunmap_atomic(struct dma_buf \*, unsigned long,
>>> void \*);
>>> - *
>>>    *   For importers all the restrictions of using kmap apply, like the
>>> limited
>>>    *   supply of kmap_atomic slots. Hence an importer shall only hold
>>> onto at
>>>    *   max 2 atomic dma_buf kmaps at the same time (in any given process
>>> context).
>>
>> This is also about atomic kmap ...
>>
>> And the subsequent language around "Note that these calls need to always
>> succeed." is also not true, might be good to update that stating that kmap
>> is optional (like we say already for vmap).
>>
>> With those docs nits addressed:
>>
>> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
>
>
> I've fixed up patch #1 and #2 and added your Reviewed-by tag.
>
> Since I finally had time to install dim do you have any objections that I
> now run "dim push drm-misc-next" with those two applied?

Go ahead, that's the point of commit rights. dim might complain if you
cherry picked them and didn't pick them up using dim apply though ...
-Daniel


> Regards,
> Christian.
>
>
>>
>>> @@ -859,41 +850,6 @@ int dma_buf_end_cpu_access(struct dma_buf *dmabuf,
>>>   }
>>>   EXPORT_SYMBOL_GPL(dma_buf_end_cpu_access);
>>>   -/**
>>> - * dma_buf_kmap_atomic - Map a page of the buffer object into kernel
>>> address
>>> - * space. The same restrictions as for kmap_atomic and friends apply.
>>> - * @dmabuf:    [in]    buffer to map page from.
>>> - * @page_num:  [in]    page in PAGE_SIZE units to map.
>>> - *
>>> - * This call must always succeed, any necessary preparations that might
>>> fail
>>> - * need to be done in begin_cpu_access.
>>> - */
>>> -void *dma_buf_kmap_atomic(struct dma_buf *dmabuf, unsigned long
>>> page_num)
>>> -{
>>> -       WARN_ON(!dmabuf);
>>> -
>>> -       return dmabuf->ops->map_atomic(dmabuf, page_num);
>>> -}
>>> -EXPORT_SYMBOL_GPL(dma_buf_kmap_atomic);
>>> -
>>> -/**
>>> - * dma_buf_kunmap_atomic - Unmap a page obtained by dma_buf_kmap_atomic.
>>> - * @dmabuf:    [in]    buffer to unmap page from.
>>> - * @page_num:  [in]    page in PAGE_SIZE units to unmap.
>>> - * @vaddr:     [in]    kernel space pointer obtained from
>>> dma_buf_kmap_atomic.
>>> - *
>>> - * This call must always succeed.
>>> - */
>>> -void dma_buf_kunmap_atomic(struct dma_buf *dmabuf, unsigned long
>>> page_num,
>>> -                          void *vaddr)
>>> -{
>>> -       WARN_ON(!dmabuf);
>>> -
>>> -       if (dmabuf->ops->unmap_atomic)
>>> -               dmabuf->ops->unmap_atomic(dmabuf, page_num, vaddr);
>>> -}
>>> -EXPORT_SYMBOL_GPL(dma_buf_kunmap_atomic);
>>> -
>>>   /**
>>>    * dma_buf_kmap - Map a page of the buffer object into kernel address
>>> space. The
>>>    * same restrictions as for kmap and friends apply.
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>>> index f1500f1ec0f5..a156b3891a3f 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>>> @@ -244,9 +244,7 @@ static const struct dma_buf_ops amdgpu_dmabuf_ops = {
>>>         .release = drm_gem_dmabuf_release,
>>>         .begin_cpu_access = amdgpu_gem_begin_cpu_access,
>>>         .map = drm_gem_dmabuf_kmap,
>>> -       .map_atomic = drm_gem_dmabuf_kmap_atomic,
>>>         .unmap = drm_gem_dmabuf_kunmap,
>>> -       .unmap_atomic = drm_gem_dmabuf_kunmap_atomic,
>>>         .mmap = drm_gem_dmabuf_mmap,
>>>         .vmap = drm_gem_dmabuf_vmap,
>>>         .vunmap = drm_gem_dmabuf_vunmap,
>>> diff --git a/drivers/gpu/drm/armada/armada_gem.c
>>> b/drivers/gpu/drm/armada/armada_gem.c
>>> index a97f509743a5..3fb37c75c065 100644
>>> --- a/drivers/gpu/drm/armada/armada_gem.c
>>> +++ b/drivers/gpu/drm/armada/armada_gem.c
>>> @@ -490,8 +490,6 @@ static const struct dma_buf_ops
>>> armada_gem_prime_dmabuf_ops = {
>>>         .map_dma_buf    = armada_gem_prime_map_dma_buf,
>>>         .unmap_dma_buf  = armada_gem_prime_unmap_dma_buf,
>>>         .release        = drm_gem_dmabuf_release,
>>> -       .map_atomic     = armada_gem_dmabuf_no_kmap,
>>> -       .unmap_atomic   = armada_gem_dmabuf_no_kunmap,
>>>         .map            = armada_gem_dmabuf_no_kmap,
>>>         .unmap          = armada_gem_dmabuf_no_kunmap,
>>>         .mmap           = armada_gem_dmabuf_mmap,
>>> diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
>>> index 4a3a232fea67..b28fa8f44c8b 100644
>>> --- a/drivers/gpu/drm/drm_prime.c
>>> +++ b/drivers/gpu/drm/drm_prime.c
>>> @@ -426,30 +426,6 @@ void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf,
>>> void *vaddr)
>>>   }
>>>   EXPORT_SYMBOL(drm_gem_dmabuf_vunmap);
>>>   -/**
>>> - * drm_gem_dmabuf_kmap_atomic - map_atomic implementation for GEM
>>> - *
>>> - * Not implemented. This can be used as the &dma_buf_ops.map_atomic
>>> callback.
>>> - */
>>> -void *drm_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>> -                                unsigned long page_num)
>>> -{
>>> -       return NULL;
>>> -}
>>> -EXPORT_SYMBOL(drm_gem_dmabuf_kmap_atomic);
>>> -
>>> -/**
>>> - * drm_gem_dmabuf_kunmap_atomic - unmap_atomic implementation for GEM
>>> - *
>>> - * Not implemented. This can be used as the &dma_buf_ops.unmap_atomic
>>> callback.
>>> - */
>>> -void drm_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>> -                                 unsigned long page_num, void *addr)
>>> -{
>>> -
>>> -}
>>> -EXPORT_SYMBOL(drm_gem_dmabuf_kunmap_atomic);
>>> -
>>>   /**
>>>    * drm_gem_dmabuf_kmap - map implementation for GEM
>>>    *
>>> @@ -502,9 +478,7 @@ static const struct dma_buf_ops
>>> drm_gem_prime_dmabuf_ops =  {
>>>         .unmap_dma_buf = drm_gem_unmap_dma_buf,
>>>         .release = drm_gem_dmabuf_release,
>>>         .map = drm_gem_dmabuf_kmap,
>>> -       .map_atomic = drm_gem_dmabuf_kmap_atomic,
>>>         .unmap = drm_gem_dmabuf_kunmap,
>>> -       .unmap_atomic = drm_gem_dmabuf_kunmap_atomic,
>>>         .mmap = drm_gem_dmabuf_mmap,
>>>         .vmap = drm_gem_dmabuf_vmap,
>>>         .vunmap = drm_gem_dmabuf_vunmap,
>>> diff --git a/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>>> b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>>> index 69a7aec49e84..82e2ca17a441 100644
>>> --- a/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>>> +++ b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>>> @@ -111,15 +111,6 @@ static void i915_gem_dmabuf_vunmap(struct dma_buf
>>> *dma_buf, void *vaddr)
>>>         i915_gem_object_unpin_map(obj);
>>>   }
>>>   -static void *i915_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>> unsigned long page_num)
>>> -{
>>> -       return NULL;
>>> -}
>>> -
>>> -static void i915_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>> unsigned long page_num, void *addr)
>>> -{
>>> -
>>> -}
>>>   static void *i915_gem_dmabuf_kmap(struct dma_buf *dma_buf, unsigned
>>> long page_num)
>>>   {
>>>         struct drm_i915_gem_object *obj = dma_buf_to_obj(dma_buf);
>>> @@ -225,9 +216,7 @@ static const struct dma_buf_ops i915_dmabuf_ops =  {
>>>         .unmap_dma_buf = i915_gem_unmap_dma_buf,
>>>         .release = drm_gem_dmabuf_release,
>>>         .map = i915_gem_dmabuf_kmap,
>>> -       .map_atomic = i915_gem_dmabuf_kmap_atomic,
>>>         .unmap = i915_gem_dmabuf_kunmap,
>>> -       .unmap_atomic = i915_gem_dmabuf_kunmap_atomic,
>>>         .mmap = i915_gem_dmabuf_mmap,
>>>         .vmap = i915_gem_dmabuf_vmap,
>>>         .vunmap = i915_gem_dmabuf_vunmap,
>>> diff --git a/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>>> b/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>>> index 302f7d103635..f81fda8ea45e 100644
>>> --- a/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>>> +++ b/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>>> @@ -130,9 +130,7 @@ static const struct dma_buf_ops mock_dmabuf_ops =  {
>>>         .unmap_dma_buf = mock_unmap_dma_buf,
>>>         .release = mock_dmabuf_release,
>>>         .map = mock_dmabuf_kmap,
>>> -       .map_atomic = mock_dmabuf_kmap_atomic,
>>>         .unmap = mock_dmabuf_kunmap,
>>> -       .unmap_atomic = mock_dmabuf_kunmap_atomic,
>>>         .mmap = mock_dmabuf_mmap,
>>>         .vmap = mock_dmabuf_vmap,
>>>         .vunmap = mock_dmabuf_vunmap,
>>> diff --git a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>>> b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>>> index 8e41d649e248..1a073f9b2834 100644
>>> --- a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>>> +++ b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>>> @@ -148,8 +148,6 @@ static const struct dma_buf_ops omap_dmabuf_ops = {
>>>         .release = drm_gem_dmabuf_release,
>>>         .begin_cpu_access = omap_gem_dmabuf_begin_cpu_access,
>>>         .end_cpu_access = omap_gem_dmabuf_end_cpu_access,
>>> -       .map_atomic = omap_gem_dmabuf_kmap_atomic,
>>> -       .unmap_atomic = omap_gem_dmabuf_kunmap_atomic,
>>>         .map = omap_gem_dmabuf_kmap,
>>>         .unmap = omap_gem_dmabuf_kunmap,
>>>         .mmap = omap_gem_dmabuf_mmap,
>>> diff --git a/drivers/gpu/drm/tegra/gem.c b/drivers/gpu/drm/tegra/gem.c
>>> index 8b0b4ff64bb4..d7661702c11c 100644
>>> --- a/drivers/gpu/drm/tegra/gem.c
>>> +++ b/drivers/gpu/drm/tegra/gem.c
>>> @@ -596,18 +596,6 @@ static int tegra_gem_prime_end_cpu_access(struct
>>> dma_buf *buf,
>>>         return 0;
>>>   }
>>>   -static void *tegra_gem_prime_kmap_atomic(struct dma_buf *buf,
>>> -                                        unsigned long page)
>>> -{
>>> -       return NULL;
>>> -}
>>> -
>>> -static void tegra_gem_prime_kunmap_atomic(struct dma_buf *buf,
>>> -                                         unsigned long page,
>>> -                                         void *addr)
>>> -{
>>> -}
>>> -
>>>   static void *tegra_gem_prime_kmap(struct dma_buf *buf, unsigned long
>>> page)
>>>   {
>>>         return NULL;
>>> @@ -648,8 +636,6 @@ static const struct dma_buf_ops
>>> tegra_gem_prime_dmabuf_ops = {
>>>         .release = tegra_gem_prime_release,
>>>         .begin_cpu_access = tegra_gem_prime_begin_cpu_access,
>>>         .end_cpu_access = tegra_gem_prime_end_cpu_access,
>>> -       .map_atomic = tegra_gem_prime_kmap_atomic,
>>> -       .unmap_atomic = tegra_gem_prime_kunmap_atomic,
>>>         .map = tegra_gem_prime_kmap,
>>>         .unmap = tegra_gem_prime_kunmap,
>>>         .mmap = tegra_gem_prime_mmap,
>>> diff --git a/drivers/gpu/drm/udl/udl_dmabuf.c
>>> b/drivers/gpu/drm/udl/udl_dmabuf.c
>>> index 5fdc8bdc2026..ae7225dedc30 100644
>>> --- a/drivers/gpu/drm/udl/udl_dmabuf.c
>>> +++ b/drivers/gpu/drm/udl/udl_dmabuf.c
>>> @@ -156,27 +156,12 @@ static void *udl_dmabuf_kmap(struct dma_buf
>>> *dma_buf, unsigned long page_num)
>>>         return NULL;
>>>   }
>>>   -static void *udl_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>> -                                   unsigned long page_num)
>>> -{
>>> -       /* TODO */
>>> -
>>> -       return NULL;
>>> -}
>>> -
>>>   static void udl_dmabuf_kunmap(struct dma_buf *dma_buf,
>>>                               unsigned long page_num, void *addr)
>>>   {
>>>         /* TODO */
>>>   }
>>>   -static void udl_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>> -                                    unsigned long page_num,
>>> -                                    void *addr)
>>> -{
>>> -       /* TODO */
>>> -}
>>> -
>>>   static int udl_dmabuf_mmap(struct dma_buf *dma_buf,
>>>                            struct vm_area_struct *vma)
>>>   {
>>> @@ -191,9 +176,7 @@ static const struct dma_buf_ops udl_dmabuf_ops = {
>>>         .map_dma_buf            = udl_map_dma_buf,
>>>         .unmap_dma_buf          = udl_unmap_dma_buf,
>>>         .map                    = udl_dmabuf_kmap,
>>> -       .map_atomic             = udl_dmabuf_kmap_atomic,
>>>         .unmap                  = udl_dmabuf_kunmap,
>>> -       .unmap_atomic           = udl_dmabuf_kunmap_atomic,
>>>         .mmap                   = udl_dmabuf_mmap,
>>>         .release                = drm_gem_dmabuf_release,
>>>   };
>>> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>>> b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>>> index fbffb37ccf42..373bc6da2f84 100644
>>> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>>> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>>> @@ -71,17 +71,6 @@ static void vmw_prime_dmabuf_vunmap(struct dma_buf
>>> *dma_buf, void *vaddr)
>>>   {
>>>   }
>>>   -static void *vmw_prime_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>> -               unsigned long page_num)
>>> -{
>>> -       return NULL;
>>> -}
>>> -
>>> -static void vmw_prime_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>> -               unsigned long page_num, void *addr)
>>> -{
>>> -
>>> -}
>>>   static void *vmw_prime_dmabuf_kmap(struct dma_buf *dma_buf,
>>>                 unsigned long page_num)
>>>   {
>>> @@ -108,9 +97,7 @@ const struct dma_buf_ops vmw_prime_dmabuf_ops =  {
>>>         .unmap_dma_buf = vmw_prime_unmap_dma_buf,
>>>         .release = NULL,
>>>         .map = vmw_prime_dmabuf_kmap,
>>> -       .map_atomic = vmw_prime_dmabuf_kmap_atomic,
>>>         .unmap = vmw_prime_dmabuf_kunmap,
>>> -       .unmap_atomic = vmw_prime_dmabuf_kunmap_atomic,
>>>         .mmap = vmw_prime_dmabuf_mmap,
>>>         .vmap = vmw_prime_dmabuf_vmap,
>>>         .vunmap = vmw_prime_dmabuf_vunmap,
>>> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>>> b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>>> index 12d0072c52c2..aff0ab7bf83d 100644
>>> --- a/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>>> +++ b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>>> @@ -358,7 +358,6 @@ static const struct dma_buf_ops vb2_dc_dmabuf_ops = {
>>>         .map_dma_buf = vb2_dc_dmabuf_ops_map,
>>>         .unmap_dma_buf = vb2_dc_dmabuf_ops_unmap,
>>>         .map = vb2_dc_dmabuf_ops_kmap,
>>> -       .map_atomic = vb2_dc_dmabuf_ops_kmap,
>>>         .vmap = vb2_dc_dmabuf_ops_vmap,
>>>         .mmap = vb2_dc_dmabuf_ops_mmap,
>>>         .release = vb2_dc_dmabuf_ops_release,
>>> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>>> b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>>> index cf94765e593f..015e737095cd 100644
>>> --- a/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>>> +++ b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>>> @@ -507,7 +507,6 @@ static const struct dma_buf_ops vb2_dma_sg_dmabuf_ops
>>> = {
>>>         .map_dma_buf = vb2_dma_sg_dmabuf_ops_map,
>>>         .unmap_dma_buf = vb2_dma_sg_dmabuf_ops_unmap,
>>>         .map = vb2_dma_sg_dmabuf_ops_kmap,
>>> -       .map_atomic = vb2_dma_sg_dmabuf_ops_kmap,
>>>         .vmap = vb2_dma_sg_dmabuf_ops_vmap,
>>>         .mmap = vb2_dma_sg_dmabuf_ops_mmap,
>>>         .release = vb2_dma_sg_dmabuf_ops_release,
>>> diff --git a/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>>> b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>>> index 298ffb9ecdae..467a4005164b 100644
>>> --- a/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>>> +++ b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>>> @@ -346,7 +346,6 @@ static const struct dma_buf_ops
>>> vb2_vmalloc_dmabuf_ops = {
>>>         .map_dma_buf = vb2_vmalloc_dmabuf_ops_map,
>>>         .unmap_dma_buf = vb2_vmalloc_dmabuf_ops_unmap,
>>>         .map = vb2_vmalloc_dmabuf_ops_kmap,
>>> -       .map_atomic = vb2_vmalloc_dmabuf_ops_kmap,
>>>         .vmap = vb2_vmalloc_dmabuf_ops_vmap,
>>>         .mmap = vb2_vmalloc_dmabuf_ops_mmap,
>>>         .release = vb2_vmalloc_dmabuf_ops_release,
>>> diff --git a/drivers/staging/android/ion/ion.c
>>> b/drivers/staging/android/ion/ion.c
>>> index 57e0d8035b2e..a46219ff5e16 100644
>>> --- a/drivers/staging/android/ion/ion.c
>>> +++ b/drivers/staging/android/ion/ion.c
>>> @@ -374,8 +374,6 @@ static const struct dma_buf_ops dma_buf_ops = {
>>>         .detach = ion_dma_buf_detatch,
>>>         .begin_cpu_access = ion_dma_buf_begin_cpu_access,
>>>         .end_cpu_access = ion_dma_buf_end_cpu_access,
>>> -       .map_atomic = ion_dma_buf_kmap,
>>> -       .unmap_atomic = ion_dma_buf_kunmap,
>>>         .map = ion_dma_buf_kmap,
>>>         .unmap = ion_dma_buf_kunmap,
>>>   };
>>> diff --git a/drivers/tee/tee_shm.c b/drivers/tee/tee_shm.c
>>> index 556960a1bab3..df4a1553b78b 100644
>>> --- a/drivers/tee/tee_shm.c
>>> +++ b/drivers/tee/tee_shm.c
>>> @@ -80,11 +80,6 @@ static void tee_shm_op_release(struct dma_buf *dmabuf)
>>>         tee_shm_release(shm);
>>>   }
>>>   -static void *tee_shm_op_map_atomic(struct dma_buf *dmabuf, unsigned
>>> long pgnum)
>>> -{
>>> -       return NULL;
>>> -}
>>> -
>>>   static void *tee_shm_op_map(struct dma_buf *dmabuf, unsigned long
>>> pgnum)
>>>   {
>>>         return NULL;
>>> @@ -107,7 +102,6 @@ static const struct dma_buf_ops tee_shm_dma_buf_ops =
>>> {
>>>         .map_dma_buf = tee_shm_op_map_dma_buf,
>>>         .unmap_dma_buf = tee_shm_op_unmap_dma_buf,
>>>         .release = tee_shm_op_release,
>>> -       .map_atomic = tee_shm_op_map_atomic,
>>>         .map = tee_shm_op_map,
>>>         .mmap = tee_shm_op_mmap,
>>>   };
>>> diff --git a/include/drm/drm_prime.h b/include/drm/drm_prime.h
>>> index ef338151cea8..d716d653b096 100644
>>> --- a/include/drm/drm_prime.h
>>> +++ b/include/drm/drm_prime.h
>>> @@ -93,10 +93,6 @@ void drm_gem_unmap_dma_buf(struct dma_buf_attachment
>>> *attach,
>>>                            enum dma_data_direction dir);
>>>   void *drm_gem_dmabuf_vmap(struct dma_buf *dma_buf);
>>>   void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr);
>>> -void *drm_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>> -                                unsigned long page_num);
>>> -void drm_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>> -                                 unsigned long page_num, void *addr);
>>>   void *drm_gem_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long
>>> page_num);
>>>   void drm_gem_dmabuf_kunmap(struct dma_buf *dma_buf, unsigned long
>>> page_num,
>>>                            void *addr);
>>> diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
>>> index 346caf77937f..d17cadd76802 100644
>>> --- a/include/linux/dma-buf.h
>>> +++ b/include/linux/dma-buf.h
>>> @@ -205,8 +205,6 @@ struct dma_buf_ops {
>>>          * to be restarted.
>>>          */
>>>         int (*end_cpu_access)(struct dma_buf *, enum dma_data_direction);
>>> -       void *(*map_atomic)(struct dma_buf *, unsigned long);
>>> -       void (*unmap_atomic)(struct dma_buf *, unsigned long, void *);
>>>         void *(*map)(struct dma_buf *, unsigned long);
>>>         void (*unmap)(struct dma_buf *, unsigned long, void *);
>>>   @@ -394,8 +392,6 @@ int dma_buf_begin_cpu_access(struct dma_buf
>>> *dma_buf,
>>>                              enum dma_data_direction dir);
>>>   int dma_buf_end_cpu_access(struct dma_buf *dma_buf,
>>>                            enum dma_data_direction dir);
>>> -void *dma_buf_kmap_atomic(struct dma_buf *, unsigned long);
>>> -void dma_buf_kunmap_atomic(struct dma_buf *, unsigned long, void *);
>>>   void *dma_buf_kmap(struct dma_buf *, unsigned long);
>>>   void dma_buf_kunmap(struct dma_buf *, unsigned long, void *);
>>>
>>> --
>>> 2.14.1
>>>
>>> _______________________________________________
>>> dri-devel mailing list
>>> dri-devel@lists.freedesktop.org
>>> https://lists.freedesktop.org/mailman/listinfo/dri-devel
>
>



-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 2/5] dma-buf: remove kmap_atomic interface
@ 2018-06-19 15:35         ` Daniel Vetter
  0 siblings, 0 replies; 58+ messages in thread
From: Daniel Vetter @ 2018-06-19 15:35 UTC (permalink / raw)
  To: Christian König
  Cc: moderated list:DMA BUFFER SHARING FRAMEWORK, amd-gfx list,
	dri-devel, open list:DMA BUFFER SHARING FRAMEWORK

On Tue, Jun 19, 2018 at 4:47 PM, Christian König
<christian.koenig@amd.com> wrote:
> Am 18.06.2018 um 10:18 schrieb Daniel Vetter:
>>
>> On Fri, Jun 01, 2018 at 02:00:17PM +0200, Christian König wrote:
>>>
>>> Neither used nor correctly implemented anywhere. Just completely remove
>>> the interface.
>>>
>>> Signed-off-by: Christian König <christian.koenig@amd.com>
>>
>> I wonder whether we can nuke the normal kmap stuff too ... everyone seems
>> to want/use the vmap stuff for kernel-internal mapping needs.
>>
>> Anyway, this looks good.
>>>
>>> ---
>>>   drivers/dma-buf/dma-buf.c                          | 44
>>> ----------------------
>>>   drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c          |  2 -
>>>   drivers/gpu/drm/armada/armada_gem.c                |  2 -
>>>   drivers/gpu/drm/drm_prime.c                        | 26 -------------
>>>   drivers/gpu/drm/i915/i915_gem_dmabuf.c             | 11 ------
>>>   drivers/gpu/drm/i915/selftests/mock_dmabuf.c       |  2 -
>>>   drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c          |  2 -
>>>   drivers/gpu/drm/tegra/gem.c                        | 14 -------
>>>   drivers/gpu/drm/udl/udl_dmabuf.c                   | 17 ---------
>>>   drivers/gpu/drm/vmwgfx/vmwgfx_prime.c              | 13 -------
>>>   .../media/common/videobuf2/videobuf2-dma-contig.c  |  1 -
>>>   drivers/media/common/videobuf2/videobuf2-dma-sg.c  |  1 -
>>>   drivers/media/common/videobuf2/videobuf2-vmalloc.c |  1 -
>>>   drivers/staging/android/ion/ion.c                  |  2 -
>>>   drivers/tee/tee_shm.c                              |  6 ---
>>>   include/drm/drm_prime.h                            |  4 --
>>>   include/linux/dma-buf.h                            |  4 --
>>>   17 files changed, 152 deletions(-)
>>>
>>> diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
>>> index e99a8d19991b..e4c657d9fad7 100644
>>> --- a/drivers/dma-buf/dma-buf.c
>>> +++ b/drivers/dma-buf/dma-buf.c
>>> @@ -405,7 +405,6 @@ struct dma_buf *dma_buf_export(const struct
>>> dma_buf_export_info *exp_info)
>>>                           || !exp_info->ops->map_dma_buf
>>>                           || !exp_info->ops->unmap_dma_buf
>>>                           || !exp_info->ops->release
>>> -                         || !exp_info->ops->map_atomic
>>>                           || !exp_info->ops->map
>>>                           || !exp_info->ops->mmap)) {
>>>                 return ERR_PTR(-EINVAL);
>>> @@ -687,14 +686,6 @@ EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment);
>>>    *      void \*dma_buf_kmap(struct dma_buf \*, unsigned long);
>>>    *      void dma_buf_kunmap(struct dma_buf \*, unsigned long, void \*);
>>>    *
>>> - *   There are also atomic variants of these interfaces. Like for kmap
>>> they
>>> - *   facilitate non-blocking fast-paths. Neither the importer nor the
>>> exporter
>>> - *   (in the callback) is allowed to block when using these.
>>> - *
>>> - *   Interfaces::
>>> - *      void \*dma_buf_kmap_atomic(struct dma_buf \*, unsigned long);
>>> - *      void dma_buf_kunmap_atomic(struct dma_buf \*, unsigned long,
>>> void \*);
>>> - *
>>>    *   For importers all the restrictions of using kmap apply, like the
>>> limited
>>>    *   supply of kmap_atomic slots. Hence an importer shall only hold
>>> onto at
>>>    *   max 2 atomic dma_buf kmaps at the same time (in any given process
>>> context).
>>
>> This is also about atomic kmap ...
>>
>> And the subsequent language around "Note that these calls need to always
>> succeed." is also not true, might be good to update that stating that kmap
>> is optional (like we say already for vmap).
>>
>> With those docs nits addressed:
>>
>> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
>
>
> I've fixed up patch #1 and #2 and added your Reviewed-by tag.
>
> Since I finally had time to install dim do you have any objections that I
> now run "dim push drm-misc-next" with those two applied?

Go ahead, that's the point of commit rights. dim might complain if you
cherry picked them and didn't pick them up using dim apply though ...
-Daniel


> Regards,
> Christian.
>
>
>>
>>> @@ -859,41 +850,6 @@ int dma_buf_end_cpu_access(struct dma_buf *dmabuf,
>>>   }
>>>   EXPORT_SYMBOL_GPL(dma_buf_end_cpu_access);
>>>   -/**
>>> - * dma_buf_kmap_atomic - Map a page of the buffer object into kernel
>>> address
>>> - * space. The same restrictions as for kmap_atomic and friends apply.
>>> - * @dmabuf:    [in]    buffer to map page from.
>>> - * @page_num:  [in]    page in PAGE_SIZE units to map.
>>> - *
>>> - * This call must always succeed, any necessary preparations that might
>>> fail
>>> - * need to be done in begin_cpu_access.
>>> - */
>>> -void *dma_buf_kmap_atomic(struct dma_buf *dmabuf, unsigned long
>>> page_num)
>>> -{
>>> -       WARN_ON(!dmabuf);
>>> -
>>> -       return dmabuf->ops->map_atomic(dmabuf, page_num);
>>> -}
>>> -EXPORT_SYMBOL_GPL(dma_buf_kmap_atomic);
>>> -
>>> -/**
>>> - * dma_buf_kunmap_atomic - Unmap a page obtained by dma_buf_kmap_atomic.
>>> - * @dmabuf:    [in]    buffer to unmap page from.
>>> - * @page_num:  [in]    page in PAGE_SIZE units to unmap.
>>> - * @vaddr:     [in]    kernel space pointer obtained from
>>> dma_buf_kmap_atomic.
>>> - *
>>> - * This call must always succeed.
>>> - */
>>> -void dma_buf_kunmap_atomic(struct dma_buf *dmabuf, unsigned long
>>> page_num,
>>> -                          void *vaddr)
>>> -{
>>> -       WARN_ON(!dmabuf);
>>> -
>>> -       if (dmabuf->ops->unmap_atomic)
>>> -               dmabuf->ops->unmap_atomic(dmabuf, page_num, vaddr);
>>> -}
>>> -EXPORT_SYMBOL_GPL(dma_buf_kunmap_atomic);
>>> -
>>>   /**
>>>    * dma_buf_kmap - Map a page of the buffer object into kernel address
>>> space. The
>>>    * same restrictions as for kmap and friends apply.
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>>> index f1500f1ec0f5..a156b3891a3f 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>>> @@ -244,9 +244,7 @@ static const struct dma_buf_ops amdgpu_dmabuf_ops = {
>>>         .release = drm_gem_dmabuf_release,
>>>         .begin_cpu_access = amdgpu_gem_begin_cpu_access,
>>>         .map = drm_gem_dmabuf_kmap,
>>> -       .map_atomic = drm_gem_dmabuf_kmap_atomic,
>>>         .unmap = drm_gem_dmabuf_kunmap,
>>> -       .unmap_atomic = drm_gem_dmabuf_kunmap_atomic,
>>>         .mmap = drm_gem_dmabuf_mmap,
>>>         .vmap = drm_gem_dmabuf_vmap,
>>>         .vunmap = drm_gem_dmabuf_vunmap,
>>> diff --git a/drivers/gpu/drm/armada/armada_gem.c
>>> b/drivers/gpu/drm/armada/armada_gem.c
>>> index a97f509743a5..3fb37c75c065 100644
>>> --- a/drivers/gpu/drm/armada/armada_gem.c
>>> +++ b/drivers/gpu/drm/armada/armada_gem.c
>>> @@ -490,8 +490,6 @@ static const struct dma_buf_ops
>>> armada_gem_prime_dmabuf_ops = {
>>>         .map_dma_buf    = armada_gem_prime_map_dma_buf,
>>>         .unmap_dma_buf  = armada_gem_prime_unmap_dma_buf,
>>>         .release        = drm_gem_dmabuf_release,
>>> -       .map_atomic     = armada_gem_dmabuf_no_kmap,
>>> -       .unmap_atomic   = armada_gem_dmabuf_no_kunmap,
>>>         .map            = armada_gem_dmabuf_no_kmap,
>>>         .unmap          = armada_gem_dmabuf_no_kunmap,
>>>         .mmap           = armada_gem_dmabuf_mmap,
>>> diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
>>> index 4a3a232fea67..b28fa8f44c8b 100644
>>> --- a/drivers/gpu/drm/drm_prime.c
>>> +++ b/drivers/gpu/drm/drm_prime.c
>>> @@ -426,30 +426,6 @@ void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf,
>>> void *vaddr)
>>>   }
>>>   EXPORT_SYMBOL(drm_gem_dmabuf_vunmap);
>>>   -/**
>>> - * drm_gem_dmabuf_kmap_atomic - map_atomic implementation for GEM
>>> - *
>>> - * Not implemented. This can be used as the &dma_buf_ops.map_atomic
>>> callback.
>>> - */
>>> -void *drm_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>> -                                unsigned long page_num)
>>> -{
>>> -       return NULL;
>>> -}
>>> -EXPORT_SYMBOL(drm_gem_dmabuf_kmap_atomic);
>>> -
>>> -/**
>>> - * drm_gem_dmabuf_kunmap_atomic - unmap_atomic implementation for GEM
>>> - *
>>> - * Not implemented. This can be used as the &dma_buf_ops.unmap_atomic
>>> callback.
>>> - */
>>> -void drm_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>> -                                 unsigned long page_num, void *addr)
>>> -{
>>> -
>>> -}
>>> -EXPORT_SYMBOL(drm_gem_dmabuf_kunmap_atomic);
>>> -
>>>   /**
>>>    * drm_gem_dmabuf_kmap - map implementation for GEM
>>>    *
>>> @@ -502,9 +478,7 @@ static const struct dma_buf_ops
>>> drm_gem_prime_dmabuf_ops =  {
>>>         .unmap_dma_buf = drm_gem_unmap_dma_buf,
>>>         .release = drm_gem_dmabuf_release,
>>>         .map = drm_gem_dmabuf_kmap,
>>> -       .map_atomic = drm_gem_dmabuf_kmap_atomic,
>>>         .unmap = drm_gem_dmabuf_kunmap,
>>> -       .unmap_atomic = drm_gem_dmabuf_kunmap_atomic,
>>>         .mmap = drm_gem_dmabuf_mmap,
>>>         .vmap = drm_gem_dmabuf_vmap,
>>>         .vunmap = drm_gem_dmabuf_vunmap,
>>> diff --git a/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>>> b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>>> index 69a7aec49e84..82e2ca17a441 100644
>>> --- a/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>>> +++ b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>>> @@ -111,15 +111,6 @@ static void i915_gem_dmabuf_vunmap(struct dma_buf
>>> *dma_buf, void *vaddr)
>>>         i915_gem_object_unpin_map(obj);
>>>   }
>>>   -static void *i915_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>> unsigned long page_num)
>>> -{
>>> -       return NULL;
>>> -}
>>> -
>>> -static void i915_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>> unsigned long page_num, void *addr)
>>> -{
>>> -
>>> -}
>>>   static void *i915_gem_dmabuf_kmap(struct dma_buf *dma_buf, unsigned
>>> long page_num)
>>>   {
>>>         struct drm_i915_gem_object *obj = dma_buf_to_obj(dma_buf);
>>> @@ -225,9 +216,7 @@ static const struct dma_buf_ops i915_dmabuf_ops =  {
>>>         .unmap_dma_buf = i915_gem_unmap_dma_buf,
>>>         .release = drm_gem_dmabuf_release,
>>>         .map = i915_gem_dmabuf_kmap,
>>> -       .map_atomic = i915_gem_dmabuf_kmap_atomic,
>>>         .unmap = i915_gem_dmabuf_kunmap,
>>> -       .unmap_atomic = i915_gem_dmabuf_kunmap_atomic,
>>>         .mmap = i915_gem_dmabuf_mmap,
>>>         .vmap = i915_gem_dmabuf_vmap,
>>>         .vunmap = i915_gem_dmabuf_vunmap,
>>> diff --git a/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>>> b/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>>> index 302f7d103635..f81fda8ea45e 100644
>>> --- a/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>>> +++ b/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>>> @@ -130,9 +130,7 @@ static const struct dma_buf_ops mock_dmabuf_ops =  {
>>>         .unmap_dma_buf = mock_unmap_dma_buf,
>>>         .release = mock_dmabuf_release,
>>>         .map = mock_dmabuf_kmap,
>>> -       .map_atomic = mock_dmabuf_kmap_atomic,
>>>         .unmap = mock_dmabuf_kunmap,
>>> -       .unmap_atomic = mock_dmabuf_kunmap_atomic,
>>>         .mmap = mock_dmabuf_mmap,
>>>         .vmap = mock_dmabuf_vmap,
>>>         .vunmap = mock_dmabuf_vunmap,
>>> diff --git a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>>> b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>>> index 8e41d649e248..1a073f9b2834 100644
>>> --- a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>>> +++ b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>>> @@ -148,8 +148,6 @@ static const struct dma_buf_ops omap_dmabuf_ops = {
>>>         .release = drm_gem_dmabuf_release,
>>>         .begin_cpu_access = omap_gem_dmabuf_begin_cpu_access,
>>>         .end_cpu_access = omap_gem_dmabuf_end_cpu_access,
>>> -       .map_atomic = omap_gem_dmabuf_kmap_atomic,
>>> -       .unmap_atomic = omap_gem_dmabuf_kunmap_atomic,
>>>         .map = omap_gem_dmabuf_kmap,
>>>         .unmap = omap_gem_dmabuf_kunmap,
>>>         .mmap = omap_gem_dmabuf_mmap,
>>> diff --git a/drivers/gpu/drm/tegra/gem.c b/drivers/gpu/drm/tegra/gem.c
>>> index 8b0b4ff64bb4..d7661702c11c 100644
>>> --- a/drivers/gpu/drm/tegra/gem.c
>>> +++ b/drivers/gpu/drm/tegra/gem.c
>>> @@ -596,18 +596,6 @@ static int tegra_gem_prime_end_cpu_access(struct
>>> dma_buf *buf,
>>>         return 0;
>>>   }
>>>   -static void *tegra_gem_prime_kmap_atomic(struct dma_buf *buf,
>>> -                                        unsigned long page)
>>> -{
>>> -       return NULL;
>>> -}
>>> -
>>> -static void tegra_gem_prime_kunmap_atomic(struct dma_buf *buf,
>>> -                                         unsigned long page,
>>> -                                         void *addr)
>>> -{
>>> -}
>>> -
>>>   static void *tegra_gem_prime_kmap(struct dma_buf *buf, unsigned long
>>> page)
>>>   {
>>>         return NULL;
>>> @@ -648,8 +636,6 @@ static const struct dma_buf_ops
>>> tegra_gem_prime_dmabuf_ops = {
>>>         .release = tegra_gem_prime_release,
>>>         .begin_cpu_access = tegra_gem_prime_begin_cpu_access,
>>>         .end_cpu_access = tegra_gem_prime_end_cpu_access,
>>> -       .map_atomic = tegra_gem_prime_kmap_atomic,
>>> -       .unmap_atomic = tegra_gem_prime_kunmap_atomic,
>>>         .map = tegra_gem_prime_kmap,
>>>         .unmap = tegra_gem_prime_kunmap,
>>>         .mmap = tegra_gem_prime_mmap,
>>> diff --git a/drivers/gpu/drm/udl/udl_dmabuf.c
>>> b/drivers/gpu/drm/udl/udl_dmabuf.c
>>> index 5fdc8bdc2026..ae7225dedc30 100644
>>> --- a/drivers/gpu/drm/udl/udl_dmabuf.c
>>> +++ b/drivers/gpu/drm/udl/udl_dmabuf.c
>>> @@ -156,27 +156,12 @@ static void *udl_dmabuf_kmap(struct dma_buf
>>> *dma_buf, unsigned long page_num)
>>>         return NULL;
>>>   }
>>>   -static void *udl_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>> -                                   unsigned long page_num)
>>> -{
>>> -       /* TODO */
>>> -
>>> -       return NULL;
>>> -}
>>> -
>>>   static void udl_dmabuf_kunmap(struct dma_buf *dma_buf,
>>>                               unsigned long page_num, void *addr)
>>>   {
>>>         /* TODO */
>>>   }
>>>   -static void udl_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>> -                                    unsigned long page_num,
>>> -                                    void *addr)
>>> -{
>>> -       /* TODO */
>>> -}
>>> -
>>>   static int udl_dmabuf_mmap(struct dma_buf *dma_buf,
>>>                            struct vm_area_struct *vma)
>>>   {
>>> @@ -191,9 +176,7 @@ static const struct dma_buf_ops udl_dmabuf_ops = {
>>>         .map_dma_buf            = udl_map_dma_buf,
>>>         .unmap_dma_buf          = udl_unmap_dma_buf,
>>>         .map                    = udl_dmabuf_kmap,
>>> -       .map_atomic             = udl_dmabuf_kmap_atomic,
>>>         .unmap                  = udl_dmabuf_kunmap,
>>> -       .unmap_atomic           = udl_dmabuf_kunmap_atomic,
>>>         .mmap                   = udl_dmabuf_mmap,
>>>         .release                = drm_gem_dmabuf_release,
>>>   };
>>> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>>> b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>>> index fbffb37ccf42..373bc6da2f84 100644
>>> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>>> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>>> @@ -71,17 +71,6 @@ static void vmw_prime_dmabuf_vunmap(struct dma_buf
>>> *dma_buf, void *vaddr)
>>>   {
>>>   }
>>>   -static void *vmw_prime_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>> -               unsigned long page_num)
>>> -{
>>> -       return NULL;
>>> -}
>>> -
>>> -static void vmw_prime_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>> -               unsigned long page_num, void *addr)
>>> -{
>>> -
>>> -}
>>>   static void *vmw_prime_dmabuf_kmap(struct dma_buf *dma_buf,
>>>                 unsigned long page_num)
>>>   {
>>> @@ -108,9 +97,7 @@ const struct dma_buf_ops vmw_prime_dmabuf_ops =  {
>>>         .unmap_dma_buf = vmw_prime_unmap_dma_buf,
>>>         .release = NULL,
>>>         .map = vmw_prime_dmabuf_kmap,
>>> -       .map_atomic = vmw_prime_dmabuf_kmap_atomic,
>>>         .unmap = vmw_prime_dmabuf_kunmap,
>>> -       .unmap_atomic = vmw_prime_dmabuf_kunmap_atomic,
>>>         .mmap = vmw_prime_dmabuf_mmap,
>>>         .vmap = vmw_prime_dmabuf_vmap,
>>>         .vunmap = vmw_prime_dmabuf_vunmap,
>>> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>>> b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>>> index 12d0072c52c2..aff0ab7bf83d 100644
>>> --- a/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>>> +++ b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>>> @@ -358,7 +358,6 @@ static const struct dma_buf_ops vb2_dc_dmabuf_ops = {
>>>         .map_dma_buf = vb2_dc_dmabuf_ops_map,
>>>         .unmap_dma_buf = vb2_dc_dmabuf_ops_unmap,
>>>         .map = vb2_dc_dmabuf_ops_kmap,
>>> -       .map_atomic = vb2_dc_dmabuf_ops_kmap,
>>>         .vmap = vb2_dc_dmabuf_ops_vmap,
>>>         .mmap = vb2_dc_dmabuf_ops_mmap,
>>>         .release = vb2_dc_dmabuf_ops_release,
>>> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>>> b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>>> index cf94765e593f..015e737095cd 100644
>>> --- a/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>>> +++ b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>>> @@ -507,7 +507,6 @@ static const struct dma_buf_ops vb2_dma_sg_dmabuf_ops
>>> = {
>>>         .map_dma_buf = vb2_dma_sg_dmabuf_ops_map,
>>>         .unmap_dma_buf = vb2_dma_sg_dmabuf_ops_unmap,
>>>         .map = vb2_dma_sg_dmabuf_ops_kmap,
>>> -       .map_atomic = vb2_dma_sg_dmabuf_ops_kmap,
>>>         .vmap = vb2_dma_sg_dmabuf_ops_vmap,
>>>         .mmap = vb2_dma_sg_dmabuf_ops_mmap,
>>>         .release = vb2_dma_sg_dmabuf_ops_release,
>>> diff --git a/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>>> b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>>> index 298ffb9ecdae..467a4005164b 100644
>>> --- a/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>>> +++ b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>>> @@ -346,7 +346,6 @@ static const struct dma_buf_ops
>>> vb2_vmalloc_dmabuf_ops = {
>>>         .map_dma_buf = vb2_vmalloc_dmabuf_ops_map,
>>>         .unmap_dma_buf = vb2_vmalloc_dmabuf_ops_unmap,
>>>         .map = vb2_vmalloc_dmabuf_ops_kmap,
>>> -       .map_atomic = vb2_vmalloc_dmabuf_ops_kmap,
>>>         .vmap = vb2_vmalloc_dmabuf_ops_vmap,
>>>         .mmap = vb2_vmalloc_dmabuf_ops_mmap,
>>>         .release = vb2_vmalloc_dmabuf_ops_release,
>>> diff --git a/drivers/staging/android/ion/ion.c
>>> b/drivers/staging/android/ion/ion.c
>>> index 57e0d8035b2e..a46219ff5e16 100644
>>> --- a/drivers/staging/android/ion/ion.c
>>> +++ b/drivers/staging/android/ion/ion.c
>>> @@ -374,8 +374,6 @@ static const struct dma_buf_ops dma_buf_ops = {
>>>         .detach = ion_dma_buf_detatch,
>>>         .begin_cpu_access = ion_dma_buf_begin_cpu_access,
>>>         .end_cpu_access = ion_dma_buf_end_cpu_access,
>>> -       .map_atomic = ion_dma_buf_kmap,
>>> -       .unmap_atomic = ion_dma_buf_kunmap,
>>>         .map = ion_dma_buf_kmap,
>>>         .unmap = ion_dma_buf_kunmap,
>>>   };
>>> diff --git a/drivers/tee/tee_shm.c b/drivers/tee/tee_shm.c
>>> index 556960a1bab3..df4a1553b78b 100644
>>> --- a/drivers/tee/tee_shm.c
>>> +++ b/drivers/tee/tee_shm.c
>>> @@ -80,11 +80,6 @@ static void tee_shm_op_release(struct dma_buf *dmabuf)
>>>         tee_shm_release(shm);
>>>   }
>>>   -static void *tee_shm_op_map_atomic(struct dma_buf *dmabuf, unsigned
>>> long pgnum)
>>> -{
>>> -       return NULL;
>>> -}
>>> -
>>>   static void *tee_shm_op_map(struct dma_buf *dmabuf, unsigned long
>>> pgnum)
>>>   {
>>>         return NULL;
>>> @@ -107,7 +102,6 @@ static const struct dma_buf_ops tee_shm_dma_buf_ops =
>>> {
>>>         .map_dma_buf = tee_shm_op_map_dma_buf,
>>>         .unmap_dma_buf = tee_shm_op_unmap_dma_buf,
>>>         .release = tee_shm_op_release,
>>> -       .map_atomic = tee_shm_op_map_atomic,
>>>         .map = tee_shm_op_map,
>>>         .mmap = tee_shm_op_mmap,
>>>   };
>>> diff --git a/include/drm/drm_prime.h b/include/drm/drm_prime.h
>>> index ef338151cea8..d716d653b096 100644
>>> --- a/include/drm/drm_prime.h
>>> +++ b/include/drm/drm_prime.h
>>> @@ -93,10 +93,6 @@ void drm_gem_unmap_dma_buf(struct dma_buf_attachment
>>> *attach,
>>>                            enum dma_data_direction dir);
>>>   void *drm_gem_dmabuf_vmap(struct dma_buf *dma_buf);
>>>   void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr);
>>> -void *drm_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>> -                                unsigned long page_num);
>>> -void drm_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>> -                                 unsigned long page_num, void *addr);
>>>   void *drm_gem_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long
>>> page_num);
>>>   void drm_gem_dmabuf_kunmap(struct dma_buf *dma_buf, unsigned long
>>> page_num,
>>>                            void *addr);
>>> diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
>>> index 346caf77937f..d17cadd76802 100644
>>> --- a/include/linux/dma-buf.h
>>> +++ b/include/linux/dma-buf.h
>>> @@ -205,8 +205,6 @@ struct dma_buf_ops {
>>>          * to be restarted.
>>>          */
>>>         int (*end_cpu_access)(struct dma_buf *, enum dma_data_direction);
>>> -       void *(*map_atomic)(struct dma_buf *, unsigned long);
>>> -       void (*unmap_atomic)(struct dma_buf *, unsigned long, void *);
>>>         void *(*map)(struct dma_buf *, unsigned long);
>>>         void (*unmap)(struct dma_buf *, unsigned long, void *);
>>>   @@ -394,8 +392,6 @@ int dma_buf_begin_cpu_access(struct dma_buf
>>> *dma_buf,
>>>                              enum dma_data_direction dir);
>>>   int dma_buf_end_cpu_access(struct dma_buf *dma_buf,
>>>                            enum dma_data_direction dir);
>>> -void *dma_buf_kmap_atomic(struct dma_buf *, unsigned long);
>>> -void dma_buf_kunmap_atomic(struct dma_buf *, unsigned long, void *);
>>>   void *dma_buf_kmap(struct dma_buf *, unsigned long);
>>>   void dma_buf_kunmap(struct dma_buf *, unsigned long, void *);
>>>
>>> --
>>> 2.14.1
>>>
>>> _______________________________________________
>>> dri-devel mailing list
>>> dri-devel@lists.freedesktop.org
>>> https://lists.freedesktop.org/mailman/listinfo/dri-devel
>
>



-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 2/5] dma-buf: remove kmap_atomic interface
  2018-06-19 14:47       ` Christian König
@ 2018-06-20  6:10         ` Sumit Semwal
  -1 siblings, 0 replies; 58+ messages in thread
From: Sumit Semwal @ 2018-06-20  6:10 UTC (permalink / raw)
  To: Christian Koenig
  Cc: Daniel Vetter, Linaro MM SIG, amd-gfx list, DRI mailing list,
	linux-media

Hi Christian,
On Tue, 19 Jun 2018 at 20:17, Christian König <christian.koenig@amd.com> wrote:
>
> Am 18.06.2018 um 10:18 schrieb Daniel Vetter:
> > On Fri, Jun 01, 2018 at 02:00:17PM +0200, Christian König wrote:
> >> Neither used nor correctly implemented anywhere. Just completely remove
> >> the interface.
> >>
> >> Signed-off-by: Christian König <christian.koenig@amd.com>
> > I wonder whether we can nuke the normal kmap stuff too ... everyone seems
> > to want/use the vmap stuff for kernel-internal mapping needs.
> >
> > Anyway, this looks good.
Hope am not too late (was out of office for some time) - this looks ok
to me, please feel free to add my
Acked-by: Sumit Semwal <sumit.semwal@linaro.org>

> >> ---
> >>   drivers/dma-buf/dma-buf.c                          | 44 ----------------------
> >>   drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c          |  2 -
> >>   drivers/gpu/drm/armada/armada_gem.c                |  2 -
> >>   drivers/gpu/drm/drm_prime.c                        | 26 -------------
> >>   drivers/gpu/drm/i915/i915_gem_dmabuf.c             | 11 ------
> >>   drivers/gpu/drm/i915/selftests/mock_dmabuf.c       |  2 -
> >>   drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c          |  2 -
> >>   drivers/gpu/drm/tegra/gem.c                        | 14 -------
> >>   drivers/gpu/drm/udl/udl_dmabuf.c                   | 17 ---------
> >>   drivers/gpu/drm/vmwgfx/vmwgfx_prime.c              | 13 -------
> >>   .../media/common/videobuf2/videobuf2-dma-contig.c  |  1 -
> >>   drivers/media/common/videobuf2/videobuf2-dma-sg.c  |  1 -
> >>   drivers/media/common/videobuf2/videobuf2-vmalloc.c |  1 -
> >>   drivers/staging/android/ion/ion.c                  |  2 -
> >>   drivers/tee/tee_shm.c                              |  6 ---
> >>   include/drm/drm_prime.h                            |  4 --
> >>   include/linux/dma-buf.h                            |  4 --
> >>   17 files changed, 152 deletions(-)
> >>
> >> diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
> >> index e99a8d19991b..e4c657d9fad7 100644
> >> --- a/drivers/dma-buf/dma-buf.c
> >> +++ b/drivers/dma-buf/dma-buf.c
> >> @@ -405,7 +405,6 @@ struct dma_buf *dma_buf_export(const struct dma_buf_export_info *exp_info)
> >>                        || !exp_info->ops->map_dma_buf
> >>                        || !exp_info->ops->unmap_dma_buf
> >>                        || !exp_info->ops->release
> >> -                      || !exp_info->ops->map_atomic
> >>                        || !exp_info->ops->map
> >>                        || !exp_info->ops->mmap)) {
> >>              return ERR_PTR(-EINVAL);
> >> @@ -687,14 +686,6 @@ EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment);
> >>    *      void \*dma_buf_kmap(struct dma_buf \*, unsigned long);
> >>    *      void dma_buf_kunmap(struct dma_buf \*, unsigned long, void \*);
> >>    *
> >> - *   There are also atomic variants of these interfaces. Like for kmap they
> >> - *   facilitate non-blocking fast-paths. Neither the importer nor the exporter
> >> - *   (in the callback) is allowed to block when using these.
> >> - *
> >> - *   Interfaces::
> >> - *      void \*dma_buf_kmap_atomic(struct dma_buf \*, unsigned long);
> >> - *      void dma_buf_kunmap_atomic(struct dma_buf \*, unsigned long, void \*);
> >> - *
> >>    *   For importers all the restrictions of using kmap apply, like the limited
> >>    *   supply of kmap_atomic slots. Hence an importer shall only hold onto at
> >>    *   max 2 atomic dma_buf kmaps at the same time (in any given process context).
> > This is also about atomic kmap ...
> >
> > And the subsequent language around "Note that these calls need to always
> > succeed." is also not true, might be good to update that stating that kmap
> > is optional (like we say already for vmap).
> >
> > With those docs nits addressed:
> >
> > Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
>
> I've fixed up patch #1 and #2 and added your Reviewed-by tag.
>
> Since I finally had time to install dim do you have any objections that
> I now run "dim push drm-misc-next" with those two applied?
>
> Regards,
> Christian.
>
> >
> >> @@ -859,41 +850,6 @@ int dma_buf_end_cpu_access(struct dma_buf *dmabuf,
> >>   }
> >>   EXPORT_SYMBOL_GPL(dma_buf_end_cpu_access);
> >>
> >> -/**
> >> - * dma_buf_kmap_atomic - Map a page of the buffer object into kernel address
> >> - * space. The same restrictions as for kmap_atomic and friends apply.
> >> - * @dmabuf: [in]    buffer to map page from.
> >> - * @page_num:       [in]    page in PAGE_SIZE units to map.
> >> - *
> >> - * This call must always succeed, any necessary preparations that might fail
> >> - * need to be done in begin_cpu_access.
> >> - */
> >> -void *dma_buf_kmap_atomic(struct dma_buf *dmabuf, unsigned long page_num)
> >> -{
> >> -    WARN_ON(!dmabuf);
> >> -
> >> -    return dmabuf->ops->map_atomic(dmabuf, page_num);
> >> -}
> >> -EXPORT_SYMBOL_GPL(dma_buf_kmap_atomic);
> >> -
> >> -/**
> >> - * dma_buf_kunmap_atomic - Unmap a page obtained by dma_buf_kmap_atomic.
> >> - * @dmabuf: [in]    buffer to unmap page from.
> >> - * @page_num:       [in]    page in PAGE_SIZE units to unmap.
> >> - * @vaddr:  [in]    kernel space pointer obtained from dma_buf_kmap_atomic.
> >> - *
> >> - * This call must always succeed.
> >> - */
> >> -void dma_buf_kunmap_atomic(struct dma_buf *dmabuf, unsigned long page_num,
> >> -                       void *vaddr)
> >> -{
> >> -    WARN_ON(!dmabuf);
> >> -
> >> -    if (dmabuf->ops->unmap_atomic)
> >> -            dmabuf->ops->unmap_atomic(dmabuf, page_num, vaddr);
> >> -}
> >> -EXPORT_SYMBOL_GPL(dma_buf_kunmap_atomic);
> >> -
> >>   /**
> >>    * dma_buf_kmap - Map a page of the buffer object into kernel address space. The
> >>    * same restrictions as for kmap and friends apply.
> >> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> >> index f1500f1ec0f5..a156b3891a3f 100644
> >> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> >> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> >> @@ -244,9 +244,7 @@ static const struct dma_buf_ops amdgpu_dmabuf_ops = {
> >>      .release = drm_gem_dmabuf_release,
> >>      .begin_cpu_access = amdgpu_gem_begin_cpu_access,
> >>      .map = drm_gem_dmabuf_kmap,
> >> -    .map_atomic = drm_gem_dmabuf_kmap_atomic,
> >>      .unmap = drm_gem_dmabuf_kunmap,
> >> -    .unmap_atomic = drm_gem_dmabuf_kunmap_atomic,
> >>      .mmap = drm_gem_dmabuf_mmap,
> >>      .vmap = drm_gem_dmabuf_vmap,
> >>      .vunmap = drm_gem_dmabuf_vunmap,
> >> diff --git a/drivers/gpu/drm/armada/armada_gem.c b/drivers/gpu/drm/armada/armada_gem.c
> >> index a97f509743a5..3fb37c75c065 100644
> >> --- a/drivers/gpu/drm/armada/armada_gem.c
> >> +++ b/drivers/gpu/drm/armada/armada_gem.c
> >> @@ -490,8 +490,6 @@ static const struct dma_buf_ops armada_gem_prime_dmabuf_ops = {
> >>      .map_dma_buf    = armada_gem_prime_map_dma_buf,
> >>      .unmap_dma_buf  = armada_gem_prime_unmap_dma_buf,
> >>      .release        = drm_gem_dmabuf_release,
> >> -    .map_atomic     = armada_gem_dmabuf_no_kmap,
> >> -    .unmap_atomic   = armada_gem_dmabuf_no_kunmap,
> >>      .map            = armada_gem_dmabuf_no_kmap,
> >>      .unmap          = armada_gem_dmabuf_no_kunmap,
> >>      .mmap           = armada_gem_dmabuf_mmap,
> >> diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
> >> index 4a3a232fea67..b28fa8f44c8b 100644
> >> --- a/drivers/gpu/drm/drm_prime.c
> >> +++ b/drivers/gpu/drm/drm_prime.c
> >> @@ -426,30 +426,6 @@ void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr)
> >>   }
> >>   EXPORT_SYMBOL(drm_gem_dmabuf_vunmap);
> >>
> >> -/**
> >> - * drm_gem_dmabuf_kmap_atomic - map_atomic implementation for GEM
> >> - *
> >> - * Not implemented. This can be used as the &dma_buf_ops.map_atomic callback.
> >> - */
> >> -void *drm_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
> >> -                             unsigned long page_num)
> >> -{
> >> -    return NULL;
> >> -}
> >> -EXPORT_SYMBOL(drm_gem_dmabuf_kmap_atomic);
> >> -
> >> -/**
> >> - * drm_gem_dmabuf_kunmap_atomic - unmap_atomic implementation for GEM
> >> - *
> >> - * Not implemented. This can be used as the &dma_buf_ops.unmap_atomic callback.
> >> - */
> >> -void drm_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
> >> -                              unsigned long page_num, void *addr)
> >> -{
> >> -
> >> -}
> >> -EXPORT_SYMBOL(drm_gem_dmabuf_kunmap_atomic);
> >> -
> >>   /**
> >>    * drm_gem_dmabuf_kmap - map implementation for GEM
> >>    *
> >> @@ -502,9 +478,7 @@ static const struct dma_buf_ops drm_gem_prime_dmabuf_ops =  {
> >>      .unmap_dma_buf = drm_gem_unmap_dma_buf,
> >>      .release = drm_gem_dmabuf_release,
> >>      .map = drm_gem_dmabuf_kmap,
> >> -    .map_atomic = drm_gem_dmabuf_kmap_atomic,
> >>      .unmap = drm_gem_dmabuf_kunmap,
> >> -    .unmap_atomic = drm_gem_dmabuf_kunmap_atomic,
> >>      .mmap = drm_gem_dmabuf_mmap,
> >>      .vmap = drm_gem_dmabuf_vmap,
> >>      .vunmap = drm_gem_dmabuf_vunmap,
> >> diff --git a/drivers/gpu/drm/i915/i915_gem_dmabuf.c b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
> >> index 69a7aec49e84..82e2ca17a441 100644
> >> --- a/drivers/gpu/drm/i915/i915_gem_dmabuf.c
> >> +++ b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
> >> @@ -111,15 +111,6 @@ static void i915_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr)
> >>      i915_gem_object_unpin_map(obj);
> >>   }
> >>
> >> -static void *i915_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf, unsigned long page_num)
> >> -{
> >> -    return NULL;
> >> -}
> >> -
> >> -static void i915_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf, unsigned long page_num, void *addr)
> >> -{
> >> -
> >> -}
> >>   static void *i915_gem_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long page_num)
> >>   {
> >>      struct drm_i915_gem_object *obj = dma_buf_to_obj(dma_buf);
> >> @@ -225,9 +216,7 @@ static const struct dma_buf_ops i915_dmabuf_ops =  {
> >>      .unmap_dma_buf = i915_gem_unmap_dma_buf,
> >>      .release = drm_gem_dmabuf_release,
> >>      .map = i915_gem_dmabuf_kmap,
> >> -    .map_atomic = i915_gem_dmabuf_kmap_atomic,
> >>      .unmap = i915_gem_dmabuf_kunmap,
> >> -    .unmap_atomic = i915_gem_dmabuf_kunmap_atomic,
> >>      .mmap = i915_gem_dmabuf_mmap,
> >>      .vmap = i915_gem_dmabuf_vmap,
> >>      .vunmap = i915_gem_dmabuf_vunmap,
> >> diff --git a/drivers/gpu/drm/i915/selftests/mock_dmabuf.c b/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
> >> index 302f7d103635..f81fda8ea45e 100644
> >> --- a/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
> >> +++ b/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
> >> @@ -130,9 +130,7 @@ static const struct dma_buf_ops mock_dmabuf_ops =  {
> >>      .unmap_dma_buf = mock_unmap_dma_buf,
> >>      .release = mock_dmabuf_release,
> >>      .map = mock_dmabuf_kmap,
> >> -    .map_atomic = mock_dmabuf_kmap_atomic,
> >>      .unmap = mock_dmabuf_kunmap,
> >> -    .unmap_atomic = mock_dmabuf_kunmap_atomic,
> >>      .mmap = mock_dmabuf_mmap,
> >>      .vmap = mock_dmabuf_vmap,
> >>      .vunmap = mock_dmabuf_vunmap,
> >> diff --git a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
> >> index 8e41d649e248..1a073f9b2834 100644
> >> --- a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
> >> +++ b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
> >> @@ -148,8 +148,6 @@ static const struct dma_buf_ops omap_dmabuf_ops = {
> >>      .release = drm_gem_dmabuf_release,
> >>      .begin_cpu_access = omap_gem_dmabuf_begin_cpu_access,
> >>      .end_cpu_access = omap_gem_dmabuf_end_cpu_access,
> >> -    .map_atomic = omap_gem_dmabuf_kmap_atomic,
> >> -    .unmap_atomic = omap_gem_dmabuf_kunmap_atomic,
> >>      .map = omap_gem_dmabuf_kmap,
> >>      .unmap = omap_gem_dmabuf_kunmap,
> >>      .mmap = omap_gem_dmabuf_mmap,
> >> diff --git a/drivers/gpu/drm/tegra/gem.c b/drivers/gpu/drm/tegra/gem.c
> >> index 8b0b4ff64bb4..d7661702c11c 100644
> >> --- a/drivers/gpu/drm/tegra/gem.c
> >> +++ b/drivers/gpu/drm/tegra/gem.c
> >> @@ -596,18 +596,6 @@ static int tegra_gem_prime_end_cpu_access(struct dma_buf *buf,
> >>      return 0;
> >>   }
> >>
> >> -static void *tegra_gem_prime_kmap_atomic(struct dma_buf *buf,
> >> -                                     unsigned long page)
> >> -{
> >> -    return NULL;
> >> -}
> >> -
> >> -static void tegra_gem_prime_kunmap_atomic(struct dma_buf *buf,
> >> -                                      unsigned long page,
> >> -                                      void *addr)
> >> -{
> >> -}
> >> -
> >>   static void *tegra_gem_prime_kmap(struct dma_buf *buf, unsigned long page)
> >>   {
> >>      return NULL;
> >> @@ -648,8 +636,6 @@ static const struct dma_buf_ops tegra_gem_prime_dmabuf_ops = {
> >>      .release = tegra_gem_prime_release,
> >>      .begin_cpu_access = tegra_gem_prime_begin_cpu_access,
> >>      .end_cpu_access = tegra_gem_prime_end_cpu_access,
> >> -    .map_atomic = tegra_gem_prime_kmap_atomic,
> >> -    .unmap_atomic = tegra_gem_prime_kunmap_atomic,
> >>      .map = tegra_gem_prime_kmap,
> >>      .unmap = tegra_gem_prime_kunmap,
> >>      .mmap = tegra_gem_prime_mmap,
> >> diff --git a/drivers/gpu/drm/udl/udl_dmabuf.c b/drivers/gpu/drm/udl/udl_dmabuf.c
> >> index 5fdc8bdc2026..ae7225dedc30 100644
> >> --- a/drivers/gpu/drm/udl/udl_dmabuf.c
> >> +++ b/drivers/gpu/drm/udl/udl_dmabuf.c
> >> @@ -156,27 +156,12 @@ static void *udl_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long page_num)
> >>      return NULL;
> >>   }
> >>
> >> -static void *udl_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
> >> -                                unsigned long page_num)
> >> -{
> >> -    /* TODO */
> >> -
> >> -    return NULL;
> >> -}
> >> -
> >>   static void udl_dmabuf_kunmap(struct dma_buf *dma_buf,
> >>                            unsigned long page_num, void *addr)
> >>   {
> >>      /* TODO */
> >>   }
> >>
> >> -static void udl_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
> >> -                                 unsigned long page_num,
> >> -                                 void *addr)
> >> -{
> >> -    /* TODO */
> >> -}
> >> -
> >>   static int udl_dmabuf_mmap(struct dma_buf *dma_buf,
> >>                         struct vm_area_struct *vma)
> >>   {
> >> @@ -191,9 +176,7 @@ static const struct dma_buf_ops udl_dmabuf_ops = {
> >>      .map_dma_buf            = udl_map_dma_buf,
> >>      .unmap_dma_buf          = udl_unmap_dma_buf,
> >>      .map                    = udl_dmabuf_kmap,
> >> -    .map_atomic             = udl_dmabuf_kmap_atomic,
> >>      .unmap                  = udl_dmabuf_kunmap,
> >> -    .unmap_atomic           = udl_dmabuf_kunmap_atomic,
> >>      .mmap                   = udl_dmabuf_mmap,
> >>      .release                = drm_gem_dmabuf_release,
> >>   };
> >> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
> >> index fbffb37ccf42..373bc6da2f84 100644
> >> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
> >> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
> >> @@ -71,17 +71,6 @@ static void vmw_prime_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr)
> >>   {
> >>   }
> >>
> >> -static void *vmw_prime_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
> >> -            unsigned long page_num)
> >> -{
> >> -    return NULL;
> >> -}
> >> -
> >> -static void vmw_prime_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
> >> -            unsigned long page_num, void *addr)
> >> -{
> >> -
> >> -}
> >>   static void *vmw_prime_dmabuf_kmap(struct dma_buf *dma_buf,
> >>              unsigned long page_num)
> >>   {
> >> @@ -108,9 +97,7 @@ const struct dma_buf_ops vmw_prime_dmabuf_ops =  {
> >>      .unmap_dma_buf = vmw_prime_unmap_dma_buf,
> >>      .release = NULL,
> >>      .map = vmw_prime_dmabuf_kmap,
> >> -    .map_atomic = vmw_prime_dmabuf_kmap_atomic,
> >>      .unmap = vmw_prime_dmabuf_kunmap,
> >> -    .unmap_atomic = vmw_prime_dmabuf_kunmap_atomic,
> >>      .mmap = vmw_prime_dmabuf_mmap,
> >>      .vmap = vmw_prime_dmabuf_vmap,
> >>      .vunmap = vmw_prime_dmabuf_vunmap,
> >> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-contig.c b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> >> index 12d0072c52c2..aff0ab7bf83d 100644
> >> --- a/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> >> +++ b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> >> @@ -358,7 +358,6 @@ static const struct dma_buf_ops vb2_dc_dmabuf_ops = {
> >>      .map_dma_buf = vb2_dc_dmabuf_ops_map,
> >>      .unmap_dma_buf = vb2_dc_dmabuf_ops_unmap,
> >>      .map = vb2_dc_dmabuf_ops_kmap,
> >> -    .map_atomic = vb2_dc_dmabuf_ops_kmap,
> >>      .vmap = vb2_dc_dmabuf_ops_vmap,
> >>      .mmap = vb2_dc_dmabuf_ops_mmap,
> >>      .release = vb2_dc_dmabuf_ops_release,
> >> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-sg.c b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
> >> index cf94765e593f..015e737095cd 100644
> >> --- a/drivers/media/common/videobuf2/videobuf2-dma-sg.c
> >> +++ b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
> >> @@ -507,7 +507,6 @@ static const struct dma_buf_ops vb2_dma_sg_dmabuf_ops = {
> >>      .map_dma_buf = vb2_dma_sg_dmabuf_ops_map,
> >>      .unmap_dma_buf = vb2_dma_sg_dmabuf_ops_unmap,
> >>      .map = vb2_dma_sg_dmabuf_ops_kmap,
> >> -    .map_atomic = vb2_dma_sg_dmabuf_ops_kmap,
> >>      .vmap = vb2_dma_sg_dmabuf_ops_vmap,
> >>      .mmap = vb2_dma_sg_dmabuf_ops_mmap,
> >>      .release = vb2_dma_sg_dmabuf_ops_release,
> >> diff --git a/drivers/media/common/videobuf2/videobuf2-vmalloc.c b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
> >> index 298ffb9ecdae..467a4005164b 100644
> >> --- a/drivers/media/common/videobuf2/videobuf2-vmalloc.c
> >> +++ b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
> >> @@ -346,7 +346,6 @@ static const struct dma_buf_ops vb2_vmalloc_dmabuf_ops = {
> >>      .map_dma_buf = vb2_vmalloc_dmabuf_ops_map,
> >>      .unmap_dma_buf = vb2_vmalloc_dmabuf_ops_unmap,
> >>      .map = vb2_vmalloc_dmabuf_ops_kmap,
> >> -    .map_atomic = vb2_vmalloc_dmabuf_ops_kmap,
> >>      .vmap = vb2_vmalloc_dmabuf_ops_vmap,
> >>      .mmap = vb2_vmalloc_dmabuf_ops_mmap,
> >>      .release = vb2_vmalloc_dmabuf_ops_release,
> >> diff --git a/drivers/staging/android/ion/ion.c b/drivers/staging/android/ion/ion.c
> >> index 57e0d8035b2e..a46219ff5e16 100644
> >> --- a/drivers/staging/android/ion/ion.c
> >> +++ b/drivers/staging/android/ion/ion.c
> >> @@ -374,8 +374,6 @@ static const struct dma_buf_ops dma_buf_ops = {
> >>      .detach = ion_dma_buf_detatch,
> >>      .begin_cpu_access = ion_dma_buf_begin_cpu_access,
> >>      .end_cpu_access = ion_dma_buf_end_cpu_access,
> >> -    .map_atomic = ion_dma_buf_kmap,
> >> -    .unmap_atomic = ion_dma_buf_kunmap,
> >>      .map = ion_dma_buf_kmap,
> >>      .unmap = ion_dma_buf_kunmap,
> >>   };
> >> diff --git a/drivers/tee/tee_shm.c b/drivers/tee/tee_shm.c
> >> index 556960a1bab3..df4a1553b78b 100644
> >> --- a/drivers/tee/tee_shm.c
> >> +++ b/drivers/tee/tee_shm.c
> >> @@ -80,11 +80,6 @@ static void tee_shm_op_release(struct dma_buf *dmabuf)
> >>      tee_shm_release(shm);
> >>   }
> >>
> >> -static void *tee_shm_op_map_atomic(struct dma_buf *dmabuf, unsigned long pgnum)
> >> -{
> >> -    return NULL;
> >> -}
> >> -
> >>   static void *tee_shm_op_map(struct dma_buf *dmabuf, unsigned long pgnum)
> >>   {
> >>      return NULL;
> >> @@ -107,7 +102,6 @@ static const struct dma_buf_ops tee_shm_dma_buf_ops = {
> >>      .map_dma_buf = tee_shm_op_map_dma_buf,
> >>      .unmap_dma_buf = tee_shm_op_unmap_dma_buf,
> >>      .release = tee_shm_op_release,
> >> -    .map_atomic = tee_shm_op_map_atomic,
> >>      .map = tee_shm_op_map,
> >>      .mmap = tee_shm_op_mmap,
> >>   };
> >> diff --git a/include/drm/drm_prime.h b/include/drm/drm_prime.h
> >> index ef338151cea8..d716d653b096 100644
> >> --- a/include/drm/drm_prime.h
> >> +++ b/include/drm/drm_prime.h
> >> @@ -93,10 +93,6 @@ void drm_gem_unmap_dma_buf(struct dma_buf_attachment *attach,
> >>                         enum dma_data_direction dir);
> >>   void *drm_gem_dmabuf_vmap(struct dma_buf *dma_buf);
> >>   void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr);
> >> -void *drm_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
> >> -                             unsigned long page_num);
> >> -void drm_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
> >> -                              unsigned long page_num, void *addr);
> >>   void *drm_gem_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long page_num);
> >>   void drm_gem_dmabuf_kunmap(struct dma_buf *dma_buf, unsigned long page_num,
> >>                         void *addr);
> >> diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
> >> index 346caf77937f..d17cadd76802 100644
> >> --- a/include/linux/dma-buf.h
> >> +++ b/include/linux/dma-buf.h
> >> @@ -205,8 +205,6 @@ struct dma_buf_ops {
> >>       * to be restarted.
> >>       */
> >>      int (*end_cpu_access)(struct dma_buf *, enum dma_data_direction);
> >> -    void *(*map_atomic)(struct dma_buf *, unsigned long);
> >> -    void (*unmap_atomic)(struct dma_buf *, unsigned long, void *);
> >>      void *(*map)(struct dma_buf *, unsigned long);
> >>      void (*unmap)(struct dma_buf *, unsigned long, void *);
> >>
> >> @@ -394,8 +392,6 @@ int dma_buf_begin_cpu_access(struct dma_buf *dma_buf,
> >>                           enum dma_data_direction dir);
> >>   int dma_buf_end_cpu_access(struct dma_buf *dma_buf,
> >>                         enum dma_data_direction dir);
> >> -void *dma_buf_kmap_atomic(struct dma_buf *, unsigned long);
> >> -void dma_buf_kunmap_atomic(struct dma_buf *, unsigned long, void *);
> >>   void *dma_buf_kmap(struct dma_buf *, unsigned long);
> >>   void dma_buf_kunmap(struct dma_buf *, unsigned long, void *);
> >>
> >> --
> >> 2.14.1
> >>
> >> _______________________________________________
> >> dri-devel mailing list
> >> dri-devel@lists.freedesktop.org
> >> https://lists.freedesktop.org/mailman/listinfo/dri-devel
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel



-- 
Thanks and regards,

Sumit Semwal
Linaro Mobile Group - Kernel Team Lead
Linaro.org │ Open source software for ARM SoCs

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 2/5] dma-buf: remove kmap_atomic interface
@ 2018-06-20  6:10         ` Sumit Semwal
  0 siblings, 0 replies; 58+ messages in thread
From: Sumit Semwal @ 2018-06-20  6:10 UTC (permalink / raw)
  To: Christian Koenig
  Cc: Linaro MM SIG, DRI mailing list, amd-gfx list, linux-media

Hi Christian,
On Tue, 19 Jun 2018 at 20:17, Christian König <christian.koenig@amd.com> wrote:
>
> Am 18.06.2018 um 10:18 schrieb Daniel Vetter:
> > On Fri, Jun 01, 2018 at 02:00:17PM +0200, Christian König wrote:
> >> Neither used nor correctly implemented anywhere. Just completely remove
> >> the interface.
> >>
> >> Signed-off-by: Christian König <christian.koenig@amd.com>
> > I wonder whether we can nuke the normal kmap stuff too ... everyone seems
> > to want/use the vmap stuff for kernel-internal mapping needs.
> >
> > Anyway, this looks good.
Hope am not too late (was out of office for some time) - this looks ok
to me, please feel free to add my
Acked-by: Sumit Semwal <sumit.semwal@linaro.org>

> >> ---
> >>   drivers/dma-buf/dma-buf.c                          | 44 ----------------------
> >>   drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c          |  2 -
> >>   drivers/gpu/drm/armada/armada_gem.c                |  2 -
> >>   drivers/gpu/drm/drm_prime.c                        | 26 -------------
> >>   drivers/gpu/drm/i915/i915_gem_dmabuf.c             | 11 ------
> >>   drivers/gpu/drm/i915/selftests/mock_dmabuf.c       |  2 -
> >>   drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c          |  2 -
> >>   drivers/gpu/drm/tegra/gem.c                        | 14 -------
> >>   drivers/gpu/drm/udl/udl_dmabuf.c                   | 17 ---------
> >>   drivers/gpu/drm/vmwgfx/vmwgfx_prime.c              | 13 -------
> >>   .../media/common/videobuf2/videobuf2-dma-contig.c  |  1 -
> >>   drivers/media/common/videobuf2/videobuf2-dma-sg.c  |  1 -
> >>   drivers/media/common/videobuf2/videobuf2-vmalloc.c |  1 -
> >>   drivers/staging/android/ion/ion.c                  |  2 -
> >>   drivers/tee/tee_shm.c                              |  6 ---
> >>   include/drm/drm_prime.h                            |  4 --
> >>   include/linux/dma-buf.h                            |  4 --
> >>   17 files changed, 152 deletions(-)
> >>
> >> diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
> >> index e99a8d19991b..e4c657d9fad7 100644
> >> --- a/drivers/dma-buf/dma-buf.c
> >> +++ b/drivers/dma-buf/dma-buf.c
> >> @@ -405,7 +405,6 @@ struct dma_buf *dma_buf_export(const struct dma_buf_export_info *exp_info)
> >>                        || !exp_info->ops->map_dma_buf
> >>                        || !exp_info->ops->unmap_dma_buf
> >>                        || !exp_info->ops->release
> >> -                      || !exp_info->ops->map_atomic
> >>                        || !exp_info->ops->map
> >>                        || !exp_info->ops->mmap)) {
> >>              return ERR_PTR(-EINVAL);
> >> @@ -687,14 +686,6 @@ EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment);
> >>    *      void \*dma_buf_kmap(struct dma_buf \*, unsigned long);
> >>    *      void dma_buf_kunmap(struct dma_buf \*, unsigned long, void \*);
> >>    *
> >> - *   There are also atomic variants of these interfaces. Like for kmap they
> >> - *   facilitate non-blocking fast-paths. Neither the importer nor the exporter
> >> - *   (in the callback) is allowed to block when using these.
> >> - *
> >> - *   Interfaces::
> >> - *      void \*dma_buf_kmap_atomic(struct dma_buf \*, unsigned long);
> >> - *      void dma_buf_kunmap_atomic(struct dma_buf \*, unsigned long, void \*);
> >> - *
> >>    *   For importers all the restrictions of using kmap apply, like the limited
> >>    *   supply of kmap_atomic slots. Hence an importer shall only hold onto at
> >>    *   max 2 atomic dma_buf kmaps at the same time (in any given process context).
> > This is also about atomic kmap ...
> >
> > And the subsequent language around "Note that these calls need to always
> > succeed." is also not true, might be good to update that stating that kmap
> > is optional (like we say already for vmap).
> >
> > With those docs nits addressed:
> >
> > Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
>
> I've fixed up patch #1 and #2 and added your Reviewed-by tag.
>
> Since I finally had time to install dim do you have any objections that
> I now run "dim push drm-misc-next" with those two applied?
>
> Regards,
> Christian.
>
> >
> >> @@ -859,41 +850,6 @@ int dma_buf_end_cpu_access(struct dma_buf *dmabuf,
> >>   }
> >>   EXPORT_SYMBOL_GPL(dma_buf_end_cpu_access);
> >>
> >> -/**
> >> - * dma_buf_kmap_atomic - Map a page of the buffer object into kernel address
> >> - * space. The same restrictions as for kmap_atomic and friends apply.
> >> - * @dmabuf: [in]    buffer to map page from.
> >> - * @page_num:       [in]    page in PAGE_SIZE units to map.
> >> - *
> >> - * This call must always succeed, any necessary preparations that might fail
> >> - * need to be done in begin_cpu_access.
> >> - */
> >> -void *dma_buf_kmap_atomic(struct dma_buf *dmabuf, unsigned long page_num)
> >> -{
> >> -    WARN_ON(!dmabuf);
> >> -
> >> -    return dmabuf->ops->map_atomic(dmabuf, page_num);
> >> -}
> >> -EXPORT_SYMBOL_GPL(dma_buf_kmap_atomic);
> >> -
> >> -/**
> >> - * dma_buf_kunmap_atomic - Unmap a page obtained by dma_buf_kmap_atomic.
> >> - * @dmabuf: [in]    buffer to unmap page from.
> >> - * @page_num:       [in]    page in PAGE_SIZE units to unmap.
> >> - * @vaddr:  [in]    kernel space pointer obtained from dma_buf_kmap_atomic.
> >> - *
> >> - * This call must always succeed.
> >> - */
> >> -void dma_buf_kunmap_atomic(struct dma_buf *dmabuf, unsigned long page_num,
> >> -                       void *vaddr)
> >> -{
> >> -    WARN_ON(!dmabuf);
> >> -
> >> -    if (dmabuf->ops->unmap_atomic)
> >> -            dmabuf->ops->unmap_atomic(dmabuf, page_num, vaddr);
> >> -}
> >> -EXPORT_SYMBOL_GPL(dma_buf_kunmap_atomic);
> >> -
> >>   /**
> >>    * dma_buf_kmap - Map a page of the buffer object into kernel address space. The
> >>    * same restrictions as for kmap and friends apply.
> >> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> >> index f1500f1ec0f5..a156b3891a3f 100644
> >> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> >> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> >> @@ -244,9 +244,7 @@ static const struct dma_buf_ops amdgpu_dmabuf_ops = {
> >>      .release = drm_gem_dmabuf_release,
> >>      .begin_cpu_access = amdgpu_gem_begin_cpu_access,
> >>      .map = drm_gem_dmabuf_kmap,
> >> -    .map_atomic = drm_gem_dmabuf_kmap_atomic,
> >>      .unmap = drm_gem_dmabuf_kunmap,
> >> -    .unmap_atomic = drm_gem_dmabuf_kunmap_atomic,
> >>      .mmap = drm_gem_dmabuf_mmap,
> >>      .vmap = drm_gem_dmabuf_vmap,
> >>      .vunmap = drm_gem_dmabuf_vunmap,
> >> diff --git a/drivers/gpu/drm/armada/armada_gem.c b/drivers/gpu/drm/armada/armada_gem.c
> >> index a97f509743a5..3fb37c75c065 100644
> >> --- a/drivers/gpu/drm/armada/armada_gem.c
> >> +++ b/drivers/gpu/drm/armada/armada_gem.c
> >> @@ -490,8 +490,6 @@ static const struct dma_buf_ops armada_gem_prime_dmabuf_ops = {
> >>      .map_dma_buf    = armada_gem_prime_map_dma_buf,
> >>      .unmap_dma_buf  = armada_gem_prime_unmap_dma_buf,
> >>      .release        = drm_gem_dmabuf_release,
> >> -    .map_atomic     = armada_gem_dmabuf_no_kmap,
> >> -    .unmap_atomic   = armada_gem_dmabuf_no_kunmap,
> >>      .map            = armada_gem_dmabuf_no_kmap,
> >>      .unmap          = armada_gem_dmabuf_no_kunmap,
> >>      .mmap           = armada_gem_dmabuf_mmap,
> >> diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
> >> index 4a3a232fea67..b28fa8f44c8b 100644
> >> --- a/drivers/gpu/drm/drm_prime.c
> >> +++ b/drivers/gpu/drm/drm_prime.c
> >> @@ -426,30 +426,6 @@ void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr)
> >>   }
> >>   EXPORT_SYMBOL(drm_gem_dmabuf_vunmap);
> >>
> >> -/**
> >> - * drm_gem_dmabuf_kmap_atomic - map_atomic implementation for GEM
> >> - *
> >> - * Not implemented. This can be used as the &dma_buf_ops.map_atomic callback.
> >> - */
> >> -void *drm_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
> >> -                             unsigned long page_num)
> >> -{
> >> -    return NULL;
> >> -}
> >> -EXPORT_SYMBOL(drm_gem_dmabuf_kmap_atomic);
> >> -
> >> -/**
> >> - * drm_gem_dmabuf_kunmap_atomic - unmap_atomic implementation for GEM
> >> - *
> >> - * Not implemented. This can be used as the &dma_buf_ops.unmap_atomic callback.
> >> - */
> >> -void drm_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
> >> -                              unsigned long page_num, void *addr)
> >> -{
> >> -
> >> -}
> >> -EXPORT_SYMBOL(drm_gem_dmabuf_kunmap_atomic);
> >> -
> >>   /**
> >>    * drm_gem_dmabuf_kmap - map implementation for GEM
> >>    *
> >> @@ -502,9 +478,7 @@ static const struct dma_buf_ops drm_gem_prime_dmabuf_ops =  {
> >>      .unmap_dma_buf = drm_gem_unmap_dma_buf,
> >>      .release = drm_gem_dmabuf_release,
> >>      .map = drm_gem_dmabuf_kmap,
> >> -    .map_atomic = drm_gem_dmabuf_kmap_atomic,
> >>      .unmap = drm_gem_dmabuf_kunmap,
> >> -    .unmap_atomic = drm_gem_dmabuf_kunmap_atomic,
> >>      .mmap = drm_gem_dmabuf_mmap,
> >>      .vmap = drm_gem_dmabuf_vmap,
> >>      .vunmap = drm_gem_dmabuf_vunmap,
> >> diff --git a/drivers/gpu/drm/i915/i915_gem_dmabuf.c b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
> >> index 69a7aec49e84..82e2ca17a441 100644
> >> --- a/drivers/gpu/drm/i915/i915_gem_dmabuf.c
> >> +++ b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
> >> @@ -111,15 +111,6 @@ static void i915_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr)
> >>      i915_gem_object_unpin_map(obj);
> >>   }
> >>
> >> -static void *i915_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf, unsigned long page_num)
> >> -{
> >> -    return NULL;
> >> -}
> >> -
> >> -static void i915_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf, unsigned long page_num, void *addr)
> >> -{
> >> -
> >> -}
> >>   static void *i915_gem_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long page_num)
> >>   {
> >>      struct drm_i915_gem_object *obj = dma_buf_to_obj(dma_buf);
> >> @@ -225,9 +216,7 @@ static const struct dma_buf_ops i915_dmabuf_ops =  {
> >>      .unmap_dma_buf = i915_gem_unmap_dma_buf,
> >>      .release = drm_gem_dmabuf_release,
> >>      .map = i915_gem_dmabuf_kmap,
> >> -    .map_atomic = i915_gem_dmabuf_kmap_atomic,
> >>      .unmap = i915_gem_dmabuf_kunmap,
> >> -    .unmap_atomic = i915_gem_dmabuf_kunmap_atomic,
> >>      .mmap = i915_gem_dmabuf_mmap,
> >>      .vmap = i915_gem_dmabuf_vmap,
> >>      .vunmap = i915_gem_dmabuf_vunmap,
> >> diff --git a/drivers/gpu/drm/i915/selftests/mock_dmabuf.c b/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
> >> index 302f7d103635..f81fda8ea45e 100644
> >> --- a/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
> >> +++ b/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
> >> @@ -130,9 +130,7 @@ static const struct dma_buf_ops mock_dmabuf_ops =  {
> >>      .unmap_dma_buf = mock_unmap_dma_buf,
> >>      .release = mock_dmabuf_release,
> >>      .map = mock_dmabuf_kmap,
> >> -    .map_atomic = mock_dmabuf_kmap_atomic,
> >>      .unmap = mock_dmabuf_kunmap,
> >> -    .unmap_atomic = mock_dmabuf_kunmap_atomic,
> >>      .mmap = mock_dmabuf_mmap,
> >>      .vmap = mock_dmabuf_vmap,
> >>      .vunmap = mock_dmabuf_vunmap,
> >> diff --git a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
> >> index 8e41d649e248..1a073f9b2834 100644
> >> --- a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
> >> +++ b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
> >> @@ -148,8 +148,6 @@ static const struct dma_buf_ops omap_dmabuf_ops = {
> >>      .release = drm_gem_dmabuf_release,
> >>      .begin_cpu_access = omap_gem_dmabuf_begin_cpu_access,
> >>      .end_cpu_access = omap_gem_dmabuf_end_cpu_access,
> >> -    .map_atomic = omap_gem_dmabuf_kmap_atomic,
> >> -    .unmap_atomic = omap_gem_dmabuf_kunmap_atomic,
> >>      .map = omap_gem_dmabuf_kmap,
> >>      .unmap = omap_gem_dmabuf_kunmap,
> >>      .mmap = omap_gem_dmabuf_mmap,
> >> diff --git a/drivers/gpu/drm/tegra/gem.c b/drivers/gpu/drm/tegra/gem.c
> >> index 8b0b4ff64bb4..d7661702c11c 100644
> >> --- a/drivers/gpu/drm/tegra/gem.c
> >> +++ b/drivers/gpu/drm/tegra/gem.c
> >> @@ -596,18 +596,6 @@ static int tegra_gem_prime_end_cpu_access(struct dma_buf *buf,
> >>      return 0;
> >>   }
> >>
> >> -static void *tegra_gem_prime_kmap_atomic(struct dma_buf *buf,
> >> -                                     unsigned long page)
> >> -{
> >> -    return NULL;
> >> -}
> >> -
> >> -static void tegra_gem_prime_kunmap_atomic(struct dma_buf *buf,
> >> -                                      unsigned long page,
> >> -                                      void *addr)
> >> -{
> >> -}
> >> -
> >>   static void *tegra_gem_prime_kmap(struct dma_buf *buf, unsigned long page)
> >>   {
> >>      return NULL;
> >> @@ -648,8 +636,6 @@ static const struct dma_buf_ops tegra_gem_prime_dmabuf_ops = {
> >>      .release = tegra_gem_prime_release,
> >>      .begin_cpu_access = tegra_gem_prime_begin_cpu_access,
> >>      .end_cpu_access = tegra_gem_prime_end_cpu_access,
> >> -    .map_atomic = tegra_gem_prime_kmap_atomic,
> >> -    .unmap_atomic = tegra_gem_prime_kunmap_atomic,
> >>      .map = tegra_gem_prime_kmap,
> >>      .unmap = tegra_gem_prime_kunmap,
> >>      .mmap = tegra_gem_prime_mmap,
> >> diff --git a/drivers/gpu/drm/udl/udl_dmabuf.c b/drivers/gpu/drm/udl/udl_dmabuf.c
> >> index 5fdc8bdc2026..ae7225dedc30 100644
> >> --- a/drivers/gpu/drm/udl/udl_dmabuf.c
> >> +++ b/drivers/gpu/drm/udl/udl_dmabuf.c
> >> @@ -156,27 +156,12 @@ static void *udl_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long page_num)
> >>      return NULL;
> >>   }
> >>
> >> -static void *udl_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
> >> -                                unsigned long page_num)
> >> -{
> >> -    /* TODO */
> >> -
> >> -    return NULL;
> >> -}
> >> -
> >>   static void udl_dmabuf_kunmap(struct dma_buf *dma_buf,
> >>                            unsigned long page_num, void *addr)
> >>   {
> >>      /* TODO */
> >>   }
> >>
> >> -static void udl_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
> >> -                                 unsigned long page_num,
> >> -                                 void *addr)
> >> -{
> >> -    /* TODO */
> >> -}
> >> -
> >>   static int udl_dmabuf_mmap(struct dma_buf *dma_buf,
> >>                         struct vm_area_struct *vma)
> >>   {
> >> @@ -191,9 +176,7 @@ static const struct dma_buf_ops udl_dmabuf_ops = {
> >>      .map_dma_buf            = udl_map_dma_buf,
> >>      .unmap_dma_buf          = udl_unmap_dma_buf,
> >>      .map                    = udl_dmabuf_kmap,
> >> -    .map_atomic             = udl_dmabuf_kmap_atomic,
> >>      .unmap                  = udl_dmabuf_kunmap,
> >> -    .unmap_atomic           = udl_dmabuf_kunmap_atomic,
> >>      .mmap                   = udl_dmabuf_mmap,
> >>      .release                = drm_gem_dmabuf_release,
> >>   };
> >> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
> >> index fbffb37ccf42..373bc6da2f84 100644
> >> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
> >> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
> >> @@ -71,17 +71,6 @@ static void vmw_prime_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr)
> >>   {
> >>   }
> >>
> >> -static void *vmw_prime_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
> >> -            unsigned long page_num)
> >> -{
> >> -    return NULL;
> >> -}
> >> -
> >> -static void vmw_prime_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
> >> -            unsigned long page_num, void *addr)
> >> -{
> >> -
> >> -}
> >>   static void *vmw_prime_dmabuf_kmap(struct dma_buf *dma_buf,
> >>              unsigned long page_num)
> >>   {
> >> @@ -108,9 +97,7 @@ const struct dma_buf_ops vmw_prime_dmabuf_ops =  {
> >>      .unmap_dma_buf = vmw_prime_unmap_dma_buf,
> >>      .release = NULL,
> >>      .map = vmw_prime_dmabuf_kmap,
> >> -    .map_atomic = vmw_prime_dmabuf_kmap_atomic,
> >>      .unmap = vmw_prime_dmabuf_kunmap,
> >> -    .unmap_atomic = vmw_prime_dmabuf_kunmap_atomic,
> >>      .mmap = vmw_prime_dmabuf_mmap,
> >>      .vmap = vmw_prime_dmabuf_vmap,
> >>      .vunmap = vmw_prime_dmabuf_vunmap,
> >> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-contig.c b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> >> index 12d0072c52c2..aff0ab7bf83d 100644
> >> --- a/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> >> +++ b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> >> @@ -358,7 +358,6 @@ static const struct dma_buf_ops vb2_dc_dmabuf_ops = {
> >>      .map_dma_buf = vb2_dc_dmabuf_ops_map,
> >>      .unmap_dma_buf = vb2_dc_dmabuf_ops_unmap,
> >>      .map = vb2_dc_dmabuf_ops_kmap,
> >> -    .map_atomic = vb2_dc_dmabuf_ops_kmap,
> >>      .vmap = vb2_dc_dmabuf_ops_vmap,
> >>      .mmap = vb2_dc_dmabuf_ops_mmap,
> >>      .release = vb2_dc_dmabuf_ops_release,
> >> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-sg.c b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
> >> index cf94765e593f..015e737095cd 100644
> >> --- a/drivers/media/common/videobuf2/videobuf2-dma-sg.c
> >> +++ b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
> >> @@ -507,7 +507,6 @@ static const struct dma_buf_ops vb2_dma_sg_dmabuf_ops = {
> >>      .map_dma_buf = vb2_dma_sg_dmabuf_ops_map,
> >>      .unmap_dma_buf = vb2_dma_sg_dmabuf_ops_unmap,
> >>      .map = vb2_dma_sg_dmabuf_ops_kmap,
> >> -    .map_atomic = vb2_dma_sg_dmabuf_ops_kmap,
> >>      .vmap = vb2_dma_sg_dmabuf_ops_vmap,
> >>      .mmap = vb2_dma_sg_dmabuf_ops_mmap,
> >>      .release = vb2_dma_sg_dmabuf_ops_release,
> >> diff --git a/drivers/media/common/videobuf2/videobuf2-vmalloc.c b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
> >> index 298ffb9ecdae..467a4005164b 100644
> >> --- a/drivers/media/common/videobuf2/videobuf2-vmalloc.c
> >> +++ b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
> >> @@ -346,7 +346,6 @@ static const struct dma_buf_ops vb2_vmalloc_dmabuf_ops = {
> >>      .map_dma_buf = vb2_vmalloc_dmabuf_ops_map,
> >>      .unmap_dma_buf = vb2_vmalloc_dmabuf_ops_unmap,
> >>      .map = vb2_vmalloc_dmabuf_ops_kmap,
> >> -    .map_atomic = vb2_vmalloc_dmabuf_ops_kmap,
> >>      .vmap = vb2_vmalloc_dmabuf_ops_vmap,
> >>      .mmap = vb2_vmalloc_dmabuf_ops_mmap,
> >>      .release = vb2_vmalloc_dmabuf_ops_release,
> >> diff --git a/drivers/staging/android/ion/ion.c b/drivers/staging/android/ion/ion.c
> >> index 57e0d8035b2e..a46219ff5e16 100644
> >> --- a/drivers/staging/android/ion/ion.c
> >> +++ b/drivers/staging/android/ion/ion.c
> >> @@ -374,8 +374,6 @@ static const struct dma_buf_ops dma_buf_ops = {
> >>      .detach = ion_dma_buf_detatch,
> >>      .begin_cpu_access = ion_dma_buf_begin_cpu_access,
> >>      .end_cpu_access = ion_dma_buf_end_cpu_access,
> >> -    .map_atomic = ion_dma_buf_kmap,
> >> -    .unmap_atomic = ion_dma_buf_kunmap,
> >>      .map = ion_dma_buf_kmap,
> >>      .unmap = ion_dma_buf_kunmap,
> >>   };
> >> diff --git a/drivers/tee/tee_shm.c b/drivers/tee/tee_shm.c
> >> index 556960a1bab3..df4a1553b78b 100644
> >> --- a/drivers/tee/tee_shm.c
> >> +++ b/drivers/tee/tee_shm.c
> >> @@ -80,11 +80,6 @@ static void tee_shm_op_release(struct dma_buf *dmabuf)
> >>      tee_shm_release(shm);
> >>   }
> >>
> >> -static void *tee_shm_op_map_atomic(struct dma_buf *dmabuf, unsigned long pgnum)
> >> -{
> >> -    return NULL;
> >> -}
> >> -
> >>   static void *tee_shm_op_map(struct dma_buf *dmabuf, unsigned long pgnum)
> >>   {
> >>      return NULL;
> >> @@ -107,7 +102,6 @@ static const struct dma_buf_ops tee_shm_dma_buf_ops = {
> >>      .map_dma_buf = tee_shm_op_map_dma_buf,
> >>      .unmap_dma_buf = tee_shm_op_unmap_dma_buf,
> >>      .release = tee_shm_op_release,
> >> -    .map_atomic = tee_shm_op_map_atomic,
> >>      .map = tee_shm_op_map,
> >>      .mmap = tee_shm_op_mmap,
> >>   };
> >> diff --git a/include/drm/drm_prime.h b/include/drm/drm_prime.h
> >> index ef338151cea8..d716d653b096 100644
> >> --- a/include/drm/drm_prime.h
> >> +++ b/include/drm/drm_prime.h
> >> @@ -93,10 +93,6 @@ void drm_gem_unmap_dma_buf(struct dma_buf_attachment *attach,
> >>                         enum dma_data_direction dir);
> >>   void *drm_gem_dmabuf_vmap(struct dma_buf *dma_buf);
> >>   void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr);
> >> -void *drm_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
> >> -                             unsigned long page_num);
> >> -void drm_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
> >> -                              unsigned long page_num, void *addr);
> >>   void *drm_gem_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long page_num);
> >>   void drm_gem_dmabuf_kunmap(struct dma_buf *dma_buf, unsigned long page_num,
> >>                         void *addr);
> >> diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
> >> index 346caf77937f..d17cadd76802 100644
> >> --- a/include/linux/dma-buf.h
> >> +++ b/include/linux/dma-buf.h
> >> @@ -205,8 +205,6 @@ struct dma_buf_ops {
> >>       * to be restarted.
> >>       */
> >>      int (*end_cpu_access)(struct dma_buf *, enum dma_data_direction);
> >> -    void *(*map_atomic)(struct dma_buf *, unsigned long);
> >> -    void (*unmap_atomic)(struct dma_buf *, unsigned long, void *);
> >>      void *(*map)(struct dma_buf *, unsigned long);
> >>      void (*unmap)(struct dma_buf *, unsigned long, void *);
> >>
> >> @@ -394,8 +392,6 @@ int dma_buf_begin_cpu_access(struct dma_buf *dma_buf,
> >>                           enum dma_data_direction dir);
> >>   int dma_buf_end_cpu_access(struct dma_buf *dma_buf,
> >>                         enum dma_data_direction dir);
> >> -void *dma_buf_kmap_atomic(struct dma_buf *, unsigned long);
> >> -void dma_buf_kunmap_atomic(struct dma_buf *, unsigned long, void *);
> >>   void *dma_buf_kmap(struct dma_buf *, unsigned long);
> >>   void dma_buf_kunmap(struct dma_buf *, unsigned long, void *);
> >>
> >> --
> >> 2.14.1
> >>
> >> _______________________________________________
> >> dri-devel mailing list
> >> dri-devel@lists.freedesktop.org
> >> https://lists.freedesktop.org/mailman/listinfo/dri-devel
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel



-- 
Thanks and regards,

Sumit Semwal
Linaro Mobile Group - Kernel Team Lead
Linaro.org │ Open source software for ARM SoCs
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 2/5] dma-buf: remove kmap_atomic interface
@ 2018-06-20  6:22           ` Christian König
  0 siblings, 0 replies; 58+ messages in thread
From: Christian König @ 2018-06-20  6:22 UTC (permalink / raw)
  To: Sumit Semwal
  Cc: Daniel Vetter, Linaro MM SIG, amd-gfx list, DRI mailing list,
	linux-media

Am 20.06.2018 um 08:10 schrieb Sumit Semwal:
> Hi Christian,
> On Tue, 19 Jun 2018 at 20:17, Christian König <christian.koenig@amd.com> wrote:
>> Am 18.06.2018 um 10:18 schrieb Daniel Vetter:
>>> On Fri, Jun 01, 2018 at 02:00:17PM +0200, Christian König wrote:
>>>> Neither used nor correctly implemented anywhere. Just completely remove
>>>> the interface.
>>>>
>>>> Signed-off-by: Christian König <christian.koenig@amd.com>
>>> I wonder whether we can nuke the normal kmap stuff too ... everyone seems
>>> to want/use the vmap stuff for kernel-internal mapping needs.
>>>
>>> Anyway, this looks good.
> Hope am not too late (was out of office for some time) - this looks ok
> to me, please feel free to add my
> Acked-by: Sumit Semwal <sumit.semwal@linaro.org>

No, you're not to late. I was actually holding back a bit because of 
missing Ack's.

Thanks for the response,
Christian.

>
>>>> ---
>>>>    drivers/dma-buf/dma-buf.c                          | 44 ----------------------
>>>>    drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c          |  2 -
>>>>    drivers/gpu/drm/armada/armada_gem.c                |  2 -
>>>>    drivers/gpu/drm/drm_prime.c                        | 26 -------------
>>>>    drivers/gpu/drm/i915/i915_gem_dmabuf.c             | 11 ------
>>>>    drivers/gpu/drm/i915/selftests/mock_dmabuf.c       |  2 -
>>>>    drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c          |  2 -
>>>>    drivers/gpu/drm/tegra/gem.c                        | 14 -------
>>>>    drivers/gpu/drm/udl/udl_dmabuf.c                   | 17 ---------
>>>>    drivers/gpu/drm/vmwgfx/vmwgfx_prime.c              | 13 -------
>>>>    .../media/common/videobuf2/videobuf2-dma-contig.c  |  1 -
>>>>    drivers/media/common/videobuf2/videobuf2-dma-sg.c  |  1 -
>>>>    drivers/media/common/videobuf2/videobuf2-vmalloc.c |  1 -
>>>>    drivers/staging/android/ion/ion.c                  |  2 -
>>>>    drivers/tee/tee_shm.c                              |  6 ---
>>>>    include/drm/drm_prime.h                            |  4 --
>>>>    include/linux/dma-buf.h                            |  4 --
>>>>    17 files changed, 152 deletions(-)
>>>>
>>>> diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
>>>> index e99a8d19991b..e4c657d9fad7 100644
>>>> --- a/drivers/dma-buf/dma-buf.c
>>>> +++ b/drivers/dma-buf/dma-buf.c
>>>> @@ -405,7 +405,6 @@ struct dma_buf *dma_buf_export(const struct dma_buf_export_info *exp_info)
>>>>                         || !exp_info->ops->map_dma_buf
>>>>                         || !exp_info->ops->unmap_dma_buf
>>>>                         || !exp_info->ops->release
>>>> -                      || !exp_info->ops->map_atomic
>>>>                         || !exp_info->ops->map
>>>>                         || !exp_info->ops->mmap)) {
>>>>               return ERR_PTR(-EINVAL);
>>>> @@ -687,14 +686,6 @@ EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment);
>>>>     *      void \*dma_buf_kmap(struct dma_buf \*, unsigned long);
>>>>     *      void dma_buf_kunmap(struct dma_buf \*, unsigned long, void \*);
>>>>     *
>>>> - *   There are also atomic variants of these interfaces. Like for kmap they
>>>> - *   facilitate non-blocking fast-paths. Neither the importer nor the exporter
>>>> - *   (in the callback) is allowed to block when using these.
>>>> - *
>>>> - *   Interfaces::
>>>> - *      void \*dma_buf_kmap_atomic(struct dma_buf \*, unsigned long);
>>>> - *      void dma_buf_kunmap_atomic(struct dma_buf \*, unsigned long, void \*);
>>>> - *
>>>>     *   For importers all the restrictions of using kmap apply, like the limited
>>>>     *   supply of kmap_atomic slots. Hence an importer shall only hold onto at
>>>>     *   max 2 atomic dma_buf kmaps at the same time (in any given process context).
>>> This is also about atomic kmap ...
>>>
>>> And the subsequent language around "Note that these calls need to always
>>> succeed." is also not true, might be good to update that stating that kmap
>>> is optional (like we say already for vmap).
>>>
>>> With those docs nits addressed:
>>>
>>> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
>> I've fixed up patch #1 and #2 and added your Reviewed-by tag.
>>
>> Since I finally had time to install dim do you have any objections that
>> I now run "dim push drm-misc-next" with those two applied?
>>
>> Regards,
>> Christian.
>>
>>>> @@ -859,41 +850,6 @@ int dma_buf_end_cpu_access(struct dma_buf *dmabuf,
>>>>    }
>>>>    EXPORT_SYMBOL_GPL(dma_buf_end_cpu_access);
>>>>
>>>> -/**
>>>> - * dma_buf_kmap_atomic - Map a page of the buffer object into kernel address
>>>> - * space. The same restrictions as for kmap_atomic and friends apply.
>>>> - * @dmabuf: [in]    buffer to map page from.
>>>> - * @page_num:       [in]    page in PAGE_SIZE units to map.
>>>> - *
>>>> - * This call must always succeed, any necessary preparations that might fail
>>>> - * need to be done in begin_cpu_access.
>>>> - */
>>>> -void *dma_buf_kmap_atomic(struct dma_buf *dmabuf, unsigned long page_num)
>>>> -{
>>>> -    WARN_ON(!dmabuf);
>>>> -
>>>> -    return dmabuf->ops->map_atomic(dmabuf, page_num);
>>>> -}
>>>> -EXPORT_SYMBOL_GPL(dma_buf_kmap_atomic);
>>>> -
>>>> -/**
>>>> - * dma_buf_kunmap_atomic - Unmap a page obtained by dma_buf_kmap_atomic.
>>>> - * @dmabuf: [in]    buffer to unmap page from.
>>>> - * @page_num:       [in]    page in PAGE_SIZE units to unmap.
>>>> - * @vaddr:  [in]    kernel space pointer obtained from dma_buf_kmap_atomic.
>>>> - *
>>>> - * This call must always succeed.
>>>> - */
>>>> -void dma_buf_kunmap_atomic(struct dma_buf *dmabuf, unsigned long page_num,
>>>> -                       void *vaddr)
>>>> -{
>>>> -    WARN_ON(!dmabuf);
>>>> -
>>>> -    if (dmabuf->ops->unmap_atomic)
>>>> -            dmabuf->ops->unmap_atomic(dmabuf, page_num, vaddr);
>>>> -}
>>>> -EXPORT_SYMBOL_GPL(dma_buf_kunmap_atomic);
>>>> -
>>>>    /**
>>>>     * dma_buf_kmap - Map a page of the buffer object into kernel address space. The
>>>>     * same restrictions as for kmap and friends apply.
>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>>>> index f1500f1ec0f5..a156b3891a3f 100644
>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>>>> @@ -244,9 +244,7 @@ static const struct dma_buf_ops amdgpu_dmabuf_ops = {
>>>>       .release = drm_gem_dmabuf_release,
>>>>       .begin_cpu_access = amdgpu_gem_begin_cpu_access,
>>>>       .map = drm_gem_dmabuf_kmap,
>>>> -    .map_atomic = drm_gem_dmabuf_kmap_atomic,
>>>>       .unmap = drm_gem_dmabuf_kunmap,
>>>> -    .unmap_atomic = drm_gem_dmabuf_kunmap_atomic,
>>>>       .mmap = drm_gem_dmabuf_mmap,
>>>>       .vmap = drm_gem_dmabuf_vmap,
>>>>       .vunmap = drm_gem_dmabuf_vunmap,
>>>> diff --git a/drivers/gpu/drm/armada/armada_gem.c b/drivers/gpu/drm/armada/armada_gem.c
>>>> index a97f509743a5..3fb37c75c065 100644
>>>> --- a/drivers/gpu/drm/armada/armada_gem.c
>>>> +++ b/drivers/gpu/drm/armada/armada_gem.c
>>>> @@ -490,8 +490,6 @@ static const struct dma_buf_ops armada_gem_prime_dmabuf_ops = {
>>>>       .map_dma_buf    = armada_gem_prime_map_dma_buf,
>>>>       .unmap_dma_buf  = armada_gem_prime_unmap_dma_buf,
>>>>       .release        = drm_gem_dmabuf_release,
>>>> -    .map_atomic     = armada_gem_dmabuf_no_kmap,
>>>> -    .unmap_atomic   = armada_gem_dmabuf_no_kunmap,
>>>>       .map            = armada_gem_dmabuf_no_kmap,
>>>>       .unmap          = armada_gem_dmabuf_no_kunmap,
>>>>       .mmap           = armada_gem_dmabuf_mmap,
>>>> diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
>>>> index 4a3a232fea67..b28fa8f44c8b 100644
>>>> --- a/drivers/gpu/drm/drm_prime.c
>>>> +++ b/drivers/gpu/drm/drm_prime.c
>>>> @@ -426,30 +426,6 @@ void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr)
>>>>    }
>>>>    EXPORT_SYMBOL(drm_gem_dmabuf_vunmap);
>>>>
>>>> -/**
>>>> - * drm_gem_dmabuf_kmap_atomic - map_atomic implementation for GEM
>>>> - *
>>>> - * Not implemented. This can be used as the &dma_buf_ops.map_atomic callback.
>>>> - */
>>>> -void *drm_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>>> -                             unsigned long page_num)
>>>> -{
>>>> -    return NULL;
>>>> -}
>>>> -EXPORT_SYMBOL(drm_gem_dmabuf_kmap_atomic);
>>>> -
>>>> -/**
>>>> - * drm_gem_dmabuf_kunmap_atomic - unmap_atomic implementation for GEM
>>>> - *
>>>> - * Not implemented. This can be used as the &dma_buf_ops.unmap_atomic callback.
>>>> - */
>>>> -void drm_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>>> -                              unsigned long page_num, void *addr)
>>>> -{
>>>> -
>>>> -}
>>>> -EXPORT_SYMBOL(drm_gem_dmabuf_kunmap_atomic);
>>>> -
>>>>    /**
>>>>     * drm_gem_dmabuf_kmap - map implementation for GEM
>>>>     *
>>>> @@ -502,9 +478,7 @@ static const struct dma_buf_ops drm_gem_prime_dmabuf_ops =  {
>>>>       .unmap_dma_buf = drm_gem_unmap_dma_buf,
>>>>       .release = drm_gem_dmabuf_release,
>>>>       .map = drm_gem_dmabuf_kmap,
>>>> -    .map_atomic = drm_gem_dmabuf_kmap_atomic,
>>>>       .unmap = drm_gem_dmabuf_kunmap,
>>>> -    .unmap_atomic = drm_gem_dmabuf_kunmap_atomic,
>>>>       .mmap = drm_gem_dmabuf_mmap,
>>>>       .vmap = drm_gem_dmabuf_vmap,
>>>>       .vunmap = drm_gem_dmabuf_vunmap,
>>>> diff --git a/drivers/gpu/drm/i915/i915_gem_dmabuf.c b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>>>> index 69a7aec49e84..82e2ca17a441 100644
>>>> --- a/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>>>> +++ b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>>>> @@ -111,15 +111,6 @@ static void i915_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr)
>>>>       i915_gem_object_unpin_map(obj);
>>>>    }
>>>>
>>>> -static void *i915_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf, unsigned long page_num)
>>>> -{
>>>> -    return NULL;
>>>> -}
>>>> -
>>>> -static void i915_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf, unsigned long page_num, void *addr)
>>>> -{
>>>> -
>>>> -}
>>>>    static void *i915_gem_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long page_num)
>>>>    {
>>>>       struct drm_i915_gem_object *obj = dma_buf_to_obj(dma_buf);
>>>> @@ -225,9 +216,7 @@ static const struct dma_buf_ops i915_dmabuf_ops =  {
>>>>       .unmap_dma_buf = i915_gem_unmap_dma_buf,
>>>>       .release = drm_gem_dmabuf_release,
>>>>       .map = i915_gem_dmabuf_kmap,
>>>> -    .map_atomic = i915_gem_dmabuf_kmap_atomic,
>>>>       .unmap = i915_gem_dmabuf_kunmap,
>>>> -    .unmap_atomic = i915_gem_dmabuf_kunmap_atomic,
>>>>       .mmap = i915_gem_dmabuf_mmap,
>>>>       .vmap = i915_gem_dmabuf_vmap,
>>>>       .vunmap = i915_gem_dmabuf_vunmap,
>>>> diff --git a/drivers/gpu/drm/i915/selftests/mock_dmabuf.c b/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>>>> index 302f7d103635..f81fda8ea45e 100644
>>>> --- a/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>>>> +++ b/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>>>> @@ -130,9 +130,7 @@ static const struct dma_buf_ops mock_dmabuf_ops =  {
>>>>       .unmap_dma_buf = mock_unmap_dma_buf,
>>>>       .release = mock_dmabuf_release,
>>>>       .map = mock_dmabuf_kmap,
>>>> -    .map_atomic = mock_dmabuf_kmap_atomic,
>>>>       .unmap = mock_dmabuf_kunmap,
>>>> -    .unmap_atomic = mock_dmabuf_kunmap_atomic,
>>>>       .mmap = mock_dmabuf_mmap,
>>>>       .vmap = mock_dmabuf_vmap,
>>>>       .vunmap = mock_dmabuf_vunmap,
>>>> diff --git a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>>>> index 8e41d649e248..1a073f9b2834 100644
>>>> --- a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>>>> +++ b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>>>> @@ -148,8 +148,6 @@ static const struct dma_buf_ops omap_dmabuf_ops = {
>>>>       .release = drm_gem_dmabuf_release,
>>>>       .begin_cpu_access = omap_gem_dmabuf_begin_cpu_access,
>>>>       .end_cpu_access = omap_gem_dmabuf_end_cpu_access,
>>>> -    .map_atomic = omap_gem_dmabuf_kmap_atomic,
>>>> -    .unmap_atomic = omap_gem_dmabuf_kunmap_atomic,
>>>>       .map = omap_gem_dmabuf_kmap,
>>>>       .unmap = omap_gem_dmabuf_kunmap,
>>>>       .mmap = omap_gem_dmabuf_mmap,
>>>> diff --git a/drivers/gpu/drm/tegra/gem.c b/drivers/gpu/drm/tegra/gem.c
>>>> index 8b0b4ff64bb4..d7661702c11c 100644
>>>> --- a/drivers/gpu/drm/tegra/gem.c
>>>> +++ b/drivers/gpu/drm/tegra/gem.c
>>>> @@ -596,18 +596,6 @@ static int tegra_gem_prime_end_cpu_access(struct dma_buf *buf,
>>>>       return 0;
>>>>    }
>>>>
>>>> -static void *tegra_gem_prime_kmap_atomic(struct dma_buf *buf,
>>>> -                                     unsigned long page)
>>>> -{
>>>> -    return NULL;
>>>> -}
>>>> -
>>>> -static void tegra_gem_prime_kunmap_atomic(struct dma_buf *buf,
>>>> -                                      unsigned long page,
>>>> -                                      void *addr)
>>>> -{
>>>> -}
>>>> -
>>>>    static void *tegra_gem_prime_kmap(struct dma_buf *buf, unsigned long page)
>>>>    {
>>>>       return NULL;
>>>> @@ -648,8 +636,6 @@ static const struct dma_buf_ops tegra_gem_prime_dmabuf_ops = {
>>>>       .release = tegra_gem_prime_release,
>>>>       .begin_cpu_access = tegra_gem_prime_begin_cpu_access,
>>>>       .end_cpu_access = tegra_gem_prime_end_cpu_access,
>>>> -    .map_atomic = tegra_gem_prime_kmap_atomic,
>>>> -    .unmap_atomic = tegra_gem_prime_kunmap_atomic,
>>>>       .map = tegra_gem_prime_kmap,
>>>>       .unmap = tegra_gem_prime_kunmap,
>>>>       .mmap = tegra_gem_prime_mmap,
>>>> diff --git a/drivers/gpu/drm/udl/udl_dmabuf.c b/drivers/gpu/drm/udl/udl_dmabuf.c
>>>> index 5fdc8bdc2026..ae7225dedc30 100644
>>>> --- a/drivers/gpu/drm/udl/udl_dmabuf.c
>>>> +++ b/drivers/gpu/drm/udl/udl_dmabuf.c
>>>> @@ -156,27 +156,12 @@ static void *udl_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long page_num)
>>>>       return NULL;
>>>>    }
>>>>
>>>> -static void *udl_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>>> -                                unsigned long page_num)
>>>> -{
>>>> -    /* TODO */
>>>> -
>>>> -    return NULL;
>>>> -}
>>>> -
>>>>    static void udl_dmabuf_kunmap(struct dma_buf *dma_buf,
>>>>                             unsigned long page_num, void *addr)
>>>>    {
>>>>       /* TODO */
>>>>    }
>>>>
>>>> -static void udl_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>>> -                                 unsigned long page_num,
>>>> -                                 void *addr)
>>>> -{
>>>> -    /* TODO */
>>>> -}
>>>> -
>>>>    static int udl_dmabuf_mmap(struct dma_buf *dma_buf,
>>>>                          struct vm_area_struct *vma)
>>>>    {
>>>> @@ -191,9 +176,7 @@ static const struct dma_buf_ops udl_dmabuf_ops = {
>>>>       .map_dma_buf            = udl_map_dma_buf,
>>>>       .unmap_dma_buf          = udl_unmap_dma_buf,
>>>>       .map                    = udl_dmabuf_kmap,
>>>> -    .map_atomic             = udl_dmabuf_kmap_atomic,
>>>>       .unmap                  = udl_dmabuf_kunmap,
>>>> -    .unmap_atomic           = udl_dmabuf_kunmap_atomic,
>>>>       .mmap                   = udl_dmabuf_mmap,
>>>>       .release                = drm_gem_dmabuf_release,
>>>>    };
>>>> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>>>> index fbffb37ccf42..373bc6da2f84 100644
>>>> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>>>> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>>>> @@ -71,17 +71,6 @@ static void vmw_prime_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr)
>>>>    {
>>>>    }
>>>>
>>>> -static void *vmw_prime_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>>> -            unsigned long page_num)
>>>> -{
>>>> -    return NULL;
>>>> -}
>>>> -
>>>> -static void vmw_prime_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>>> -            unsigned long page_num, void *addr)
>>>> -{
>>>> -
>>>> -}
>>>>    static void *vmw_prime_dmabuf_kmap(struct dma_buf *dma_buf,
>>>>               unsigned long page_num)
>>>>    {
>>>> @@ -108,9 +97,7 @@ const struct dma_buf_ops vmw_prime_dmabuf_ops =  {
>>>>       .unmap_dma_buf = vmw_prime_unmap_dma_buf,
>>>>       .release = NULL,
>>>>       .map = vmw_prime_dmabuf_kmap,
>>>> -    .map_atomic = vmw_prime_dmabuf_kmap_atomic,
>>>>       .unmap = vmw_prime_dmabuf_kunmap,
>>>> -    .unmap_atomic = vmw_prime_dmabuf_kunmap_atomic,
>>>>       .mmap = vmw_prime_dmabuf_mmap,
>>>>       .vmap = vmw_prime_dmabuf_vmap,
>>>>       .vunmap = vmw_prime_dmabuf_vunmap,
>>>> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-contig.c b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>>>> index 12d0072c52c2..aff0ab7bf83d 100644
>>>> --- a/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>>>> +++ b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>>>> @@ -358,7 +358,6 @@ static const struct dma_buf_ops vb2_dc_dmabuf_ops = {
>>>>       .map_dma_buf = vb2_dc_dmabuf_ops_map,
>>>>       .unmap_dma_buf = vb2_dc_dmabuf_ops_unmap,
>>>>       .map = vb2_dc_dmabuf_ops_kmap,
>>>> -    .map_atomic = vb2_dc_dmabuf_ops_kmap,
>>>>       .vmap = vb2_dc_dmabuf_ops_vmap,
>>>>       .mmap = vb2_dc_dmabuf_ops_mmap,
>>>>       .release = vb2_dc_dmabuf_ops_release,
>>>> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-sg.c b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>>>> index cf94765e593f..015e737095cd 100644
>>>> --- a/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>>>> +++ b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>>>> @@ -507,7 +507,6 @@ static const struct dma_buf_ops vb2_dma_sg_dmabuf_ops = {
>>>>       .map_dma_buf = vb2_dma_sg_dmabuf_ops_map,
>>>>       .unmap_dma_buf = vb2_dma_sg_dmabuf_ops_unmap,
>>>>       .map = vb2_dma_sg_dmabuf_ops_kmap,
>>>> -    .map_atomic = vb2_dma_sg_dmabuf_ops_kmap,
>>>>       .vmap = vb2_dma_sg_dmabuf_ops_vmap,
>>>>       .mmap = vb2_dma_sg_dmabuf_ops_mmap,
>>>>       .release = vb2_dma_sg_dmabuf_ops_release,
>>>> diff --git a/drivers/media/common/videobuf2/videobuf2-vmalloc.c b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>>>> index 298ffb9ecdae..467a4005164b 100644
>>>> --- a/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>>>> +++ b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>>>> @@ -346,7 +346,6 @@ static const struct dma_buf_ops vb2_vmalloc_dmabuf_ops = {
>>>>       .map_dma_buf = vb2_vmalloc_dmabuf_ops_map,
>>>>       .unmap_dma_buf = vb2_vmalloc_dmabuf_ops_unmap,
>>>>       .map = vb2_vmalloc_dmabuf_ops_kmap,
>>>> -    .map_atomic = vb2_vmalloc_dmabuf_ops_kmap,
>>>>       .vmap = vb2_vmalloc_dmabuf_ops_vmap,
>>>>       .mmap = vb2_vmalloc_dmabuf_ops_mmap,
>>>>       .release = vb2_vmalloc_dmabuf_ops_release,
>>>> diff --git a/drivers/staging/android/ion/ion.c b/drivers/staging/android/ion/ion.c
>>>> index 57e0d8035b2e..a46219ff5e16 100644
>>>> --- a/drivers/staging/android/ion/ion.c
>>>> +++ b/drivers/staging/android/ion/ion.c
>>>> @@ -374,8 +374,6 @@ static const struct dma_buf_ops dma_buf_ops = {
>>>>       .detach = ion_dma_buf_detatch,
>>>>       .begin_cpu_access = ion_dma_buf_begin_cpu_access,
>>>>       .end_cpu_access = ion_dma_buf_end_cpu_access,
>>>> -    .map_atomic = ion_dma_buf_kmap,
>>>> -    .unmap_atomic = ion_dma_buf_kunmap,
>>>>       .map = ion_dma_buf_kmap,
>>>>       .unmap = ion_dma_buf_kunmap,
>>>>    };
>>>> diff --git a/drivers/tee/tee_shm.c b/drivers/tee/tee_shm.c
>>>> index 556960a1bab3..df4a1553b78b 100644
>>>> --- a/drivers/tee/tee_shm.c
>>>> +++ b/drivers/tee/tee_shm.c
>>>> @@ -80,11 +80,6 @@ static void tee_shm_op_release(struct dma_buf *dmabuf)
>>>>       tee_shm_release(shm);
>>>>    }
>>>>
>>>> -static void *tee_shm_op_map_atomic(struct dma_buf *dmabuf, unsigned long pgnum)
>>>> -{
>>>> -    return NULL;
>>>> -}
>>>> -
>>>>    static void *tee_shm_op_map(struct dma_buf *dmabuf, unsigned long pgnum)
>>>>    {
>>>>       return NULL;
>>>> @@ -107,7 +102,6 @@ static const struct dma_buf_ops tee_shm_dma_buf_ops = {
>>>>       .map_dma_buf = tee_shm_op_map_dma_buf,
>>>>       .unmap_dma_buf = tee_shm_op_unmap_dma_buf,
>>>>       .release = tee_shm_op_release,
>>>> -    .map_atomic = tee_shm_op_map_atomic,
>>>>       .map = tee_shm_op_map,
>>>>       .mmap = tee_shm_op_mmap,
>>>>    };
>>>> diff --git a/include/drm/drm_prime.h b/include/drm/drm_prime.h
>>>> index ef338151cea8..d716d653b096 100644
>>>> --- a/include/drm/drm_prime.h
>>>> +++ b/include/drm/drm_prime.h
>>>> @@ -93,10 +93,6 @@ void drm_gem_unmap_dma_buf(struct dma_buf_attachment *attach,
>>>>                          enum dma_data_direction dir);
>>>>    void *drm_gem_dmabuf_vmap(struct dma_buf *dma_buf);
>>>>    void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr);
>>>> -void *drm_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>>> -                             unsigned long page_num);
>>>> -void drm_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>>> -                              unsigned long page_num, void *addr);
>>>>    void *drm_gem_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long page_num);
>>>>    void drm_gem_dmabuf_kunmap(struct dma_buf *dma_buf, unsigned long page_num,
>>>>                          void *addr);
>>>> diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
>>>> index 346caf77937f..d17cadd76802 100644
>>>> --- a/include/linux/dma-buf.h
>>>> +++ b/include/linux/dma-buf.h
>>>> @@ -205,8 +205,6 @@ struct dma_buf_ops {
>>>>        * to be restarted.
>>>>        */
>>>>       int (*end_cpu_access)(struct dma_buf *, enum dma_data_direction);
>>>> -    void *(*map_atomic)(struct dma_buf *, unsigned long);
>>>> -    void (*unmap_atomic)(struct dma_buf *, unsigned long, void *);
>>>>       void *(*map)(struct dma_buf *, unsigned long);
>>>>       void (*unmap)(struct dma_buf *, unsigned long, void *);
>>>>
>>>> @@ -394,8 +392,6 @@ int dma_buf_begin_cpu_access(struct dma_buf *dma_buf,
>>>>                            enum dma_data_direction dir);
>>>>    int dma_buf_end_cpu_access(struct dma_buf *dma_buf,
>>>>                          enum dma_data_direction dir);
>>>> -void *dma_buf_kmap_atomic(struct dma_buf *, unsigned long);
>>>> -void dma_buf_kunmap_atomic(struct dma_buf *, unsigned long, void *);
>>>>    void *dma_buf_kmap(struct dma_buf *, unsigned long);
>>>>    void dma_buf_kunmap(struct dma_buf *, unsigned long, void *);
>>>>
>>>> --
>>>> 2.14.1
>>>>
>>>> _______________________________________________
>>>> dri-devel mailing list
>>>> dri-devel@lists.freedesktop.org
>>>> https://lists.freedesktop.org/mailman/listinfo/dri-devel
>> _______________________________________________
>> dri-devel mailing list
>> dri-devel@lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/dri-devel
>
>

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 2/5] dma-buf: remove kmap_atomic interface
@ 2018-06-20  6:22           ` Christian König
  0 siblings, 0 replies; 58+ messages in thread
From: Christian König @ 2018-06-20  6:22 UTC (permalink / raw)
  To: Sumit Semwal
  Cc: Linaro MM SIG, DRI mailing list, amd-gfx list, Daniel Vetter,
	linux-media-u79uwXL29TY76Z2rM5mHXA

Am 20.06.2018 um 08:10 schrieb Sumit Semwal:
> Hi Christian,
> On Tue, 19 Jun 2018 at 20:17, Christian König <christian.koenig@amd.com> wrote:
>> Am 18.06.2018 um 10:18 schrieb Daniel Vetter:
>>> On Fri, Jun 01, 2018 at 02:00:17PM +0200, Christian König wrote:
>>>> Neither used nor correctly implemented anywhere. Just completely remove
>>>> the interface.
>>>>
>>>> Signed-off-by: Christian König <christian.koenig@amd.com>
>>> I wonder whether we can nuke the normal kmap stuff too ... everyone seems
>>> to want/use the vmap stuff for kernel-internal mapping needs.
>>>
>>> Anyway, this looks good.
> Hope am not too late (was out of office for some time) - this looks ok
> to me, please feel free to add my
> Acked-by: Sumit Semwal <sumit.semwal@linaro.org>

No, you're not to late. I was actually holding back a bit because of 
missing Ack's.

Thanks for the response,
Christian.

>
>>>> ---
>>>>    drivers/dma-buf/dma-buf.c                          | 44 ----------------------
>>>>    drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c          |  2 -
>>>>    drivers/gpu/drm/armada/armada_gem.c                |  2 -
>>>>    drivers/gpu/drm/drm_prime.c                        | 26 -------------
>>>>    drivers/gpu/drm/i915/i915_gem_dmabuf.c             | 11 ------
>>>>    drivers/gpu/drm/i915/selftests/mock_dmabuf.c       |  2 -
>>>>    drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c          |  2 -
>>>>    drivers/gpu/drm/tegra/gem.c                        | 14 -------
>>>>    drivers/gpu/drm/udl/udl_dmabuf.c                   | 17 ---------
>>>>    drivers/gpu/drm/vmwgfx/vmwgfx_prime.c              | 13 -------
>>>>    .../media/common/videobuf2/videobuf2-dma-contig.c  |  1 -
>>>>    drivers/media/common/videobuf2/videobuf2-dma-sg.c  |  1 -
>>>>    drivers/media/common/videobuf2/videobuf2-vmalloc.c |  1 -
>>>>    drivers/staging/android/ion/ion.c                  |  2 -
>>>>    drivers/tee/tee_shm.c                              |  6 ---
>>>>    include/drm/drm_prime.h                            |  4 --
>>>>    include/linux/dma-buf.h                            |  4 --
>>>>    17 files changed, 152 deletions(-)
>>>>
>>>> diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
>>>> index e99a8d19991b..e4c657d9fad7 100644
>>>> --- a/drivers/dma-buf/dma-buf.c
>>>> +++ b/drivers/dma-buf/dma-buf.c
>>>> @@ -405,7 +405,6 @@ struct dma_buf *dma_buf_export(const struct dma_buf_export_info *exp_info)
>>>>                         || !exp_info->ops->map_dma_buf
>>>>                         || !exp_info->ops->unmap_dma_buf
>>>>                         || !exp_info->ops->release
>>>> -                      || !exp_info->ops->map_atomic
>>>>                         || !exp_info->ops->map
>>>>                         || !exp_info->ops->mmap)) {
>>>>               return ERR_PTR(-EINVAL);
>>>> @@ -687,14 +686,6 @@ EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment);
>>>>     *      void \*dma_buf_kmap(struct dma_buf \*, unsigned long);
>>>>     *      void dma_buf_kunmap(struct dma_buf \*, unsigned long, void \*);
>>>>     *
>>>> - *   There are also atomic variants of these interfaces. Like for kmap they
>>>> - *   facilitate non-blocking fast-paths. Neither the importer nor the exporter
>>>> - *   (in the callback) is allowed to block when using these.
>>>> - *
>>>> - *   Interfaces::
>>>> - *      void \*dma_buf_kmap_atomic(struct dma_buf \*, unsigned long);
>>>> - *      void dma_buf_kunmap_atomic(struct dma_buf \*, unsigned long, void \*);
>>>> - *
>>>>     *   For importers all the restrictions of using kmap apply, like the limited
>>>>     *   supply of kmap_atomic slots. Hence an importer shall only hold onto at
>>>>     *   max 2 atomic dma_buf kmaps at the same time (in any given process context).
>>> This is also about atomic kmap ...
>>>
>>> And the subsequent language around "Note that these calls need to always
>>> succeed." is also not true, might be good to update that stating that kmap
>>> is optional (like we say already for vmap).
>>>
>>> With those docs nits addressed:
>>>
>>> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
>> I've fixed up patch #1 and #2 and added your Reviewed-by tag.
>>
>> Since I finally had time to install dim do you have any objections that
>> I now run "dim push drm-misc-next" with those two applied?
>>
>> Regards,
>> Christian.
>>
>>>> @@ -859,41 +850,6 @@ int dma_buf_end_cpu_access(struct dma_buf *dmabuf,
>>>>    }
>>>>    EXPORT_SYMBOL_GPL(dma_buf_end_cpu_access);
>>>>
>>>> -/**
>>>> - * dma_buf_kmap_atomic - Map a page of the buffer object into kernel address
>>>> - * space. The same restrictions as for kmap_atomic and friends apply.
>>>> - * @dmabuf: [in]    buffer to map page from.
>>>> - * @page_num:       [in]    page in PAGE_SIZE units to map.
>>>> - *
>>>> - * This call must always succeed, any necessary preparations that might fail
>>>> - * need to be done in begin_cpu_access.
>>>> - */
>>>> -void *dma_buf_kmap_atomic(struct dma_buf *dmabuf, unsigned long page_num)
>>>> -{
>>>> -    WARN_ON(!dmabuf);
>>>> -
>>>> -    return dmabuf->ops->map_atomic(dmabuf, page_num);
>>>> -}
>>>> -EXPORT_SYMBOL_GPL(dma_buf_kmap_atomic);
>>>> -
>>>> -/**
>>>> - * dma_buf_kunmap_atomic - Unmap a page obtained by dma_buf_kmap_atomic.
>>>> - * @dmabuf: [in]    buffer to unmap page from.
>>>> - * @page_num:       [in]    page in PAGE_SIZE units to unmap.
>>>> - * @vaddr:  [in]    kernel space pointer obtained from dma_buf_kmap_atomic.
>>>> - *
>>>> - * This call must always succeed.
>>>> - */
>>>> -void dma_buf_kunmap_atomic(struct dma_buf *dmabuf, unsigned long page_num,
>>>> -                       void *vaddr)
>>>> -{
>>>> -    WARN_ON(!dmabuf);
>>>> -
>>>> -    if (dmabuf->ops->unmap_atomic)
>>>> -            dmabuf->ops->unmap_atomic(dmabuf, page_num, vaddr);
>>>> -}
>>>> -EXPORT_SYMBOL_GPL(dma_buf_kunmap_atomic);
>>>> -
>>>>    /**
>>>>     * dma_buf_kmap - Map a page of the buffer object into kernel address space. The
>>>>     * same restrictions as for kmap and friends apply.
>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>>>> index f1500f1ec0f5..a156b3891a3f 100644
>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>>>> @@ -244,9 +244,7 @@ static const struct dma_buf_ops amdgpu_dmabuf_ops = {
>>>>       .release = drm_gem_dmabuf_release,
>>>>       .begin_cpu_access = amdgpu_gem_begin_cpu_access,
>>>>       .map = drm_gem_dmabuf_kmap,
>>>> -    .map_atomic = drm_gem_dmabuf_kmap_atomic,
>>>>       .unmap = drm_gem_dmabuf_kunmap,
>>>> -    .unmap_atomic = drm_gem_dmabuf_kunmap_atomic,
>>>>       .mmap = drm_gem_dmabuf_mmap,
>>>>       .vmap = drm_gem_dmabuf_vmap,
>>>>       .vunmap = drm_gem_dmabuf_vunmap,
>>>> diff --git a/drivers/gpu/drm/armada/armada_gem.c b/drivers/gpu/drm/armada/armada_gem.c
>>>> index a97f509743a5..3fb37c75c065 100644
>>>> --- a/drivers/gpu/drm/armada/armada_gem.c
>>>> +++ b/drivers/gpu/drm/armada/armada_gem.c
>>>> @@ -490,8 +490,6 @@ static const struct dma_buf_ops armada_gem_prime_dmabuf_ops = {
>>>>       .map_dma_buf    = armada_gem_prime_map_dma_buf,
>>>>       .unmap_dma_buf  = armada_gem_prime_unmap_dma_buf,
>>>>       .release        = drm_gem_dmabuf_release,
>>>> -    .map_atomic     = armada_gem_dmabuf_no_kmap,
>>>> -    .unmap_atomic   = armada_gem_dmabuf_no_kunmap,
>>>>       .map            = armada_gem_dmabuf_no_kmap,
>>>>       .unmap          = armada_gem_dmabuf_no_kunmap,
>>>>       .mmap           = armada_gem_dmabuf_mmap,
>>>> diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
>>>> index 4a3a232fea67..b28fa8f44c8b 100644
>>>> --- a/drivers/gpu/drm/drm_prime.c
>>>> +++ b/drivers/gpu/drm/drm_prime.c
>>>> @@ -426,30 +426,6 @@ void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr)
>>>>    }
>>>>    EXPORT_SYMBOL(drm_gem_dmabuf_vunmap);
>>>>
>>>> -/**
>>>> - * drm_gem_dmabuf_kmap_atomic - map_atomic implementation for GEM
>>>> - *
>>>> - * Not implemented. This can be used as the &dma_buf_ops.map_atomic callback.
>>>> - */
>>>> -void *drm_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>>> -                             unsigned long page_num)
>>>> -{
>>>> -    return NULL;
>>>> -}
>>>> -EXPORT_SYMBOL(drm_gem_dmabuf_kmap_atomic);
>>>> -
>>>> -/**
>>>> - * drm_gem_dmabuf_kunmap_atomic - unmap_atomic implementation for GEM
>>>> - *
>>>> - * Not implemented. This can be used as the &dma_buf_ops.unmap_atomic callback.
>>>> - */
>>>> -void drm_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>>> -                              unsigned long page_num, void *addr)
>>>> -{
>>>> -
>>>> -}
>>>> -EXPORT_SYMBOL(drm_gem_dmabuf_kunmap_atomic);
>>>> -
>>>>    /**
>>>>     * drm_gem_dmabuf_kmap - map implementation for GEM
>>>>     *
>>>> @@ -502,9 +478,7 @@ static const struct dma_buf_ops drm_gem_prime_dmabuf_ops =  {
>>>>       .unmap_dma_buf = drm_gem_unmap_dma_buf,
>>>>       .release = drm_gem_dmabuf_release,
>>>>       .map = drm_gem_dmabuf_kmap,
>>>> -    .map_atomic = drm_gem_dmabuf_kmap_atomic,
>>>>       .unmap = drm_gem_dmabuf_kunmap,
>>>> -    .unmap_atomic = drm_gem_dmabuf_kunmap_atomic,
>>>>       .mmap = drm_gem_dmabuf_mmap,
>>>>       .vmap = drm_gem_dmabuf_vmap,
>>>>       .vunmap = drm_gem_dmabuf_vunmap,
>>>> diff --git a/drivers/gpu/drm/i915/i915_gem_dmabuf.c b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>>>> index 69a7aec49e84..82e2ca17a441 100644
>>>> --- a/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>>>> +++ b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>>>> @@ -111,15 +111,6 @@ static void i915_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr)
>>>>       i915_gem_object_unpin_map(obj);
>>>>    }
>>>>
>>>> -static void *i915_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf, unsigned long page_num)
>>>> -{
>>>> -    return NULL;
>>>> -}
>>>> -
>>>> -static void i915_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf, unsigned long page_num, void *addr)
>>>> -{
>>>> -
>>>> -}
>>>>    static void *i915_gem_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long page_num)
>>>>    {
>>>>       struct drm_i915_gem_object *obj = dma_buf_to_obj(dma_buf);
>>>> @@ -225,9 +216,7 @@ static const struct dma_buf_ops i915_dmabuf_ops =  {
>>>>       .unmap_dma_buf = i915_gem_unmap_dma_buf,
>>>>       .release = drm_gem_dmabuf_release,
>>>>       .map = i915_gem_dmabuf_kmap,
>>>> -    .map_atomic = i915_gem_dmabuf_kmap_atomic,
>>>>       .unmap = i915_gem_dmabuf_kunmap,
>>>> -    .unmap_atomic = i915_gem_dmabuf_kunmap_atomic,
>>>>       .mmap = i915_gem_dmabuf_mmap,
>>>>       .vmap = i915_gem_dmabuf_vmap,
>>>>       .vunmap = i915_gem_dmabuf_vunmap,
>>>> diff --git a/drivers/gpu/drm/i915/selftests/mock_dmabuf.c b/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>>>> index 302f7d103635..f81fda8ea45e 100644
>>>> --- a/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>>>> +++ b/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>>>> @@ -130,9 +130,7 @@ static const struct dma_buf_ops mock_dmabuf_ops =  {
>>>>       .unmap_dma_buf = mock_unmap_dma_buf,
>>>>       .release = mock_dmabuf_release,
>>>>       .map = mock_dmabuf_kmap,
>>>> -    .map_atomic = mock_dmabuf_kmap_atomic,
>>>>       .unmap = mock_dmabuf_kunmap,
>>>> -    .unmap_atomic = mock_dmabuf_kunmap_atomic,
>>>>       .mmap = mock_dmabuf_mmap,
>>>>       .vmap = mock_dmabuf_vmap,
>>>>       .vunmap = mock_dmabuf_vunmap,
>>>> diff --git a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>>>> index 8e41d649e248..1a073f9b2834 100644
>>>> --- a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>>>> +++ b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>>>> @@ -148,8 +148,6 @@ static const struct dma_buf_ops omap_dmabuf_ops = {
>>>>       .release = drm_gem_dmabuf_release,
>>>>       .begin_cpu_access = omap_gem_dmabuf_begin_cpu_access,
>>>>       .end_cpu_access = omap_gem_dmabuf_end_cpu_access,
>>>> -    .map_atomic = omap_gem_dmabuf_kmap_atomic,
>>>> -    .unmap_atomic = omap_gem_dmabuf_kunmap_atomic,
>>>>       .map = omap_gem_dmabuf_kmap,
>>>>       .unmap = omap_gem_dmabuf_kunmap,
>>>>       .mmap = omap_gem_dmabuf_mmap,
>>>> diff --git a/drivers/gpu/drm/tegra/gem.c b/drivers/gpu/drm/tegra/gem.c
>>>> index 8b0b4ff64bb4..d7661702c11c 100644
>>>> --- a/drivers/gpu/drm/tegra/gem.c
>>>> +++ b/drivers/gpu/drm/tegra/gem.c
>>>> @@ -596,18 +596,6 @@ static int tegra_gem_prime_end_cpu_access(struct dma_buf *buf,
>>>>       return 0;
>>>>    }
>>>>
>>>> -static void *tegra_gem_prime_kmap_atomic(struct dma_buf *buf,
>>>> -                                     unsigned long page)
>>>> -{
>>>> -    return NULL;
>>>> -}
>>>> -
>>>> -static void tegra_gem_prime_kunmap_atomic(struct dma_buf *buf,
>>>> -                                      unsigned long page,
>>>> -                                      void *addr)
>>>> -{
>>>> -}
>>>> -
>>>>    static void *tegra_gem_prime_kmap(struct dma_buf *buf, unsigned long page)
>>>>    {
>>>>       return NULL;
>>>> @@ -648,8 +636,6 @@ static const struct dma_buf_ops tegra_gem_prime_dmabuf_ops = {
>>>>       .release = tegra_gem_prime_release,
>>>>       .begin_cpu_access = tegra_gem_prime_begin_cpu_access,
>>>>       .end_cpu_access = tegra_gem_prime_end_cpu_access,
>>>> -    .map_atomic = tegra_gem_prime_kmap_atomic,
>>>> -    .unmap_atomic = tegra_gem_prime_kunmap_atomic,
>>>>       .map = tegra_gem_prime_kmap,
>>>>       .unmap = tegra_gem_prime_kunmap,
>>>>       .mmap = tegra_gem_prime_mmap,
>>>> diff --git a/drivers/gpu/drm/udl/udl_dmabuf.c b/drivers/gpu/drm/udl/udl_dmabuf.c
>>>> index 5fdc8bdc2026..ae7225dedc30 100644
>>>> --- a/drivers/gpu/drm/udl/udl_dmabuf.c
>>>> +++ b/drivers/gpu/drm/udl/udl_dmabuf.c
>>>> @@ -156,27 +156,12 @@ static void *udl_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long page_num)
>>>>       return NULL;
>>>>    }
>>>>
>>>> -static void *udl_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>>> -                                unsigned long page_num)
>>>> -{
>>>> -    /* TODO */
>>>> -
>>>> -    return NULL;
>>>> -}
>>>> -
>>>>    static void udl_dmabuf_kunmap(struct dma_buf *dma_buf,
>>>>                             unsigned long page_num, void *addr)
>>>>    {
>>>>       /* TODO */
>>>>    }
>>>>
>>>> -static void udl_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>>> -                                 unsigned long page_num,
>>>> -                                 void *addr)
>>>> -{
>>>> -    /* TODO */
>>>> -}
>>>> -
>>>>    static int udl_dmabuf_mmap(struct dma_buf *dma_buf,
>>>>                          struct vm_area_struct *vma)
>>>>    {
>>>> @@ -191,9 +176,7 @@ static const struct dma_buf_ops udl_dmabuf_ops = {
>>>>       .map_dma_buf            = udl_map_dma_buf,
>>>>       .unmap_dma_buf          = udl_unmap_dma_buf,
>>>>       .map                    = udl_dmabuf_kmap,
>>>> -    .map_atomic             = udl_dmabuf_kmap_atomic,
>>>>       .unmap                  = udl_dmabuf_kunmap,
>>>> -    .unmap_atomic           = udl_dmabuf_kunmap_atomic,
>>>>       .mmap                   = udl_dmabuf_mmap,
>>>>       .release                = drm_gem_dmabuf_release,
>>>>    };
>>>> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>>>> index fbffb37ccf42..373bc6da2f84 100644
>>>> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>>>> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>>>> @@ -71,17 +71,6 @@ static void vmw_prime_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr)
>>>>    {
>>>>    }
>>>>
>>>> -static void *vmw_prime_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>>> -            unsigned long page_num)
>>>> -{
>>>> -    return NULL;
>>>> -}
>>>> -
>>>> -static void vmw_prime_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>>> -            unsigned long page_num, void *addr)
>>>> -{
>>>> -
>>>> -}
>>>>    static void *vmw_prime_dmabuf_kmap(struct dma_buf *dma_buf,
>>>>               unsigned long page_num)
>>>>    {
>>>> @@ -108,9 +97,7 @@ const struct dma_buf_ops vmw_prime_dmabuf_ops =  {
>>>>       .unmap_dma_buf = vmw_prime_unmap_dma_buf,
>>>>       .release = NULL,
>>>>       .map = vmw_prime_dmabuf_kmap,
>>>> -    .map_atomic = vmw_prime_dmabuf_kmap_atomic,
>>>>       .unmap = vmw_prime_dmabuf_kunmap,
>>>> -    .unmap_atomic = vmw_prime_dmabuf_kunmap_atomic,
>>>>       .mmap = vmw_prime_dmabuf_mmap,
>>>>       .vmap = vmw_prime_dmabuf_vmap,
>>>>       .vunmap = vmw_prime_dmabuf_vunmap,
>>>> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-contig.c b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>>>> index 12d0072c52c2..aff0ab7bf83d 100644
>>>> --- a/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>>>> +++ b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>>>> @@ -358,7 +358,6 @@ static const struct dma_buf_ops vb2_dc_dmabuf_ops = {
>>>>       .map_dma_buf = vb2_dc_dmabuf_ops_map,
>>>>       .unmap_dma_buf = vb2_dc_dmabuf_ops_unmap,
>>>>       .map = vb2_dc_dmabuf_ops_kmap,
>>>> -    .map_atomic = vb2_dc_dmabuf_ops_kmap,
>>>>       .vmap = vb2_dc_dmabuf_ops_vmap,
>>>>       .mmap = vb2_dc_dmabuf_ops_mmap,
>>>>       .release = vb2_dc_dmabuf_ops_release,
>>>> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-sg.c b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>>>> index cf94765e593f..015e737095cd 100644
>>>> --- a/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>>>> +++ b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>>>> @@ -507,7 +507,6 @@ static const struct dma_buf_ops vb2_dma_sg_dmabuf_ops = {
>>>>       .map_dma_buf = vb2_dma_sg_dmabuf_ops_map,
>>>>       .unmap_dma_buf = vb2_dma_sg_dmabuf_ops_unmap,
>>>>       .map = vb2_dma_sg_dmabuf_ops_kmap,
>>>> -    .map_atomic = vb2_dma_sg_dmabuf_ops_kmap,
>>>>       .vmap = vb2_dma_sg_dmabuf_ops_vmap,
>>>>       .mmap = vb2_dma_sg_dmabuf_ops_mmap,
>>>>       .release = vb2_dma_sg_dmabuf_ops_release,
>>>> diff --git a/drivers/media/common/videobuf2/videobuf2-vmalloc.c b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>>>> index 298ffb9ecdae..467a4005164b 100644
>>>> --- a/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>>>> +++ b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>>>> @@ -346,7 +346,6 @@ static const struct dma_buf_ops vb2_vmalloc_dmabuf_ops = {
>>>>       .map_dma_buf = vb2_vmalloc_dmabuf_ops_map,
>>>>       .unmap_dma_buf = vb2_vmalloc_dmabuf_ops_unmap,
>>>>       .map = vb2_vmalloc_dmabuf_ops_kmap,
>>>> -    .map_atomic = vb2_vmalloc_dmabuf_ops_kmap,
>>>>       .vmap = vb2_vmalloc_dmabuf_ops_vmap,
>>>>       .mmap = vb2_vmalloc_dmabuf_ops_mmap,
>>>>       .release = vb2_vmalloc_dmabuf_ops_release,
>>>> diff --git a/drivers/staging/android/ion/ion.c b/drivers/staging/android/ion/ion.c
>>>> index 57e0d8035b2e..a46219ff5e16 100644
>>>> --- a/drivers/staging/android/ion/ion.c
>>>> +++ b/drivers/staging/android/ion/ion.c
>>>> @@ -374,8 +374,6 @@ static const struct dma_buf_ops dma_buf_ops = {
>>>>       .detach = ion_dma_buf_detatch,
>>>>       .begin_cpu_access = ion_dma_buf_begin_cpu_access,
>>>>       .end_cpu_access = ion_dma_buf_end_cpu_access,
>>>> -    .map_atomic = ion_dma_buf_kmap,
>>>> -    .unmap_atomic = ion_dma_buf_kunmap,
>>>>       .map = ion_dma_buf_kmap,
>>>>       .unmap = ion_dma_buf_kunmap,
>>>>    };
>>>> diff --git a/drivers/tee/tee_shm.c b/drivers/tee/tee_shm.c
>>>> index 556960a1bab3..df4a1553b78b 100644
>>>> --- a/drivers/tee/tee_shm.c
>>>> +++ b/drivers/tee/tee_shm.c
>>>> @@ -80,11 +80,6 @@ static void tee_shm_op_release(struct dma_buf *dmabuf)
>>>>       tee_shm_release(shm);
>>>>    }
>>>>
>>>> -static void *tee_shm_op_map_atomic(struct dma_buf *dmabuf, unsigned long pgnum)
>>>> -{
>>>> -    return NULL;
>>>> -}
>>>> -
>>>>    static void *tee_shm_op_map(struct dma_buf *dmabuf, unsigned long pgnum)
>>>>    {
>>>>       return NULL;
>>>> @@ -107,7 +102,6 @@ static const struct dma_buf_ops tee_shm_dma_buf_ops = {
>>>>       .map_dma_buf = tee_shm_op_map_dma_buf,
>>>>       .unmap_dma_buf = tee_shm_op_unmap_dma_buf,
>>>>       .release = tee_shm_op_release,
>>>> -    .map_atomic = tee_shm_op_map_atomic,
>>>>       .map = tee_shm_op_map,
>>>>       .mmap = tee_shm_op_mmap,
>>>>    };
>>>> diff --git a/include/drm/drm_prime.h b/include/drm/drm_prime.h
>>>> index ef338151cea8..d716d653b096 100644
>>>> --- a/include/drm/drm_prime.h
>>>> +++ b/include/drm/drm_prime.h
>>>> @@ -93,10 +93,6 @@ void drm_gem_unmap_dma_buf(struct dma_buf_attachment *attach,
>>>>                          enum dma_data_direction dir);
>>>>    void *drm_gem_dmabuf_vmap(struct dma_buf *dma_buf);
>>>>    void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr);
>>>> -void *drm_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>>> -                             unsigned long page_num);
>>>> -void drm_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>>> -                              unsigned long page_num, void *addr);
>>>>    void *drm_gem_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long page_num);
>>>>    void drm_gem_dmabuf_kunmap(struct dma_buf *dma_buf, unsigned long page_num,
>>>>                          void *addr);
>>>> diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
>>>> index 346caf77937f..d17cadd76802 100644
>>>> --- a/include/linux/dma-buf.h
>>>> +++ b/include/linux/dma-buf.h
>>>> @@ -205,8 +205,6 @@ struct dma_buf_ops {
>>>>        * to be restarted.
>>>>        */
>>>>       int (*end_cpu_access)(struct dma_buf *, enum dma_data_direction);
>>>> -    void *(*map_atomic)(struct dma_buf *, unsigned long);
>>>> -    void (*unmap_atomic)(struct dma_buf *, unsigned long, void *);
>>>>       void *(*map)(struct dma_buf *, unsigned long);
>>>>       void (*unmap)(struct dma_buf *, unsigned long, void *);
>>>>
>>>> @@ -394,8 +392,6 @@ int dma_buf_begin_cpu_access(struct dma_buf *dma_buf,
>>>>                            enum dma_data_direction dir);
>>>>    int dma_buf_end_cpu_access(struct dma_buf *dma_buf,
>>>>                          enum dma_data_direction dir);
>>>> -void *dma_buf_kmap_atomic(struct dma_buf *, unsigned long);
>>>> -void dma_buf_kunmap_atomic(struct dma_buf *, unsigned long, void *);
>>>>    void *dma_buf_kmap(struct dma_buf *, unsigned long);
>>>>    void dma_buf_kunmap(struct dma_buf *, unsigned long, void *);
>>>>
>>>> --
>>>> 2.14.1
>>>>
>>>> _______________________________________________
>>>> dri-devel mailing list
>>>> dri-devel@lists.freedesktop.org
>>>> https://lists.freedesktop.org/mailman/listinfo/dri-devel
>> _______________________________________________
>> dri-devel mailing list
>> dri-devel@lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/dri-devel
>
>

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 2/5] dma-buf: remove kmap_atomic interface
@ 2018-06-20 12:46           ` Christian König
  0 siblings, 0 replies; 58+ messages in thread
From: Christian König @ 2018-06-20 12:46 UTC (permalink / raw)
  To: Daniel Vetter, Christian König
  Cc: moderated list:DMA BUFFER SHARING FRAMEWORK, amd-gfx list,
	dri-devel, open list:DMA BUFFER SHARING FRAMEWORK

Am 19.06.2018 um 17:35 schrieb Daniel Vetter:
> On Tue, Jun 19, 2018 at 4:47 PM, Christian König
> <christian.koenig@amd.com> wrote:
>> Am 18.06.2018 um 10:18 schrieb Daniel Vetter:
>>> On Fri, Jun 01, 2018 at 02:00:17PM +0200, Christian König wrote:
>>>> Neither used nor correctly implemented anywhere. Just completely remove
>>>> the interface.
>>>>
>>>> Signed-off-by: Christian König <christian.koenig@amd.com>
>>> I wonder whether we can nuke the normal kmap stuff too ... everyone seems
>>> to want/use the vmap stuff for kernel-internal mapping needs.
>>>
>>> Anyway, this looks good.
>>>> ---
>>>>    drivers/dma-buf/dma-buf.c                          | 44
>>>> ----------------------
>>>>    drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c          |  2 -
>>>>    drivers/gpu/drm/armada/armada_gem.c                |  2 -
>>>>    drivers/gpu/drm/drm_prime.c                        | 26 -------------
>>>>    drivers/gpu/drm/i915/i915_gem_dmabuf.c             | 11 ------
>>>>    drivers/gpu/drm/i915/selftests/mock_dmabuf.c       |  2 -
>>>>    drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c          |  2 -
>>>>    drivers/gpu/drm/tegra/gem.c                        | 14 -------
>>>>    drivers/gpu/drm/udl/udl_dmabuf.c                   | 17 ---------
>>>>    drivers/gpu/drm/vmwgfx/vmwgfx_prime.c              | 13 -------
>>>>    .../media/common/videobuf2/videobuf2-dma-contig.c  |  1 -
>>>>    drivers/media/common/videobuf2/videobuf2-dma-sg.c  |  1 -
>>>>    drivers/media/common/videobuf2/videobuf2-vmalloc.c |  1 -
>>>>    drivers/staging/android/ion/ion.c                  |  2 -
>>>>    drivers/tee/tee_shm.c                              |  6 ---
>>>>    include/drm/drm_prime.h                            |  4 --
>>>>    include/linux/dma-buf.h                            |  4 --
>>>>    17 files changed, 152 deletions(-)
>>>>
>>>> diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
>>>> index e99a8d19991b..e4c657d9fad7 100644
>>>> --- a/drivers/dma-buf/dma-buf.c
>>>> +++ b/drivers/dma-buf/dma-buf.c
>>>> @@ -405,7 +405,6 @@ struct dma_buf *dma_buf_export(const struct
>>>> dma_buf_export_info *exp_info)
>>>>                            || !exp_info->ops->map_dma_buf
>>>>                            || !exp_info->ops->unmap_dma_buf
>>>>                            || !exp_info->ops->release
>>>> -                         || !exp_info->ops->map_atomic
>>>>                            || !exp_info->ops->map
>>>>                            || !exp_info->ops->mmap)) {
>>>>                  return ERR_PTR(-EINVAL);
>>>> @@ -687,14 +686,6 @@ EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment);
>>>>     *      void \*dma_buf_kmap(struct dma_buf \*, unsigned long);
>>>>     *      void dma_buf_kunmap(struct dma_buf \*, unsigned long, void \*);
>>>>     *
>>>> - *   There are also atomic variants of these interfaces. Like for kmap
>>>> they
>>>> - *   facilitate non-blocking fast-paths. Neither the importer nor the
>>>> exporter
>>>> - *   (in the callback) is allowed to block when using these.
>>>> - *
>>>> - *   Interfaces::
>>>> - *      void \*dma_buf_kmap_atomic(struct dma_buf \*, unsigned long);
>>>> - *      void dma_buf_kunmap_atomic(struct dma_buf \*, unsigned long,
>>>> void \*);
>>>> - *
>>>>     *   For importers all the restrictions of using kmap apply, like the
>>>> limited
>>>>     *   supply of kmap_atomic slots. Hence an importer shall only hold
>>>> onto at
>>>>     *   max 2 atomic dma_buf kmaps at the same time (in any given process
>>>> context).
>>> This is also about atomic kmap ...
>>>
>>> And the subsequent language around "Note that these calls need to always
>>> succeed." is also not true, might be good to update that stating that kmap
>>> is optional (like we say already for vmap).
>>>
>>> With those docs nits addressed:
>>>
>>> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
>>
>> I've fixed up patch #1 and #2 and added your Reviewed-by tag.
>>
>> Since I finally had time to install dim do you have any objections that I
>> now run "dim push drm-misc-next" with those two applied?
> Go ahead, that's the point of commit rights. dim might complain if you
> cherry picked them and didn't pick them up using dim apply though ...

I've fixed up the Link tags, but when I try "dim push-branch 
drm-misc-next" I only get the error message "error: dst ref 
refs/heads/drm-misc-next receives from more than one src."

Any idea what is going wrong here?

Christian.

> -Daniel
>
>
>> Regards,
>> Christian.
>>
>>
>>>> @@ -859,41 +850,6 @@ int dma_buf_end_cpu_access(struct dma_buf *dmabuf,
>>>>    }
>>>>    EXPORT_SYMBOL_GPL(dma_buf_end_cpu_access);
>>>>    -/**
>>>> - * dma_buf_kmap_atomic - Map a page of the buffer object into kernel
>>>> address
>>>> - * space. The same restrictions as for kmap_atomic and friends apply.
>>>> - * @dmabuf:    [in]    buffer to map page from.
>>>> - * @page_num:  [in]    page in PAGE_SIZE units to map.
>>>> - *
>>>> - * This call must always succeed, any necessary preparations that might
>>>> fail
>>>> - * need to be done in begin_cpu_access.
>>>> - */
>>>> -void *dma_buf_kmap_atomic(struct dma_buf *dmabuf, unsigned long
>>>> page_num)
>>>> -{
>>>> -       WARN_ON(!dmabuf);
>>>> -
>>>> -       return dmabuf->ops->map_atomic(dmabuf, page_num);
>>>> -}
>>>> -EXPORT_SYMBOL_GPL(dma_buf_kmap_atomic);
>>>> -
>>>> -/**
>>>> - * dma_buf_kunmap_atomic - Unmap a page obtained by dma_buf_kmap_atomic.
>>>> - * @dmabuf:    [in]    buffer to unmap page from.
>>>> - * @page_num:  [in]    page in PAGE_SIZE units to unmap.
>>>> - * @vaddr:     [in]    kernel space pointer obtained from
>>>> dma_buf_kmap_atomic.
>>>> - *
>>>> - * This call must always succeed.
>>>> - */
>>>> -void dma_buf_kunmap_atomic(struct dma_buf *dmabuf, unsigned long
>>>> page_num,
>>>> -                          void *vaddr)
>>>> -{
>>>> -       WARN_ON(!dmabuf);
>>>> -
>>>> -       if (dmabuf->ops->unmap_atomic)
>>>> -               dmabuf->ops->unmap_atomic(dmabuf, page_num, vaddr);
>>>> -}
>>>> -EXPORT_SYMBOL_GPL(dma_buf_kunmap_atomic);
>>>> -
>>>>    /**
>>>>     * dma_buf_kmap - Map a page of the buffer object into kernel address
>>>> space. The
>>>>     * same restrictions as for kmap and friends apply.
>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>>>> index f1500f1ec0f5..a156b3891a3f 100644
>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>>>> @@ -244,9 +244,7 @@ static const struct dma_buf_ops amdgpu_dmabuf_ops = {
>>>>          .release = drm_gem_dmabuf_release,
>>>>          .begin_cpu_access = amdgpu_gem_begin_cpu_access,
>>>>          .map = drm_gem_dmabuf_kmap,
>>>> -       .map_atomic = drm_gem_dmabuf_kmap_atomic,
>>>>          .unmap = drm_gem_dmabuf_kunmap,
>>>> -       .unmap_atomic = drm_gem_dmabuf_kunmap_atomic,
>>>>          .mmap = drm_gem_dmabuf_mmap,
>>>>          .vmap = drm_gem_dmabuf_vmap,
>>>>          .vunmap = drm_gem_dmabuf_vunmap,
>>>> diff --git a/drivers/gpu/drm/armada/armada_gem.c
>>>> b/drivers/gpu/drm/armada/armada_gem.c
>>>> index a97f509743a5..3fb37c75c065 100644
>>>> --- a/drivers/gpu/drm/armada/armada_gem.c
>>>> +++ b/drivers/gpu/drm/armada/armada_gem.c
>>>> @@ -490,8 +490,6 @@ static const struct dma_buf_ops
>>>> armada_gem_prime_dmabuf_ops = {
>>>>          .map_dma_buf    = armada_gem_prime_map_dma_buf,
>>>>          .unmap_dma_buf  = armada_gem_prime_unmap_dma_buf,
>>>>          .release        = drm_gem_dmabuf_release,
>>>> -       .map_atomic     = armada_gem_dmabuf_no_kmap,
>>>> -       .unmap_atomic   = armada_gem_dmabuf_no_kunmap,
>>>>          .map            = armada_gem_dmabuf_no_kmap,
>>>>          .unmap          = armada_gem_dmabuf_no_kunmap,
>>>>          .mmap           = armada_gem_dmabuf_mmap,
>>>> diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
>>>> index 4a3a232fea67..b28fa8f44c8b 100644
>>>> --- a/drivers/gpu/drm/drm_prime.c
>>>> +++ b/drivers/gpu/drm/drm_prime.c
>>>> @@ -426,30 +426,6 @@ void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf,
>>>> void *vaddr)
>>>>    }
>>>>    EXPORT_SYMBOL(drm_gem_dmabuf_vunmap);
>>>>    -/**
>>>> - * drm_gem_dmabuf_kmap_atomic - map_atomic implementation for GEM
>>>> - *
>>>> - * Not implemented. This can be used as the &dma_buf_ops.map_atomic
>>>> callback.
>>>> - */
>>>> -void *drm_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>>> -                                unsigned long page_num)
>>>> -{
>>>> -       return NULL;
>>>> -}
>>>> -EXPORT_SYMBOL(drm_gem_dmabuf_kmap_atomic);
>>>> -
>>>> -/**
>>>> - * drm_gem_dmabuf_kunmap_atomic - unmap_atomic implementation for GEM
>>>> - *
>>>> - * Not implemented. This can be used as the &dma_buf_ops.unmap_atomic
>>>> callback.
>>>> - */
>>>> -void drm_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>>> -                                 unsigned long page_num, void *addr)
>>>> -{
>>>> -
>>>> -}
>>>> -EXPORT_SYMBOL(drm_gem_dmabuf_kunmap_atomic);
>>>> -
>>>>    /**
>>>>     * drm_gem_dmabuf_kmap - map implementation for GEM
>>>>     *
>>>> @@ -502,9 +478,7 @@ static const struct dma_buf_ops
>>>> drm_gem_prime_dmabuf_ops =  {
>>>>          .unmap_dma_buf = drm_gem_unmap_dma_buf,
>>>>          .release = drm_gem_dmabuf_release,
>>>>          .map = drm_gem_dmabuf_kmap,
>>>> -       .map_atomic = drm_gem_dmabuf_kmap_atomic,
>>>>          .unmap = drm_gem_dmabuf_kunmap,
>>>> -       .unmap_atomic = drm_gem_dmabuf_kunmap_atomic,
>>>>          .mmap = drm_gem_dmabuf_mmap,
>>>>          .vmap = drm_gem_dmabuf_vmap,
>>>>          .vunmap = drm_gem_dmabuf_vunmap,
>>>> diff --git a/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>>>> b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>>>> index 69a7aec49e84..82e2ca17a441 100644
>>>> --- a/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>>>> +++ b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>>>> @@ -111,15 +111,6 @@ static void i915_gem_dmabuf_vunmap(struct dma_buf
>>>> *dma_buf, void *vaddr)
>>>>          i915_gem_object_unpin_map(obj);
>>>>    }
>>>>    -static void *i915_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>>> unsigned long page_num)
>>>> -{
>>>> -       return NULL;
>>>> -}
>>>> -
>>>> -static void i915_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>>> unsigned long page_num, void *addr)
>>>> -{
>>>> -
>>>> -}
>>>>    static void *i915_gem_dmabuf_kmap(struct dma_buf *dma_buf, unsigned
>>>> long page_num)
>>>>    {
>>>>          struct drm_i915_gem_object *obj = dma_buf_to_obj(dma_buf);
>>>> @@ -225,9 +216,7 @@ static const struct dma_buf_ops i915_dmabuf_ops =  {
>>>>          .unmap_dma_buf = i915_gem_unmap_dma_buf,
>>>>          .release = drm_gem_dmabuf_release,
>>>>          .map = i915_gem_dmabuf_kmap,
>>>> -       .map_atomic = i915_gem_dmabuf_kmap_atomic,
>>>>          .unmap = i915_gem_dmabuf_kunmap,
>>>> -       .unmap_atomic = i915_gem_dmabuf_kunmap_atomic,
>>>>          .mmap = i915_gem_dmabuf_mmap,
>>>>          .vmap = i915_gem_dmabuf_vmap,
>>>>          .vunmap = i915_gem_dmabuf_vunmap,
>>>> diff --git a/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>>>> b/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>>>> index 302f7d103635..f81fda8ea45e 100644
>>>> --- a/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>>>> +++ b/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>>>> @@ -130,9 +130,7 @@ static const struct dma_buf_ops mock_dmabuf_ops =  {
>>>>          .unmap_dma_buf = mock_unmap_dma_buf,
>>>>          .release = mock_dmabuf_release,
>>>>          .map = mock_dmabuf_kmap,
>>>> -       .map_atomic = mock_dmabuf_kmap_atomic,
>>>>          .unmap = mock_dmabuf_kunmap,
>>>> -       .unmap_atomic = mock_dmabuf_kunmap_atomic,
>>>>          .mmap = mock_dmabuf_mmap,
>>>>          .vmap = mock_dmabuf_vmap,
>>>>          .vunmap = mock_dmabuf_vunmap,
>>>> diff --git a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>>>> b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>>>> index 8e41d649e248..1a073f9b2834 100644
>>>> --- a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>>>> +++ b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>>>> @@ -148,8 +148,6 @@ static const struct dma_buf_ops omap_dmabuf_ops = {
>>>>          .release = drm_gem_dmabuf_release,
>>>>          .begin_cpu_access = omap_gem_dmabuf_begin_cpu_access,
>>>>          .end_cpu_access = omap_gem_dmabuf_end_cpu_access,
>>>> -       .map_atomic = omap_gem_dmabuf_kmap_atomic,
>>>> -       .unmap_atomic = omap_gem_dmabuf_kunmap_atomic,
>>>>          .map = omap_gem_dmabuf_kmap,
>>>>          .unmap = omap_gem_dmabuf_kunmap,
>>>>          .mmap = omap_gem_dmabuf_mmap,
>>>> diff --git a/drivers/gpu/drm/tegra/gem.c b/drivers/gpu/drm/tegra/gem.c
>>>> index 8b0b4ff64bb4..d7661702c11c 100644
>>>> --- a/drivers/gpu/drm/tegra/gem.c
>>>> +++ b/drivers/gpu/drm/tegra/gem.c
>>>> @@ -596,18 +596,6 @@ static int tegra_gem_prime_end_cpu_access(struct
>>>> dma_buf *buf,
>>>>          return 0;
>>>>    }
>>>>    -static void *tegra_gem_prime_kmap_atomic(struct dma_buf *buf,
>>>> -                                        unsigned long page)
>>>> -{
>>>> -       return NULL;
>>>> -}
>>>> -
>>>> -static void tegra_gem_prime_kunmap_atomic(struct dma_buf *buf,
>>>> -                                         unsigned long page,
>>>> -                                         void *addr)
>>>> -{
>>>> -}
>>>> -
>>>>    static void *tegra_gem_prime_kmap(struct dma_buf *buf, unsigned long
>>>> page)
>>>>    {
>>>>          return NULL;
>>>> @@ -648,8 +636,6 @@ static const struct dma_buf_ops
>>>> tegra_gem_prime_dmabuf_ops = {
>>>>          .release = tegra_gem_prime_release,
>>>>          .begin_cpu_access = tegra_gem_prime_begin_cpu_access,
>>>>          .end_cpu_access = tegra_gem_prime_end_cpu_access,
>>>> -       .map_atomic = tegra_gem_prime_kmap_atomic,
>>>> -       .unmap_atomic = tegra_gem_prime_kunmap_atomic,
>>>>          .map = tegra_gem_prime_kmap,
>>>>          .unmap = tegra_gem_prime_kunmap,
>>>>          .mmap = tegra_gem_prime_mmap,
>>>> diff --git a/drivers/gpu/drm/udl/udl_dmabuf.c
>>>> b/drivers/gpu/drm/udl/udl_dmabuf.c
>>>> index 5fdc8bdc2026..ae7225dedc30 100644
>>>> --- a/drivers/gpu/drm/udl/udl_dmabuf.c
>>>> +++ b/drivers/gpu/drm/udl/udl_dmabuf.c
>>>> @@ -156,27 +156,12 @@ static void *udl_dmabuf_kmap(struct dma_buf
>>>> *dma_buf, unsigned long page_num)
>>>>          return NULL;
>>>>    }
>>>>    -static void *udl_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>>> -                                   unsigned long page_num)
>>>> -{
>>>> -       /* TODO */
>>>> -
>>>> -       return NULL;
>>>> -}
>>>> -
>>>>    static void udl_dmabuf_kunmap(struct dma_buf *dma_buf,
>>>>                                unsigned long page_num, void *addr)
>>>>    {
>>>>          /* TODO */
>>>>    }
>>>>    -static void udl_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>>> -                                    unsigned long page_num,
>>>> -                                    void *addr)
>>>> -{
>>>> -       /* TODO */
>>>> -}
>>>> -
>>>>    static int udl_dmabuf_mmap(struct dma_buf *dma_buf,
>>>>                             struct vm_area_struct *vma)
>>>>    {
>>>> @@ -191,9 +176,7 @@ static const struct dma_buf_ops udl_dmabuf_ops = {
>>>>          .map_dma_buf            = udl_map_dma_buf,
>>>>          .unmap_dma_buf          = udl_unmap_dma_buf,
>>>>          .map                    = udl_dmabuf_kmap,
>>>> -       .map_atomic             = udl_dmabuf_kmap_atomic,
>>>>          .unmap                  = udl_dmabuf_kunmap,
>>>> -       .unmap_atomic           = udl_dmabuf_kunmap_atomic,
>>>>          .mmap                   = udl_dmabuf_mmap,
>>>>          .release                = drm_gem_dmabuf_release,
>>>>    };
>>>> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>>>> b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>>>> index fbffb37ccf42..373bc6da2f84 100644
>>>> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>>>> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>>>> @@ -71,17 +71,6 @@ static void vmw_prime_dmabuf_vunmap(struct dma_buf
>>>> *dma_buf, void *vaddr)
>>>>    {
>>>>    }
>>>>    -static void *vmw_prime_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>>> -               unsigned long page_num)
>>>> -{
>>>> -       return NULL;
>>>> -}
>>>> -
>>>> -static void vmw_prime_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>>> -               unsigned long page_num, void *addr)
>>>> -{
>>>> -
>>>> -}
>>>>    static void *vmw_prime_dmabuf_kmap(struct dma_buf *dma_buf,
>>>>                  unsigned long page_num)
>>>>    {
>>>> @@ -108,9 +97,7 @@ const struct dma_buf_ops vmw_prime_dmabuf_ops =  {
>>>>          .unmap_dma_buf = vmw_prime_unmap_dma_buf,
>>>>          .release = NULL,
>>>>          .map = vmw_prime_dmabuf_kmap,
>>>> -       .map_atomic = vmw_prime_dmabuf_kmap_atomic,
>>>>          .unmap = vmw_prime_dmabuf_kunmap,
>>>> -       .unmap_atomic = vmw_prime_dmabuf_kunmap_atomic,
>>>>          .mmap = vmw_prime_dmabuf_mmap,
>>>>          .vmap = vmw_prime_dmabuf_vmap,
>>>>          .vunmap = vmw_prime_dmabuf_vunmap,
>>>> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>>>> b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>>>> index 12d0072c52c2..aff0ab7bf83d 100644
>>>> --- a/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>>>> +++ b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>>>> @@ -358,7 +358,6 @@ static const struct dma_buf_ops vb2_dc_dmabuf_ops = {
>>>>          .map_dma_buf = vb2_dc_dmabuf_ops_map,
>>>>          .unmap_dma_buf = vb2_dc_dmabuf_ops_unmap,
>>>>          .map = vb2_dc_dmabuf_ops_kmap,
>>>> -       .map_atomic = vb2_dc_dmabuf_ops_kmap,
>>>>          .vmap = vb2_dc_dmabuf_ops_vmap,
>>>>          .mmap = vb2_dc_dmabuf_ops_mmap,
>>>>          .release = vb2_dc_dmabuf_ops_release,
>>>> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>>>> b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>>>> index cf94765e593f..015e737095cd 100644
>>>> --- a/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>>>> +++ b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>>>> @@ -507,7 +507,6 @@ static const struct dma_buf_ops vb2_dma_sg_dmabuf_ops
>>>> = {
>>>>          .map_dma_buf = vb2_dma_sg_dmabuf_ops_map,
>>>>          .unmap_dma_buf = vb2_dma_sg_dmabuf_ops_unmap,
>>>>          .map = vb2_dma_sg_dmabuf_ops_kmap,
>>>> -       .map_atomic = vb2_dma_sg_dmabuf_ops_kmap,
>>>>          .vmap = vb2_dma_sg_dmabuf_ops_vmap,
>>>>          .mmap = vb2_dma_sg_dmabuf_ops_mmap,
>>>>          .release = vb2_dma_sg_dmabuf_ops_release,
>>>> diff --git a/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>>>> b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>>>> index 298ffb9ecdae..467a4005164b 100644
>>>> --- a/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>>>> +++ b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>>>> @@ -346,7 +346,6 @@ static const struct dma_buf_ops
>>>> vb2_vmalloc_dmabuf_ops = {
>>>>          .map_dma_buf = vb2_vmalloc_dmabuf_ops_map,
>>>>          .unmap_dma_buf = vb2_vmalloc_dmabuf_ops_unmap,
>>>>          .map = vb2_vmalloc_dmabuf_ops_kmap,
>>>> -       .map_atomic = vb2_vmalloc_dmabuf_ops_kmap,
>>>>          .vmap = vb2_vmalloc_dmabuf_ops_vmap,
>>>>          .mmap = vb2_vmalloc_dmabuf_ops_mmap,
>>>>          .release = vb2_vmalloc_dmabuf_ops_release,
>>>> diff --git a/drivers/staging/android/ion/ion.c
>>>> b/drivers/staging/android/ion/ion.c
>>>> index 57e0d8035b2e..a46219ff5e16 100644
>>>> --- a/drivers/staging/android/ion/ion.c
>>>> +++ b/drivers/staging/android/ion/ion.c
>>>> @@ -374,8 +374,6 @@ static const struct dma_buf_ops dma_buf_ops = {
>>>>          .detach = ion_dma_buf_detatch,
>>>>          .begin_cpu_access = ion_dma_buf_begin_cpu_access,
>>>>          .end_cpu_access = ion_dma_buf_end_cpu_access,
>>>> -       .map_atomic = ion_dma_buf_kmap,
>>>> -       .unmap_atomic = ion_dma_buf_kunmap,
>>>>          .map = ion_dma_buf_kmap,
>>>>          .unmap = ion_dma_buf_kunmap,
>>>>    };
>>>> diff --git a/drivers/tee/tee_shm.c b/drivers/tee/tee_shm.c
>>>> index 556960a1bab3..df4a1553b78b 100644
>>>> --- a/drivers/tee/tee_shm.c
>>>> +++ b/drivers/tee/tee_shm.c
>>>> @@ -80,11 +80,6 @@ static void tee_shm_op_release(struct dma_buf *dmabuf)
>>>>          tee_shm_release(shm);
>>>>    }
>>>>    -static void *tee_shm_op_map_atomic(struct dma_buf *dmabuf, unsigned
>>>> long pgnum)
>>>> -{
>>>> -       return NULL;
>>>> -}
>>>> -
>>>>    static void *tee_shm_op_map(struct dma_buf *dmabuf, unsigned long
>>>> pgnum)
>>>>    {
>>>>          return NULL;
>>>> @@ -107,7 +102,6 @@ static const struct dma_buf_ops tee_shm_dma_buf_ops =
>>>> {
>>>>          .map_dma_buf = tee_shm_op_map_dma_buf,
>>>>          .unmap_dma_buf = tee_shm_op_unmap_dma_buf,
>>>>          .release = tee_shm_op_release,
>>>> -       .map_atomic = tee_shm_op_map_atomic,
>>>>          .map = tee_shm_op_map,
>>>>          .mmap = tee_shm_op_mmap,
>>>>    };
>>>> diff --git a/include/drm/drm_prime.h b/include/drm/drm_prime.h
>>>> index ef338151cea8..d716d653b096 100644
>>>> --- a/include/drm/drm_prime.h
>>>> +++ b/include/drm/drm_prime.h
>>>> @@ -93,10 +93,6 @@ void drm_gem_unmap_dma_buf(struct dma_buf_attachment
>>>> *attach,
>>>>                             enum dma_data_direction dir);
>>>>    void *drm_gem_dmabuf_vmap(struct dma_buf *dma_buf);
>>>>    void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr);
>>>> -void *drm_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>>> -                                unsigned long page_num);
>>>> -void drm_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>>> -                                 unsigned long page_num, void *addr);
>>>>    void *drm_gem_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long
>>>> page_num);
>>>>    void drm_gem_dmabuf_kunmap(struct dma_buf *dma_buf, unsigned long
>>>> page_num,
>>>>                             void *addr);
>>>> diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
>>>> index 346caf77937f..d17cadd76802 100644
>>>> --- a/include/linux/dma-buf.h
>>>> +++ b/include/linux/dma-buf.h
>>>> @@ -205,8 +205,6 @@ struct dma_buf_ops {
>>>>           * to be restarted.
>>>>           */
>>>>          int (*end_cpu_access)(struct dma_buf *, enum dma_data_direction);
>>>> -       void *(*map_atomic)(struct dma_buf *, unsigned long);
>>>> -       void (*unmap_atomic)(struct dma_buf *, unsigned long, void *);
>>>>          void *(*map)(struct dma_buf *, unsigned long);
>>>>          void (*unmap)(struct dma_buf *, unsigned long, void *);
>>>>    @@ -394,8 +392,6 @@ int dma_buf_begin_cpu_access(struct dma_buf
>>>> *dma_buf,
>>>>                               enum dma_data_direction dir);
>>>>    int dma_buf_end_cpu_access(struct dma_buf *dma_buf,
>>>>                             enum dma_data_direction dir);
>>>> -void *dma_buf_kmap_atomic(struct dma_buf *, unsigned long);
>>>> -void dma_buf_kunmap_atomic(struct dma_buf *, unsigned long, void *);
>>>>    void *dma_buf_kmap(struct dma_buf *, unsigned long);
>>>>    void dma_buf_kunmap(struct dma_buf *, unsigned long, void *);
>>>>
>>>> --
>>>> 2.14.1
>>>>
>>>> _______________________________________________
>>>> dri-devel mailing list
>>>> dri-devel@lists.freedesktop.org
>>>> https://lists.freedesktop.org/mailman/listinfo/dri-devel
>>
>
>

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 2/5] dma-buf: remove kmap_atomic interface
@ 2018-06-20 12:46           ` Christian König
  0 siblings, 0 replies; 58+ messages in thread
From: Christian König @ 2018-06-20 12:46 UTC (permalink / raw)
  To: Daniel Vetter, Christian König
  Cc: moderated list:DMA BUFFER SHARING FRAMEWORK, dri-devel,
	amd-gfx list, open list:DMA BUFFER SHARING FRAMEWORK

Am 19.06.2018 um 17:35 schrieb Daniel Vetter:
> On Tue, Jun 19, 2018 at 4:47 PM, Christian König
> <christian.koenig@amd.com> wrote:
>> Am 18.06.2018 um 10:18 schrieb Daniel Vetter:
>>> On Fri, Jun 01, 2018 at 02:00:17PM +0200, Christian König wrote:
>>>> Neither used nor correctly implemented anywhere. Just completely remove
>>>> the interface.
>>>>
>>>> Signed-off-by: Christian König <christian.koenig@amd.com>
>>> I wonder whether we can nuke the normal kmap stuff too ... everyone seems
>>> to want/use the vmap stuff for kernel-internal mapping needs.
>>>
>>> Anyway, this looks good.
>>>> ---
>>>>    drivers/dma-buf/dma-buf.c                          | 44
>>>> ----------------------
>>>>    drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c          |  2 -
>>>>    drivers/gpu/drm/armada/armada_gem.c                |  2 -
>>>>    drivers/gpu/drm/drm_prime.c                        | 26 -------------
>>>>    drivers/gpu/drm/i915/i915_gem_dmabuf.c             | 11 ------
>>>>    drivers/gpu/drm/i915/selftests/mock_dmabuf.c       |  2 -
>>>>    drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c          |  2 -
>>>>    drivers/gpu/drm/tegra/gem.c                        | 14 -------
>>>>    drivers/gpu/drm/udl/udl_dmabuf.c                   | 17 ---------
>>>>    drivers/gpu/drm/vmwgfx/vmwgfx_prime.c              | 13 -------
>>>>    .../media/common/videobuf2/videobuf2-dma-contig.c  |  1 -
>>>>    drivers/media/common/videobuf2/videobuf2-dma-sg.c  |  1 -
>>>>    drivers/media/common/videobuf2/videobuf2-vmalloc.c |  1 -
>>>>    drivers/staging/android/ion/ion.c                  |  2 -
>>>>    drivers/tee/tee_shm.c                              |  6 ---
>>>>    include/drm/drm_prime.h                            |  4 --
>>>>    include/linux/dma-buf.h                            |  4 --
>>>>    17 files changed, 152 deletions(-)
>>>>
>>>> diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
>>>> index e99a8d19991b..e4c657d9fad7 100644
>>>> --- a/drivers/dma-buf/dma-buf.c
>>>> +++ b/drivers/dma-buf/dma-buf.c
>>>> @@ -405,7 +405,6 @@ struct dma_buf *dma_buf_export(const struct
>>>> dma_buf_export_info *exp_info)
>>>>                            || !exp_info->ops->map_dma_buf
>>>>                            || !exp_info->ops->unmap_dma_buf
>>>>                            || !exp_info->ops->release
>>>> -                         || !exp_info->ops->map_atomic
>>>>                            || !exp_info->ops->map
>>>>                            || !exp_info->ops->mmap)) {
>>>>                  return ERR_PTR(-EINVAL);
>>>> @@ -687,14 +686,6 @@ EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment);
>>>>     *      void \*dma_buf_kmap(struct dma_buf \*, unsigned long);
>>>>     *      void dma_buf_kunmap(struct dma_buf \*, unsigned long, void \*);
>>>>     *
>>>> - *   There are also atomic variants of these interfaces. Like for kmap
>>>> they
>>>> - *   facilitate non-blocking fast-paths. Neither the importer nor the
>>>> exporter
>>>> - *   (in the callback) is allowed to block when using these.
>>>> - *
>>>> - *   Interfaces::
>>>> - *      void \*dma_buf_kmap_atomic(struct dma_buf \*, unsigned long);
>>>> - *      void dma_buf_kunmap_atomic(struct dma_buf \*, unsigned long,
>>>> void \*);
>>>> - *
>>>>     *   For importers all the restrictions of using kmap apply, like the
>>>> limited
>>>>     *   supply of kmap_atomic slots. Hence an importer shall only hold
>>>> onto at
>>>>     *   max 2 atomic dma_buf kmaps at the same time (in any given process
>>>> context).
>>> This is also about atomic kmap ...
>>>
>>> And the subsequent language around "Note that these calls need to always
>>> succeed." is also not true, might be good to update that stating that kmap
>>> is optional (like we say already for vmap).
>>>
>>> With those docs nits addressed:
>>>
>>> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
>>
>> I've fixed up patch #1 and #2 and added your Reviewed-by tag.
>>
>> Since I finally had time to install dim do you have any objections that I
>> now run "dim push drm-misc-next" with those two applied?
> Go ahead, that's the point of commit rights. dim might complain if you
> cherry picked them and didn't pick them up using dim apply though ...

I've fixed up the Link tags, but when I try "dim push-branch 
drm-misc-next" I only get the error message "error: dst ref 
refs/heads/drm-misc-next receives from more than one src."

Any idea what is going wrong here?

Christian.

> -Daniel
>
>
>> Regards,
>> Christian.
>>
>>
>>>> @@ -859,41 +850,6 @@ int dma_buf_end_cpu_access(struct dma_buf *dmabuf,
>>>>    }
>>>>    EXPORT_SYMBOL_GPL(dma_buf_end_cpu_access);
>>>>    -/**
>>>> - * dma_buf_kmap_atomic - Map a page of the buffer object into kernel
>>>> address
>>>> - * space. The same restrictions as for kmap_atomic and friends apply.
>>>> - * @dmabuf:    [in]    buffer to map page from.
>>>> - * @page_num:  [in]    page in PAGE_SIZE units to map.
>>>> - *
>>>> - * This call must always succeed, any necessary preparations that might
>>>> fail
>>>> - * need to be done in begin_cpu_access.
>>>> - */
>>>> -void *dma_buf_kmap_atomic(struct dma_buf *dmabuf, unsigned long
>>>> page_num)
>>>> -{
>>>> -       WARN_ON(!dmabuf);
>>>> -
>>>> -       return dmabuf->ops->map_atomic(dmabuf, page_num);
>>>> -}
>>>> -EXPORT_SYMBOL_GPL(dma_buf_kmap_atomic);
>>>> -
>>>> -/**
>>>> - * dma_buf_kunmap_atomic - Unmap a page obtained by dma_buf_kmap_atomic.
>>>> - * @dmabuf:    [in]    buffer to unmap page from.
>>>> - * @page_num:  [in]    page in PAGE_SIZE units to unmap.
>>>> - * @vaddr:     [in]    kernel space pointer obtained from
>>>> dma_buf_kmap_atomic.
>>>> - *
>>>> - * This call must always succeed.
>>>> - */
>>>> -void dma_buf_kunmap_atomic(struct dma_buf *dmabuf, unsigned long
>>>> page_num,
>>>> -                          void *vaddr)
>>>> -{
>>>> -       WARN_ON(!dmabuf);
>>>> -
>>>> -       if (dmabuf->ops->unmap_atomic)
>>>> -               dmabuf->ops->unmap_atomic(dmabuf, page_num, vaddr);
>>>> -}
>>>> -EXPORT_SYMBOL_GPL(dma_buf_kunmap_atomic);
>>>> -
>>>>    /**
>>>>     * dma_buf_kmap - Map a page of the buffer object into kernel address
>>>> space. The
>>>>     * same restrictions as for kmap and friends apply.
>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>>>> index f1500f1ec0f5..a156b3891a3f 100644
>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>>>> @@ -244,9 +244,7 @@ static const struct dma_buf_ops amdgpu_dmabuf_ops = {
>>>>          .release = drm_gem_dmabuf_release,
>>>>          .begin_cpu_access = amdgpu_gem_begin_cpu_access,
>>>>          .map = drm_gem_dmabuf_kmap,
>>>> -       .map_atomic = drm_gem_dmabuf_kmap_atomic,
>>>>          .unmap = drm_gem_dmabuf_kunmap,
>>>> -       .unmap_atomic = drm_gem_dmabuf_kunmap_atomic,
>>>>          .mmap = drm_gem_dmabuf_mmap,
>>>>          .vmap = drm_gem_dmabuf_vmap,
>>>>          .vunmap = drm_gem_dmabuf_vunmap,
>>>> diff --git a/drivers/gpu/drm/armada/armada_gem.c
>>>> b/drivers/gpu/drm/armada/armada_gem.c
>>>> index a97f509743a5..3fb37c75c065 100644
>>>> --- a/drivers/gpu/drm/armada/armada_gem.c
>>>> +++ b/drivers/gpu/drm/armada/armada_gem.c
>>>> @@ -490,8 +490,6 @@ static const struct dma_buf_ops
>>>> armada_gem_prime_dmabuf_ops = {
>>>>          .map_dma_buf    = armada_gem_prime_map_dma_buf,
>>>>          .unmap_dma_buf  = armada_gem_prime_unmap_dma_buf,
>>>>          .release        = drm_gem_dmabuf_release,
>>>> -       .map_atomic     = armada_gem_dmabuf_no_kmap,
>>>> -       .unmap_atomic   = armada_gem_dmabuf_no_kunmap,
>>>>          .map            = armada_gem_dmabuf_no_kmap,
>>>>          .unmap          = armada_gem_dmabuf_no_kunmap,
>>>>          .mmap           = armada_gem_dmabuf_mmap,
>>>> diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
>>>> index 4a3a232fea67..b28fa8f44c8b 100644
>>>> --- a/drivers/gpu/drm/drm_prime.c
>>>> +++ b/drivers/gpu/drm/drm_prime.c
>>>> @@ -426,30 +426,6 @@ void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf,
>>>> void *vaddr)
>>>>    }
>>>>    EXPORT_SYMBOL(drm_gem_dmabuf_vunmap);
>>>>    -/**
>>>> - * drm_gem_dmabuf_kmap_atomic - map_atomic implementation for GEM
>>>> - *
>>>> - * Not implemented. This can be used as the &dma_buf_ops.map_atomic
>>>> callback.
>>>> - */
>>>> -void *drm_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>>> -                                unsigned long page_num)
>>>> -{
>>>> -       return NULL;
>>>> -}
>>>> -EXPORT_SYMBOL(drm_gem_dmabuf_kmap_atomic);
>>>> -
>>>> -/**
>>>> - * drm_gem_dmabuf_kunmap_atomic - unmap_atomic implementation for GEM
>>>> - *
>>>> - * Not implemented. This can be used as the &dma_buf_ops.unmap_atomic
>>>> callback.
>>>> - */
>>>> -void drm_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>>> -                                 unsigned long page_num, void *addr)
>>>> -{
>>>> -
>>>> -}
>>>> -EXPORT_SYMBOL(drm_gem_dmabuf_kunmap_atomic);
>>>> -
>>>>    /**
>>>>     * drm_gem_dmabuf_kmap - map implementation for GEM
>>>>     *
>>>> @@ -502,9 +478,7 @@ static const struct dma_buf_ops
>>>> drm_gem_prime_dmabuf_ops =  {
>>>>          .unmap_dma_buf = drm_gem_unmap_dma_buf,
>>>>          .release = drm_gem_dmabuf_release,
>>>>          .map = drm_gem_dmabuf_kmap,
>>>> -       .map_atomic = drm_gem_dmabuf_kmap_atomic,
>>>>          .unmap = drm_gem_dmabuf_kunmap,
>>>> -       .unmap_atomic = drm_gem_dmabuf_kunmap_atomic,
>>>>          .mmap = drm_gem_dmabuf_mmap,
>>>>          .vmap = drm_gem_dmabuf_vmap,
>>>>          .vunmap = drm_gem_dmabuf_vunmap,
>>>> diff --git a/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>>>> b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>>>> index 69a7aec49e84..82e2ca17a441 100644
>>>> --- a/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>>>> +++ b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>>>> @@ -111,15 +111,6 @@ static void i915_gem_dmabuf_vunmap(struct dma_buf
>>>> *dma_buf, void *vaddr)
>>>>          i915_gem_object_unpin_map(obj);
>>>>    }
>>>>    -static void *i915_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>>> unsigned long page_num)
>>>> -{
>>>> -       return NULL;
>>>> -}
>>>> -
>>>> -static void i915_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>>> unsigned long page_num, void *addr)
>>>> -{
>>>> -
>>>> -}
>>>>    static void *i915_gem_dmabuf_kmap(struct dma_buf *dma_buf, unsigned
>>>> long page_num)
>>>>    {
>>>>          struct drm_i915_gem_object *obj = dma_buf_to_obj(dma_buf);
>>>> @@ -225,9 +216,7 @@ static const struct dma_buf_ops i915_dmabuf_ops =  {
>>>>          .unmap_dma_buf = i915_gem_unmap_dma_buf,
>>>>          .release = drm_gem_dmabuf_release,
>>>>          .map = i915_gem_dmabuf_kmap,
>>>> -       .map_atomic = i915_gem_dmabuf_kmap_atomic,
>>>>          .unmap = i915_gem_dmabuf_kunmap,
>>>> -       .unmap_atomic = i915_gem_dmabuf_kunmap_atomic,
>>>>          .mmap = i915_gem_dmabuf_mmap,
>>>>          .vmap = i915_gem_dmabuf_vmap,
>>>>          .vunmap = i915_gem_dmabuf_vunmap,
>>>> diff --git a/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>>>> b/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>>>> index 302f7d103635..f81fda8ea45e 100644
>>>> --- a/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>>>> +++ b/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>>>> @@ -130,9 +130,7 @@ static const struct dma_buf_ops mock_dmabuf_ops =  {
>>>>          .unmap_dma_buf = mock_unmap_dma_buf,
>>>>          .release = mock_dmabuf_release,
>>>>          .map = mock_dmabuf_kmap,
>>>> -       .map_atomic = mock_dmabuf_kmap_atomic,
>>>>          .unmap = mock_dmabuf_kunmap,
>>>> -       .unmap_atomic = mock_dmabuf_kunmap_atomic,
>>>>          .mmap = mock_dmabuf_mmap,
>>>>          .vmap = mock_dmabuf_vmap,
>>>>          .vunmap = mock_dmabuf_vunmap,
>>>> diff --git a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>>>> b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>>>> index 8e41d649e248..1a073f9b2834 100644
>>>> --- a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>>>> +++ b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>>>> @@ -148,8 +148,6 @@ static const struct dma_buf_ops omap_dmabuf_ops = {
>>>>          .release = drm_gem_dmabuf_release,
>>>>          .begin_cpu_access = omap_gem_dmabuf_begin_cpu_access,
>>>>          .end_cpu_access = omap_gem_dmabuf_end_cpu_access,
>>>> -       .map_atomic = omap_gem_dmabuf_kmap_atomic,
>>>> -       .unmap_atomic = omap_gem_dmabuf_kunmap_atomic,
>>>>          .map = omap_gem_dmabuf_kmap,
>>>>          .unmap = omap_gem_dmabuf_kunmap,
>>>>          .mmap = omap_gem_dmabuf_mmap,
>>>> diff --git a/drivers/gpu/drm/tegra/gem.c b/drivers/gpu/drm/tegra/gem.c
>>>> index 8b0b4ff64bb4..d7661702c11c 100644
>>>> --- a/drivers/gpu/drm/tegra/gem.c
>>>> +++ b/drivers/gpu/drm/tegra/gem.c
>>>> @@ -596,18 +596,6 @@ static int tegra_gem_prime_end_cpu_access(struct
>>>> dma_buf *buf,
>>>>          return 0;
>>>>    }
>>>>    -static void *tegra_gem_prime_kmap_atomic(struct dma_buf *buf,
>>>> -                                        unsigned long page)
>>>> -{
>>>> -       return NULL;
>>>> -}
>>>> -
>>>> -static void tegra_gem_prime_kunmap_atomic(struct dma_buf *buf,
>>>> -                                         unsigned long page,
>>>> -                                         void *addr)
>>>> -{
>>>> -}
>>>> -
>>>>    static void *tegra_gem_prime_kmap(struct dma_buf *buf, unsigned long
>>>> page)
>>>>    {
>>>>          return NULL;
>>>> @@ -648,8 +636,6 @@ static const struct dma_buf_ops
>>>> tegra_gem_prime_dmabuf_ops = {
>>>>          .release = tegra_gem_prime_release,
>>>>          .begin_cpu_access = tegra_gem_prime_begin_cpu_access,
>>>>          .end_cpu_access = tegra_gem_prime_end_cpu_access,
>>>> -       .map_atomic = tegra_gem_prime_kmap_atomic,
>>>> -       .unmap_atomic = tegra_gem_prime_kunmap_atomic,
>>>>          .map = tegra_gem_prime_kmap,
>>>>          .unmap = tegra_gem_prime_kunmap,
>>>>          .mmap = tegra_gem_prime_mmap,
>>>> diff --git a/drivers/gpu/drm/udl/udl_dmabuf.c
>>>> b/drivers/gpu/drm/udl/udl_dmabuf.c
>>>> index 5fdc8bdc2026..ae7225dedc30 100644
>>>> --- a/drivers/gpu/drm/udl/udl_dmabuf.c
>>>> +++ b/drivers/gpu/drm/udl/udl_dmabuf.c
>>>> @@ -156,27 +156,12 @@ static void *udl_dmabuf_kmap(struct dma_buf
>>>> *dma_buf, unsigned long page_num)
>>>>          return NULL;
>>>>    }
>>>>    -static void *udl_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>>> -                                   unsigned long page_num)
>>>> -{
>>>> -       /* TODO */
>>>> -
>>>> -       return NULL;
>>>> -}
>>>> -
>>>>    static void udl_dmabuf_kunmap(struct dma_buf *dma_buf,
>>>>                                unsigned long page_num, void *addr)
>>>>    {
>>>>          /* TODO */
>>>>    }
>>>>    -static void udl_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>>> -                                    unsigned long page_num,
>>>> -                                    void *addr)
>>>> -{
>>>> -       /* TODO */
>>>> -}
>>>> -
>>>>    static int udl_dmabuf_mmap(struct dma_buf *dma_buf,
>>>>                             struct vm_area_struct *vma)
>>>>    {
>>>> @@ -191,9 +176,7 @@ static const struct dma_buf_ops udl_dmabuf_ops = {
>>>>          .map_dma_buf            = udl_map_dma_buf,
>>>>          .unmap_dma_buf          = udl_unmap_dma_buf,
>>>>          .map                    = udl_dmabuf_kmap,
>>>> -       .map_atomic             = udl_dmabuf_kmap_atomic,
>>>>          .unmap                  = udl_dmabuf_kunmap,
>>>> -       .unmap_atomic           = udl_dmabuf_kunmap_atomic,
>>>>          .mmap                   = udl_dmabuf_mmap,
>>>>          .release                = drm_gem_dmabuf_release,
>>>>    };
>>>> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>>>> b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>>>> index fbffb37ccf42..373bc6da2f84 100644
>>>> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>>>> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>>>> @@ -71,17 +71,6 @@ static void vmw_prime_dmabuf_vunmap(struct dma_buf
>>>> *dma_buf, void *vaddr)
>>>>    {
>>>>    }
>>>>    -static void *vmw_prime_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>>> -               unsigned long page_num)
>>>> -{
>>>> -       return NULL;
>>>> -}
>>>> -
>>>> -static void vmw_prime_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>>> -               unsigned long page_num, void *addr)
>>>> -{
>>>> -
>>>> -}
>>>>    static void *vmw_prime_dmabuf_kmap(struct dma_buf *dma_buf,
>>>>                  unsigned long page_num)
>>>>    {
>>>> @@ -108,9 +97,7 @@ const struct dma_buf_ops vmw_prime_dmabuf_ops =  {
>>>>          .unmap_dma_buf = vmw_prime_unmap_dma_buf,
>>>>          .release = NULL,
>>>>          .map = vmw_prime_dmabuf_kmap,
>>>> -       .map_atomic = vmw_prime_dmabuf_kmap_atomic,
>>>>          .unmap = vmw_prime_dmabuf_kunmap,
>>>> -       .unmap_atomic = vmw_prime_dmabuf_kunmap_atomic,
>>>>          .mmap = vmw_prime_dmabuf_mmap,
>>>>          .vmap = vmw_prime_dmabuf_vmap,
>>>>          .vunmap = vmw_prime_dmabuf_vunmap,
>>>> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>>>> b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>>>> index 12d0072c52c2..aff0ab7bf83d 100644
>>>> --- a/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>>>> +++ b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>>>> @@ -358,7 +358,6 @@ static const struct dma_buf_ops vb2_dc_dmabuf_ops = {
>>>>          .map_dma_buf = vb2_dc_dmabuf_ops_map,
>>>>          .unmap_dma_buf = vb2_dc_dmabuf_ops_unmap,
>>>>          .map = vb2_dc_dmabuf_ops_kmap,
>>>> -       .map_atomic = vb2_dc_dmabuf_ops_kmap,
>>>>          .vmap = vb2_dc_dmabuf_ops_vmap,
>>>>          .mmap = vb2_dc_dmabuf_ops_mmap,
>>>>          .release = vb2_dc_dmabuf_ops_release,
>>>> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>>>> b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>>>> index cf94765e593f..015e737095cd 100644
>>>> --- a/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>>>> +++ b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>>>> @@ -507,7 +507,6 @@ static const struct dma_buf_ops vb2_dma_sg_dmabuf_ops
>>>> = {
>>>>          .map_dma_buf = vb2_dma_sg_dmabuf_ops_map,
>>>>          .unmap_dma_buf = vb2_dma_sg_dmabuf_ops_unmap,
>>>>          .map = vb2_dma_sg_dmabuf_ops_kmap,
>>>> -       .map_atomic = vb2_dma_sg_dmabuf_ops_kmap,
>>>>          .vmap = vb2_dma_sg_dmabuf_ops_vmap,
>>>>          .mmap = vb2_dma_sg_dmabuf_ops_mmap,
>>>>          .release = vb2_dma_sg_dmabuf_ops_release,
>>>> diff --git a/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>>>> b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>>>> index 298ffb9ecdae..467a4005164b 100644
>>>> --- a/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>>>> +++ b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>>>> @@ -346,7 +346,6 @@ static const struct dma_buf_ops
>>>> vb2_vmalloc_dmabuf_ops = {
>>>>          .map_dma_buf = vb2_vmalloc_dmabuf_ops_map,
>>>>          .unmap_dma_buf = vb2_vmalloc_dmabuf_ops_unmap,
>>>>          .map = vb2_vmalloc_dmabuf_ops_kmap,
>>>> -       .map_atomic = vb2_vmalloc_dmabuf_ops_kmap,
>>>>          .vmap = vb2_vmalloc_dmabuf_ops_vmap,
>>>>          .mmap = vb2_vmalloc_dmabuf_ops_mmap,
>>>>          .release = vb2_vmalloc_dmabuf_ops_release,
>>>> diff --git a/drivers/staging/android/ion/ion.c
>>>> b/drivers/staging/android/ion/ion.c
>>>> index 57e0d8035b2e..a46219ff5e16 100644
>>>> --- a/drivers/staging/android/ion/ion.c
>>>> +++ b/drivers/staging/android/ion/ion.c
>>>> @@ -374,8 +374,6 @@ static const struct dma_buf_ops dma_buf_ops = {
>>>>          .detach = ion_dma_buf_detatch,
>>>>          .begin_cpu_access = ion_dma_buf_begin_cpu_access,
>>>>          .end_cpu_access = ion_dma_buf_end_cpu_access,
>>>> -       .map_atomic = ion_dma_buf_kmap,
>>>> -       .unmap_atomic = ion_dma_buf_kunmap,
>>>>          .map = ion_dma_buf_kmap,
>>>>          .unmap = ion_dma_buf_kunmap,
>>>>    };
>>>> diff --git a/drivers/tee/tee_shm.c b/drivers/tee/tee_shm.c
>>>> index 556960a1bab3..df4a1553b78b 100644
>>>> --- a/drivers/tee/tee_shm.c
>>>> +++ b/drivers/tee/tee_shm.c
>>>> @@ -80,11 +80,6 @@ static void tee_shm_op_release(struct dma_buf *dmabuf)
>>>>          tee_shm_release(shm);
>>>>    }
>>>>    -static void *tee_shm_op_map_atomic(struct dma_buf *dmabuf, unsigned
>>>> long pgnum)
>>>> -{
>>>> -       return NULL;
>>>> -}
>>>> -
>>>>    static void *tee_shm_op_map(struct dma_buf *dmabuf, unsigned long
>>>> pgnum)
>>>>    {
>>>>          return NULL;
>>>> @@ -107,7 +102,6 @@ static const struct dma_buf_ops tee_shm_dma_buf_ops =
>>>> {
>>>>          .map_dma_buf = tee_shm_op_map_dma_buf,
>>>>          .unmap_dma_buf = tee_shm_op_unmap_dma_buf,
>>>>          .release = tee_shm_op_release,
>>>> -       .map_atomic = tee_shm_op_map_atomic,
>>>>          .map = tee_shm_op_map,
>>>>          .mmap = tee_shm_op_mmap,
>>>>    };
>>>> diff --git a/include/drm/drm_prime.h b/include/drm/drm_prime.h
>>>> index ef338151cea8..d716d653b096 100644
>>>> --- a/include/drm/drm_prime.h
>>>> +++ b/include/drm/drm_prime.h
>>>> @@ -93,10 +93,6 @@ void drm_gem_unmap_dma_buf(struct dma_buf_attachment
>>>> *attach,
>>>>                             enum dma_data_direction dir);
>>>>    void *drm_gem_dmabuf_vmap(struct dma_buf *dma_buf);
>>>>    void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr);
>>>> -void *drm_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>>> -                                unsigned long page_num);
>>>> -void drm_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>>> -                                 unsigned long page_num, void *addr);
>>>>    void *drm_gem_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long
>>>> page_num);
>>>>    void drm_gem_dmabuf_kunmap(struct dma_buf *dma_buf, unsigned long
>>>> page_num,
>>>>                             void *addr);
>>>> diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
>>>> index 346caf77937f..d17cadd76802 100644
>>>> --- a/include/linux/dma-buf.h
>>>> +++ b/include/linux/dma-buf.h
>>>> @@ -205,8 +205,6 @@ struct dma_buf_ops {
>>>>           * to be restarted.
>>>>           */
>>>>          int (*end_cpu_access)(struct dma_buf *, enum dma_data_direction);
>>>> -       void *(*map_atomic)(struct dma_buf *, unsigned long);
>>>> -       void (*unmap_atomic)(struct dma_buf *, unsigned long, void *);
>>>>          void *(*map)(struct dma_buf *, unsigned long);
>>>>          void (*unmap)(struct dma_buf *, unsigned long, void *);
>>>>    @@ -394,8 +392,6 @@ int dma_buf_begin_cpu_access(struct dma_buf
>>>> *dma_buf,
>>>>                               enum dma_data_direction dir);
>>>>    int dma_buf_end_cpu_access(struct dma_buf *dma_buf,
>>>>                             enum dma_data_direction dir);
>>>> -void *dma_buf_kmap_atomic(struct dma_buf *, unsigned long);
>>>> -void dma_buf_kunmap_atomic(struct dma_buf *, unsigned long, void *);
>>>>    void *dma_buf_kmap(struct dma_buf *, unsigned long);
>>>>    void dma_buf_kunmap(struct dma_buf *, unsigned long, void *);
>>>>
>>>> --
>>>> 2.14.1
>>>>
>>>> _______________________________________________
>>>> dri-devel mailing list
>>>> dri-devel@lists.freedesktop.org
>>>> https://lists.freedesktop.org/mailman/listinfo/dri-devel
>>
>
>

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 2/5] dma-buf: remove kmap_atomic interface
@ 2018-06-20 12:52             ` Daniel Vetter
  0 siblings, 0 replies; 58+ messages in thread
From: Daniel Vetter @ 2018-06-20 12:52 UTC (permalink / raw)
  To: Christian König
  Cc: moderated list:DMA BUFFER SHARING FRAMEWORK, amd-gfx list,
	dri-devel, open list:DMA BUFFER SHARING FRAMEWORK

On Wed, Jun 20, 2018 at 2:46 PM, Christian König
<ckoenig.leichtzumerken@gmail.com> wrote:
> Am 19.06.2018 um 17:35 schrieb Daniel Vetter:
>>
>> On Tue, Jun 19, 2018 at 4:47 PM, Christian König
>> <christian.koenig@amd.com> wrote:
>>>
>>> Am 18.06.2018 um 10:18 schrieb Daniel Vetter:
>>>>
>>>> On Fri, Jun 01, 2018 at 02:00:17PM +0200, Christian König wrote:
>>>>>
>>>>> Neither used nor correctly implemented anywhere. Just completely remove
>>>>> the interface.
>>>>>
>>>>> Signed-off-by: Christian König <christian.koenig@amd.com>
>>>>
>>>> I wonder whether we can nuke the normal kmap stuff too ... everyone
>>>> seems
>>>> to want/use the vmap stuff for kernel-internal mapping needs.
>>>>
>>>> Anyway, this looks good.
>>>>>
>>>>> ---
>>>>>    drivers/dma-buf/dma-buf.c                          | 44
>>>>> ----------------------
>>>>>    drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c          |  2 -
>>>>>    drivers/gpu/drm/armada/armada_gem.c                |  2 -
>>>>>    drivers/gpu/drm/drm_prime.c                        | 26
>>>>> -------------
>>>>>    drivers/gpu/drm/i915/i915_gem_dmabuf.c             | 11 ------
>>>>>    drivers/gpu/drm/i915/selftests/mock_dmabuf.c       |  2 -
>>>>>    drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c          |  2 -
>>>>>    drivers/gpu/drm/tegra/gem.c                        | 14 -------
>>>>>    drivers/gpu/drm/udl/udl_dmabuf.c                   | 17 ---------
>>>>>    drivers/gpu/drm/vmwgfx/vmwgfx_prime.c              | 13 -------
>>>>>    .../media/common/videobuf2/videobuf2-dma-contig.c  |  1 -
>>>>>    drivers/media/common/videobuf2/videobuf2-dma-sg.c  |  1 -
>>>>>    drivers/media/common/videobuf2/videobuf2-vmalloc.c |  1 -
>>>>>    drivers/staging/android/ion/ion.c                  |  2 -
>>>>>    drivers/tee/tee_shm.c                              |  6 ---
>>>>>    include/drm/drm_prime.h                            |  4 --
>>>>>    include/linux/dma-buf.h                            |  4 --
>>>>>    17 files changed, 152 deletions(-)
>>>>>
>>>>> diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
>>>>> index e99a8d19991b..e4c657d9fad7 100644
>>>>> --- a/drivers/dma-buf/dma-buf.c
>>>>> +++ b/drivers/dma-buf/dma-buf.c
>>>>> @@ -405,7 +405,6 @@ struct dma_buf *dma_buf_export(const struct
>>>>> dma_buf_export_info *exp_info)
>>>>>                            || !exp_info->ops->map_dma_buf
>>>>>                            || !exp_info->ops->unmap_dma_buf
>>>>>                            || !exp_info->ops->release
>>>>> -                         || !exp_info->ops->map_atomic
>>>>>                            || !exp_info->ops->map
>>>>>                            || !exp_info->ops->mmap)) {
>>>>>                  return ERR_PTR(-EINVAL);
>>>>> @@ -687,14 +686,6 @@ EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment);
>>>>>     *      void \*dma_buf_kmap(struct dma_buf \*, unsigned long);
>>>>>     *      void dma_buf_kunmap(struct dma_buf \*, unsigned long, void
>>>>> \*);
>>>>>     *
>>>>> - *   There are also atomic variants of these interfaces. Like for kmap
>>>>> they
>>>>> - *   facilitate non-blocking fast-paths. Neither the importer nor the
>>>>> exporter
>>>>> - *   (in the callback) is allowed to block when using these.
>>>>> - *
>>>>> - *   Interfaces::
>>>>> - *      void \*dma_buf_kmap_atomic(struct dma_buf \*, unsigned long);
>>>>> - *      void dma_buf_kunmap_atomic(struct dma_buf \*, unsigned long,
>>>>> void \*);
>>>>> - *
>>>>>     *   For importers all the restrictions of using kmap apply, like
>>>>> the
>>>>> limited
>>>>>     *   supply of kmap_atomic slots. Hence an importer shall only hold
>>>>> onto at
>>>>>     *   max 2 atomic dma_buf kmaps at the same time (in any given
>>>>> process
>>>>> context).
>>>>
>>>> This is also about atomic kmap ...
>>>>
>>>> And the subsequent language around "Note that these calls need to always
>>>> succeed." is also not true, might be good to update that stating that
>>>> kmap
>>>> is optional (like we say already for vmap).
>>>>
>>>> With those docs nits addressed:
>>>>
>>>> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
>>>
>>>
>>> I've fixed up patch #1 and #2 and added your Reviewed-by tag.
>>>
>>> Since I finally had time to install dim do you have any objections that I
>>> now run "dim push drm-misc-next" with those two applied?
>>
>> Go ahead, that's the point of commit rights. dim might complain if you
>> cherry picked them and didn't pick them up using dim apply though ...
>
>
> I've fixed up the Link tags, but when I try "dim push-branch drm-misc-next"
> I only get the error message "error: dst ref refs/heads/drm-misc-next
> receives from more than one src."
>
> Any idea what is going wrong here?

Sounds like multiple upstreams for your local drm-misc-next branch,
and git then can't decide which one to pick. If you delete the branch
and create it using dim checkout drm-misc-next this shouldn't happen.
We're trying to fit into existing check-outs and branches, but if you
set things up slightly different than dim would have you're off script
and there's limited support for that.

Alternative check out your .git/config and remove the other upstreams.
Or attach your git config if this isn't the issue (I'm just doing some
guessing here).
-Daniel

> Christian.
>
>
>> -Daniel
>>
>>
>>> Regards,
>>> Christian.
>>>
>>>
>>>>> @@ -859,41 +850,6 @@ int dma_buf_end_cpu_access(struct dma_buf *dmabuf,
>>>>>    }
>>>>>    EXPORT_SYMBOL_GPL(dma_buf_end_cpu_access);
>>>>>    -/**
>>>>> - * dma_buf_kmap_atomic - Map a page of the buffer object into kernel
>>>>> address
>>>>> - * space. The same restrictions as for kmap_atomic and friends apply.
>>>>> - * @dmabuf:    [in]    buffer to map page from.
>>>>> - * @page_num:  [in]    page in PAGE_SIZE units to map.
>>>>> - *
>>>>> - * This call must always succeed, any necessary preparations that
>>>>> might
>>>>> fail
>>>>> - * need to be done in begin_cpu_access.
>>>>> - */
>>>>> -void *dma_buf_kmap_atomic(struct dma_buf *dmabuf, unsigned long
>>>>> page_num)
>>>>> -{
>>>>> -       WARN_ON(!dmabuf);
>>>>> -
>>>>> -       return dmabuf->ops->map_atomic(dmabuf, page_num);
>>>>> -}
>>>>> -EXPORT_SYMBOL_GPL(dma_buf_kmap_atomic);
>>>>> -
>>>>> -/**
>>>>> - * dma_buf_kunmap_atomic - Unmap a page obtained by
>>>>> dma_buf_kmap_atomic.
>>>>> - * @dmabuf:    [in]    buffer to unmap page from.
>>>>> - * @page_num:  [in]    page in PAGE_SIZE units to unmap.
>>>>> - * @vaddr:     [in]    kernel space pointer obtained from
>>>>> dma_buf_kmap_atomic.
>>>>> - *
>>>>> - * This call must always succeed.
>>>>> - */
>>>>> -void dma_buf_kunmap_atomic(struct dma_buf *dmabuf, unsigned long
>>>>> page_num,
>>>>> -                          void *vaddr)
>>>>> -{
>>>>> -       WARN_ON(!dmabuf);
>>>>> -
>>>>> -       if (dmabuf->ops->unmap_atomic)
>>>>> -               dmabuf->ops->unmap_atomic(dmabuf, page_num, vaddr);
>>>>> -}
>>>>> -EXPORT_SYMBOL_GPL(dma_buf_kunmap_atomic);
>>>>> -
>>>>>    /**
>>>>>     * dma_buf_kmap - Map a page of the buffer object into kernel
>>>>> address
>>>>> space. The
>>>>>     * same restrictions as for kmap and friends apply.
>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>>>>> index f1500f1ec0f5..a156b3891a3f 100644
>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>>>>> @@ -244,9 +244,7 @@ static const struct dma_buf_ops amdgpu_dmabuf_ops =
>>>>> {
>>>>>          .release = drm_gem_dmabuf_release,
>>>>>          .begin_cpu_access = amdgpu_gem_begin_cpu_access,
>>>>>          .map = drm_gem_dmabuf_kmap,
>>>>> -       .map_atomic = drm_gem_dmabuf_kmap_atomic,
>>>>>          .unmap = drm_gem_dmabuf_kunmap,
>>>>> -       .unmap_atomic = drm_gem_dmabuf_kunmap_atomic,
>>>>>          .mmap = drm_gem_dmabuf_mmap,
>>>>>          .vmap = drm_gem_dmabuf_vmap,
>>>>>          .vunmap = drm_gem_dmabuf_vunmap,
>>>>> diff --git a/drivers/gpu/drm/armada/armada_gem.c
>>>>> b/drivers/gpu/drm/armada/armada_gem.c
>>>>> index a97f509743a5..3fb37c75c065 100644
>>>>> --- a/drivers/gpu/drm/armada/armada_gem.c
>>>>> +++ b/drivers/gpu/drm/armada/armada_gem.c
>>>>> @@ -490,8 +490,6 @@ static const struct dma_buf_ops
>>>>> armada_gem_prime_dmabuf_ops = {
>>>>>          .map_dma_buf    = armada_gem_prime_map_dma_buf,
>>>>>          .unmap_dma_buf  = armada_gem_prime_unmap_dma_buf,
>>>>>          .release        = drm_gem_dmabuf_release,
>>>>> -       .map_atomic     = armada_gem_dmabuf_no_kmap,
>>>>> -       .unmap_atomic   = armada_gem_dmabuf_no_kunmap,
>>>>>          .map            = armada_gem_dmabuf_no_kmap,
>>>>>          .unmap          = armada_gem_dmabuf_no_kunmap,
>>>>>          .mmap           = armada_gem_dmabuf_mmap,
>>>>> diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
>>>>> index 4a3a232fea67..b28fa8f44c8b 100644
>>>>> --- a/drivers/gpu/drm/drm_prime.c
>>>>> +++ b/drivers/gpu/drm/drm_prime.c
>>>>> @@ -426,30 +426,6 @@ void drm_gem_dmabuf_vunmap(struct dma_buf
>>>>> *dma_buf,
>>>>> void *vaddr)
>>>>>    }
>>>>>    EXPORT_SYMBOL(drm_gem_dmabuf_vunmap);
>>>>>    -/**
>>>>> - * drm_gem_dmabuf_kmap_atomic - map_atomic implementation for GEM
>>>>> - *
>>>>> - * Not implemented. This can be used as the &dma_buf_ops.map_atomic
>>>>> callback.
>>>>> - */
>>>>> -void *drm_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>>>> -                                unsigned long page_num)
>>>>> -{
>>>>> -       return NULL;
>>>>> -}
>>>>> -EXPORT_SYMBOL(drm_gem_dmabuf_kmap_atomic);
>>>>> -
>>>>> -/**
>>>>> - * drm_gem_dmabuf_kunmap_atomic - unmap_atomic implementation for GEM
>>>>> - *
>>>>> - * Not implemented. This can be used as the &dma_buf_ops.unmap_atomic
>>>>> callback.
>>>>> - */
>>>>> -void drm_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>>>> -                                 unsigned long page_num, void *addr)
>>>>> -{
>>>>> -
>>>>> -}
>>>>> -EXPORT_SYMBOL(drm_gem_dmabuf_kunmap_atomic);
>>>>> -
>>>>>    /**
>>>>>     * drm_gem_dmabuf_kmap - map implementation for GEM
>>>>>     *
>>>>> @@ -502,9 +478,7 @@ static const struct dma_buf_ops
>>>>> drm_gem_prime_dmabuf_ops =  {
>>>>>          .unmap_dma_buf = drm_gem_unmap_dma_buf,
>>>>>          .release = drm_gem_dmabuf_release,
>>>>>          .map = drm_gem_dmabuf_kmap,
>>>>> -       .map_atomic = drm_gem_dmabuf_kmap_atomic,
>>>>>          .unmap = drm_gem_dmabuf_kunmap,
>>>>> -       .unmap_atomic = drm_gem_dmabuf_kunmap_atomic,
>>>>>          .mmap = drm_gem_dmabuf_mmap,
>>>>>          .vmap = drm_gem_dmabuf_vmap,
>>>>>          .vunmap = drm_gem_dmabuf_vunmap,
>>>>> diff --git a/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>>>>> b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>>>>> index 69a7aec49e84..82e2ca17a441 100644
>>>>> --- a/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>>>>> +++ b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>>>>> @@ -111,15 +111,6 @@ static void i915_gem_dmabuf_vunmap(struct dma_buf
>>>>> *dma_buf, void *vaddr)
>>>>>          i915_gem_object_unpin_map(obj);
>>>>>    }
>>>>>    -static void *i915_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>>>> unsigned long page_num)
>>>>> -{
>>>>> -       return NULL;
>>>>> -}
>>>>> -
>>>>> -static void i915_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>>>> unsigned long page_num, void *addr)
>>>>> -{
>>>>> -
>>>>> -}
>>>>>    static void *i915_gem_dmabuf_kmap(struct dma_buf *dma_buf, unsigned
>>>>> long page_num)
>>>>>    {
>>>>>          struct drm_i915_gem_object *obj = dma_buf_to_obj(dma_buf);
>>>>> @@ -225,9 +216,7 @@ static const struct dma_buf_ops i915_dmabuf_ops =
>>>>> {
>>>>>          .unmap_dma_buf = i915_gem_unmap_dma_buf,
>>>>>          .release = drm_gem_dmabuf_release,
>>>>>          .map = i915_gem_dmabuf_kmap,
>>>>> -       .map_atomic = i915_gem_dmabuf_kmap_atomic,
>>>>>          .unmap = i915_gem_dmabuf_kunmap,
>>>>> -       .unmap_atomic = i915_gem_dmabuf_kunmap_atomic,
>>>>>          .mmap = i915_gem_dmabuf_mmap,
>>>>>          .vmap = i915_gem_dmabuf_vmap,
>>>>>          .vunmap = i915_gem_dmabuf_vunmap,
>>>>> diff --git a/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>>>>> b/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>>>>> index 302f7d103635..f81fda8ea45e 100644
>>>>> --- a/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>>>>> +++ b/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>>>>> @@ -130,9 +130,7 @@ static const struct dma_buf_ops mock_dmabuf_ops =
>>>>> {
>>>>>          .unmap_dma_buf = mock_unmap_dma_buf,
>>>>>          .release = mock_dmabuf_release,
>>>>>          .map = mock_dmabuf_kmap,
>>>>> -       .map_atomic = mock_dmabuf_kmap_atomic,
>>>>>          .unmap = mock_dmabuf_kunmap,
>>>>> -       .unmap_atomic = mock_dmabuf_kunmap_atomic,
>>>>>          .mmap = mock_dmabuf_mmap,
>>>>>          .vmap = mock_dmabuf_vmap,
>>>>>          .vunmap = mock_dmabuf_vunmap,
>>>>> diff --git a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>>>>> b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>>>>> index 8e41d649e248..1a073f9b2834 100644
>>>>> --- a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>>>>> +++ b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>>>>> @@ -148,8 +148,6 @@ static const struct dma_buf_ops omap_dmabuf_ops = {
>>>>>          .release = drm_gem_dmabuf_release,
>>>>>          .begin_cpu_access = omap_gem_dmabuf_begin_cpu_access,
>>>>>          .end_cpu_access = omap_gem_dmabuf_end_cpu_access,
>>>>> -       .map_atomic = omap_gem_dmabuf_kmap_atomic,
>>>>> -       .unmap_atomic = omap_gem_dmabuf_kunmap_atomic,
>>>>>          .map = omap_gem_dmabuf_kmap,
>>>>>          .unmap = omap_gem_dmabuf_kunmap,
>>>>>          .mmap = omap_gem_dmabuf_mmap,
>>>>> diff --git a/drivers/gpu/drm/tegra/gem.c b/drivers/gpu/drm/tegra/gem.c
>>>>> index 8b0b4ff64bb4..d7661702c11c 100644
>>>>> --- a/drivers/gpu/drm/tegra/gem.c
>>>>> +++ b/drivers/gpu/drm/tegra/gem.c
>>>>> @@ -596,18 +596,6 @@ static int tegra_gem_prime_end_cpu_access(struct
>>>>> dma_buf *buf,
>>>>>          return 0;
>>>>>    }
>>>>>    -static void *tegra_gem_prime_kmap_atomic(struct dma_buf *buf,
>>>>> -                                        unsigned long page)
>>>>> -{
>>>>> -       return NULL;
>>>>> -}
>>>>> -
>>>>> -static void tegra_gem_prime_kunmap_atomic(struct dma_buf *buf,
>>>>> -                                         unsigned long page,
>>>>> -                                         void *addr)
>>>>> -{
>>>>> -}
>>>>> -
>>>>>    static void *tegra_gem_prime_kmap(struct dma_buf *buf, unsigned long
>>>>> page)
>>>>>    {
>>>>>          return NULL;
>>>>> @@ -648,8 +636,6 @@ static const struct dma_buf_ops
>>>>> tegra_gem_prime_dmabuf_ops = {
>>>>>          .release = tegra_gem_prime_release,
>>>>>          .begin_cpu_access = tegra_gem_prime_begin_cpu_access,
>>>>>          .end_cpu_access = tegra_gem_prime_end_cpu_access,
>>>>> -       .map_atomic = tegra_gem_prime_kmap_atomic,
>>>>> -       .unmap_atomic = tegra_gem_prime_kunmap_atomic,
>>>>>          .map = tegra_gem_prime_kmap,
>>>>>          .unmap = tegra_gem_prime_kunmap,
>>>>>          .mmap = tegra_gem_prime_mmap,
>>>>> diff --git a/drivers/gpu/drm/udl/udl_dmabuf.c
>>>>> b/drivers/gpu/drm/udl/udl_dmabuf.c
>>>>> index 5fdc8bdc2026..ae7225dedc30 100644
>>>>> --- a/drivers/gpu/drm/udl/udl_dmabuf.c
>>>>> +++ b/drivers/gpu/drm/udl/udl_dmabuf.c
>>>>> @@ -156,27 +156,12 @@ static void *udl_dmabuf_kmap(struct dma_buf
>>>>> *dma_buf, unsigned long page_num)
>>>>>          return NULL;
>>>>>    }
>>>>>    -static void *udl_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>>>> -                                   unsigned long page_num)
>>>>> -{
>>>>> -       /* TODO */
>>>>> -
>>>>> -       return NULL;
>>>>> -}
>>>>> -
>>>>>    static void udl_dmabuf_kunmap(struct dma_buf *dma_buf,
>>>>>                                unsigned long page_num, void *addr)
>>>>>    {
>>>>>          /* TODO */
>>>>>    }
>>>>>    -static void udl_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>>>> -                                    unsigned long page_num,
>>>>> -                                    void *addr)
>>>>> -{
>>>>> -       /* TODO */
>>>>> -}
>>>>> -
>>>>>    static int udl_dmabuf_mmap(struct dma_buf *dma_buf,
>>>>>                             struct vm_area_struct *vma)
>>>>>    {
>>>>> @@ -191,9 +176,7 @@ static const struct dma_buf_ops udl_dmabuf_ops = {
>>>>>          .map_dma_buf            = udl_map_dma_buf,
>>>>>          .unmap_dma_buf          = udl_unmap_dma_buf,
>>>>>          .map                    = udl_dmabuf_kmap,
>>>>> -       .map_atomic             = udl_dmabuf_kmap_atomic,
>>>>>          .unmap                  = udl_dmabuf_kunmap,
>>>>> -       .unmap_atomic           = udl_dmabuf_kunmap_atomic,
>>>>>          .mmap                   = udl_dmabuf_mmap,
>>>>>          .release                = drm_gem_dmabuf_release,
>>>>>    };
>>>>> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>>>>> b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>>>>> index fbffb37ccf42..373bc6da2f84 100644
>>>>> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>>>>> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>>>>> @@ -71,17 +71,6 @@ static void vmw_prime_dmabuf_vunmap(struct dma_buf
>>>>> *dma_buf, void *vaddr)
>>>>>    {
>>>>>    }
>>>>>    -static void *vmw_prime_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>>>> -               unsigned long page_num)
>>>>> -{
>>>>> -       return NULL;
>>>>> -}
>>>>> -
>>>>> -static void vmw_prime_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>>>> -               unsigned long page_num, void *addr)
>>>>> -{
>>>>> -
>>>>> -}
>>>>>    static void *vmw_prime_dmabuf_kmap(struct dma_buf *dma_buf,
>>>>>                  unsigned long page_num)
>>>>>    {
>>>>> @@ -108,9 +97,7 @@ const struct dma_buf_ops vmw_prime_dmabuf_ops =  {
>>>>>          .unmap_dma_buf = vmw_prime_unmap_dma_buf,
>>>>>          .release = NULL,
>>>>>          .map = vmw_prime_dmabuf_kmap,
>>>>> -       .map_atomic = vmw_prime_dmabuf_kmap_atomic,
>>>>>          .unmap = vmw_prime_dmabuf_kunmap,
>>>>> -       .unmap_atomic = vmw_prime_dmabuf_kunmap_atomic,
>>>>>          .mmap = vmw_prime_dmabuf_mmap,
>>>>>          .vmap = vmw_prime_dmabuf_vmap,
>>>>>          .vunmap = vmw_prime_dmabuf_vunmap,
>>>>> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>>>>> b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>>>>> index 12d0072c52c2..aff0ab7bf83d 100644
>>>>> --- a/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>>>>> +++ b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>>>>> @@ -358,7 +358,6 @@ static const struct dma_buf_ops vb2_dc_dmabuf_ops =
>>>>> {
>>>>>          .map_dma_buf = vb2_dc_dmabuf_ops_map,
>>>>>          .unmap_dma_buf = vb2_dc_dmabuf_ops_unmap,
>>>>>          .map = vb2_dc_dmabuf_ops_kmap,
>>>>> -       .map_atomic = vb2_dc_dmabuf_ops_kmap,
>>>>>          .vmap = vb2_dc_dmabuf_ops_vmap,
>>>>>          .mmap = vb2_dc_dmabuf_ops_mmap,
>>>>>          .release = vb2_dc_dmabuf_ops_release,
>>>>> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>>>>> b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>>>>> index cf94765e593f..015e737095cd 100644
>>>>> --- a/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>>>>> +++ b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>>>>> @@ -507,7 +507,6 @@ static const struct dma_buf_ops
>>>>> vb2_dma_sg_dmabuf_ops
>>>>> = {
>>>>>          .map_dma_buf = vb2_dma_sg_dmabuf_ops_map,
>>>>>          .unmap_dma_buf = vb2_dma_sg_dmabuf_ops_unmap,
>>>>>          .map = vb2_dma_sg_dmabuf_ops_kmap,
>>>>> -       .map_atomic = vb2_dma_sg_dmabuf_ops_kmap,
>>>>>          .vmap = vb2_dma_sg_dmabuf_ops_vmap,
>>>>>          .mmap = vb2_dma_sg_dmabuf_ops_mmap,
>>>>>          .release = vb2_dma_sg_dmabuf_ops_release,
>>>>> diff --git a/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>>>>> b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>>>>> index 298ffb9ecdae..467a4005164b 100644
>>>>> --- a/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>>>>> +++ b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>>>>> @@ -346,7 +346,6 @@ static const struct dma_buf_ops
>>>>> vb2_vmalloc_dmabuf_ops = {
>>>>>          .map_dma_buf = vb2_vmalloc_dmabuf_ops_map,
>>>>>          .unmap_dma_buf = vb2_vmalloc_dmabuf_ops_unmap,
>>>>>          .map = vb2_vmalloc_dmabuf_ops_kmap,
>>>>> -       .map_atomic = vb2_vmalloc_dmabuf_ops_kmap,
>>>>>          .vmap = vb2_vmalloc_dmabuf_ops_vmap,
>>>>>          .mmap = vb2_vmalloc_dmabuf_ops_mmap,
>>>>>          .release = vb2_vmalloc_dmabuf_ops_release,
>>>>> diff --git a/drivers/staging/android/ion/ion.c
>>>>> b/drivers/staging/android/ion/ion.c
>>>>> index 57e0d8035b2e..a46219ff5e16 100644
>>>>> --- a/drivers/staging/android/ion/ion.c
>>>>> +++ b/drivers/staging/android/ion/ion.c
>>>>> @@ -374,8 +374,6 @@ static const struct dma_buf_ops dma_buf_ops = {
>>>>>          .detach = ion_dma_buf_detatch,
>>>>>          .begin_cpu_access = ion_dma_buf_begin_cpu_access,
>>>>>          .end_cpu_access = ion_dma_buf_end_cpu_access,
>>>>> -       .map_atomic = ion_dma_buf_kmap,
>>>>> -       .unmap_atomic = ion_dma_buf_kunmap,
>>>>>          .map = ion_dma_buf_kmap,
>>>>>          .unmap = ion_dma_buf_kunmap,
>>>>>    };
>>>>> diff --git a/drivers/tee/tee_shm.c b/drivers/tee/tee_shm.c
>>>>> index 556960a1bab3..df4a1553b78b 100644
>>>>> --- a/drivers/tee/tee_shm.c
>>>>> +++ b/drivers/tee/tee_shm.c
>>>>> @@ -80,11 +80,6 @@ static void tee_shm_op_release(struct dma_buf
>>>>> *dmabuf)
>>>>>          tee_shm_release(shm);
>>>>>    }
>>>>>    -static void *tee_shm_op_map_atomic(struct dma_buf *dmabuf, unsigned
>>>>> long pgnum)
>>>>> -{
>>>>> -       return NULL;
>>>>> -}
>>>>> -
>>>>>    static void *tee_shm_op_map(struct dma_buf *dmabuf, unsigned long
>>>>> pgnum)
>>>>>    {
>>>>>          return NULL;
>>>>> @@ -107,7 +102,6 @@ static const struct dma_buf_ops tee_shm_dma_buf_ops
>>>>> =
>>>>> {
>>>>>          .map_dma_buf = tee_shm_op_map_dma_buf,
>>>>>          .unmap_dma_buf = tee_shm_op_unmap_dma_buf,
>>>>>          .release = tee_shm_op_release,
>>>>> -       .map_atomic = tee_shm_op_map_atomic,
>>>>>          .map = tee_shm_op_map,
>>>>>          .mmap = tee_shm_op_mmap,
>>>>>    };
>>>>> diff --git a/include/drm/drm_prime.h b/include/drm/drm_prime.h
>>>>> index ef338151cea8..d716d653b096 100644
>>>>> --- a/include/drm/drm_prime.h
>>>>> +++ b/include/drm/drm_prime.h
>>>>> @@ -93,10 +93,6 @@ void drm_gem_unmap_dma_buf(struct dma_buf_attachment
>>>>> *attach,
>>>>>                             enum dma_data_direction dir);
>>>>>    void *drm_gem_dmabuf_vmap(struct dma_buf *dma_buf);
>>>>>    void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr);
>>>>> -void *drm_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>>>> -                                unsigned long page_num);
>>>>> -void drm_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>>>> -                                 unsigned long page_num, void *addr);
>>>>>    void *drm_gem_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long
>>>>> page_num);
>>>>>    void drm_gem_dmabuf_kunmap(struct dma_buf *dma_buf, unsigned long
>>>>> page_num,
>>>>>                             void *addr);
>>>>> diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
>>>>> index 346caf77937f..d17cadd76802 100644
>>>>> --- a/include/linux/dma-buf.h
>>>>> +++ b/include/linux/dma-buf.h
>>>>> @@ -205,8 +205,6 @@ struct dma_buf_ops {
>>>>>           * to be restarted.
>>>>>           */
>>>>>          int (*end_cpu_access)(struct dma_buf *, enum
>>>>> dma_data_direction);
>>>>> -       void *(*map_atomic)(struct dma_buf *, unsigned long);
>>>>> -       void (*unmap_atomic)(struct dma_buf *, unsigned long, void *);
>>>>>          void *(*map)(struct dma_buf *, unsigned long);
>>>>>          void (*unmap)(struct dma_buf *, unsigned long, void *);
>>>>>    @@ -394,8 +392,6 @@ int dma_buf_begin_cpu_access(struct dma_buf
>>>>> *dma_buf,
>>>>>                               enum dma_data_direction dir);
>>>>>    int dma_buf_end_cpu_access(struct dma_buf *dma_buf,
>>>>>                             enum dma_data_direction dir);
>>>>> -void *dma_buf_kmap_atomic(struct dma_buf *, unsigned long);
>>>>> -void dma_buf_kunmap_atomic(struct dma_buf *, unsigned long, void *);
>>>>>    void *dma_buf_kmap(struct dma_buf *, unsigned long);
>>>>>    void dma_buf_kunmap(struct dma_buf *, unsigned long, void *);
>>>>>
>>>>> --
>>>>> 2.14.1
>>>>>
>>>>> _______________________________________________
>>>>> dri-devel mailing list
>>>>> dri-devel@lists.freedesktop.org
>>>>> https://lists.freedesktop.org/mailman/listinfo/dri-devel
>>>
>>>
>>
>>
>



-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 2/5] dma-buf: remove kmap_atomic interface
@ 2018-06-20 12:52             ` Daniel Vetter
  0 siblings, 0 replies; 58+ messages in thread
From: Daniel Vetter @ 2018-06-20 12:52 UTC (permalink / raw)
  To: Christian König
  Cc: moderated list:DMA BUFFER SHARING FRAMEWORK, dri-devel,
	amd-gfx list, open list:DMA BUFFER SHARING FRAMEWORK

On Wed, Jun 20, 2018 at 2:46 PM, Christian König
<ckoenig.leichtzumerken@gmail.com> wrote:
> Am 19.06.2018 um 17:35 schrieb Daniel Vetter:
>>
>> On Tue, Jun 19, 2018 at 4:47 PM, Christian König
>> <christian.koenig@amd.com> wrote:
>>>
>>> Am 18.06.2018 um 10:18 schrieb Daniel Vetter:
>>>>
>>>> On Fri, Jun 01, 2018 at 02:00:17PM +0200, Christian König wrote:
>>>>>
>>>>> Neither used nor correctly implemented anywhere. Just completely remove
>>>>> the interface.
>>>>>
>>>>> Signed-off-by: Christian König <christian.koenig@amd.com>
>>>>
>>>> I wonder whether we can nuke the normal kmap stuff too ... everyone
>>>> seems
>>>> to want/use the vmap stuff for kernel-internal mapping needs.
>>>>
>>>> Anyway, this looks good.
>>>>>
>>>>> ---
>>>>>    drivers/dma-buf/dma-buf.c                          | 44
>>>>> ----------------------
>>>>>    drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c          |  2 -
>>>>>    drivers/gpu/drm/armada/armada_gem.c                |  2 -
>>>>>    drivers/gpu/drm/drm_prime.c                        | 26
>>>>> -------------
>>>>>    drivers/gpu/drm/i915/i915_gem_dmabuf.c             | 11 ------
>>>>>    drivers/gpu/drm/i915/selftests/mock_dmabuf.c       |  2 -
>>>>>    drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c          |  2 -
>>>>>    drivers/gpu/drm/tegra/gem.c                        | 14 -------
>>>>>    drivers/gpu/drm/udl/udl_dmabuf.c                   | 17 ---------
>>>>>    drivers/gpu/drm/vmwgfx/vmwgfx_prime.c              | 13 -------
>>>>>    .../media/common/videobuf2/videobuf2-dma-contig.c  |  1 -
>>>>>    drivers/media/common/videobuf2/videobuf2-dma-sg.c  |  1 -
>>>>>    drivers/media/common/videobuf2/videobuf2-vmalloc.c |  1 -
>>>>>    drivers/staging/android/ion/ion.c                  |  2 -
>>>>>    drivers/tee/tee_shm.c                              |  6 ---
>>>>>    include/drm/drm_prime.h                            |  4 --
>>>>>    include/linux/dma-buf.h                            |  4 --
>>>>>    17 files changed, 152 deletions(-)
>>>>>
>>>>> diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
>>>>> index e99a8d19991b..e4c657d9fad7 100644
>>>>> --- a/drivers/dma-buf/dma-buf.c
>>>>> +++ b/drivers/dma-buf/dma-buf.c
>>>>> @@ -405,7 +405,6 @@ struct dma_buf *dma_buf_export(const struct
>>>>> dma_buf_export_info *exp_info)
>>>>>                            || !exp_info->ops->map_dma_buf
>>>>>                            || !exp_info->ops->unmap_dma_buf
>>>>>                            || !exp_info->ops->release
>>>>> -                         || !exp_info->ops->map_atomic
>>>>>                            || !exp_info->ops->map
>>>>>                            || !exp_info->ops->mmap)) {
>>>>>                  return ERR_PTR(-EINVAL);
>>>>> @@ -687,14 +686,6 @@ EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment);
>>>>>     *      void \*dma_buf_kmap(struct dma_buf \*, unsigned long);
>>>>>     *      void dma_buf_kunmap(struct dma_buf \*, unsigned long, void
>>>>> \*);
>>>>>     *
>>>>> - *   There are also atomic variants of these interfaces. Like for kmap
>>>>> they
>>>>> - *   facilitate non-blocking fast-paths. Neither the importer nor the
>>>>> exporter
>>>>> - *   (in the callback) is allowed to block when using these.
>>>>> - *
>>>>> - *   Interfaces::
>>>>> - *      void \*dma_buf_kmap_atomic(struct dma_buf \*, unsigned long);
>>>>> - *      void dma_buf_kunmap_atomic(struct dma_buf \*, unsigned long,
>>>>> void \*);
>>>>> - *
>>>>>     *   For importers all the restrictions of using kmap apply, like
>>>>> the
>>>>> limited
>>>>>     *   supply of kmap_atomic slots. Hence an importer shall only hold
>>>>> onto at
>>>>>     *   max 2 atomic dma_buf kmaps at the same time (in any given
>>>>> process
>>>>> context).
>>>>
>>>> This is also about atomic kmap ...
>>>>
>>>> And the subsequent language around "Note that these calls need to always
>>>> succeed." is also not true, might be good to update that stating that
>>>> kmap
>>>> is optional (like we say already for vmap).
>>>>
>>>> With those docs nits addressed:
>>>>
>>>> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
>>>
>>>
>>> I've fixed up patch #1 and #2 and added your Reviewed-by tag.
>>>
>>> Since I finally had time to install dim do you have any objections that I
>>> now run "dim push drm-misc-next" with those two applied?
>>
>> Go ahead, that's the point of commit rights. dim might complain if you
>> cherry picked them and didn't pick them up using dim apply though ...
>
>
> I've fixed up the Link tags, but when I try "dim push-branch drm-misc-next"
> I only get the error message "error: dst ref refs/heads/drm-misc-next
> receives from more than one src."
>
> Any idea what is going wrong here?

Sounds like multiple upstreams for your local drm-misc-next branch,
and git then can't decide which one to pick. If you delete the branch
and create it using dim checkout drm-misc-next this shouldn't happen.
We're trying to fit into existing check-outs and branches, but if you
set things up slightly different than dim would have you're off script
and there's limited support for that.

Alternative check out your .git/config and remove the other upstreams.
Or attach your git config if this isn't the issue (I'm just doing some
guessing here).
-Daniel

> Christian.
>
>
>> -Daniel
>>
>>
>>> Regards,
>>> Christian.
>>>
>>>
>>>>> @@ -859,41 +850,6 @@ int dma_buf_end_cpu_access(struct dma_buf *dmabuf,
>>>>>    }
>>>>>    EXPORT_SYMBOL_GPL(dma_buf_end_cpu_access);
>>>>>    -/**
>>>>> - * dma_buf_kmap_atomic - Map a page of the buffer object into kernel
>>>>> address
>>>>> - * space. The same restrictions as for kmap_atomic and friends apply.
>>>>> - * @dmabuf:    [in]    buffer to map page from.
>>>>> - * @page_num:  [in]    page in PAGE_SIZE units to map.
>>>>> - *
>>>>> - * This call must always succeed, any necessary preparations that
>>>>> might
>>>>> fail
>>>>> - * need to be done in begin_cpu_access.
>>>>> - */
>>>>> -void *dma_buf_kmap_atomic(struct dma_buf *dmabuf, unsigned long
>>>>> page_num)
>>>>> -{
>>>>> -       WARN_ON(!dmabuf);
>>>>> -
>>>>> -       return dmabuf->ops->map_atomic(dmabuf, page_num);
>>>>> -}
>>>>> -EXPORT_SYMBOL_GPL(dma_buf_kmap_atomic);
>>>>> -
>>>>> -/**
>>>>> - * dma_buf_kunmap_atomic - Unmap a page obtained by
>>>>> dma_buf_kmap_atomic.
>>>>> - * @dmabuf:    [in]    buffer to unmap page from.
>>>>> - * @page_num:  [in]    page in PAGE_SIZE units to unmap.
>>>>> - * @vaddr:     [in]    kernel space pointer obtained from
>>>>> dma_buf_kmap_atomic.
>>>>> - *
>>>>> - * This call must always succeed.
>>>>> - */
>>>>> -void dma_buf_kunmap_atomic(struct dma_buf *dmabuf, unsigned long
>>>>> page_num,
>>>>> -                          void *vaddr)
>>>>> -{
>>>>> -       WARN_ON(!dmabuf);
>>>>> -
>>>>> -       if (dmabuf->ops->unmap_atomic)
>>>>> -               dmabuf->ops->unmap_atomic(dmabuf, page_num, vaddr);
>>>>> -}
>>>>> -EXPORT_SYMBOL_GPL(dma_buf_kunmap_atomic);
>>>>> -
>>>>>    /**
>>>>>     * dma_buf_kmap - Map a page of the buffer object into kernel
>>>>> address
>>>>> space. The
>>>>>     * same restrictions as for kmap and friends apply.
>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>>>>> index f1500f1ec0f5..a156b3891a3f 100644
>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>>>>> @@ -244,9 +244,7 @@ static const struct dma_buf_ops amdgpu_dmabuf_ops =
>>>>> {
>>>>>          .release = drm_gem_dmabuf_release,
>>>>>          .begin_cpu_access = amdgpu_gem_begin_cpu_access,
>>>>>          .map = drm_gem_dmabuf_kmap,
>>>>> -       .map_atomic = drm_gem_dmabuf_kmap_atomic,
>>>>>          .unmap = drm_gem_dmabuf_kunmap,
>>>>> -       .unmap_atomic = drm_gem_dmabuf_kunmap_atomic,
>>>>>          .mmap = drm_gem_dmabuf_mmap,
>>>>>          .vmap = drm_gem_dmabuf_vmap,
>>>>>          .vunmap = drm_gem_dmabuf_vunmap,
>>>>> diff --git a/drivers/gpu/drm/armada/armada_gem.c
>>>>> b/drivers/gpu/drm/armada/armada_gem.c
>>>>> index a97f509743a5..3fb37c75c065 100644
>>>>> --- a/drivers/gpu/drm/armada/armada_gem.c
>>>>> +++ b/drivers/gpu/drm/armada/armada_gem.c
>>>>> @@ -490,8 +490,6 @@ static const struct dma_buf_ops
>>>>> armada_gem_prime_dmabuf_ops = {
>>>>>          .map_dma_buf    = armada_gem_prime_map_dma_buf,
>>>>>          .unmap_dma_buf  = armada_gem_prime_unmap_dma_buf,
>>>>>          .release        = drm_gem_dmabuf_release,
>>>>> -       .map_atomic     = armada_gem_dmabuf_no_kmap,
>>>>> -       .unmap_atomic   = armada_gem_dmabuf_no_kunmap,
>>>>>          .map            = armada_gem_dmabuf_no_kmap,
>>>>>          .unmap          = armada_gem_dmabuf_no_kunmap,
>>>>>          .mmap           = armada_gem_dmabuf_mmap,
>>>>> diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
>>>>> index 4a3a232fea67..b28fa8f44c8b 100644
>>>>> --- a/drivers/gpu/drm/drm_prime.c
>>>>> +++ b/drivers/gpu/drm/drm_prime.c
>>>>> @@ -426,30 +426,6 @@ void drm_gem_dmabuf_vunmap(struct dma_buf
>>>>> *dma_buf,
>>>>> void *vaddr)
>>>>>    }
>>>>>    EXPORT_SYMBOL(drm_gem_dmabuf_vunmap);
>>>>>    -/**
>>>>> - * drm_gem_dmabuf_kmap_atomic - map_atomic implementation for GEM
>>>>> - *
>>>>> - * Not implemented. This can be used as the &dma_buf_ops.map_atomic
>>>>> callback.
>>>>> - */
>>>>> -void *drm_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>>>> -                                unsigned long page_num)
>>>>> -{
>>>>> -       return NULL;
>>>>> -}
>>>>> -EXPORT_SYMBOL(drm_gem_dmabuf_kmap_atomic);
>>>>> -
>>>>> -/**
>>>>> - * drm_gem_dmabuf_kunmap_atomic - unmap_atomic implementation for GEM
>>>>> - *
>>>>> - * Not implemented. This can be used as the &dma_buf_ops.unmap_atomic
>>>>> callback.
>>>>> - */
>>>>> -void drm_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>>>> -                                 unsigned long page_num, void *addr)
>>>>> -{
>>>>> -
>>>>> -}
>>>>> -EXPORT_SYMBOL(drm_gem_dmabuf_kunmap_atomic);
>>>>> -
>>>>>    /**
>>>>>     * drm_gem_dmabuf_kmap - map implementation for GEM
>>>>>     *
>>>>> @@ -502,9 +478,7 @@ static const struct dma_buf_ops
>>>>> drm_gem_prime_dmabuf_ops =  {
>>>>>          .unmap_dma_buf = drm_gem_unmap_dma_buf,
>>>>>          .release = drm_gem_dmabuf_release,
>>>>>          .map = drm_gem_dmabuf_kmap,
>>>>> -       .map_atomic = drm_gem_dmabuf_kmap_atomic,
>>>>>          .unmap = drm_gem_dmabuf_kunmap,
>>>>> -       .unmap_atomic = drm_gem_dmabuf_kunmap_atomic,
>>>>>          .mmap = drm_gem_dmabuf_mmap,
>>>>>          .vmap = drm_gem_dmabuf_vmap,
>>>>>          .vunmap = drm_gem_dmabuf_vunmap,
>>>>> diff --git a/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>>>>> b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>>>>> index 69a7aec49e84..82e2ca17a441 100644
>>>>> --- a/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>>>>> +++ b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>>>>> @@ -111,15 +111,6 @@ static void i915_gem_dmabuf_vunmap(struct dma_buf
>>>>> *dma_buf, void *vaddr)
>>>>>          i915_gem_object_unpin_map(obj);
>>>>>    }
>>>>>    -static void *i915_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>>>> unsigned long page_num)
>>>>> -{
>>>>> -       return NULL;
>>>>> -}
>>>>> -
>>>>> -static void i915_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>>>> unsigned long page_num, void *addr)
>>>>> -{
>>>>> -
>>>>> -}
>>>>>    static void *i915_gem_dmabuf_kmap(struct dma_buf *dma_buf, unsigned
>>>>> long page_num)
>>>>>    {
>>>>>          struct drm_i915_gem_object *obj = dma_buf_to_obj(dma_buf);
>>>>> @@ -225,9 +216,7 @@ static const struct dma_buf_ops i915_dmabuf_ops =
>>>>> {
>>>>>          .unmap_dma_buf = i915_gem_unmap_dma_buf,
>>>>>          .release = drm_gem_dmabuf_release,
>>>>>          .map = i915_gem_dmabuf_kmap,
>>>>> -       .map_atomic = i915_gem_dmabuf_kmap_atomic,
>>>>>          .unmap = i915_gem_dmabuf_kunmap,
>>>>> -       .unmap_atomic = i915_gem_dmabuf_kunmap_atomic,
>>>>>          .mmap = i915_gem_dmabuf_mmap,
>>>>>          .vmap = i915_gem_dmabuf_vmap,
>>>>>          .vunmap = i915_gem_dmabuf_vunmap,
>>>>> diff --git a/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>>>>> b/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>>>>> index 302f7d103635..f81fda8ea45e 100644
>>>>> --- a/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>>>>> +++ b/drivers/gpu/drm/i915/selftests/mock_dmabuf.c
>>>>> @@ -130,9 +130,7 @@ static const struct dma_buf_ops mock_dmabuf_ops =
>>>>> {
>>>>>          .unmap_dma_buf = mock_unmap_dma_buf,
>>>>>          .release = mock_dmabuf_release,
>>>>>          .map = mock_dmabuf_kmap,
>>>>> -       .map_atomic = mock_dmabuf_kmap_atomic,
>>>>>          .unmap = mock_dmabuf_kunmap,
>>>>> -       .unmap_atomic = mock_dmabuf_kunmap_atomic,
>>>>>          .mmap = mock_dmabuf_mmap,
>>>>>          .vmap = mock_dmabuf_vmap,
>>>>>          .vunmap = mock_dmabuf_vunmap,
>>>>> diff --git a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>>>>> b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>>>>> index 8e41d649e248..1a073f9b2834 100644
>>>>> --- a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>>>>> +++ b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>>>>> @@ -148,8 +148,6 @@ static const struct dma_buf_ops omap_dmabuf_ops = {
>>>>>          .release = drm_gem_dmabuf_release,
>>>>>          .begin_cpu_access = omap_gem_dmabuf_begin_cpu_access,
>>>>>          .end_cpu_access = omap_gem_dmabuf_end_cpu_access,
>>>>> -       .map_atomic = omap_gem_dmabuf_kmap_atomic,
>>>>> -       .unmap_atomic = omap_gem_dmabuf_kunmap_atomic,
>>>>>          .map = omap_gem_dmabuf_kmap,
>>>>>          .unmap = omap_gem_dmabuf_kunmap,
>>>>>          .mmap = omap_gem_dmabuf_mmap,
>>>>> diff --git a/drivers/gpu/drm/tegra/gem.c b/drivers/gpu/drm/tegra/gem.c
>>>>> index 8b0b4ff64bb4..d7661702c11c 100644
>>>>> --- a/drivers/gpu/drm/tegra/gem.c
>>>>> +++ b/drivers/gpu/drm/tegra/gem.c
>>>>> @@ -596,18 +596,6 @@ static int tegra_gem_prime_end_cpu_access(struct
>>>>> dma_buf *buf,
>>>>>          return 0;
>>>>>    }
>>>>>    -static void *tegra_gem_prime_kmap_atomic(struct dma_buf *buf,
>>>>> -                                        unsigned long page)
>>>>> -{
>>>>> -       return NULL;
>>>>> -}
>>>>> -
>>>>> -static void tegra_gem_prime_kunmap_atomic(struct dma_buf *buf,
>>>>> -                                         unsigned long page,
>>>>> -                                         void *addr)
>>>>> -{
>>>>> -}
>>>>> -
>>>>>    static void *tegra_gem_prime_kmap(struct dma_buf *buf, unsigned long
>>>>> page)
>>>>>    {
>>>>>          return NULL;
>>>>> @@ -648,8 +636,6 @@ static const struct dma_buf_ops
>>>>> tegra_gem_prime_dmabuf_ops = {
>>>>>          .release = tegra_gem_prime_release,
>>>>>          .begin_cpu_access = tegra_gem_prime_begin_cpu_access,
>>>>>          .end_cpu_access = tegra_gem_prime_end_cpu_access,
>>>>> -       .map_atomic = tegra_gem_prime_kmap_atomic,
>>>>> -       .unmap_atomic = tegra_gem_prime_kunmap_atomic,
>>>>>          .map = tegra_gem_prime_kmap,
>>>>>          .unmap = tegra_gem_prime_kunmap,
>>>>>          .mmap = tegra_gem_prime_mmap,
>>>>> diff --git a/drivers/gpu/drm/udl/udl_dmabuf.c
>>>>> b/drivers/gpu/drm/udl/udl_dmabuf.c
>>>>> index 5fdc8bdc2026..ae7225dedc30 100644
>>>>> --- a/drivers/gpu/drm/udl/udl_dmabuf.c
>>>>> +++ b/drivers/gpu/drm/udl/udl_dmabuf.c
>>>>> @@ -156,27 +156,12 @@ static void *udl_dmabuf_kmap(struct dma_buf
>>>>> *dma_buf, unsigned long page_num)
>>>>>          return NULL;
>>>>>    }
>>>>>    -static void *udl_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>>>> -                                   unsigned long page_num)
>>>>> -{
>>>>> -       /* TODO */
>>>>> -
>>>>> -       return NULL;
>>>>> -}
>>>>> -
>>>>>    static void udl_dmabuf_kunmap(struct dma_buf *dma_buf,
>>>>>                                unsigned long page_num, void *addr)
>>>>>    {
>>>>>          /* TODO */
>>>>>    }
>>>>>    -static void udl_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>>>> -                                    unsigned long page_num,
>>>>> -                                    void *addr)
>>>>> -{
>>>>> -       /* TODO */
>>>>> -}
>>>>> -
>>>>>    static int udl_dmabuf_mmap(struct dma_buf *dma_buf,
>>>>>                             struct vm_area_struct *vma)
>>>>>    {
>>>>> @@ -191,9 +176,7 @@ static const struct dma_buf_ops udl_dmabuf_ops = {
>>>>>          .map_dma_buf            = udl_map_dma_buf,
>>>>>          .unmap_dma_buf          = udl_unmap_dma_buf,
>>>>>          .map                    = udl_dmabuf_kmap,
>>>>> -       .map_atomic             = udl_dmabuf_kmap_atomic,
>>>>>          .unmap                  = udl_dmabuf_kunmap,
>>>>> -       .unmap_atomic           = udl_dmabuf_kunmap_atomic,
>>>>>          .mmap                   = udl_dmabuf_mmap,
>>>>>          .release                = drm_gem_dmabuf_release,
>>>>>    };
>>>>> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>>>>> b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>>>>> index fbffb37ccf42..373bc6da2f84 100644
>>>>> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>>>>> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_prime.c
>>>>> @@ -71,17 +71,6 @@ static void vmw_prime_dmabuf_vunmap(struct dma_buf
>>>>> *dma_buf, void *vaddr)
>>>>>    {
>>>>>    }
>>>>>    -static void *vmw_prime_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>>>> -               unsigned long page_num)
>>>>> -{
>>>>> -       return NULL;
>>>>> -}
>>>>> -
>>>>> -static void vmw_prime_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>>>> -               unsigned long page_num, void *addr)
>>>>> -{
>>>>> -
>>>>> -}
>>>>>    static void *vmw_prime_dmabuf_kmap(struct dma_buf *dma_buf,
>>>>>                  unsigned long page_num)
>>>>>    {
>>>>> @@ -108,9 +97,7 @@ const struct dma_buf_ops vmw_prime_dmabuf_ops =  {
>>>>>          .unmap_dma_buf = vmw_prime_unmap_dma_buf,
>>>>>          .release = NULL,
>>>>>          .map = vmw_prime_dmabuf_kmap,
>>>>> -       .map_atomic = vmw_prime_dmabuf_kmap_atomic,
>>>>>          .unmap = vmw_prime_dmabuf_kunmap,
>>>>> -       .unmap_atomic = vmw_prime_dmabuf_kunmap_atomic,
>>>>>          .mmap = vmw_prime_dmabuf_mmap,
>>>>>          .vmap = vmw_prime_dmabuf_vmap,
>>>>>          .vunmap = vmw_prime_dmabuf_vunmap,
>>>>> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>>>>> b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>>>>> index 12d0072c52c2..aff0ab7bf83d 100644
>>>>> --- a/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>>>>> +++ b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
>>>>> @@ -358,7 +358,6 @@ static const struct dma_buf_ops vb2_dc_dmabuf_ops =
>>>>> {
>>>>>          .map_dma_buf = vb2_dc_dmabuf_ops_map,
>>>>>          .unmap_dma_buf = vb2_dc_dmabuf_ops_unmap,
>>>>>          .map = vb2_dc_dmabuf_ops_kmap,
>>>>> -       .map_atomic = vb2_dc_dmabuf_ops_kmap,
>>>>>          .vmap = vb2_dc_dmabuf_ops_vmap,
>>>>>          .mmap = vb2_dc_dmabuf_ops_mmap,
>>>>>          .release = vb2_dc_dmabuf_ops_release,
>>>>> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>>>>> b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>>>>> index cf94765e593f..015e737095cd 100644
>>>>> --- a/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>>>>> +++ b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
>>>>> @@ -507,7 +507,6 @@ static const struct dma_buf_ops
>>>>> vb2_dma_sg_dmabuf_ops
>>>>> = {
>>>>>          .map_dma_buf = vb2_dma_sg_dmabuf_ops_map,
>>>>>          .unmap_dma_buf = vb2_dma_sg_dmabuf_ops_unmap,
>>>>>          .map = vb2_dma_sg_dmabuf_ops_kmap,
>>>>> -       .map_atomic = vb2_dma_sg_dmabuf_ops_kmap,
>>>>>          .vmap = vb2_dma_sg_dmabuf_ops_vmap,
>>>>>          .mmap = vb2_dma_sg_dmabuf_ops_mmap,
>>>>>          .release = vb2_dma_sg_dmabuf_ops_release,
>>>>> diff --git a/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>>>>> b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>>>>> index 298ffb9ecdae..467a4005164b 100644
>>>>> --- a/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>>>>> +++ b/drivers/media/common/videobuf2/videobuf2-vmalloc.c
>>>>> @@ -346,7 +346,6 @@ static const struct dma_buf_ops
>>>>> vb2_vmalloc_dmabuf_ops = {
>>>>>          .map_dma_buf = vb2_vmalloc_dmabuf_ops_map,
>>>>>          .unmap_dma_buf = vb2_vmalloc_dmabuf_ops_unmap,
>>>>>          .map = vb2_vmalloc_dmabuf_ops_kmap,
>>>>> -       .map_atomic = vb2_vmalloc_dmabuf_ops_kmap,
>>>>>          .vmap = vb2_vmalloc_dmabuf_ops_vmap,
>>>>>          .mmap = vb2_vmalloc_dmabuf_ops_mmap,
>>>>>          .release = vb2_vmalloc_dmabuf_ops_release,
>>>>> diff --git a/drivers/staging/android/ion/ion.c
>>>>> b/drivers/staging/android/ion/ion.c
>>>>> index 57e0d8035b2e..a46219ff5e16 100644
>>>>> --- a/drivers/staging/android/ion/ion.c
>>>>> +++ b/drivers/staging/android/ion/ion.c
>>>>> @@ -374,8 +374,6 @@ static const struct dma_buf_ops dma_buf_ops = {
>>>>>          .detach = ion_dma_buf_detatch,
>>>>>          .begin_cpu_access = ion_dma_buf_begin_cpu_access,
>>>>>          .end_cpu_access = ion_dma_buf_end_cpu_access,
>>>>> -       .map_atomic = ion_dma_buf_kmap,
>>>>> -       .unmap_atomic = ion_dma_buf_kunmap,
>>>>>          .map = ion_dma_buf_kmap,
>>>>>          .unmap = ion_dma_buf_kunmap,
>>>>>    };
>>>>> diff --git a/drivers/tee/tee_shm.c b/drivers/tee/tee_shm.c
>>>>> index 556960a1bab3..df4a1553b78b 100644
>>>>> --- a/drivers/tee/tee_shm.c
>>>>> +++ b/drivers/tee/tee_shm.c
>>>>> @@ -80,11 +80,6 @@ static void tee_shm_op_release(struct dma_buf
>>>>> *dmabuf)
>>>>>          tee_shm_release(shm);
>>>>>    }
>>>>>    -static void *tee_shm_op_map_atomic(struct dma_buf *dmabuf, unsigned
>>>>> long pgnum)
>>>>> -{
>>>>> -       return NULL;
>>>>> -}
>>>>> -
>>>>>    static void *tee_shm_op_map(struct dma_buf *dmabuf, unsigned long
>>>>> pgnum)
>>>>>    {
>>>>>          return NULL;
>>>>> @@ -107,7 +102,6 @@ static const struct dma_buf_ops tee_shm_dma_buf_ops
>>>>> =
>>>>> {
>>>>>          .map_dma_buf = tee_shm_op_map_dma_buf,
>>>>>          .unmap_dma_buf = tee_shm_op_unmap_dma_buf,
>>>>>          .release = tee_shm_op_release,
>>>>> -       .map_atomic = tee_shm_op_map_atomic,
>>>>>          .map = tee_shm_op_map,
>>>>>          .mmap = tee_shm_op_mmap,
>>>>>    };
>>>>> diff --git a/include/drm/drm_prime.h b/include/drm/drm_prime.h
>>>>> index ef338151cea8..d716d653b096 100644
>>>>> --- a/include/drm/drm_prime.h
>>>>> +++ b/include/drm/drm_prime.h
>>>>> @@ -93,10 +93,6 @@ void drm_gem_unmap_dma_buf(struct dma_buf_attachment
>>>>> *attach,
>>>>>                             enum dma_data_direction dir);
>>>>>    void *drm_gem_dmabuf_vmap(struct dma_buf *dma_buf);
>>>>>    void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr);
>>>>> -void *drm_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
>>>>> -                                unsigned long page_num);
>>>>> -void drm_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf,
>>>>> -                                 unsigned long page_num, void *addr);
>>>>>    void *drm_gem_dmabuf_kmap(struct dma_buf *dma_buf, unsigned long
>>>>> page_num);
>>>>>    void drm_gem_dmabuf_kunmap(struct dma_buf *dma_buf, unsigned long
>>>>> page_num,
>>>>>                             void *addr);
>>>>> diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
>>>>> index 346caf77937f..d17cadd76802 100644
>>>>> --- a/include/linux/dma-buf.h
>>>>> +++ b/include/linux/dma-buf.h
>>>>> @@ -205,8 +205,6 @@ struct dma_buf_ops {
>>>>>           * to be restarted.
>>>>>           */
>>>>>          int (*end_cpu_access)(struct dma_buf *, enum
>>>>> dma_data_direction);
>>>>> -       void *(*map_atomic)(struct dma_buf *, unsigned long);
>>>>> -       void (*unmap_atomic)(struct dma_buf *, unsigned long, void *);
>>>>>          void *(*map)(struct dma_buf *, unsigned long);
>>>>>          void (*unmap)(struct dma_buf *, unsigned long, void *);
>>>>>    @@ -394,8 +392,6 @@ int dma_buf_begin_cpu_access(struct dma_buf
>>>>> *dma_buf,
>>>>>                               enum dma_data_direction dir);
>>>>>    int dma_buf_end_cpu_access(struct dma_buf *dma_buf,
>>>>>                             enum dma_data_direction dir);
>>>>> -void *dma_buf_kmap_atomic(struct dma_buf *, unsigned long);
>>>>> -void dma_buf_kunmap_atomic(struct dma_buf *, unsigned long, void *);
>>>>>    void *dma_buf_kmap(struct dma_buf *, unsigned long);
>>>>>    void dma_buf_kunmap(struct dma_buf *, unsigned long, void *);
>>>>>
>>>>> --
>>>>> 2.14.1
>>>>>
>>>>> _______________________________________________
>>>>> dri-devel mailing list
>>>>> dri-devel@lists.freedesktop.org
>>>>> https://lists.freedesktop.org/mailman/listinfo/dri-devel
>>>
>>>
>>
>>
>



-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 2/5] dma-buf: remove kmap_atomic interface
@ 2018-06-20 14:04               ` Christian König
  0 siblings, 0 replies; 58+ messages in thread
From: Christian König @ 2018-06-20 14:04 UTC (permalink / raw)
  To: Daniel Vetter, Christian König
  Cc: moderated list:DMA BUFFER SHARING FRAMEWORK, dri-devel,
	amd-gfx list, open list:DMA BUFFER SHARING FRAMEWORK

[-- Attachment #1: Type: text/plain, Size: 1322 bytes --]

Am 20.06.2018 um 14:52 schrieb Daniel Vetter:
> On Wed, Jun 20, 2018 at 2:46 PM, Christian König
> <ckoenig.leichtzumerken@gmail.com> wrote:
>> [SNIP]
>>> Go ahead, that's the point of commit rights. dim might complain if you
>>> cherry picked them and didn't pick them up using dim apply though ...
>>
>> I've fixed up the Link tags, but when I try "dim push-branch drm-misc-next"
>> I only get the error message "error: dst ref refs/heads/drm-misc-next
>> receives from more than one src."
>>
>> Any idea what is going wrong here?
> Sounds like multiple upstreams for your local drm-misc-next branch,
> and git then can't decide which one to pick. If you delete the branch
> and create it using dim checkout drm-misc-next this shouldn't happen.
> We're trying to fit into existing check-outs and branches, but if you
> set things up slightly different than dim would have you're off script
> and there's limited support for that.
>
> Alternative check out your .git/config and remove the other upstreams.
> Or attach your git config if this isn't the issue (I'm just doing some
> guessing here).

I've tried to delete my drm-misc-next branch and recreate it, but that 
doesn't seem to help.

Attached is my .git/config, but at least on first glance it looks ok as 
well.

Any ideas?

Thanks,
Christian.

> -Daniel
>
>


[-- Attachment #2: config --]
[-- Type: text/plain, Size: 1499 bytes --]

[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
[remote "origin"]
	url = git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
	fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
	remote = origin
	merge = refs/heads/master
[remote "drm-tip"]
	url = ssh://git.freedesktop.org/git/drm-tip
	fetch = +refs/heads/*:refs/remotes/drm-tip/*
[branch "maintainer-tools"]
	remote = drm-tip
	merge = refs/heads/maintainer-tools
[branch "rerere-cache"]
	remote = drm-tip
	merge = refs/heads/rerere-cache
[branch "drm-tip"]
	remote = drm-tip
	merge = refs/heads/drm-tip
[remote "airlied"]
	url = git://people.freedesktop.org/~airlied/linux
	fetch = +refs/heads/*:refs/remotes/airlied/*
[remote "sound"]
	url = git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git
	fetch = +refs/heads/*:refs/remotes/sound/*
[remote "drm-intel"]
	url = ssh://git.freedesktop.org/git/drm/drm-intel
	fetch = +refs/heads/*:refs/remotes/drm-intel/*
[remote "drm-amd"]
	url = ssh://git.freedesktop.org/git/drm/drm-amd
	fetch = +refs/heads/*:refs/remotes/drm-amd/*
[remote "drm"]
	url = ssh://git.freedesktop.org/git/drm/drm
	fetch = +refs/heads/*:refs/remotes/drm/*
[remote "drm-misc"]
	url = ssh://git.freedesktop.org/git/drm/drm-misc
	fetch = +refs/heads/*:refs/remotes/drm-misc/*
[remote "baker"]
	url = ssh://baker.local/usr/src/linux
	fetch = +refs/heads/*:refs/remotes/baker/*
[branch "drm-misc-next"]
	remote = drm-misc
	merge = refs/heads/drm-misc-next

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 2/5] dma-buf: remove kmap_atomic interface
@ 2018-06-20 14:04               ` Christian König
  0 siblings, 0 replies; 58+ messages in thread
From: Christian König @ 2018-06-20 14:04 UTC (permalink / raw)
  To: Daniel Vetter, Christian König
  Cc: moderated list:DMA BUFFER SHARING FRAMEWORK, amd-gfx list,
	dri-devel, open list:DMA BUFFER SHARING FRAMEWORK

[-- Attachment #1: Type: text/plain, Size: 1352 bytes --]

Am 20.06.2018 um 14:52 schrieb Daniel Vetter:
> On Wed, Jun 20, 2018 at 2:46 PM, Christian König
> <ckoenig.leichtzumerken-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:
>> [SNIP]
>>> Go ahead, that's the point of commit rights. dim might complain if you
>>> cherry picked them and didn't pick them up using dim apply though ...
>>
>> I've fixed up the Link tags, but when I try "dim push-branch drm-misc-next"
>> I only get the error message "error: dst ref refs/heads/drm-misc-next
>> receives from more than one src."
>>
>> Any idea what is going wrong here?
> Sounds like multiple upstreams for your local drm-misc-next branch,
> and git then can't decide which one to pick. If you delete the branch
> and create it using dim checkout drm-misc-next this shouldn't happen.
> We're trying to fit into existing check-outs and branches, but if you
> set things up slightly different than dim would have you're off script
> and there's limited support for that.
>
> Alternative check out your .git/config and remove the other upstreams.
> Or attach your git config if this isn't the issue (I'm just doing some
> guessing here).

I've tried to delete my drm-misc-next branch and recreate it, but that 
doesn't seem to help.

Attached is my .git/config, but at least on first glance it looks ok as 
well.

Any ideas?

Thanks,
Christian.

> -Daniel
>
>


[-- Attachment #2: config --]
[-- Type: text/plain, Size: 1499 bytes --]

[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
[remote "origin"]
	url = git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
	fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
	remote = origin
	merge = refs/heads/master
[remote "drm-tip"]
	url = ssh://git.freedesktop.org/git/drm-tip
	fetch = +refs/heads/*:refs/remotes/drm-tip/*
[branch "maintainer-tools"]
	remote = drm-tip
	merge = refs/heads/maintainer-tools
[branch "rerere-cache"]
	remote = drm-tip
	merge = refs/heads/rerere-cache
[branch "drm-tip"]
	remote = drm-tip
	merge = refs/heads/drm-tip
[remote "airlied"]
	url = git://people.freedesktop.org/~airlied/linux
	fetch = +refs/heads/*:refs/remotes/airlied/*
[remote "sound"]
	url = git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git
	fetch = +refs/heads/*:refs/remotes/sound/*
[remote "drm-intel"]
	url = ssh://git.freedesktop.org/git/drm/drm-intel
	fetch = +refs/heads/*:refs/remotes/drm-intel/*
[remote "drm-amd"]
	url = ssh://git.freedesktop.org/git/drm/drm-amd
	fetch = +refs/heads/*:refs/remotes/drm-amd/*
[remote "drm"]
	url = ssh://git.freedesktop.org/git/drm/drm
	fetch = +refs/heads/*:refs/remotes/drm/*
[remote "drm-misc"]
	url = ssh://git.freedesktop.org/git/drm/drm-misc
	fetch = +refs/heads/*:refs/remotes/drm-misc/*
[remote "baker"]
	url = ssh://baker.local/usr/src/linux
	fetch = +refs/heads/*:refs/remotes/baker/*
[branch "drm-misc-next"]
	remote = drm-misc
	merge = refs/heads/drm-misc-next

[-- Attachment #3: Type: text/plain, Size: 154 bytes --]

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 2/5] dma-buf: remove kmap_atomic interface
@ 2018-06-20 14:21                 ` Christian König
  0 siblings, 0 replies; 58+ messages in thread
From: Christian König @ 2018-06-20 14:21 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: moderated list:DMA BUFFER SHARING FRAMEWORK, dri-devel,
	amd-gfx list, open list:DMA BUFFER SHARING FRAMEWORK

Am 20.06.2018 um 16:04 schrieb Christian König:
> Am 20.06.2018 um 14:52 schrieb Daniel Vetter:
>> On Wed, Jun 20, 2018 at 2:46 PM, Christian König
>> <ckoenig.leichtzumerken@gmail.com> wrote:
>>> [SNIP]
>>>> Go ahead, that's the point of commit rights. dim might complain if you
>>>> cherry picked them and didn't pick them up using dim apply though ...
>>>
>>> I've fixed up the Link tags, but when I try "dim push-branch 
>>> drm-misc-next"
>>> I only get the error message "error: dst ref refs/heads/drm-misc-next
>>> receives from more than one src."
>>>
>>> Any idea what is going wrong here?
>> Sounds like multiple upstreams for your local drm-misc-next branch,
>> and git then can't decide which one to pick. If you delete the branch
>> and create it using dim checkout drm-misc-next this shouldn't happen.
>> We're trying to fit into existing check-outs and branches, but if you
>> set things up slightly different than dim would have you're off script
>> and there's limited support for that.
>>
>> Alternative check out your .git/config and remove the other upstreams.
>> Or attach your git config if this isn't the issue (I'm just doing some
>> guessing here).
>
> I've tried to delete my drm-misc-next branch and recreate it, but that 
> doesn't seem to help.
>
> Attached is my .git/config, but at least on first glance it looks ok 
> as well.
>
> Any ideas?

Ok that seems to be a bug in dim.

"bash -x dim push drm-misc-next" looks like it tries to push the branch 
drm-misc-next twice to the drm-misc remote: git push drm-misc 
drm-misc-next drm-misc-next

When I try that manually I get the same result, but "git push drm-misc 
drm-misc-next" just seemed to work fine.

Let's hope that I haven't messed things up totally on the server now.

Christian.

>
> Thanks,
> Christian.
>
>> -Daniel
>>
>>
>

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 2/5] dma-buf: remove kmap_atomic interface
@ 2018-06-20 14:21                 ` Christian König
  0 siblings, 0 replies; 58+ messages in thread
From: Christian König @ 2018-06-20 14:21 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: moderated list:DMA BUFFER SHARING FRAMEWORK, amd-gfx list,
	dri-devel, open list:DMA BUFFER SHARING FRAMEWORK

Am 20.06.2018 um 16:04 schrieb Christian König:
> Am 20.06.2018 um 14:52 schrieb Daniel Vetter:
>> On Wed, Jun 20, 2018 at 2:46 PM, Christian König
>> <ckoenig.leichtzumerken@gmail.com> wrote:
>>> [SNIP]
>>>> Go ahead, that's the point of commit rights. dim might complain if you
>>>> cherry picked them and didn't pick them up using dim apply though ...
>>>
>>> I've fixed up the Link tags, but when I try "dim push-branch 
>>> drm-misc-next"
>>> I only get the error message "error: dst ref refs/heads/drm-misc-next
>>> receives from more than one src."
>>>
>>> Any idea what is going wrong here?
>> Sounds like multiple upstreams for your local drm-misc-next branch,
>> and git then can't decide which one to pick. If you delete the branch
>> and create it using dim checkout drm-misc-next this shouldn't happen.
>> We're trying to fit into existing check-outs and branches, but if you
>> set things up slightly different than dim would have you're off script
>> and there's limited support for that.
>>
>> Alternative check out your .git/config and remove the other upstreams.
>> Or attach your git config if this isn't the issue (I'm just doing some
>> guessing here).
>
> I've tried to delete my drm-misc-next branch and recreate it, but that 
> doesn't seem to help.
>
> Attached is my .git/config, but at least on first glance it looks ok 
> as well.
>
> Any ideas?

Ok that seems to be a bug in dim.

"bash -x dim push drm-misc-next" looks like it tries to push the branch 
drm-misc-next twice to the drm-misc remote: git push drm-misc 
drm-misc-next drm-misc-next

When I try that manually I get the same result, but "git push drm-misc 
drm-misc-next" just seemed to work fine.

Let's hope that I haven't messed things up totally on the server now.

Christian.

>
> Thanks,
> Christian.
>
>> -Daniel
>>
>>
>

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 2/5] dma-buf: remove kmap_atomic interface
@ 2018-06-21  6:26                   ` Daniel Vetter
  0 siblings, 0 replies; 58+ messages in thread
From: Daniel Vetter @ 2018-06-21  6:26 UTC (permalink / raw)
  To: Christian König
  Cc: moderated list:DMA BUFFER SHARING FRAMEWORK, dri-devel,
	amd-gfx list, open list:DMA BUFFER SHARING FRAMEWORK

On Wed, Jun 20, 2018 at 4:21 PM, Christian König
<christian.koenig@amd.com> wrote:
> Am 20.06.2018 um 16:04 schrieb Christian König:
>>
>> Am 20.06.2018 um 14:52 schrieb Daniel Vetter:
>>>
>>> On Wed, Jun 20, 2018 at 2:46 PM, Christian König
>>> <ckoenig.leichtzumerken@gmail.com> wrote:
>>>>
>>>> [SNIP]
>>>>>
>>>>> Go ahead, that's the point of commit rights. dim might complain if you
>>>>> cherry picked them and didn't pick them up using dim apply though ...
>>>>
>>>>
>>>> I've fixed up the Link tags, but when I try "dim push-branch
>>>> drm-misc-next"
>>>> I only get the error message "error: dst ref refs/heads/drm-misc-next
>>>> receives from more than one src."
>>>>
>>>> Any idea what is going wrong here?
>>>
>>> Sounds like multiple upstreams for your local drm-misc-next branch,
>>> and git then can't decide which one to pick. If you delete the branch
>>> and create it using dim checkout drm-misc-next this shouldn't happen.
>>> We're trying to fit into existing check-outs and branches, but if you
>>> set things up slightly different than dim would have you're off script
>>> and there's limited support for that.
>>>
>>> Alternative check out your .git/config and remove the other upstreams.
>>> Or attach your git config if this isn't the issue (I'm just doing some
>>> guessing here).
>>
>>
>> I've tried to delete my drm-misc-next branch and recreate it, but that
>> doesn't seem to help.
>>
>> Attached is my .git/config, but at least on first glance it looks ok as
>> well.
>>
>> Any ideas?
>
>
> Ok that seems to be a bug in dim.
>
> "bash -x dim push drm-misc-next" looks like it tries to push the branch
> drm-misc-next twice to the drm-misc remote: git push drm-misc drm-misc-next
> drm-misc-next
>
> When I try that manually I get the same result, but "git push drm-misc
> drm-misc-next" just seemed to work fine.
>
> Let's hope that I haven't messed things up totally on the server now.

Tree looks all intact, except for some build fail. For drm-misc please
use the 3 defconfings (for x86, arm and arm64) to check that not too
much broke, they should enable all the gfx relevant stuff. Not full
combinatorials, but at least the most obvious of things.

Wrt the issue, it's indeed a bug in dim. The shorthand for pushing the
current branch works:

$ dim push

But the explicit form somehow gained a bug.

$ dim push drm-misc-next

I'll look into why this is.
-Daniel

>
> Christian.
>
>>
>> Thanks,
>> Christian.
>>
>>> -Daniel
>>>
>>>
>>
>



-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 2/5] dma-buf: remove kmap_atomic interface
@ 2018-06-21  6:26                   ` Daniel Vetter
  0 siblings, 0 replies; 58+ messages in thread
From: Daniel Vetter @ 2018-06-21  6:26 UTC (permalink / raw)
  To: Christian König
  Cc: moderated list:DMA BUFFER SHARING FRAMEWORK, amd-gfx list,
	dri-devel, open list:DMA BUFFER SHARING FRAMEWORK

On Wed, Jun 20, 2018 at 4:21 PM, Christian König
<christian.koenig@amd.com> wrote:
> Am 20.06.2018 um 16:04 schrieb Christian König:
>>
>> Am 20.06.2018 um 14:52 schrieb Daniel Vetter:
>>>
>>> On Wed, Jun 20, 2018 at 2:46 PM, Christian König
>>> <ckoenig.leichtzumerken@gmail.com> wrote:
>>>>
>>>> [SNIP]
>>>>>
>>>>> Go ahead, that's the point of commit rights. dim might complain if you
>>>>> cherry picked them and didn't pick them up using dim apply though ...
>>>>
>>>>
>>>> I've fixed up the Link tags, but when I try "dim push-branch
>>>> drm-misc-next"
>>>> I only get the error message "error: dst ref refs/heads/drm-misc-next
>>>> receives from more than one src."
>>>>
>>>> Any idea what is going wrong here?
>>>
>>> Sounds like multiple upstreams for your local drm-misc-next branch,
>>> and git then can't decide which one to pick. If you delete the branch
>>> and create it using dim checkout drm-misc-next this shouldn't happen.
>>> We're trying to fit into existing check-outs and branches, but if you
>>> set things up slightly different than dim would have you're off script
>>> and there's limited support for that.
>>>
>>> Alternative check out your .git/config and remove the other upstreams.
>>> Or attach your git config if this isn't the issue (I'm just doing some
>>> guessing here).
>>
>>
>> I've tried to delete my drm-misc-next branch and recreate it, but that
>> doesn't seem to help.
>>
>> Attached is my .git/config, but at least on first glance it looks ok as
>> well.
>>
>> Any ideas?
>
>
> Ok that seems to be a bug in dim.
>
> "bash -x dim push drm-misc-next" looks like it tries to push the branch
> drm-misc-next twice to the drm-misc remote: git push drm-misc drm-misc-next
> drm-misc-next
>
> When I try that manually I get the same result, but "git push drm-misc
> drm-misc-next" just seemed to work fine.
>
> Let's hope that I haven't messed things up totally on the server now.

Tree looks all intact, except for some build fail. For drm-misc please
use the 3 defconfings (for x86, arm and arm64) to check that not too
much broke, they should enable all the gfx relevant stuff. Not full
combinatorials, but at least the most obvious of things.

Wrt the issue, it's indeed a bug in dim. The shorthand for pushing the
current branch works:

$ dim push

But the explicit form somehow gained a bug.

$ dim push drm-misc-next

I'll look into why this is.
-Daniel

>
> Christian.
>
>>
>> Thanks,
>> Christian.
>>
>>> -Daniel
>>>
>>>
>>
>



-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 2/5] dma-buf: remove kmap_atomic interface
@ 2018-06-21  6:30                     ` Daniel Vetter
  0 siblings, 0 replies; 58+ messages in thread
From: Daniel Vetter @ 2018-06-21  6:30 UTC (permalink / raw)
  To: Christian König
  Cc: moderated list:DMA BUFFER SHARING FRAMEWORK, dri-devel,
	amd-gfx list, open list:DMA BUFFER SHARING FRAMEWORK

On Thu, Jun 21, 2018 at 8:26 AM, Daniel Vetter <daniel@ffwll.ch> wrote:
> On Wed, Jun 20, 2018 at 4:21 PM, Christian König
> <christian.koenig@amd.com> wrote:
>> Am 20.06.2018 um 16:04 schrieb Christian König:
>>>
>>> Am 20.06.2018 um 14:52 schrieb Daniel Vetter:
>>>>
>>>> On Wed, Jun 20, 2018 at 2:46 PM, Christian König
>>>> <ckoenig.leichtzumerken@gmail.com> wrote:
>>>>>
>>>>> [SNIP]
>>>>>>
>>>>>> Go ahead, that's the point of commit rights. dim might complain if you
>>>>>> cherry picked them and didn't pick them up using dim apply though ...
>>>>>
>>>>>
>>>>> I've fixed up the Link tags, but when I try "dim push-branch
>>>>> drm-misc-next"
>>>>> I only get the error message "error: dst ref refs/heads/drm-misc-next
>>>>> receives from more than one src."
>>>>>
>>>>> Any idea what is going wrong here?
>>>>
>>>> Sounds like multiple upstreams for your local drm-misc-next branch,
>>>> and git then can't decide which one to pick. If you delete the branch
>>>> and create it using dim checkout drm-misc-next this shouldn't happen.
>>>> We're trying to fit into existing check-outs and branches, but if you
>>>> set things up slightly different than dim would have you're off script
>>>> and there's limited support for that.
>>>>
>>>> Alternative check out your .git/config and remove the other upstreams.
>>>> Or attach your git config if this isn't the issue (I'm just doing some
>>>> guessing here).
>>>
>>>
>>> I've tried to delete my drm-misc-next branch and recreate it, but that
>>> doesn't seem to help.
>>>
>>> Attached is my .git/config, but at least on first glance it looks ok as
>>> well.
>>>
>>> Any ideas?
>>
>>
>> Ok that seems to be a bug in dim.
>>
>> "bash -x dim push drm-misc-next" looks like it tries to push the branch
>> drm-misc-next twice to the drm-misc remote: git push drm-misc drm-misc-next
>> drm-misc-next
>>
>> When I try that manually I get the same result, but "git push drm-misc
>> drm-misc-next" just seemed to work fine.
>>
>> Let's hope that I haven't messed things up totally on the server now.
>
> Tree looks all intact, except for some build fail. For drm-misc please
> use the 3 defconfings (for x86, arm and arm64) to check that not too
> much broke, they should enable all the gfx relevant stuff. Not full
> combinatorials, but at least the most obvious of things.
>
> Wrt the issue, it's indeed a bug in dim. The shorthand for pushing the
> current branch works:
>
> $ dim push
>
> But the explicit form somehow gained a bug.
>
> $ dim push drm-misc-next
>
> I'll look into why this is.

Should have waited for coffee to kick in. This is a feature :-)

$ dim push [git push arguments]

is the short-hand. If you want to specify the branch explicitly, you need to use

$ dim push-branch drm-misc-next [git push arguments]

Usually the only thing is adding an -f for a non-fast-forward push
(when maintainers have rebased the -fixes tree, shouldn't be done
anywhere else). Docs seem accurate, so not sure where you copypasted
this from? And not sure we should catch this in the script, since it's
kinda ambiguous.
-Daniel


> -Daniel
>
>>
>> Christian.
>>
>>>
>>> Thanks,
>>> Christian.
>>>
>>>> -Daniel
>>>>
>>>>
>>>
>>
>
>
>
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> +41 (0) 79 365 57 48 - http://blog.ffwll.ch



-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 2/5] dma-buf: remove kmap_atomic interface
@ 2018-06-21  6:30                     ` Daniel Vetter
  0 siblings, 0 replies; 58+ messages in thread
From: Daniel Vetter @ 2018-06-21  6:30 UTC (permalink / raw)
  To: Christian König
  Cc: moderated list:DMA BUFFER SHARING FRAMEWORK, amd-gfx list,
	dri-devel, open list:DMA BUFFER SHARING FRAMEWORK

On Thu, Jun 21, 2018 at 8:26 AM, Daniel Vetter <daniel@ffwll.ch> wrote:
> On Wed, Jun 20, 2018 at 4:21 PM, Christian König
> <christian.koenig@amd.com> wrote:
>> Am 20.06.2018 um 16:04 schrieb Christian König:
>>>
>>> Am 20.06.2018 um 14:52 schrieb Daniel Vetter:
>>>>
>>>> On Wed, Jun 20, 2018 at 2:46 PM, Christian König
>>>> <ckoenig.leichtzumerken@gmail.com> wrote:
>>>>>
>>>>> [SNIP]
>>>>>>
>>>>>> Go ahead, that's the point of commit rights. dim might complain if you
>>>>>> cherry picked them and didn't pick them up using dim apply though ...
>>>>>
>>>>>
>>>>> I've fixed up the Link tags, but when I try "dim push-branch
>>>>> drm-misc-next"
>>>>> I only get the error message "error: dst ref refs/heads/drm-misc-next
>>>>> receives from more than one src."
>>>>>
>>>>> Any idea what is going wrong here?
>>>>
>>>> Sounds like multiple upstreams for your local drm-misc-next branch,
>>>> and git then can't decide which one to pick. If you delete the branch
>>>> and create it using dim checkout drm-misc-next this shouldn't happen.
>>>> We're trying to fit into existing check-outs and branches, but if you
>>>> set things up slightly different than dim would have you're off script
>>>> and there's limited support for that.
>>>>
>>>> Alternative check out your .git/config and remove the other upstreams.
>>>> Or attach your git config if this isn't the issue (I'm just doing some
>>>> guessing here).
>>>
>>>
>>> I've tried to delete my drm-misc-next branch and recreate it, but that
>>> doesn't seem to help.
>>>
>>> Attached is my .git/config, but at least on first glance it looks ok as
>>> well.
>>>
>>> Any ideas?
>>
>>
>> Ok that seems to be a bug in dim.
>>
>> "bash -x dim push drm-misc-next" looks like it tries to push the branch
>> drm-misc-next twice to the drm-misc remote: git push drm-misc drm-misc-next
>> drm-misc-next
>>
>> When I try that manually I get the same result, but "git push drm-misc
>> drm-misc-next" just seemed to work fine.
>>
>> Let's hope that I haven't messed things up totally on the server now.
>
> Tree looks all intact, except for some build fail. For drm-misc please
> use the 3 defconfings (for x86, arm and arm64) to check that not too
> much broke, they should enable all the gfx relevant stuff. Not full
> combinatorials, but at least the most obvious of things.
>
> Wrt the issue, it's indeed a bug in dim. The shorthand for pushing the
> current branch works:
>
> $ dim push
>
> But the explicit form somehow gained a bug.
>
> $ dim push drm-misc-next
>
> I'll look into why this is.

Should have waited for coffee to kick in. This is a feature :-)

$ dim push [git push arguments]

is the short-hand. If you want to specify the branch explicitly, you need to use

$ dim push-branch drm-misc-next [git push arguments]

Usually the only thing is adding an -f for a non-fast-forward push
(when maintainers have rebased the -fixes tree, shouldn't be done
anywhere else). Docs seem accurate, so not sure where you copypasted
this from? And not sure we should catch this in the script, since it's
kinda ambiguous.
-Daniel


> -Daniel
>
>>
>> Christian.
>>
>>>
>>> Thanks,
>>> Christian.
>>>
>>>> -Daniel
>>>>
>>>>
>>>
>>
>
>
>
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> +41 (0) 79 365 57 48 - http://blog.ffwll.ch



-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 2/5] dma-buf: remove kmap_atomic interface
@ 2018-06-21 10:59                       ` Christian König
  0 siblings, 0 replies; 58+ messages in thread
From: Christian König @ 2018-06-21 10:59 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: moderated list:DMA BUFFER SHARING FRAMEWORK, dri-devel,
	amd-gfx list, open list:DMA BUFFER SHARING FRAMEWORK

Am 21.06.2018 um 08:30 schrieb Daniel Vetter:
> On Thu, Jun 21, 2018 at 8:26 AM, Daniel Vetter <daniel@ffwll.ch> wrote:
>> On Wed, Jun 20, 2018 at 4:21 PM, Christian König
>> <christian.koenig@amd.com> wrote:
>>> Am 20.06.2018 um 16:04 schrieb Christian König:
>>>> Am 20.06.2018 um 14:52 schrieb Daniel Vetter:
>>>>> On Wed, Jun 20, 2018 at 2:46 PM, Christian König
>>>>> <ckoenig.leichtzumerken@gmail.com> wrote:
>>>>>> [SNIP]
>>>>>>> Go ahead, that's the point of commit rights. dim might complain if you
>>>>>>> cherry picked them and didn't pick them up using dim apply though ...
>>>>>>
>>>>>> I've fixed up the Link tags, but when I try "dim push-branch
>>>>>> drm-misc-next"
>>>>>> I only get the error message "error: dst ref refs/heads/drm-misc-next
>>>>>> receives from more than one src."
>>>>>>
>>>>>> Any idea what is going wrong here?
>>>>> Sounds like multiple upstreams for your local drm-misc-next branch,
>>>>> and git then can't decide which one to pick. If you delete the branch
>>>>> and create it using dim checkout drm-misc-next this shouldn't happen.
>>>>> We're trying to fit into existing check-outs and branches, but if you
>>>>> set things up slightly different than dim would have you're off script
>>>>> and there's limited support for that.
>>>>>
>>>>> Alternative check out your .git/config and remove the other upstreams.
>>>>> Or attach your git config if this isn't the issue (I'm just doing some
>>>>> guessing here).
>>>>
>>>> I've tried to delete my drm-misc-next branch and recreate it, but that
>>>> doesn't seem to help.
>>>>
>>>> Attached is my .git/config, but at least on first glance it looks ok as
>>>> well.
>>>>
>>>> Any ideas?
>>>
>>> Ok that seems to be a bug in dim.
>>>
>>> "bash -x dim push drm-misc-next" looks like it tries to push the branch
>>> drm-misc-next twice to the drm-misc remote: git push drm-misc drm-misc-next
>>> drm-misc-next
>>>
>>> When I try that manually I get the same result, but "git push drm-misc
>>> drm-misc-next" just seemed to work fine.
>>>
>>> Let's hope that I haven't messed things up totally on the server now.
>> Tree looks all intact, except for some build fail. For drm-misc please
>> use the 3 defconfings (for x86, arm and arm64) to check that not too
>> much broke, they should enable all the gfx relevant stuff. Not full
>> combinatorials, but at least the most obvious of things.
>>
>> Wrt the issue, it's indeed a bug in dim. The shorthand for pushing the
>> current branch works:
>>
>> $ dim push
>>
>> But the explicit form somehow gained a bug.
>>
>> $ dim push drm-misc-next
>>
>> I'll look into why this is.
> Should have waited for coffee to kick in. This is a feature :-)
>
> $ dim push [git push arguments]
>
> is the short-hand. If you want to specify the branch explicitly, you need to use
>
> $ dim push-branch drm-misc-next [git push arguments]
>
> Usually the only thing is adding an -f for a non-fast-forward push
> (when maintainers have rebased the -fixes tree, shouldn't be done
> anywhere else). Docs seem accurate, so not sure where you copypasted
> this from? And not sure we should catch this in the script, since it's
> kinda ambiguous.

Ah! Ok that actually makes some sense. Might be a good idea to mention 
the difference between "dim push" and "dim push-branch" in the quick 
start guide somewhere.

Thanks for the explanation,
Christian.

> -Daniel
>
>
>> -Daniel
>>
>>> Christian.
>>>
>>>> Thanks,
>>>> Christian.
>>>>
>>>>> -Daniel
>>>>>
>>>>>
>>
>>
>> --
>> Daniel Vetter
>> Software Engineer, Intel Corporation
>> +41 (0) 79 365 57 48 - http://blog.ffwll.ch
>
>

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 2/5] dma-buf: remove kmap_atomic interface
@ 2018-06-21 10:59                       ` Christian König
  0 siblings, 0 replies; 58+ messages in thread
From: Christian König @ 2018-06-21 10:59 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: moderated list:DMA BUFFER SHARING FRAMEWORK, amd-gfx list,
	dri-devel, open list:DMA BUFFER SHARING FRAMEWORK

Am 21.06.2018 um 08:30 schrieb Daniel Vetter:
> On Thu, Jun 21, 2018 at 8:26 AM, Daniel Vetter <daniel@ffwll.ch> wrote:
>> On Wed, Jun 20, 2018 at 4:21 PM, Christian König
>> <christian.koenig@amd.com> wrote:
>>> Am 20.06.2018 um 16:04 schrieb Christian König:
>>>> Am 20.06.2018 um 14:52 schrieb Daniel Vetter:
>>>>> On Wed, Jun 20, 2018 at 2:46 PM, Christian König
>>>>> <ckoenig.leichtzumerken@gmail.com> wrote:
>>>>>> [SNIP]
>>>>>>> Go ahead, that's the point of commit rights. dim might complain if you
>>>>>>> cherry picked them and didn't pick them up using dim apply though ...
>>>>>>
>>>>>> I've fixed up the Link tags, but when I try "dim push-branch
>>>>>> drm-misc-next"
>>>>>> I only get the error message "error: dst ref refs/heads/drm-misc-next
>>>>>> receives from more than one src."
>>>>>>
>>>>>> Any idea what is going wrong here?
>>>>> Sounds like multiple upstreams for your local drm-misc-next branch,
>>>>> and git then can't decide which one to pick. If you delete the branch
>>>>> and create it using dim checkout drm-misc-next this shouldn't happen.
>>>>> We're trying to fit into existing check-outs and branches, but if you
>>>>> set things up slightly different than dim would have you're off script
>>>>> and there's limited support for that.
>>>>>
>>>>> Alternative check out your .git/config and remove the other upstreams.
>>>>> Or attach your git config if this isn't the issue (I'm just doing some
>>>>> guessing here).
>>>>
>>>> I've tried to delete my drm-misc-next branch and recreate it, but that
>>>> doesn't seem to help.
>>>>
>>>> Attached is my .git/config, but at least on first glance it looks ok as
>>>> well.
>>>>
>>>> Any ideas?
>>>
>>> Ok that seems to be a bug in dim.
>>>
>>> "bash -x dim push drm-misc-next" looks like it tries to push the branch
>>> drm-misc-next twice to the drm-misc remote: git push drm-misc drm-misc-next
>>> drm-misc-next
>>>
>>> When I try that manually I get the same result, but "git push drm-misc
>>> drm-misc-next" just seemed to work fine.
>>>
>>> Let's hope that I haven't messed things up totally on the server now.
>> Tree looks all intact, except for some build fail. For drm-misc please
>> use the 3 defconfings (for x86, arm and arm64) to check that not too
>> much broke, they should enable all the gfx relevant stuff. Not full
>> combinatorials, but at least the most obvious of things.
>>
>> Wrt the issue, it's indeed a bug in dim. The shorthand for pushing the
>> current branch works:
>>
>> $ dim push
>>
>> But the explicit form somehow gained a bug.
>>
>> $ dim push drm-misc-next
>>
>> I'll look into why this is.
> Should have waited for coffee to kick in. This is a feature :-)
>
> $ dim push [git push arguments]
>
> is the short-hand. If you want to specify the branch explicitly, you need to use
>
> $ dim push-branch drm-misc-next [git push arguments]
>
> Usually the only thing is adding an -f for a non-fast-forward push
> (when maintainers have rebased the -fixes tree, shouldn't be done
> anywhere else). Docs seem accurate, so not sure where you copypasted
> this from? And not sure we should catch this in the script, since it's
> kinda ambiguous.

Ah! Ok that actually makes some sense. Might be a good idea to mention 
the difference between "dim push" and "dim push-branch" in the quick 
start guide somewhere.

Thanks for the explanation,
Christian.

> -Daniel
>
>
>> -Daniel
>>
>>> Christian.
>>>
>>>> Thanks,
>>>> Christian.
>>>>
>>>>> -Daniel
>>>>>
>>>>>
>>
>>
>> --
>> Daniel Vetter
>> Software Engineer, Intel Corporation
>> +41 (0) 79 365 57 48 - http://blog.ffwll.ch
>
>

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 5/5] drm/amdgpu: add independent DMA-buf export v3
@ 2018-06-22 13:39       ` Christian König
  0 siblings, 0 replies; 58+ messages in thread
From: Christian König @ 2018-06-22 13:39 UTC (permalink / raw)
  To: Daniel Vetter; +Cc: linaro-mm-sig, linux-media, dri-devel, amd-gfx

Am 18.06.2018 um 10:28 schrieb Daniel Vetter:
> On Fri, Jun 01, 2018 at 02:00:20PM +0200, Christian König wrote:
>> The caching of SGT's done by the DRM code is actually quite harmful and
>> should probably removed altogether in the long term.
> Hm, why is it harmful? We've done it because it's expensive, and people
> started screaming about the overhead ... hence the caching.

It's a bad idea because it artificially extends the lifetime of the 
mapping, which is exactly what we want to avoid when we create the 
mappings dynamically and only as long as necessary.

And actually checking the mail history I could only find indicators that 
people thought it would help. I haven't found any evidence that anybody 
actually checked if that helps or not.

> Doing an amdgpu copypasta seems like working around issues in shared code.

Completely agree, but I don't want to push that policy to everybody just 
yet.

When we find that this is really the right direction I can convert 
Radeon as well, move more component functionality logic into common code 
and when that's done rip out this middle layer because it just becomes 
superfluous.

Christian.

> -Daniel
>
>> Start by providing a separate DMA-buf export implementation in amdgpu. This is
>> also a prerequisite of unpinned DMA-buf handling.
>>
>> v2: fix unintended recursion, remove debugging leftovers
>> v3: split out from unpinned DMA-buf work
>>
>> Signed-off-by: Christian König <christian.koenig@amd.com>
>> ---
>>   drivers/gpu/drm/amd/amdgpu/amdgpu.h       |  1 -
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c   |  1 -
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c | 73 ++++++++++++++-----------------
>>   3 files changed, 32 insertions(+), 43 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>> index 2d7500921c0b..93dc57d74fc2 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>> @@ -373,7 +373,6 @@ int amdgpu_gem_object_open(struct drm_gem_object *obj,
>>   void amdgpu_gem_object_close(struct drm_gem_object *obj,
>>   				struct drm_file *file_priv);
>>   unsigned long amdgpu_gem_timeout(uint64_t timeout_ns);
>> -struct sg_table *amdgpu_gem_prime_get_sg_table(struct drm_gem_object *obj);
>>   struct drm_gem_object *
>>   amdgpu_gem_prime_import_sg_table(struct drm_device *dev,
>>   				 struct dma_buf_attachment *attach,
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>> index b0bf2f24da48..270b8ad927ea 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>> @@ -907,7 +907,6 @@ static struct drm_driver kms_driver = {
>>   	.gem_prime_export = amdgpu_gem_prime_export,
>>   	.gem_prime_import = amdgpu_gem_prime_import,
>>   	.gem_prime_res_obj = amdgpu_gem_prime_res_obj,
>> -	.gem_prime_get_sg_table = amdgpu_gem_prime_get_sg_table,
>>   	.gem_prime_import_sg_table = amdgpu_gem_prime_import_sg_table,
>>   	.gem_prime_vmap = amdgpu_gem_prime_vmap,
>>   	.gem_prime_vunmap = amdgpu_gem_prime_vunmap,
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>> index a156b3891a3f..0c5a75b06648 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>> @@ -32,14 +32,6 @@
>>   
>>   static const struct dma_buf_ops amdgpu_dmabuf_ops;
>>   
>> -struct sg_table *amdgpu_gem_prime_get_sg_table(struct drm_gem_object *obj)
>> -{
>> -	struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
>> -	int npages = bo->tbo.num_pages;
>> -
>> -	return drm_prime_pages_to_sg(bo->tbo.ttm->pages, npages);
>> -}
>> -
>>   void *amdgpu_gem_prime_vmap(struct drm_gem_object *obj)
>>   {
>>   	struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
>> @@ -132,23 +124,17 @@ amdgpu_gem_prime_import_sg_table(struct drm_device *dev,
>>   	return ERR_PTR(ret);
>>   }
>>   
>> -static int amdgpu_gem_map_attach(struct dma_buf *dma_buf,
>> -				 struct dma_buf_attachment *attach)
>> +static struct sg_table *
>> +amdgpu_gem_map_dma_buf(struct dma_buf_attachment *attach,
>> +		       enum dma_data_direction dir)
>>   {
>> +	struct dma_buf *dma_buf = attach->dmabuf;
>>   	struct drm_gem_object *obj = dma_buf->priv;
>>   	struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
>>   	struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
>> +	struct sg_table *sgt;
>>   	long r;
>>   
>> -	r = drm_gem_map_attach(dma_buf, attach);
>> -	if (r)
>> -		return r;
>> -
>> -	r = amdgpu_bo_reserve(bo, false);
>> -	if (unlikely(r != 0))
>> -		goto error_detach;
>> -
>> -
>>   	if (attach->dev->driver != adev->dev->driver) {
>>   		/*
>>   		 * Wait for all shared fences to complete before we switch to future
>> @@ -159,46 +145,53 @@ static int amdgpu_gem_map_attach(struct dma_buf *dma_buf,
>>   							MAX_SCHEDULE_TIMEOUT);
>>   		if (unlikely(r < 0)) {
>>   			DRM_DEBUG_PRIME("Fence wait failed: %li\n", r);
>> -			goto error_unreserve;
>> +			return ERR_PTR(r);
>>   		}
>>   	}
>>   
>>   	/* pin buffer into GTT */
>>   	r = amdgpu_bo_pin(bo, AMDGPU_GEM_DOMAIN_GTT, NULL);
>>   	if (r)
>> -		goto error_unreserve;
>> +		return ERR_PTR(r);
>> +
>> +	sgt = drm_prime_pages_to_sg(bo->tbo.ttm->pages, bo->tbo.num_pages);
>> +	if (IS_ERR(sgt))
>> +		return sgt;
>> +
>> +	if (!dma_map_sg_attrs(attach->dev, sgt->sgl, sgt->nents, dir,
>> +			      DMA_ATTR_SKIP_CPU_SYNC))
>> +		goto error_free;
>>   
>>   	if (attach->dev->driver != adev->dev->driver)
>>   		bo->prime_shared_count++;
>>   
>> -error_unreserve:
>> -	amdgpu_bo_unreserve(bo);
>> +	return sgt;
>>   
>> -error_detach:
>> -	if (r)
>> -		drm_gem_map_detach(dma_buf, attach);
>> -	return r;
>> +error_free:
>> +	sg_free_table(sgt);
>> +	kfree(sgt);
>> +	return ERR_PTR(-ENOMEM);
>>   }
>>   
>> -static void amdgpu_gem_map_detach(struct dma_buf *dma_buf,
>> -				  struct dma_buf_attachment *attach)
>> +static void amdgpu_gem_unmap_dma_buf(struct dma_buf_attachment *attach,
>> +				     struct sg_table *sgt,
>> +				     enum dma_data_direction dir)
>>   {
>> +	struct dma_buf *dma_buf = attach->dmabuf;
>>   	struct drm_gem_object *obj = dma_buf->priv;
>>   	struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
>>   	struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
>> -	int ret = 0;
>> -
>> -	ret = amdgpu_bo_reserve(bo, true);
>> -	if (unlikely(ret != 0))
>> -		goto error;
>>   
>>   	amdgpu_bo_unpin(bo);
>> +
>>   	if (attach->dev->driver != adev->dev->driver && bo->prime_shared_count)
>>   		bo->prime_shared_count--;
>> -	amdgpu_bo_unreserve(bo);
>>   
>> -error:
>> -	drm_gem_map_detach(dma_buf, attach);
>> +	if (sgt) {
>> +		dma_unmap_sg(attach->dev, sgt->sgl, sgt->nents, dir);
>> +		sg_free_table(sgt);
>> +		kfree(sgt);
>> +	}
>>   }
>>   
>>   struct reservation_object *amdgpu_gem_prime_res_obj(struct drm_gem_object *obj)
>> @@ -237,10 +230,8 @@ static int amdgpu_gem_begin_cpu_access(struct dma_buf *dma_buf,
>>   }
>>   
>>   static const struct dma_buf_ops amdgpu_dmabuf_ops = {
>> -	.attach = amdgpu_gem_map_attach,
>> -	.detach = amdgpu_gem_map_detach,
>> -	.map_dma_buf = drm_gem_map_dma_buf,
>> -	.unmap_dma_buf = drm_gem_unmap_dma_buf,
>> +	.map_dma_buf = amdgpu_gem_map_dma_buf,
>> +	.unmap_dma_buf = amdgpu_gem_unmap_dma_buf,
>>   	.release = drm_gem_dmabuf_release,
>>   	.begin_cpu_access = amdgpu_gem_begin_cpu_access,
>>   	.map = drm_gem_dmabuf_kmap,
>> -- 
>> 2.14.1
>>
>> _______________________________________________
>> dri-devel mailing list
>> dri-devel@lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 5/5] drm/amdgpu: add independent DMA-buf export v3
@ 2018-06-22 13:39       ` Christian König
  0 siblings, 0 replies; 58+ messages in thread
From: Christian König @ 2018-06-22 13:39 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw,
	amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	linux-media-u79uwXL29TY76Z2rM5mHXA

Am 18.06.2018 um 10:28 schrieb Daniel Vetter:
> On Fri, Jun 01, 2018 at 02:00:20PM +0200, Christian König wrote:
>> The caching of SGT's done by the DRM code is actually quite harmful and
>> should probably removed altogether in the long term.
> Hm, why is it harmful? We've done it because it's expensive, and people
> started screaming about the overhead ... hence the caching.

It's a bad idea because it artificially extends the lifetime of the 
mapping, which is exactly what we want to avoid when we create the 
mappings dynamically and only as long as necessary.

And actually checking the mail history I could only find indicators that 
people thought it would help. I haven't found any evidence that anybody 
actually checked if that helps or not.

> Doing an amdgpu copypasta seems like working around issues in shared code.

Completely agree, but I don't want to push that policy to everybody just 
yet.

When we find that this is really the right direction I can convert 
Radeon as well, move more component functionality logic into common code 
and when that's done rip out this middle layer because it just becomes 
superfluous.

Christian.

> -Daniel
>
>> Start by providing a separate DMA-buf export implementation in amdgpu. This is
>> also a prerequisite of unpinned DMA-buf handling.
>>
>> v2: fix unintended recursion, remove debugging leftovers
>> v3: split out from unpinned DMA-buf work
>>
>> Signed-off-by: Christian König <christian.koenig@amd.com>
>> ---
>>   drivers/gpu/drm/amd/amdgpu/amdgpu.h       |  1 -
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c   |  1 -
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c | 73 ++++++++++++++-----------------
>>   3 files changed, 32 insertions(+), 43 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>> index 2d7500921c0b..93dc57d74fc2 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>> @@ -373,7 +373,6 @@ int amdgpu_gem_object_open(struct drm_gem_object *obj,
>>   void amdgpu_gem_object_close(struct drm_gem_object *obj,
>>   				struct drm_file *file_priv);
>>   unsigned long amdgpu_gem_timeout(uint64_t timeout_ns);
>> -struct sg_table *amdgpu_gem_prime_get_sg_table(struct drm_gem_object *obj);
>>   struct drm_gem_object *
>>   amdgpu_gem_prime_import_sg_table(struct drm_device *dev,
>>   				 struct dma_buf_attachment *attach,
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>> index b0bf2f24da48..270b8ad927ea 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>> @@ -907,7 +907,6 @@ static struct drm_driver kms_driver = {
>>   	.gem_prime_export = amdgpu_gem_prime_export,
>>   	.gem_prime_import = amdgpu_gem_prime_import,
>>   	.gem_prime_res_obj = amdgpu_gem_prime_res_obj,
>> -	.gem_prime_get_sg_table = amdgpu_gem_prime_get_sg_table,
>>   	.gem_prime_import_sg_table = amdgpu_gem_prime_import_sg_table,
>>   	.gem_prime_vmap = amdgpu_gem_prime_vmap,
>>   	.gem_prime_vunmap = amdgpu_gem_prime_vunmap,
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>> index a156b3891a3f..0c5a75b06648 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
>> @@ -32,14 +32,6 @@
>>   
>>   static const struct dma_buf_ops amdgpu_dmabuf_ops;
>>   
>> -struct sg_table *amdgpu_gem_prime_get_sg_table(struct drm_gem_object *obj)
>> -{
>> -	struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
>> -	int npages = bo->tbo.num_pages;
>> -
>> -	return drm_prime_pages_to_sg(bo->tbo.ttm->pages, npages);
>> -}
>> -
>>   void *amdgpu_gem_prime_vmap(struct drm_gem_object *obj)
>>   {
>>   	struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
>> @@ -132,23 +124,17 @@ amdgpu_gem_prime_import_sg_table(struct drm_device *dev,
>>   	return ERR_PTR(ret);
>>   }
>>   
>> -static int amdgpu_gem_map_attach(struct dma_buf *dma_buf,
>> -				 struct dma_buf_attachment *attach)
>> +static struct sg_table *
>> +amdgpu_gem_map_dma_buf(struct dma_buf_attachment *attach,
>> +		       enum dma_data_direction dir)
>>   {
>> +	struct dma_buf *dma_buf = attach->dmabuf;
>>   	struct drm_gem_object *obj = dma_buf->priv;
>>   	struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
>>   	struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
>> +	struct sg_table *sgt;
>>   	long r;
>>   
>> -	r = drm_gem_map_attach(dma_buf, attach);
>> -	if (r)
>> -		return r;
>> -
>> -	r = amdgpu_bo_reserve(bo, false);
>> -	if (unlikely(r != 0))
>> -		goto error_detach;
>> -
>> -
>>   	if (attach->dev->driver != adev->dev->driver) {
>>   		/*
>>   		 * Wait for all shared fences to complete before we switch to future
>> @@ -159,46 +145,53 @@ static int amdgpu_gem_map_attach(struct dma_buf *dma_buf,
>>   							MAX_SCHEDULE_TIMEOUT);
>>   		if (unlikely(r < 0)) {
>>   			DRM_DEBUG_PRIME("Fence wait failed: %li\n", r);
>> -			goto error_unreserve;
>> +			return ERR_PTR(r);
>>   		}
>>   	}
>>   
>>   	/* pin buffer into GTT */
>>   	r = amdgpu_bo_pin(bo, AMDGPU_GEM_DOMAIN_GTT, NULL);
>>   	if (r)
>> -		goto error_unreserve;
>> +		return ERR_PTR(r);
>> +
>> +	sgt = drm_prime_pages_to_sg(bo->tbo.ttm->pages, bo->tbo.num_pages);
>> +	if (IS_ERR(sgt))
>> +		return sgt;
>> +
>> +	if (!dma_map_sg_attrs(attach->dev, sgt->sgl, sgt->nents, dir,
>> +			      DMA_ATTR_SKIP_CPU_SYNC))
>> +		goto error_free;
>>   
>>   	if (attach->dev->driver != adev->dev->driver)
>>   		bo->prime_shared_count++;
>>   
>> -error_unreserve:
>> -	amdgpu_bo_unreserve(bo);
>> +	return sgt;
>>   
>> -error_detach:
>> -	if (r)
>> -		drm_gem_map_detach(dma_buf, attach);
>> -	return r;
>> +error_free:
>> +	sg_free_table(sgt);
>> +	kfree(sgt);
>> +	return ERR_PTR(-ENOMEM);
>>   }
>>   
>> -static void amdgpu_gem_map_detach(struct dma_buf *dma_buf,
>> -				  struct dma_buf_attachment *attach)
>> +static void amdgpu_gem_unmap_dma_buf(struct dma_buf_attachment *attach,
>> +				     struct sg_table *sgt,
>> +				     enum dma_data_direction dir)
>>   {
>> +	struct dma_buf *dma_buf = attach->dmabuf;
>>   	struct drm_gem_object *obj = dma_buf->priv;
>>   	struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
>>   	struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
>> -	int ret = 0;
>> -
>> -	ret = amdgpu_bo_reserve(bo, true);
>> -	if (unlikely(ret != 0))
>> -		goto error;
>>   
>>   	amdgpu_bo_unpin(bo);
>> +
>>   	if (attach->dev->driver != adev->dev->driver && bo->prime_shared_count)
>>   		bo->prime_shared_count--;
>> -	amdgpu_bo_unreserve(bo);
>>   
>> -error:
>> -	drm_gem_map_detach(dma_buf, attach);
>> +	if (sgt) {
>> +		dma_unmap_sg(attach->dev, sgt->sgl, sgt->nents, dir);
>> +		sg_free_table(sgt);
>> +		kfree(sgt);
>> +	}
>>   }
>>   
>>   struct reservation_object *amdgpu_gem_prime_res_obj(struct drm_gem_object *obj)
>> @@ -237,10 +230,8 @@ static int amdgpu_gem_begin_cpu_access(struct dma_buf *dma_buf,
>>   }
>>   
>>   static const struct dma_buf_ops amdgpu_dmabuf_ops = {
>> -	.attach = amdgpu_gem_map_attach,
>> -	.detach = amdgpu_gem_map_detach,
>> -	.map_dma_buf = drm_gem_map_dma_buf,
>> -	.unmap_dma_buf = drm_gem_unmap_dma_buf,
>> +	.map_dma_buf = amdgpu_gem_map_dma_buf,
>> +	.unmap_dma_buf = amdgpu_gem_unmap_dma_buf,
>>   	.release = drm_gem_dmabuf_release,
>>   	.begin_cpu_access = amdgpu_gem_begin_cpu_access,
>>   	.map = drm_gem_dmabuf_kmap,
>> -- 
>> 2.14.1
>>
>> _______________________________________________
>> dri-devel mailing list
>> dri-devel@lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/dri-devel

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 5/5] drm/amdgpu: add independent DMA-buf export v3
@ 2018-06-25  7:46         ` Daniel Vetter
  0 siblings, 0 replies; 58+ messages in thread
From: Daniel Vetter @ 2018-06-25  7:46 UTC (permalink / raw)
  To: christian.koenig
  Cc: Daniel Vetter, linaro-mm-sig, linux-media, dri-devel, amd-gfx

On Fri, Jun 22, 2018 at 03:39:25PM +0200, Christian König wrote:
> Am 18.06.2018 um 10:28 schrieb Daniel Vetter:
> > On Fri, Jun 01, 2018 at 02:00:20PM +0200, Christian König wrote:
> > > The caching of SGT's done by the DRM code is actually quite harmful and
> > > should probably removed altogether in the long term.
> > Hm, why is it harmful? We've done it because it's expensive, and people
> > started screaming about the overhead ... hence the caching.
> 
> It's a bad idea because it artificially extends the lifetime of the mapping,
> which is exactly what we want to avoid when we create the mappings
> dynamically and only as long as necessary.
> 
> And actually checking the mail history I could only find indicators that
> people thought it would help. I haven't found any evidence that anybody
> actually checked if that helps or not.

Hm, I do have some memories of people being really upset about the
constantly rewriting of IOMMU pagetables. This was for display-only
drivers where forcing everyone to have their own private caching
implementation is a bit silly.

> > Doing an amdgpu copypasta seems like working around issues in shared code.
> 
> Completely agree, but I don't want to push that policy to everybody just
> yet.
> 
> When we find that this is really the right direction I can convert Radeon as
> well, move more component functionality logic into common code and when
> that's done rip out this middle layer because it just becomes superfluous.

I expect upset people if we remove the mapping caching. Maybe we should
change it to not cache the mapping if the exporter has the dynamic
unbinding stuff supported? Or maybe even when both exporter and importer
have it supported.

Wrt the midlayer: That's because nvidia blob + EXPORT_SYMBOL_GPL :-)

Cheers, Daniel


> 
> Christian.
> 
> > -Daniel
> > 
> > > Start by providing a separate DMA-buf export implementation in amdgpu. This is
> > > also a prerequisite of unpinned DMA-buf handling.
> > > 
> > > v2: fix unintended recursion, remove debugging leftovers
> > > v3: split out from unpinned DMA-buf work
> > > 
> > > Signed-off-by: Christian König <christian.koenig@amd.com>
> > > ---
> > >   drivers/gpu/drm/amd/amdgpu/amdgpu.h       |  1 -
> > >   drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c   |  1 -
> > >   drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c | 73 ++++++++++++++-----------------
> > >   3 files changed, 32 insertions(+), 43 deletions(-)
> > > 
> > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> > > index 2d7500921c0b..93dc57d74fc2 100644
> > > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> > > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> > > @@ -373,7 +373,6 @@ int amdgpu_gem_object_open(struct drm_gem_object *obj,
> > >   void amdgpu_gem_object_close(struct drm_gem_object *obj,
> > >   				struct drm_file *file_priv);
> > >   unsigned long amdgpu_gem_timeout(uint64_t timeout_ns);
> > > -struct sg_table *amdgpu_gem_prime_get_sg_table(struct drm_gem_object *obj);
> > >   struct drm_gem_object *
> > >   amdgpu_gem_prime_import_sg_table(struct drm_device *dev,
> > >   				 struct dma_buf_attachment *attach,
> > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> > > index b0bf2f24da48..270b8ad927ea 100644
> > > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> > > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> > > @@ -907,7 +907,6 @@ static struct drm_driver kms_driver = {
> > >   	.gem_prime_export = amdgpu_gem_prime_export,
> > >   	.gem_prime_import = amdgpu_gem_prime_import,
> > >   	.gem_prime_res_obj = amdgpu_gem_prime_res_obj,
> > > -	.gem_prime_get_sg_table = amdgpu_gem_prime_get_sg_table,
> > >   	.gem_prime_import_sg_table = amdgpu_gem_prime_import_sg_table,
> > >   	.gem_prime_vmap = amdgpu_gem_prime_vmap,
> > >   	.gem_prime_vunmap = amdgpu_gem_prime_vunmap,
> > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> > > index a156b3891a3f..0c5a75b06648 100644
> > > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> > > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> > > @@ -32,14 +32,6 @@
> > >   static const struct dma_buf_ops amdgpu_dmabuf_ops;
> > > -struct sg_table *amdgpu_gem_prime_get_sg_table(struct drm_gem_object *obj)
> > > -{
> > > -	struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
> > > -	int npages = bo->tbo.num_pages;
> > > -
> > > -	return drm_prime_pages_to_sg(bo->tbo.ttm->pages, npages);
> > > -}
> > > -
> > >   void *amdgpu_gem_prime_vmap(struct drm_gem_object *obj)
> > >   {
> > >   	struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
> > > @@ -132,23 +124,17 @@ amdgpu_gem_prime_import_sg_table(struct drm_device *dev,
> > >   	return ERR_PTR(ret);
> > >   }
> > > -static int amdgpu_gem_map_attach(struct dma_buf *dma_buf,
> > > -				 struct dma_buf_attachment *attach)
> > > +static struct sg_table *
> > > +amdgpu_gem_map_dma_buf(struct dma_buf_attachment *attach,
> > > +		       enum dma_data_direction dir)
> > >   {
> > > +	struct dma_buf *dma_buf = attach->dmabuf;
> > >   	struct drm_gem_object *obj = dma_buf->priv;
> > >   	struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
> > >   	struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
> > > +	struct sg_table *sgt;
> > >   	long r;
> > > -	r = drm_gem_map_attach(dma_buf, attach);
> > > -	if (r)
> > > -		return r;
> > > -
> > > -	r = amdgpu_bo_reserve(bo, false);
> > > -	if (unlikely(r != 0))
> > > -		goto error_detach;
> > > -
> > > -
> > >   	if (attach->dev->driver != adev->dev->driver) {
> > >   		/*
> > >   		 * Wait for all shared fences to complete before we switch to future
> > > @@ -159,46 +145,53 @@ static int amdgpu_gem_map_attach(struct dma_buf *dma_buf,
> > >   							MAX_SCHEDULE_TIMEOUT);
> > >   		if (unlikely(r < 0)) {
> > >   			DRM_DEBUG_PRIME("Fence wait failed: %li\n", r);
> > > -			goto error_unreserve;
> > > +			return ERR_PTR(r);
> > >   		}
> > >   	}
> > >   	/* pin buffer into GTT */
> > >   	r = amdgpu_bo_pin(bo, AMDGPU_GEM_DOMAIN_GTT, NULL);
> > >   	if (r)
> > > -		goto error_unreserve;
> > > +		return ERR_PTR(r);
> > > +
> > > +	sgt = drm_prime_pages_to_sg(bo->tbo.ttm->pages, bo->tbo.num_pages);
> > > +	if (IS_ERR(sgt))
> > > +		return sgt;
> > > +
> > > +	if (!dma_map_sg_attrs(attach->dev, sgt->sgl, sgt->nents, dir,
> > > +			      DMA_ATTR_SKIP_CPU_SYNC))
> > > +		goto error_free;
> > >   	if (attach->dev->driver != adev->dev->driver)
> > >   		bo->prime_shared_count++;
> > > -error_unreserve:
> > > -	amdgpu_bo_unreserve(bo);
> > > +	return sgt;
> > > -error_detach:
> > > -	if (r)
> > > -		drm_gem_map_detach(dma_buf, attach);
> > > -	return r;
> > > +error_free:
> > > +	sg_free_table(sgt);
> > > +	kfree(sgt);
> > > +	return ERR_PTR(-ENOMEM);
> > >   }
> > > -static void amdgpu_gem_map_detach(struct dma_buf *dma_buf,
> > > -				  struct dma_buf_attachment *attach)
> > > +static void amdgpu_gem_unmap_dma_buf(struct dma_buf_attachment *attach,
> > > +				     struct sg_table *sgt,
> > > +				     enum dma_data_direction dir)
> > >   {
> > > +	struct dma_buf *dma_buf = attach->dmabuf;
> > >   	struct drm_gem_object *obj = dma_buf->priv;
> > >   	struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
> > >   	struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
> > > -	int ret = 0;
> > > -
> > > -	ret = amdgpu_bo_reserve(bo, true);
> > > -	if (unlikely(ret != 0))
> > > -		goto error;
> > >   	amdgpu_bo_unpin(bo);
> > > +
> > >   	if (attach->dev->driver != adev->dev->driver && bo->prime_shared_count)
> > >   		bo->prime_shared_count--;
> > > -	amdgpu_bo_unreserve(bo);
> > > -error:
> > > -	drm_gem_map_detach(dma_buf, attach);
> > > +	if (sgt) {
> > > +		dma_unmap_sg(attach->dev, sgt->sgl, sgt->nents, dir);
> > > +		sg_free_table(sgt);
> > > +		kfree(sgt);
> > > +	}
> > >   }
> > >   struct reservation_object *amdgpu_gem_prime_res_obj(struct drm_gem_object *obj)
> > > @@ -237,10 +230,8 @@ static int amdgpu_gem_begin_cpu_access(struct dma_buf *dma_buf,
> > >   }
> > >   static const struct dma_buf_ops amdgpu_dmabuf_ops = {
> > > -	.attach = amdgpu_gem_map_attach,
> > > -	.detach = amdgpu_gem_map_detach,
> > > -	.map_dma_buf = drm_gem_map_dma_buf,
> > > -	.unmap_dma_buf = drm_gem_unmap_dma_buf,
> > > +	.map_dma_buf = amdgpu_gem_map_dma_buf,
> > > +	.unmap_dma_buf = amdgpu_gem_unmap_dma_buf,
> > >   	.release = drm_gem_dmabuf_release,
> > >   	.begin_cpu_access = amdgpu_gem_begin_cpu_access,
> > >   	.map = drm_gem_dmabuf_kmap,
> > > -- 
> > > 2.14.1
> > > 
> > > _______________________________________________
> > > dri-devel mailing list
> > > dri-devel@lists.freedesktop.org
> > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch

^ permalink raw reply	[flat|nested] 58+ messages in thread

* Re: [PATCH 5/5] drm/amdgpu: add independent DMA-buf export v3
@ 2018-06-25  7:46         ` Daniel Vetter
  0 siblings, 0 replies; 58+ messages in thread
From: Daniel Vetter @ 2018-06-25  7:46 UTC (permalink / raw)
  To: christian.koenig-5C7GfCeVMHo
  Cc: linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw,
	amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW, Daniel Vetter,
	linux-media-u79uwXL29TY76Z2rM5mHXA

On Fri, Jun 22, 2018 at 03:39:25PM +0200, Christian König wrote:
> Am 18.06.2018 um 10:28 schrieb Daniel Vetter:
> > On Fri, Jun 01, 2018 at 02:00:20PM +0200, Christian König wrote:
> > > The caching of SGT's done by the DRM code is actually quite harmful and
> > > should probably removed altogether in the long term.
> > Hm, why is it harmful? We've done it because it's expensive, and people
> > started screaming about the overhead ... hence the caching.
> 
> It's a bad idea because it artificially extends the lifetime of the mapping,
> which is exactly what we want to avoid when we create the mappings
> dynamically and only as long as necessary.
> 
> And actually checking the mail history I could only find indicators that
> people thought it would help. I haven't found any evidence that anybody
> actually checked if that helps or not.

Hm, I do have some memories of people being really upset about the
constantly rewriting of IOMMU pagetables. This was for display-only
drivers where forcing everyone to have their own private caching
implementation is a bit silly.

> > Doing an amdgpu copypasta seems like working around issues in shared code.
> 
> Completely agree, but I don't want to push that policy to everybody just
> yet.
> 
> When we find that this is really the right direction I can convert Radeon as
> well, move more component functionality logic into common code and when
> that's done rip out this middle layer because it just becomes superfluous.

I expect upset people if we remove the mapping caching. Maybe we should
change it to not cache the mapping if the exporter has the dynamic
unbinding stuff supported? Or maybe even when both exporter and importer
have it supported.

Wrt the midlayer: That's because nvidia blob + EXPORT_SYMBOL_GPL :-)

Cheers, Daniel


> 
> Christian.
> 
> > -Daniel
> > 
> > > Start by providing a separate DMA-buf export implementation in amdgpu. This is
> > > also a prerequisite of unpinned DMA-buf handling.
> > > 
> > > v2: fix unintended recursion, remove debugging leftovers
> > > v3: split out from unpinned DMA-buf work
> > > 
> > > Signed-off-by: Christian König <christian.koenig@amd.com>
> > > ---
> > >   drivers/gpu/drm/amd/amdgpu/amdgpu.h       |  1 -
> > >   drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c   |  1 -
> > >   drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c | 73 ++++++++++++++-----------------
> > >   3 files changed, 32 insertions(+), 43 deletions(-)
> > > 
> > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> > > index 2d7500921c0b..93dc57d74fc2 100644
> > > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> > > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> > > @@ -373,7 +373,6 @@ int amdgpu_gem_object_open(struct drm_gem_object *obj,
> > >   void amdgpu_gem_object_close(struct drm_gem_object *obj,
> > >   				struct drm_file *file_priv);
> > >   unsigned long amdgpu_gem_timeout(uint64_t timeout_ns);
> > > -struct sg_table *amdgpu_gem_prime_get_sg_table(struct drm_gem_object *obj);
> > >   struct drm_gem_object *
> > >   amdgpu_gem_prime_import_sg_table(struct drm_device *dev,
> > >   				 struct dma_buf_attachment *attach,
> > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> > > index b0bf2f24da48..270b8ad927ea 100644
> > > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> > > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> > > @@ -907,7 +907,6 @@ static struct drm_driver kms_driver = {
> > >   	.gem_prime_export = amdgpu_gem_prime_export,
> > >   	.gem_prime_import = amdgpu_gem_prime_import,
> > >   	.gem_prime_res_obj = amdgpu_gem_prime_res_obj,
> > > -	.gem_prime_get_sg_table = amdgpu_gem_prime_get_sg_table,
> > >   	.gem_prime_import_sg_table = amdgpu_gem_prime_import_sg_table,
> > >   	.gem_prime_vmap = amdgpu_gem_prime_vmap,
> > >   	.gem_prime_vunmap = amdgpu_gem_prime_vunmap,
> > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> > > index a156b3891a3f..0c5a75b06648 100644
> > > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> > > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> > > @@ -32,14 +32,6 @@
> > >   static const struct dma_buf_ops amdgpu_dmabuf_ops;
> > > -struct sg_table *amdgpu_gem_prime_get_sg_table(struct drm_gem_object *obj)
> > > -{
> > > -	struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
> > > -	int npages = bo->tbo.num_pages;
> > > -
> > > -	return drm_prime_pages_to_sg(bo->tbo.ttm->pages, npages);
> > > -}
> > > -
> > >   void *amdgpu_gem_prime_vmap(struct drm_gem_object *obj)
> > >   {
> > >   	struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
> > > @@ -132,23 +124,17 @@ amdgpu_gem_prime_import_sg_table(struct drm_device *dev,
> > >   	return ERR_PTR(ret);
> > >   }
> > > -static int amdgpu_gem_map_attach(struct dma_buf *dma_buf,
> > > -				 struct dma_buf_attachment *attach)
> > > +static struct sg_table *
> > > +amdgpu_gem_map_dma_buf(struct dma_buf_attachment *attach,
> > > +		       enum dma_data_direction dir)
> > >   {
> > > +	struct dma_buf *dma_buf = attach->dmabuf;
> > >   	struct drm_gem_object *obj = dma_buf->priv;
> > >   	struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
> > >   	struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
> > > +	struct sg_table *sgt;
> > >   	long r;
> > > -	r = drm_gem_map_attach(dma_buf, attach);
> > > -	if (r)
> > > -		return r;
> > > -
> > > -	r = amdgpu_bo_reserve(bo, false);
> > > -	if (unlikely(r != 0))
> > > -		goto error_detach;
> > > -
> > > -
> > >   	if (attach->dev->driver != adev->dev->driver) {
> > >   		/*
> > >   		 * Wait for all shared fences to complete before we switch to future
> > > @@ -159,46 +145,53 @@ static int amdgpu_gem_map_attach(struct dma_buf *dma_buf,
> > >   							MAX_SCHEDULE_TIMEOUT);
> > >   		if (unlikely(r < 0)) {
> > >   			DRM_DEBUG_PRIME("Fence wait failed: %li\n", r);
> > > -			goto error_unreserve;
> > > +			return ERR_PTR(r);
> > >   		}
> > >   	}
> > >   	/* pin buffer into GTT */
> > >   	r = amdgpu_bo_pin(bo, AMDGPU_GEM_DOMAIN_GTT, NULL);
> > >   	if (r)
> > > -		goto error_unreserve;
> > > +		return ERR_PTR(r);
> > > +
> > > +	sgt = drm_prime_pages_to_sg(bo->tbo.ttm->pages, bo->tbo.num_pages);
> > > +	if (IS_ERR(sgt))
> > > +		return sgt;
> > > +
> > > +	if (!dma_map_sg_attrs(attach->dev, sgt->sgl, sgt->nents, dir,
> > > +			      DMA_ATTR_SKIP_CPU_SYNC))
> > > +		goto error_free;
> > >   	if (attach->dev->driver != adev->dev->driver)
> > >   		bo->prime_shared_count++;
> > > -error_unreserve:
> > > -	amdgpu_bo_unreserve(bo);
> > > +	return sgt;
> > > -error_detach:
> > > -	if (r)
> > > -		drm_gem_map_detach(dma_buf, attach);
> > > -	return r;
> > > +error_free:
> > > +	sg_free_table(sgt);
> > > +	kfree(sgt);
> > > +	return ERR_PTR(-ENOMEM);
> > >   }
> > > -static void amdgpu_gem_map_detach(struct dma_buf *dma_buf,
> > > -				  struct dma_buf_attachment *attach)
> > > +static void amdgpu_gem_unmap_dma_buf(struct dma_buf_attachment *attach,
> > > +				     struct sg_table *sgt,
> > > +				     enum dma_data_direction dir)
> > >   {
> > > +	struct dma_buf *dma_buf = attach->dmabuf;
> > >   	struct drm_gem_object *obj = dma_buf->priv;
> > >   	struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
> > >   	struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
> > > -	int ret = 0;
> > > -
> > > -	ret = amdgpu_bo_reserve(bo, true);
> > > -	if (unlikely(ret != 0))
> > > -		goto error;
> > >   	amdgpu_bo_unpin(bo);
> > > +
> > >   	if (attach->dev->driver != adev->dev->driver && bo->prime_shared_count)
> > >   		bo->prime_shared_count--;
> > > -	amdgpu_bo_unreserve(bo);
> > > -error:
> > > -	drm_gem_map_detach(dma_buf, attach);
> > > +	if (sgt) {
> > > +		dma_unmap_sg(attach->dev, sgt->sgl, sgt->nents, dir);
> > > +		sg_free_table(sgt);
> > > +		kfree(sgt);
> > > +	}
> > >   }
> > >   struct reservation_object *amdgpu_gem_prime_res_obj(struct drm_gem_object *obj)
> > > @@ -237,10 +230,8 @@ static int amdgpu_gem_begin_cpu_access(struct dma_buf *dma_buf,
> > >   }
> > >   static const struct dma_buf_ops amdgpu_dmabuf_ops = {
> > > -	.attach = amdgpu_gem_map_attach,
> > > -	.detach = amdgpu_gem_map_detach,
> > > -	.map_dma_buf = drm_gem_map_dma_buf,
> > > -	.unmap_dma_buf = drm_gem_unmap_dma_buf,
> > > +	.map_dma_buf = amdgpu_gem_map_dma_buf,
> > > +	.unmap_dma_buf = amdgpu_gem_unmap_dma_buf,
> > >   	.release = drm_gem_dmabuf_release,
> > >   	.begin_cpu_access = amdgpu_gem_begin_cpu_access,
> > >   	.map = drm_gem_dmabuf_kmap,
> > > -- 
> > > 2.14.1
> > > 
> > > _______________________________________________
> > > dri-devel mailing list
> > > dri-devel@lists.freedesktop.org
> > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 58+ messages in thread

end of thread, other threads:[~2018-06-25  7:46 UTC | newest]

Thread overview: 58+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-06-01 12:00 [PATCH 1/5] dma_buf: remove device parameter from attach callback Christian König
2018-06-01 12:00 ` Christian König
2018-06-01 12:00 ` [PATCH 2/5] dma-buf: remove kmap_atomic interface Christian König
2018-06-01 12:00   ` Christian König
2018-06-18  8:18   ` Daniel Vetter
2018-06-18  8:18     ` Daniel Vetter
2018-06-19 14:47     ` Christian König
2018-06-19 14:47       ` Christian König
2018-06-19 15:35       ` Daniel Vetter
2018-06-19 15:35         ` Daniel Vetter
2018-06-20 12:46         ` Christian König
2018-06-20 12:46           ` Christian König
2018-06-20 12:52           ` Daniel Vetter
2018-06-20 12:52             ` Daniel Vetter
2018-06-20 14:04             ` Christian König
2018-06-20 14:04               ` Christian König
2018-06-20 14:21               ` Christian König
2018-06-20 14:21                 ` Christian König
2018-06-21  6:26                 ` Daniel Vetter
2018-06-21  6:26                   ` Daniel Vetter
2018-06-21  6:30                   ` Daniel Vetter
2018-06-21  6:30                     ` Daniel Vetter
2018-06-21 10:59                     ` Christian König
2018-06-21 10:59                       ` Christian König
2018-06-20  6:10       ` Sumit Semwal
2018-06-20  6:10         ` Sumit Semwal
2018-06-20  6:22         ` Christian König
2018-06-20  6:22           ` Christian König
2018-06-01 12:00 ` [PATCH 3/5] dma-buf: lock the reservation object during (un)map_dma_buf Christian König
2018-06-01 12:00   ` Christian König
2018-06-18  8:22   ` Daniel Vetter
2018-06-18  8:22     ` Daniel Vetter
2018-06-18 12:43     ` Christian König
2018-06-18 12:43       ` Christian König
2018-06-01 12:00 ` [PATCH 4/5] dma-buf: add dma_buf_(un)map_attachment_locked variants Christian König
2018-06-01 12:00   ` Christian König
2018-06-18  8:27   ` Daniel Vetter
2018-06-18  8:27     ` Daniel Vetter
2018-06-01 12:00 ` [PATCH 5/5] drm/amdgpu: add independent DMA-buf export v3 Christian König
2018-06-01 12:00   ` Christian König
2018-06-18  8:28   ` Daniel Vetter
2018-06-18  8:28     ` Daniel Vetter
2018-06-22 13:39     ` Christian König
2018-06-22 13:39       ` Christian König
2018-06-25  7:46       ` Daniel Vetter
2018-06-25  7:46         ` Daniel Vetter
2018-06-01 12:11 ` [PATCH 1/5] dma_buf: remove device parameter from attach callback Christian König
2018-06-01 12:11   ` Christian König
2018-06-01 14:02   ` Michel Dänzer
2018-06-01 14:02     ` Michel Dänzer
2018-06-01 15:17     ` Christian König
2018-06-01 15:17       ` Christian König
2018-06-01 15:30       ` Michel Dänzer
2018-06-01 15:30         ` Michel Dänzer
2018-06-06 11:24 ` Christian König
2018-06-06 11:24   ` Christian König
2018-06-18  8:14 ` Daniel Vetter
2018-06-18  8:14   ` Daniel Vetter

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.