* [PATCH 1/5] dma_buf: remove device parameter from attach callback
@ 2018-06-01 12:00 Christian König
[not found] ` <20180601120020.11520-1-christian.koenig-5C7GfCeVMHo@public.gmane.org>
0 siblings, 1 reply; 29+ 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] 29+ messages in thread[parent not found: <20180601120020.11520-1-christian.koenig-5C7GfCeVMHo@public.gmane.org>]
* [PATCH 2/5] dma-buf: remove kmap_atomic interface [not found] ` <20180601120020.11520-1-christian.koenig-5C7GfCeVMHo@public.gmane.org> @ 2018-06-01 12:00 ` Christian König [not found] ` <20180601120020.11520-2-christian.koenig-5C7GfCeVMHo@public.gmane.org> 2018-06-01 12:00 ` [PATCH 3/5] dma-buf: lock the reservation object during (un)map_dma_buf Christian König ` (5 subsequent siblings) 6 siblings, 1 reply; 29+ 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] 29+ messages in thread
[parent not found: <20180601120020.11520-2-christian.koenig-5C7GfCeVMHo@public.gmane.org>]
* Re: [PATCH 2/5] dma-buf: remove kmap_atomic interface [not found] ` <20180601120020.11520-2-christian.koenig-5C7GfCeVMHo@public.gmane.org> @ 2018-06-18 8:18 ` Daniel Vetter 2018-06-19 14:47 ` Christian König 0 siblings, 1 reply; 29+ 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] 29+ 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 2018-06-19 15:35 ` Daniel Vetter 2018-06-20 6:10 ` Sumit Semwal 0 siblings, 2 replies; 29+ 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] 29+ 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 [not found] ` <CAKMK7uEvhMF92ifA=7xQ=9GR3NofZNExCDTHZTtikmujJTZ89A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2018-06-20 6:10 ` Sumit Semwal 1 sibling, 1 reply; 29+ 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] 29+ messages in thread
[parent not found: <CAKMK7uEvhMF92ifA=7xQ=9GR3NofZNExCDTHZTtikmujJTZ89A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>]
* Re: [PATCH 2/5] dma-buf: remove kmap_atomic interface [not found] ` <CAKMK7uEvhMF92ifA=7xQ=9GR3NofZNExCDTHZTtikmujJTZ89A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> @ 2018-06-20 12:46 ` Christian König [not found] ` <c0552d8a-1c64-c99b-6ef8-83e253c49d30-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 0 siblings, 1 reply; 29+ 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] 29+ messages in thread
[parent not found: <c0552d8a-1c64-c99b-6ef8-83e253c49d30-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>]
* Re: [PATCH 2/5] dma-buf: remove kmap_atomic interface [not found] ` <c0552d8a-1c64-c99b-6ef8-83e253c49d30-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> @ 2018-06-20 12:52 ` Daniel Vetter [not found] ` <CAKMK7uHHZn=H6px-yiXy7tVmmQy6GHrwGtG+B7or1ThsrriFDA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 0 siblings, 1 reply; 29+ 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] 29+ messages in thread
[parent not found: <CAKMK7uHHZn=H6px-yiXy7tVmmQy6GHrwGtG+B7or1ThsrriFDA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>]
* Re: [PATCH 2/5] dma-buf: remove kmap_atomic interface [not found] ` <CAKMK7uHHZn=H6px-yiXy7tVmmQy6GHrwGtG+B7or1ThsrriFDA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> @ 2018-06-20 14:04 ` Christian König [not found] ` <5d337ffc-6c4c-dafb-abb2-151d9d4aeaea-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 0 siblings, 1 reply; 29+ 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] 29+ messages in thread
[parent not found: <5d337ffc-6c4c-dafb-abb2-151d9d4aeaea-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>]
* Re: [PATCH 2/5] dma-buf: remove kmap_atomic interface [not found] ` <5d337ffc-6c4c-dafb-abb2-151d9d4aeaea-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> @ 2018-06-20 14:21 ` Christian König [not found] ` <3994b9d0-85fe-6495-5528-282f7b46a53f-5C7GfCeVMHo@public.gmane.org> 0 siblings, 1 reply; 29+ 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] 29+ messages in thread
[parent not found: <3994b9d0-85fe-6495-5528-282f7b46a53f-5C7GfCeVMHo@public.gmane.org>]
* Re: [PATCH 2/5] dma-buf: remove kmap_atomic interface [not found] ` <3994b9d0-85fe-6495-5528-282f7b46a53f-5C7GfCeVMHo@public.gmane.org> @ 2018-06-21 6:26 ` Daniel Vetter [not found] ` <CAKMK7uFbvuikxSMgzquzXgcyVVonhWu3HNfrOR2s7RGB7k21ow-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 0 siblings, 1 reply; 29+ 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] 29+ messages in thread
[parent not found: <CAKMK7uFbvuikxSMgzquzXgcyVVonhWu3HNfrOR2s7RGB7k21ow-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>]
* Re: [PATCH 2/5] dma-buf: remove kmap_atomic interface [not found] ` <CAKMK7uFbvuikxSMgzquzXgcyVVonhWu3HNfrOR2s7RGB7k21ow-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> @ 2018-06-21 6:30 ` Daniel Vetter [not found] ` <CAKMK7uG7dtj136GAg6E9rVHm4dAg0a-A6EA=911fBi8YpVDbcA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 0 siblings, 1 reply; 29+ 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] 29+ messages in thread
[parent not found: <CAKMK7uG7dtj136GAg6E9rVHm4dAg0a-A6EA=911fBi8YpVDbcA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>]
* Re: [PATCH 2/5] dma-buf: remove kmap_atomic interface [not found] ` <CAKMK7uG7dtj136GAg6E9rVHm4dAg0a-A6EA=911fBi8YpVDbcA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> @ 2018-06-21 10:59 ` Christian König 0 siblings, 0 replies; 29+ 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] 29+ 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 @ 2018-06-20 6:10 ` Sumit Semwal [not found] ` <CAO_48GG=whv7R5J1E-xHdZJYFsfYwgnyDq8CzKZktro60m1c+g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 1 sibling, 1 reply; 29+ 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] 29+ messages in thread
[parent not found: <CAO_48GG=whv7R5J1E-xHdZJYFsfYwgnyDq8CzKZktro60m1c+g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>]
* Re: [PATCH 2/5] dma-buf: remove kmap_atomic interface [not found] ` <CAO_48GG=whv7R5J1E-xHdZJYFsfYwgnyDq8CzKZktro60m1c+g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> @ 2018-06-20 6:22 ` Christian König 0 siblings, 0 replies; 29+ 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] 29+ messages in thread
* [PATCH 3/5] dma-buf: lock the reservation object during (un)map_dma_buf [not found] ` <20180601120020.11520-1-christian.koenig-5C7GfCeVMHo@public.gmane.org> 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 [not found] ` <20180601120020.11520-3-christian.koenig-5C7GfCeVMHo@public.gmane.org> 2018-06-01 12:00 ` [PATCH 4/5] dma-buf: add dma_buf_(un)map_attachment_locked variants Christian König ` (4 subsequent siblings) 6 siblings, 1 reply; 29+ 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] 29+ messages in thread
[parent not found: <20180601120020.11520-3-christian.koenig-5C7GfCeVMHo@public.gmane.org>]
* Re: [PATCH 3/5] dma-buf: lock the reservation object during (un)map_dma_buf [not found] ` <20180601120020.11520-3-christian.koenig-5C7GfCeVMHo@public.gmane.org> @ 2018-06-18 8:22 ` Daniel Vetter [not found] ` <20180618082224.GW3438-dv86pmgwkMBes7Z6vYuT8azUEOm+Xw19@public.gmane.org> 0 siblings, 1 reply; 29+ 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] 29+ messages in thread
[parent not found: <20180618082224.GW3438-dv86pmgwkMBes7Z6vYuT8azUEOm+Xw19@public.gmane.org>]
* Re: [PATCH 3/5] dma-buf: lock the reservation object during (un)map_dma_buf [not found] ` <20180618082224.GW3438-dv86pmgwkMBes7Z6vYuT8azUEOm+Xw19@public.gmane.org> @ 2018-06-18 12:43 ` Christian König 0 siblings, 0 replies; 29+ 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] 29+ messages in thread
* [PATCH 4/5] dma-buf: add dma_buf_(un)map_attachment_locked variants [not found] ` <20180601120020.11520-1-christian.koenig-5C7GfCeVMHo@public.gmane.org> 2018-06-01 12:00 ` [PATCH 2/5] dma-buf: remove kmap_atomic interface 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:27 ` Daniel Vetter 2018-06-01 12:00 ` [PATCH 5/5] drm/amdgpu: add independent DMA-buf export v3 Christian König ` (3 subsequent siblings) 6 siblings, 1 reply; 29+ 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] 29+ messages in thread
* Re: [PATCH 4/5] dma-buf: add dma_buf_(un)map_attachment_locked variants 2018-06-01 12:00 ` [PATCH 4/5] dma-buf: add dma_buf_(un)map_attachment_locked variants Christian König @ 2018-06-18 8:27 ` Daniel Vetter 0 siblings, 0 replies; 29+ 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] 29+ messages in thread
* [PATCH 5/5] drm/amdgpu: add independent DMA-buf export v3 [not found] ` <20180601120020.11520-1-christian.koenig-5C7GfCeVMHo@public.gmane.org> ` (2 preceding siblings ...) 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 [not found] ` <20180601120020.11520-5-christian.koenig-5C7GfCeVMHo@public.gmane.org> 2018-06-01 12:11 ` [PATCH 1/5] dma_buf: remove device parameter from attach callback Christian König ` (2 subsequent siblings) 6 siblings, 1 reply; 29+ 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] 29+ messages in thread
[parent not found: <20180601120020.11520-5-christian.koenig-5C7GfCeVMHo@public.gmane.org>]
* Re: [PATCH 5/5] drm/amdgpu: add independent DMA-buf export v3 [not found] ` <20180601120020.11520-5-christian.koenig-5C7GfCeVMHo@public.gmane.org> @ 2018-06-18 8:28 ` Daniel Vetter [not found] ` <20180618082857.GY3438-dv86pmgwkMBes7Z6vYuT8azUEOm+Xw19@public.gmane.org> 0 siblings, 1 reply; 29+ 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] 29+ messages in thread
[parent not found: <20180618082857.GY3438-dv86pmgwkMBes7Z6vYuT8azUEOm+Xw19@public.gmane.org>]
* Re: [PATCH 5/5] drm/amdgpu: add independent DMA-buf export v3 [not found] ` <20180618082857.GY3438-dv86pmgwkMBes7Z6vYuT8azUEOm+Xw19@public.gmane.org> @ 2018-06-22 13:39 ` Christian König [not found] ` <64382bf8-9539-6fa5-3f95-a3b627e4684d-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 0 siblings, 1 reply; 29+ 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] 29+ messages in thread
[parent not found: <64382bf8-9539-6fa5-3f95-a3b627e4684d-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>]
* Re: [PATCH 5/5] drm/amdgpu: add independent DMA-buf export v3 [not found] ` <64382bf8-9539-6fa5-3f95-a3b627e4684d-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> @ 2018-06-25 7:46 ` Daniel Vetter 0 siblings, 0 replies; 29+ 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] 29+ messages in thread
* Re: [PATCH 1/5] dma_buf: remove device parameter from attach callback [not found] ` <20180601120020.11520-1-christian.koenig-5C7GfCeVMHo@public.gmane.org> ` (3 preceding siblings ...) 2018-06-01 12:00 ` [PATCH 5/5] drm/amdgpu: add independent DMA-buf export v3 Christian König @ 2018-06-01 12:11 ` Christian König [not found] ` <651a24e0-ac58-e5cb-d95f-c9a88bf552dc-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2018-06-06 11:24 ` Christian König 2018-06-18 8:14 ` Daniel Vetter 6 siblings, 1 reply; 29+ 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] 29+ messages in thread
[parent not found: <651a24e0-ac58-e5cb-d95f-c9a88bf552dc-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>]
* Re: [PATCH 1/5] dma_buf: remove device parameter from attach callback [not found] ` <651a24e0-ac58-e5cb-d95f-c9a88bf552dc-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> @ 2018-06-01 14:02 ` Michel Dänzer [not found] ` <df02be8b-530e-b691-35f1-ed657d71a508-otUistvHUpPR7s880joybQ@public.gmane.org> 0 siblings, 1 reply; 29+ 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] 29+ messages in thread
[parent not found: <df02be8b-530e-b691-35f1-ed657d71a508-otUistvHUpPR7s880joybQ@public.gmane.org>]
* Re: [PATCH 1/5] dma_buf: remove device parameter from attach callback [not found] ` <df02be8b-530e-b691-35f1-ed657d71a508-otUistvHUpPR7s880joybQ@public.gmane.org> @ 2018-06-01 15:17 ` Christian König [not found] ` <64e8f2dd-5b09-397f-05ac-67646dfb5394-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 0 siblings, 1 reply; 29+ 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] 29+ messages in thread
[parent not found: <64e8f2dd-5b09-397f-05ac-67646dfb5394-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>]
* Re: [PATCH 1/5] dma_buf: remove device parameter from attach callback [not found] ` <64e8f2dd-5b09-397f-05ac-67646dfb5394-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> @ 2018-06-01 15:30 ` Michel Dänzer 0 siblings, 0 replies; 29+ 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] 29+ messages in thread
* Re: [PATCH 1/5] dma_buf: remove device parameter from attach callback [not found] ` <20180601120020.11520-1-christian.koenig-5C7GfCeVMHo@public.gmane.org> ` (4 preceding siblings ...) 2018-06-01 12:11 ` [PATCH 1/5] dma_buf: remove device parameter from attach callback Christian König @ 2018-06-06 11:24 ` Christian König 2018-06-18 8:14 ` Daniel Vetter 6 siblings, 0 replies; 29+ 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] 29+ messages in thread
* Re: [PATCH 1/5] dma_buf: remove device parameter from attach callback [not found] ` <20180601120020.11520-1-christian.koenig-5C7GfCeVMHo@public.gmane.org> ` (5 preceding siblings ...) 2018-06-06 11:24 ` Christian König @ 2018-06-18 8:14 ` Daniel Vetter 6 siblings, 0 replies; 29+ 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] 29+ messages in thread
end of thread, other threads:[~2018-06-25 7:46 UTC | newest]
Thread overview: 29+ 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
[not found] ` <20180601120020.11520-1-christian.koenig-5C7GfCeVMHo@public.gmane.org>
2018-06-01 12:00 ` [PATCH 2/5] dma-buf: remove kmap_atomic interface Christian König
[not found] ` <20180601120020.11520-2-christian.koenig-5C7GfCeVMHo@public.gmane.org>
2018-06-18 8:18 ` Daniel Vetter
2018-06-19 14:47 ` Christian König
2018-06-19 15:35 ` Daniel Vetter
[not found] ` <CAKMK7uEvhMF92ifA=7xQ=9GR3NofZNExCDTHZTtikmujJTZ89A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-06-20 12:46 ` Christian König
[not found] ` <c0552d8a-1c64-c99b-6ef8-83e253c49d30-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2018-06-20 12:52 ` Daniel Vetter
[not found] ` <CAKMK7uHHZn=H6px-yiXy7tVmmQy6GHrwGtG+B7or1ThsrriFDA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-06-20 14:04 ` Christian König
[not found] ` <5d337ffc-6c4c-dafb-abb2-151d9d4aeaea-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2018-06-20 14:21 ` Christian König
[not found] ` <3994b9d0-85fe-6495-5528-282f7b46a53f-5C7GfCeVMHo@public.gmane.org>
2018-06-21 6:26 ` Daniel Vetter
[not found] ` <CAKMK7uFbvuikxSMgzquzXgcyVVonhWu3HNfrOR2s7RGB7k21ow-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-06-21 6:30 ` Daniel Vetter
[not found] ` <CAKMK7uG7dtj136GAg6E9rVHm4dAg0a-A6EA=911fBi8YpVDbcA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-06-21 10:59 ` Christian König
2018-06-20 6:10 ` Sumit Semwal
[not found] ` <CAO_48GG=whv7R5J1E-xHdZJYFsfYwgnyDq8CzKZktro60m1c+g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
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
[not found] ` <20180601120020.11520-3-christian.koenig-5C7GfCeVMHo@public.gmane.org>
2018-06-18 8:22 ` Daniel Vetter
[not found] ` <20180618082224.GW3438-dv86pmgwkMBes7Z6vYuT8azUEOm+Xw19@public.gmane.org>
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-18 8:27 ` Daniel Vetter
2018-06-01 12:00 ` [PATCH 5/5] drm/amdgpu: add independent DMA-buf export v3 Christian König
[not found] ` <20180601120020.11520-5-christian.koenig-5C7GfCeVMHo@public.gmane.org>
2018-06-18 8:28 ` Daniel Vetter
[not found] ` <20180618082857.GY3438-dv86pmgwkMBes7Z6vYuT8azUEOm+Xw19@public.gmane.org>
2018-06-22 13:39 ` Christian König
[not found] ` <64382bf8-9539-6fa5-3f95-a3b627e4684d-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
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
[not found] ` <651a24e0-ac58-e5cb-d95f-c9a88bf552dc-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2018-06-01 14:02 ` Michel Dänzer
[not found] ` <df02be8b-530e-b691-35f1-ed657d71a508-otUistvHUpPR7s880joybQ@public.gmane.org>
2018-06-01 15:17 ` Christian König
[not found] ` <64e8f2dd-5b09-397f-05ac-67646dfb5394-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2018-06-01 15:30 ` Michel Dänzer
2018-06-06 11:24 ` Christian König
2018-06-18 8:14 ` Daniel Vetter
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox