Intel-GFX Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 01/20] drm: use common drm_gem_dmabuf_release in i915/exynos drivers
       [not found] <1373958731-4132-1-git-send-email-daniel.vetter@ffwll.ch>
@ 2013-07-16  7:11 ` Daniel Vetter
  2013-07-16  7:12 ` [PATCH 13/20] drm/gem: create drm_gem_dumb_destroy Daniel Vetter
  1 sibling, 0 replies; 6+ messages in thread
From: Daniel Vetter @ 2013-07-16  7:11 UTC (permalink / raw)
  To: DRI Development; +Cc: Daniel Vetter, Intel Graphics Development

Note that this is slightly tricky since both drivers store their
native objects in dma_buf->priv. But both also embed the base
drm_gem_object at the first position, so the implicit cast is ok.

To use the release helper we need to export it, too.

Cc: Inki Dae <inki.dae@samsung.com>
Cc: Intel Graphics Development <intel-gfx@lists.freedesktop.org>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
 drivers/gpu/drm/drm_prime.c                |  3 ++-
 drivers/gpu/drm/exynos/exynos_drm_dmabuf.c | 23 +----------------------
 drivers/gpu/drm/i915/i915_gem_dmabuf.c     | 13 +------------
 include/drm/drmP.h                         |  1 +
 4 files changed, 5 insertions(+), 35 deletions(-)

diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
index 85e450e..a35f206 100644
--- a/drivers/gpu/drm/drm_prime.c
+++ b/drivers/gpu/drm/drm_prime.c
@@ -192,7 +192,7 @@ static void drm_gem_unmap_dma_buf(struct dma_buf_attachment *attach,
 	/* nothing to be done here */
 }
 
-static void drm_gem_dmabuf_release(struct dma_buf *dma_buf)
+void drm_gem_dmabuf_release(struct dma_buf *dma_buf)
 {
 	struct drm_gem_object *obj = dma_buf->priv;
 
@@ -202,6 +202,7 @@ static void drm_gem_dmabuf_release(struct dma_buf *dma_buf)
 		drm_gem_object_unreference_unlocked(obj);
 	}
 }
+EXPORT_SYMBOL(drm_gem_dmabuf_release);
 
 static void *drm_gem_dmabuf_vmap(struct dma_buf *dma_buf)
 {
diff --git a/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c b/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c
index a0f997e..3cd56e1 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c
@@ -127,27 +127,6 @@ static void exynos_gem_unmap_dma_buf(struct dma_buf_attachment *attach,
 	/* Nothing to do. */
 }
 
-static void exynos_dmabuf_release(struct dma_buf *dmabuf)
-{
-	struct exynos_drm_gem_obj *exynos_gem_obj = dmabuf->priv;
-
-	/*
-	 * exynos_dmabuf_release() call means that file object's
-	 * f_count is 0 and it calls drm_gem_object_handle_unreference()
-	 * to drop the references that these values had been increased
-	 * at drm_prime_handle_to_fd()
-	 */
-	if (exynos_gem_obj->base.export_dma_buf == dmabuf) {
-		exynos_gem_obj->base.export_dma_buf = NULL;
-
-		/*
-		 * drop this gem object refcount to release allocated buffer
-		 * and resources.
-		 */
-		drm_gem_object_unreference_unlocked(&exynos_gem_obj->base);
-	}
-}
-
 static void *exynos_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
 						unsigned long page_num)
 {
@@ -193,7 +172,7 @@ static struct dma_buf_ops exynos_dmabuf_ops = {
 	.kunmap			= exynos_gem_dmabuf_kunmap,
 	.kunmap_atomic		= exynos_gem_dmabuf_kunmap_atomic,
 	.mmap			= exynos_gem_dmabuf_mmap,
-	.release		= exynos_dmabuf_release,
+	.release		= drm_gem_dmabuf_release,
 };
 
 struct dma_buf *exynos_dmabuf_prime_export(struct drm_device *drm_dev,
diff --git a/drivers/gpu/drm/i915/i915_gem_dmabuf.c b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
index dc53a52..2e82286 100644
--- a/drivers/gpu/drm/i915/i915_gem_dmabuf.c
+++ b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
@@ -90,17 +90,6 @@ static void i915_gem_unmap_dma_buf(struct dma_buf_attachment *attachment,
 	kfree(sg);
 }
 
-static void i915_gem_dmabuf_release(struct dma_buf *dma_buf)
-{
-	struct drm_i915_gem_object *obj = dma_buf->priv;
-
-	if (obj->base.export_dma_buf == dma_buf) {
-		/* drop the reference on the export fd holds */
-		obj->base.export_dma_buf = NULL;
-		drm_gem_object_unreference_unlocked(&obj->base);
-	}
-}
-
 static void *i915_gem_dmabuf_vmap(struct dma_buf *dma_buf)
 {
 	struct drm_i915_gem_object *obj = dma_buf->priv;
@@ -211,7 +200,7 @@ static int i915_gem_begin_cpu_access(struct dma_buf *dma_buf, size_t start, size
 static const struct dma_buf_ops i915_dmabuf_ops =  {
 	.map_dma_buf = i915_gem_map_dma_buf,
 	.unmap_dma_buf = i915_gem_unmap_dma_buf,
-	.release = i915_gem_dmabuf_release,
+	.release = drm_gem_dmabuf_release,
 	.kmap = i915_gem_dmabuf_kmap,
 	.kmap_atomic = i915_gem_dmabuf_kmap_atomic,
 	.kunmap = i915_gem_dmabuf_kunmap,
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
index 12083dc..cd57646 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -1550,6 +1550,7 @@ extern struct drm_gem_object *drm_gem_prime_import(struct drm_device *dev,
 		struct dma_buf *dma_buf);
 extern int drm_gem_prime_fd_to_handle(struct drm_device *dev,
 		struct drm_file *file_priv, int prime_fd, uint32_t *handle);
+extern void drm_gem_dmabuf_release(struct dma_buf *dma_buf);
 
 extern int drm_prime_handle_to_fd_ioctl(struct drm_device *dev, void *data,
 					struct drm_file *file_priv);
-- 
1.8.3.2

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

* [PATCH 13/20] drm/gem: create drm_gem_dumb_destroy
       [not found] <1373958731-4132-1-git-send-email-daniel.vetter@ffwll.ch>
  2013-07-16  7:11 ` [PATCH 01/20] drm: use common drm_gem_dmabuf_release in i915/exynos drivers Daniel Vetter
@ 2013-07-16  7:12 ` Daniel Vetter
  2013-07-22 22:52   ` Rob Clark
                     ` (3 more replies)
  1 sibling, 4 replies; 6+ messages in thread
From: Daniel Vetter @ 2013-07-16  7:12 UTC (permalink / raw)
  To: DRI Development
  Cc: Ben Skeggs, Daniel Vetter, Intel Graphics Development, Inki Dae,
	Rob Clark, Laurent Pinchart, Alex Deucher

All the gem based kms drivers really want the same function to
destroy a dumb framebuffer backing storage object.

So give it to them and roll it out in all drivers.

This still leaves the option open for kms drivers which don't use GEM
for backing storage, but it does decently simplify matters for gem
drivers.

Cc: Inki Dae <inki.dae@samsung.com>
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Intel Graphics Development <intel-gfx@lists.freedesktop.org>
Cc: Ben Skeggs <skeggsb@gmail.com>
Cc: Rob Clark <robdclark@gmail.com>
Cc: Alex Deucher <alexdeucher@gmail.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
 drivers/gpu/drm/ast/ast_drv.c             |  2 +-
 drivers/gpu/drm/ast/ast_drv.h             |  3 ---
 drivers/gpu/drm/ast/ast_main.c            |  7 -------
 drivers/gpu/drm/cirrus/cirrus_drv.c       |  2 +-
 drivers/gpu/drm/cirrus/cirrus_drv.h       |  3 ---
 drivers/gpu/drm/cirrus/cirrus_main.c      |  7 -------
 drivers/gpu/drm/drm_gem.c                 | 14 ++++++++++++++
 drivers/gpu/drm/drm_gem_cma_helper.c      | 10 ----------
 drivers/gpu/drm/exynos/exynos_drm_drv.c   |  2 +-
 drivers/gpu/drm/exynos/exynos_drm_gem.c   | 20 --------------------
 drivers/gpu/drm/exynos/exynos_drm_gem.h   |  9 ---------
 drivers/gpu/drm/gma500/gem.c              | 17 -----------------
 drivers/gpu/drm/gma500/psb_drv.c          |  2 +-
 drivers/gpu/drm/gma500/psb_drv.h          |  2 --
 drivers/gpu/drm/i915/i915_drv.c           |  2 +-
 drivers/gpu/drm/i915/i915_drv.h           |  2 --
 drivers/gpu/drm/i915/i915_gem.c           |  7 -------
 drivers/gpu/drm/mgag200/mgag200_drv.c     |  2 +-
 drivers/gpu/drm/mgag200/mgag200_drv.h     |  3 ---
 drivers/gpu/drm/mgag200/mgag200_main.c    |  7 -------
 drivers/gpu/drm/nouveau/nouveau_display.c |  7 -------
 drivers/gpu/drm/nouveau/nouveau_display.h |  2 --
 drivers/gpu/drm/nouveau/nouveau_drm.c     |  2 +-
 drivers/gpu/drm/omapdrm/omap_drv.c        |  2 +-
 drivers/gpu/drm/omapdrm/omap_drv.h        |  2 --
 drivers/gpu/drm/omapdrm/omap_gem.c        | 15 ---------------
 drivers/gpu/drm/qxl/qxl_drv.c             |  2 +-
 drivers/gpu/drm/qxl/qxl_drv.h             |  3 ---
 drivers/gpu/drm/qxl/qxl_dumb.c            |  7 -------
 drivers/gpu/drm/radeon/radeon.h           |  3 ---
 drivers/gpu/drm/radeon/radeon_drv.c       |  5 +----
 drivers/gpu/drm/radeon/radeon_gem.c       |  7 -------
 drivers/gpu/drm/rcar-du/rcar_du_drv.c     |  2 +-
 drivers/gpu/drm/shmobile/shmob_drm_drv.c  |  2 +-
 drivers/gpu/drm/tilcdc/tilcdc_drv.c       |  2 +-
 drivers/gpu/drm/udl/udl_drv.c             |  2 +-
 drivers/gpu/drm/udl/udl_drv.h             |  2 --
 drivers/gpu/drm/udl/udl_gem.c             |  6 ------
 drivers/gpu/host1x/drm/drm.c              |  2 +-
 drivers/gpu/host1x/drm/gem.c              |  6 ------
 drivers/gpu/host1x/drm/gem.h              |  2 --
 drivers/staging/imx-drm/imx-drm-core.c    |  2 +-
 include/drm/drmP.h                        |  3 +++
 include/drm/drm_gem_cma_helper.h          |  8 --------
 44 files changed, 33 insertions(+), 186 deletions(-)

diff --git a/drivers/gpu/drm/ast/ast_drv.c b/drivers/gpu/drm/ast/ast_drv.c
index df0d0a0..a144fb0 100644
--- a/drivers/gpu/drm/ast/ast_drv.c
+++ b/drivers/gpu/drm/ast/ast_drv.c
@@ -216,7 +216,7 @@ static struct drm_driver driver = {
 	.gem_free_object = ast_gem_free_object,
 	.dumb_create = ast_dumb_create,
 	.dumb_map_offset = ast_dumb_mmap_offset,
-	.dumb_destroy = ast_dumb_destroy,
+	.dumb_destroy = drm_gem_dumb_destroy,
 
 };
 
diff --git a/drivers/gpu/drm/ast/ast_drv.h b/drivers/gpu/drm/ast/ast_drv.h
index 622d4ae..796dbb2 100644
--- a/drivers/gpu/drm/ast/ast_drv.h
+++ b/drivers/gpu/drm/ast/ast_drv.h
@@ -322,9 +322,6 @@ ast_bo(struct ttm_buffer_object *bo)
 extern int ast_dumb_create(struct drm_file *file,
 			   struct drm_device *dev,
 			   struct drm_mode_create_dumb *args);
-extern int ast_dumb_destroy(struct drm_file *file,
-			    struct drm_device *dev,
-			    uint32_t handle);
 
 extern int ast_gem_init_object(struct drm_gem_object *obj);
 extern void ast_gem_free_object(struct drm_gem_object *obj);
diff --git a/drivers/gpu/drm/ast/ast_main.c b/drivers/gpu/drm/ast/ast_main.c
index f60fd7b..0ef4228 100644
--- a/drivers/gpu/drm/ast/ast_main.c
+++ b/drivers/gpu/drm/ast/ast_main.c
@@ -449,13 +449,6 @@ int ast_dumb_create(struct drm_file *file,
 	return 0;
 }
 
-int ast_dumb_destroy(struct drm_file *file,
-		     struct drm_device *dev,
-		     uint32_t handle)
-{
-	return drm_gem_handle_delete(file, handle);
-}
-
 int ast_gem_init_object(struct drm_gem_object *obj)
 {
 	BUG();
diff --git a/drivers/gpu/drm/cirrus/cirrus_drv.c b/drivers/gpu/drm/cirrus/cirrus_drv.c
index 8ecb601..d35d99c 100644
--- a/drivers/gpu/drm/cirrus/cirrus_drv.c
+++ b/drivers/gpu/drm/cirrus/cirrus_drv.c
@@ -102,7 +102,7 @@ static struct drm_driver driver = {
 	.gem_free_object = cirrus_gem_free_object,
 	.dumb_create = cirrus_dumb_create,
 	.dumb_map_offset = cirrus_dumb_mmap_offset,
-	.dumb_destroy = cirrus_dumb_destroy,
+	.dumb_destroy = drm_gem_dumb_destroy,
 };
 
 static struct pci_driver cirrus_pci_driver = {
diff --git a/drivers/gpu/drm/cirrus/cirrus_drv.h b/drivers/gpu/drm/cirrus/cirrus_drv.h
index bae5560..9b0bb91 100644
--- a/drivers/gpu/drm/cirrus/cirrus_drv.h
+++ b/drivers/gpu/drm/cirrus/cirrus_drv.h
@@ -203,9 +203,6 @@ int cirrus_gem_create(struct drm_device *dev,
 int cirrus_dumb_create(struct drm_file *file,
 		    struct drm_device *dev,
 		       struct drm_mode_create_dumb *args);
-int cirrus_dumb_destroy(struct drm_file *file,
-		     struct drm_device *dev,
-			uint32_t handle);
 
 int cirrus_framebuffer_init(struct drm_device *dev,
 			   struct cirrus_framebuffer *gfb,
diff --git a/drivers/gpu/drm/cirrus/cirrus_main.c b/drivers/gpu/drm/cirrus/cirrus_main.c
index 35cbae8..c1ed9e1 100644
--- a/drivers/gpu/drm/cirrus/cirrus_main.c
+++ b/drivers/gpu/drm/cirrus/cirrus_main.c
@@ -255,13 +255,6 @@ int cirrus_dumb_create(struct drm_file *file,
 	return 0;
 }
 
-int cirrus_dumb_destroy(struct drm_file *file,
-		     struct drm_device *dev,
-		     uint32_t handle)
-{
-	return drm_gem_handle_delete(file, handle);
-}
-
 int cirrus_gem_init_object(struct drm_gem_object *obj)
 {
 	BUG();
diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
index 3b5305c..1609a3d 100644
--- a/drivers/gpu/drm/drm_gem.c
+++ b/drivers/gpu/drm/drm_gem.c
@@ -303,6 +303,20 @@ drm_gem_handle_delete(struct drm_file *filp, u32 handle)
 EXPORT_SYMBOL(drm_gem_handle_delete);
 
 /**
+ * drm_gem_dumb_destroy - dumb fb callback helper for gem based drivers
+ * 
+ * This implements the ->dumb_destroy kms driver callback for drivers which use
+ * gem to manage their backing storage.
+ */
+int drm_gem_dumb_destroy(struct drm_file *file,
+			 struct drm_device *dev,
+			 uint32_t handle)
+{
+	return drm_gem_handle_delete(file, handle);
+}
+EXPORT_SYMBOL(drm_gem_dumb_destroy);
+
+/**
  * Create a handle for this object. This adds a handle reference
  * to the object, which includes a regular reference count. Callers
  * will likely want to dereference the object afterwards.
diff --git a/drivers/gpu/drm/drm_gem_cma_helper.c b/drivers/gpu/drm/drm_gem_cma_helper.c
index ece72a8..2e4840d 100644
--- a/drivers/gpu/drm/drm_gem_cma_helper.c
+++ b/drivers/gpu/drm/drm_gem_cma_helper.c
@@ -286,16 +286,6 @@ int drm_gem_cma_mmap(struct file *filp, struct vm_area_struct *vma)
 }
 EXPORT_SYMBOL_GPL(drm_gem_cma_mmap);
 
-/*
- * drm_gem_cma_dumb_destroy - (struct drm_driver)->dumb_destroy callback function
- */
-int drm_gem_cma_dumb_destroy(struct drm_file *file_priv,
-		struct drm_device *drm, unsigned int handle)
-{
-	return drm_gem_handle_delete(file_priv, handle);
-}
-EXPORT_SYMBOL_GPL(drm_gem_cma_dumb_destroy);
-
 #ifdef CONFIG_DEBUG_FS
 void drm_gem_cma_describe(struct drm_gem_cma_object *cma_obj, struct seq_file *m)
 {
diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c
index ca2729a..21fc28a 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
@@ -271,7 +271,7 @@ static struct drm_driver exynos_drm_driver = {
 	.gem_vm_ops		= &exynos_drm_gem_vm_ops,
 	.dumb_create		= exynos_drm_gem_dumb_create,
 	.dumb_map_offset	= exynos_drm_gem_dumb_map_offset,
-	.dumb_destroy		= exynos_drm_gem_dumb_destroy,
+	.dumb_destroy		= drm_gem_dumb_destroy,
 	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
 	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
 	.gem_prime_export	= exynos_dmabuf_prime_export,
diff --git a/drivers/gpu/drm/exynos/exynos_drm_gem.c b/drivers/gpu/drm/exynos/exynos_drm_gem.c
index 16963ca..2ecd945 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_gem.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_gem.c
@@ -719,26 +719,6 @@ unlock:
 	return ret;
 }
 
-int exynos_drm_gem_dumb_destroy(struct drm_file *file_priv,
-				struct drm_device *dev,
-				unsigned int handle)
-{
-	int ret;
-
-	/*
-	 * obj->refcount and obj->handle_count are decreased and
-	 * if both them are 0 then exynos_drm_gem_free_object()
-	 * would be called by callback to release resources.
-	 */
-	ret = drm_gem_handle_delete(file_priv, handle);
-	if (ret < 0) {
-		DRM_ERROR("failed to delete drm_gem_handle.\n");
-		return ret;
-	}
-
-	return 0;
-}
-
 int exynos_drm_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
 {
 	struct drm_gem_object *obj = vma->vm_private_data;
diff --git a/drivers/gpu/drm/exynos/exynos_drm_gem.h b/drivers/gpu/drm/exynos/exynos_drm_gem.h
index 468766b..09555af 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_gem.h
+++ b/drivers/gpu/drm/exynos/exynos_drm_gem.h
@@ -151,15 +151,6 @@ int exynos_drm_gem_dumb_map_offset(struct drm_file *file_priv,
 				   struct drm_device *dev, uint32_t handle,
 				   uint64_t *offset);
 
-/*
- * destroy memory region allocated.
- *	- a gem handle and physical memory region pointed by a gem object
- *	would be released by drm_gem_handle_delete().
- */
-int exynos_drm_gem_dumb_destroy(struct drm_file *file_priv,
-				struct drm_device *dev,
-				unsigned int handle);
-
 /* page fault handler and mmap fault address(virtual) to physical memory. */
 int exynos_drm_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf);
 
diff --git a/drivers/gpu/drm/gma500/gem.c b/drivers/gpu/drm/gma500/gem.c
index eefd6cc..5ac9741 100644
--- a/drivers/gpu/drm/gma500/gem.c
+++ b/drivers/gpu/drm/gma500/gem.c
@@ -165,23 +165,6 @@ int psb_gem_dumb_create(struct drm_file *file, struct drm_device *dev,
 }
 
 /**
- *	psb_gem_dumb_destroy	-	destroy a dumb buffer
- *	@file: client file
- *	@dev: our DRM device
- *	@handle: the object handle
- *
- *	Destroy a handle that was created via psb_gem_dumb_create, at least
- *	we hope it was created that way. i915 seems to assume the caller
- *	does the checking but that might be worth review ! FIXME
- */
-int psb_gem_dumb_destroy(struct drm_file *file, struct drm_device *dev,
-			uint32_t handle)
-{
-	/* No special work needed, drop the reference and see what falls out */
-	return drm_gem_handle_delete(file, handle);
-}
-
-/**
  *	psb_gem_fault		-	pagefault handler for GEM objects
  *	@vma: the VMA of the GEM object
  *	@vmf: fault detail
diff --git a/drivers/gpu/drm/gma500/psb_drv.c b/drivers/gpu/drm/gma500/psb_drv.c
index bddea58..ed06d5c 100644
--- a/drivers/gpu/drm/gma500/psb_drv.c
+++ b/drivers/gpu/drm/gma500/psb_drv.c
@@ -652,7 +652,7 @@ static struct drm_driver driver = {
 	.gem_vm_ops = &psb_gem_vm_ops,
 	.dumb_create = psb_gem_dumb_create,
 	.dumb_map_offset = psb_gem_dumb_map_gtt,
-	.dumb_destroy = psb_gem_dumb_destroy,
+	.dumb_destroy = drm_gem_dumb_destroy,
 	.fops = &psb_gem_fops,
 	.name = DRIVER_NAME,
 	.desc = DRIVER_DESC,
diff --git a/drivers/gpu/drm/gma500/psb_drv.h b/drivers/gpu/drm/gma500/psb_drv.h
index 6053b8a..984cacf 100644
--- a/drivers/gpu/drm/gma500/psb_drv.h
+++ b/drivers/gpu/drm/gma500/psb_drv.h
@@ -838,8 +838,6 @@ extern int psb_gem_get_aperture(struct drm_device *dev, void *data,
 			struct drm_file *file);
 extern int psb_gem_dumb_create(struct drm_file *file, struct drm_device *dev,
 			struct drm_mode_create_dumb *args);
-extern int psb_gem_dumb_destroy(struct drm_file *file, struct drm_device *dev,
-			uint32_t handle);
 extern int psb_gem_dumb_map_gtt(struct drm_file *file, struct drm_device *dev,
 			uint32_t handle, uint64_t *offset);
 extern int psb_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf);
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index b07362f..cca12db 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -1163,7 +1163,7 @@ static struct drm_driver driver = {
 
 	.dumb_create = i915_gem_dumb_create,
 	.dumb_map_offset = i915_gem_mmap_gtt,
-	.dumb_destroy = i915_gem_dumb_destroy,
+	.dumb_destroy = drm_gem_dumb_destroy,
 	.ioctls = i915_ioctls,
 	.fops = &i915_driver_fops,
 	.name = DRIVER_NAME,
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index cef35d3..5cb3e4d 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1732,8 +1732,6 @@ int i915_gem_dumb_create(struct drm_file *file_priv,
 			 struct drm_mode_create_dumb *args);
 int i915_gem_mmap_gtt(struct drm_file *file_priv, struct drm_device *dev,
 		      uint32_t handle, uint64_t *offset);
-int i915_gem_dumb_destroy(struct drm_file *file_priv, struct drm_device *dev,
-			  uint32_t handle);
 /**
  * Returns true if seq1 is later than seq2.
  */
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 46bf7e3..10b8c43 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -246,13 +246,6 @@ i915_gem_dumb_create(struct drm_file *file,
 			       args->size, &args->handle);
 }
 
-int i915_gem_dumb_destroy(struct drm_file *file,
-			  struct drm_device *dev,
-			  uint32_t handle)
-{
-	return drm_gem_handle_delete(file, handle);
-}
-
 /**
  * Creates a new mm object and returns a handle to it.
  */
diff --git a/drivers/gpu/drm/mgag200/mgag200_drv.c b/drivers/gpu/drm/mgag200/mgag200_drv.c
index 122b571..bd91964 100644
--- a/drivers/gpu/drm/mgag200/mgag200_drv.c
+++ b/drivers/gpu/drm/mgag200/mgag200_drv.c
@@ -104,7 +104,7 @@ static struct drm_driver driver = {
 	.gem_free_object = mgag200_gem_free_object,
 	.dumb_create = mgag200_dumb_create,
 	.dumb_map_offset = mgag200_dumb_mmap_offset,
-	.dumb_destroy = mgag200_dumb_destroy,
+	.dumb_destroy = drm_gem_dumb_destroy,
 };
 
 static struct pci_driver mgag200_pci_driver = {
diff --git a/drivers/gpu/drm/mgag200/mgag200_drv.h b/drivers/gpu/drm/mgag200/mgag200_drv.h
index 12e2499..baaae19 100644
--- a/drivers/gpu/drm/mgag200/mgag200_drv.h
+++ b/drivers/gpu/drm/mgag200/mgag200_drv.h
@@ -264,9 +264,6 @@ int mgag200_gem_init_object(struct drm_gem_object *obj);
 int mgag200_dumb_create(struct drm_file *file,
 			struct drm_device *dev,
 			struct drm_mode_create_dumb *args);
-int mgag200_dumb_destroy(struct drm_file *file,
-			 struct drm_device *dev,
-			 uint32_t handle);
 void mgag200_gem_free_object(struct drm_gem_object *obj);
 int
 mgag200_dumb_mmap_offset(struct drm_file *file,
diff --git a/drivers/gpu/drm/mgag200/mgag200_main.c b/drivers/gpu/drm/mgag200/mgag200_main.c
index 9fa5685..8d46c22 100644
--- a/drivers/gpu/drm/mgag200/mgag200_main.c
+++ b/drivers/gpu/drm/mgag200/mgag200_main.c
@@ -310,13 +310,6 @@ int mgag200_dumb_create(struct drm_file *file,
 	return 0;
 }
 
-int mgag200_dumb_destroy(struct drm_file *file,
-		     struct drm_device *dev,
-		     uint32_t handle)
-{
-	return drm_gem_handle_delete(file, handle);
-}
-
 int mgag200_gem_init_object(struct drm_gem_object *obj)
 {
 	BUG();
diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c
index 708b2d1..e6dfaaa 100644
--- a/drivers/gpu/drm/nouveau/nouveau_display.c
+++ b/drivers/gpu/drm/nouveau/nouveau_display.c
@@ -681,13 +681,6 @@ nouveau_display_dumb_create(struct drm_file *file_priv, struct drm_device *dev,
 }
 
 int
-nouveau_display_dumb_destroy(struct drm_file *file_priv, struct drm_device *dev,
-			     uint32_t handle)
-{
-	return drm_gem_handle_delete(file_priv, handle);
-}
-
-int
 nouveau_display_dumb_map_offset(struct drm_file *file_priv,
 				struct drm_device *dev,
 				uint32_t handle, uint64_t *poffset)
diff --git a/drivers/gpu/drm/nouveau/nouveau_display.h b/drivers/gpu/drm/nouveau/nouveau_display.h
index 1ea3e47..185e741 100644
--- a/drivers/gpu/drm/nouveau/nouveau_display.h
+++ b/drivers/gpu/drm/nouveau/nouveau_display.h
@@ -68,8 +68,6 @@ int  nouveau_display_dumb_create(struct drm_file *, struct drm_device *,
 				 struct drm_mode_create_dumb *args);
 int  nouveau_display_dumb_map_offset(struct drm_file *, struct drm_device *,
 				     u32 handle, u64 *offset);
-int  nouveau_display_dumb_destroy(struct drm_file *, struct drm_device *,
-				  u32 handle);
 
 void nouveau_hdmi_mode_set(struct drm_encoder *, struct drm_display_mode *);
 
diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c
index 218a4b5..c683bae 100644
--- a/drivers/gpu/drm/nouveau/nouveau_drm.c
+++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
@@ -715,7 +715,7 @@ driver = {
 
 	.dumb_create = nouveau_display_dumb_create,
 	.dumb_map_offset = nouveau_display_dumb_map_offset,
-	.dumb_destroy = nouveau_display_dumb_destroy,
+	.dumb_destroy = drm_gem_dumb_destroy,
 
 	.name = DRIVER_NAME,
 	.desc = DRIVER_DESC,
diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c
index 826586f..75886a3 100644
--- a/drivers/gpu/drm/omapdrm/omap_drv.c
+++ b/drivers/gpu/drm/omapdrm/omap_drv.c
@@ -618,7 +618,7 @@ static struct drm_driver omap_drm_driver = {
 		.gem_vm_ops = &omap_gem_vm_ops,
 		.dumb_create = omap_gem_dumb_create,
 		.dumb_map_offset = omap_gem_dumb_map_offset,
-		.dumb_destroy = omap_gem_dumb_destroy,
+		.dumb_destroy = drm_gem_dumb_destroy,
 		.ioctls = ioctls,
 		.num_ioctls = DRM_OMAP_NUM_IOCTLS,
 		.fops = &omapdriver_fops,
diff --git a/drivers/gpu/drm/omapdrm/omap_drv.h b/drivers/gpu/drm/omapdrm/omap_drv.h
index 215a20d..fd13601 100644
--- a/drivers/gpu/drm/omapdrm/omap_drv.h
+++ b/drivers/gpu/drm/omapdrm/omap_drv.h
@@ -224,8 +224,6 @@ int omap_gem_init_object(struct drm_gem_object *obj);
 void *omap_gem_vaddr(struct drm_gem_object *obj);
 int omap_gem_dumb_map_offset(struct drm_file *file, struct drm_device *dev,
 		uint32_t handle, uint64_t *offset);
-int omap_gem_dumb_destroy(struct drm_file *file, struct drm_device *dev,
-		uint32_t handle);
 int omap_gem_dumb_create(struct drm_file *file, struct drm_device *dev,
 		struct drm_mode_create_dumb *args);
 int omap_gem_mmap(struct file *filp, struct vm_area_struct *vma);
diff --git a/drivers/gpu/drm/omapdrm/omap_gem.c b/drivers/gpu/drm/omapdrm/omap_gem.c
index ebbdf41..9c30aaa 100644
--- a/drivers/gpu/drm/omapdrm/omap_gem.c
+++ b/drivers/gpu/drm/omapdrm/omap_gem.c
@@ -629,21 +629,6 @@ int omap_gem_dumb_create(struct drm_file *file, struct drm_device *dev,
 }
 
 /**
- * omap_gem_dumb_destroy	-	destroy a dumb buffer
- * @file: client file
- * @dev: our DRM device
- * @handle: the object handle
- *
- * Destroy a handle that was created via omap_gem_dumb_create.
- */
-int omap_gem_dumb_destroy(struct drm_file *file, struct drm_device *dev,
-		uint32_t handle)
-{
-	/* No special work needed, drop the reference and see what falls out */
-	return drm_gem_handle_delete(file, handle);
-}
-
-/**
  * omap_gem_dumb_map	-	buffer mapping for dumb interface
  * @file: our drm client file
  * @dev: drm device
diff --git a/drivers/gpu/drm/qxl/qxl_drv.c b/drivers/gpu/drm/qxl/qxl_drv.c
index df0b577..48f2dfd 100644
--- a/drivers/gpu/drm/qxl/qxl_drv.c
+++ b/drivers/gpu/drm/qxl/qxl_drv.c
@@ -221,7 +221,7 @@ static struct drm_driver qxl_driver = {
 
 	.dumb_create = qxl_mode_dumb_create,
 	.dumb_map_offset = qxl_mode_dumb_mmap,
-	.dumb_destroy = qxl_mode_dumb_destroy,
+	.dumb_destroy = drm_gem_dumb_destroy,
 #if defined(CONFIG_DEBUG_FS)
 	.debugfs_init = qxl_debugfs_init,
 	.debugfs_cleanup = qxl_debugfs_takedown,
diff --git a/drivers/gpu/drm/qxl/qxl_drv.h b/drivers/gpu/drm/qxl/qxl_drv.h
index aacb791..57cb7a8 100644
--- a/drivers/gpu/drm/qxl/qxl_drv.h
+++ b/drivers/gpu/drm/qxl/qxl_drv.h
@@ -418,9 +418,6 @@ int qxl_bo_kmap(struct qxl_bo *bo, void **ptr);
 int qxl_mode_dumb_create(struct drm_file *file_priv,
 			 struct drm_device *dev,
 			 struct drm_mode_create_dumb *args);
-int qxl_mode_dumb_destroy(struct drm_file *file_priv,
-			  struct drm_device *dev,
-			  uint32_t handle);
 int qxl_mode_dumb_mmap(struct drm_file *filp,
 		       struct drm_device *dev,
 		       uint32_t handle, uint64_t *offset_p);
diff --git a/drivers/gpu/drm/qxl/qxl_dumb.c b/drivers/gpu/drm/qxl/qxl_dumb.c
index 847c4ee..d34bb41 100644
--- a/drivers/gpu/drm/qxl/qxl_dumb.c
+++ b/drivers/gpu/drm/qxl/qxl_dumb.c
@@ -68,13 +68,6 @@ int qxl_mode_dumb_create(struct drm_file *file_priv,
 	return 0;
 }
 
-int qxl_mode_dumb_destroy(struct drm_file *file_priv,
-			     struct drm_device *dev,
-			     uint32_t handle)
-{
-	return drm_gem_handle_delete(file_priv, handle);
-}
-
 int qxl_mode_dumb_mmap(struct drm_file *file_priv,
 		       struct drm_device *dev,
 		       uint32_t handle, uint64_t *offset_p)
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index 9b7025d..39e5be8 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -490,9 +490,6 @@ int radeon_mode_dumb_create(struct drm_file *file_priv,
 int radeon_mode_dumb_mmap(struct drm_file *filp,
 			  struct drm_device *dev,
 			  uint32_t handle, uint64_t *offset_p);
-int radeon_mode_dumb_destroy(struct drm_file *file_priv,
-			     struct drm_device *dev,
-			     uint32_t handle);
 
 /*
  * Semaphores.
diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
index e5419b3..f01a218 100644
--- a/drivers/gpu/drm/radeon/radeon_drv.c
+++ b/drivers/gpu/drm/radeon/radeon_drv.c
@@ -120,9 +120,6 @@ int radeon_mode_dumb_mmap(struct drm_file *filp,
 int radeon_mode_dumb_create(struct drm_file *file_priv,
 			    struct drm_device *dev,
 			    struct drm_mode_create_dumb *args);
-int radeon_mode_dumb_destroy(struct drm_file *file_priv,
-			     struct drm_device *dev,
-			     uint32_t handle);
 struct sg_table *radeon_gem_prime_get_sg_table(struct drm_gem_object *obj);
 struct drm_gem_object *radeon_gem_prime_import_sg_table(struct drm_device *dev,
 							size_t size,
@@ -420,7 +417,7 @@ static struct drm_driver kms_driver = {
 	.dma_ioctl = radeon_dma_ioctl_kms,
 	.dumb_create = radeon_mode_dumb_create,
 	.dumb_map_offset = radeon_mode_dumb_mmap,
-	.dumb_destroy = radeon_mode_dumb_destroy,
+	.dumb_destroy = drm_gem_dumb_destroy,
 	.fops = &radeon_driver_kms_fops,
 
 	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
diff --git a/drivers/gpu/drm/radeon/radeon_gem.c b/drivers/gpu/drm/radeon/radeon_gem.c
index aa79603..dce99c8 100644
--- a/drivers/gpu/drm/radeon/radeon_gem.c
+++ b/drivers/gpu/drm/radeon/radeon_gem.c
@@ -570,13 +570,6 @@ int radeon_mode_dumb_create(struct drm_file *file_priv,
 	return 0;
 }
 
-int radeon_mode_dumb_destroy(struct drm_file *file_priv,
-			     struct drm_device *dev,
-			     uint32_t handle)
-{
-	return drm_gem_handle_delete(file_priv, handle);
-}
-
 #if defined(CONFIG_DEBUG_FS)
 static int radeon_debugfs_gem_info(struct seq_file *m, void *data)
 {
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_drv.c b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
index ff82877..3ebd419 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_drv.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
@@ -253,7 +253,7 @@ static struct drm_driver rcar_du_driver = {
 	.gem_prime_export	= drm_gem_cma_dmabuf_export,
 	.dumb_create		= rcar_du_dumb_create,
 	.dumb_map_offset	= drm_gem_cma_dumb_map_offset,
-	.dumb_destroy		= drm_gem_cma_dumb_destroy,
+	.dumb_destroy		= drm_gem_dumb_destroy,
 	.fops			= &rcar_du_fops,
 	.name			= "rcar-du",
 	.desc			= "Renesas R-Car Display Unit",
diff --git a/drivers/gpu/drm/shmobile/shmob_drm_drv.c b/drivers/gpu/drm/shmobile/shmob_drm_drv.c
index edc1018..7e1843f 100644
--- a/drivers/gpu/drm/shmobile/shmob_drm_drv.c
+++ b/drivers/gpu/drm/shmobile/shmob_drm_drv.c
@@ -280,7 +280,7 @@ static struct drm_driver shmob_drm_driver = {
 	.gem_prime_export	= drm_gem_cma_dmabuf_export,
 	.dumb_create		= drm_gem_cma_dumb_create,
 	.dumb_map_offset	= drm_gem_cma_dumb_map_offset,
-	.dumb_destroy		= drm_gem_cma_dumb_destroy,
+	.dumb_destroy		= drm_gem_dumb_destroy,
 	.fops			= &shmob_drm_fops,
 	.name			= "shmob-drm",
 	.desc			= "Renesas SH Mobile DRM",
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
index 40b71da..14801c2 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
@@ -519,7 +519,7 @@ static struct drm_driver tilcdc_driver = {
 	.gem_vm_ops         = &drm_gem_cma_vm_ops,
 	.dumb_create        = drm_gem_cma_dumb_create,
 	.dumb_map_offset    = drm_gem_cma_dumb_map_offset,
-	.dumb_destroy       = drm_gem_cma_dumb_destroy,
+	.dumb_destroy       = drm_gem_dumb_destroy,
 #ifdef CONFIG_DEBUG_FS
 	.debugfs_init       = tilcdc_debugfs_init,
 	.debugfs_cleanup    = tilcdc_debugfs_cleanup,
diff --git a/drivers/gpu/drm/udl/udl_drv.c b/drivers/gpu/drm/udl/udl_drv.c
index c0770db..bb0af58 100644
--- a/drivers/gpu/drm/udl/udl_drv.c
+++ b/drivers/gpu/drm/udl/udl_drv.c
@@ -84,7 +84,7 @@ static struct drm_driver driver = {
 
 	.dumb_create = udl_dumb_create,
 	.dumb_map_offset = udl_gem_mmap,
-	.dumb_destroy = udl_dumb_destroy,
+	.dumb_destroy = drm_gem_dumb_destroy,
 	.fops = &udl_driver_fops,
 
 	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
diff --git a/drivers/gpu/drm/udl/udl_drv.h b/drivers/gpu/drm/udl/udl_drv.h
index cc6d90f..56aec94 100644
--- a/drivers/gpu/drm/udl/udl_drv.h
+++ b/drivers/gpu/drm/udl/udl_drv.h
@@ -114,8 +114,6 @@ int udl_dumb_create(struct drm_file *file_priv,
 		    struct drm_mode_create_dumb *args);
 int udl_gem_mmap(struct drm_file *file_priv, struct drm_device *dev,
 		 uint32_t handle, uint64_t *offset);
-int udl_dumb_destroy(struct drm_file *file_priv, struct drm_device *dev,
-		     uint32_t handle);
 
 int udl_gem_init_object(struct drm_gem_object *obj);
 void udl_gem_free_object(struct drm_gem_object *gem_obj);
diff --git a/drivers/gpu/drm/udl/udl_gem.c b/drivers/gpu/drm/udl/udl_gem.c
index ef034fa..c82c84a 100644
--- a/drivers/gpu/drm/udl/udl_gem.c
+++ b/drivers/gpu/drm/udl/udl_gem.c
@@ -66,12 +66,6 @@ int udl_dumb_create(struct drm_file *file,
 			      args->size, &args->handle);
 }
 
-int udl_dumb_destroy(struct drm_file *file, struct drm_device *dev,
-		     uint32_t handle)
-{
-	return drm_gem_handle_delete(file, handle);
-}
-
 int udl_drm_gem_mmap(struct file *filp, struct vm_area_struct *vma)
 {
 	int ret;
diff --git a/drivers/gpu/host1x/drm/drm.c b/drivers/gpu/host1x/drm/drm.c
index e184b00..87aa09b 100644
--- a/drivers/gpu/host1x/drm/drm.c
+++ b/drivers/gpu/host1x/drm/drm.c
@@ -633,7 +633,7 @@ struct drm_driver tegra_drm_driver = {
 	.gem_vm_ops = &tegra_bo_vm_ops,
 	.dumb_create = tegra_bo_dumb_create,
 	.dumb_map_offset = tegra_bo_dumb_map_offset,
-	.dumb_destroy = tegra_bo_dumb_destroy,
+	.dumb_destroy = drm_gem_dumb_destroy,
 
 	.ioctls = tegra_drm_ioctls,
 	.num_ioctls = ARRAY_SIZE(tegra_drm_ioctls),
diff --git a/drivers/gpu/host1x/drm/gem.c b/drivers/gpu/host1x/drm/gem.c
index c5e9a9b..e4fbd78 100644
--- a/drivers/gpu/host1x/drm/gem.c
+++ b/drivers/gpu/host1x/drm/gem.c
@@ -262,9 +262,3 @@ int tegra_drm_mmap(struct file *file, struct vm_area_struct *vma)
 
 	return ret;
 }
-
-int tegra_bo_dumb_destroy(struct drm_file *file, struct drm_device *drm,
-			  unsigned int handle)
-{
-	return drm_gem_handle_delete(file, handle);
-}
diff --git a/drivers/gpu/host1x/drm/gem.h b/drivers/gpu/host1x/drm/gem.h
index 34de2b4..2e93b03 100644
--- a/drivers/gpu/host1x/drm/gem.h
+++ b/drivers/gpu/host1x/drm/gem.h
@@ -49,8 +49,6 @@ int tegra_bo_dumb_create(struct drm_file *file, struct drm_device *drm,
 			 struct drm_mode_create_dumb *args);
 int tegra_bo_dumb_map_offset(struct drm_file *file, struct drm_device *drm,
 			     uint32_t handle, uint64_t *offset);
-int tegra_bo_dumb_destroy(struct drm_file *file, struct drm_device *drm,
-			  unsigned int handle);
 
 int tegra_drm_mmap(struct file *file, struct vm_area_struct *vma);
 
diff --git a/drivers/staging/imx-drm/imx-drm-core.c b/drivers/staging/imx-drm/imx-drm-core.c
index 6455305..9b16b56 100644
--- a/drivers/staging/imx-drm/imx-drm-core.c
+++ b/drivers/staging/imx-drm/imx-drm-core.c
@@ -800,7 +800,7 @@ static struct drm_driver imx_drm_driver = {
 	.gem_vm_ops		= &drm_gem_cma_vm_ops,
 	.dumb_create		= drm_gem_cma_dumb_create,
 	.dumb_map_offset	= drm_gem_cma_dumb_map_offset,
-	.dumb_destroy		= drm_gem_cma_dumb_destroy,
+	.dumb_destroy		= drm_gem_dumb_destroy,
 
 	.get_vblank_counter	= drm_vblank_count,
 	.enable_vblank		= imx_drm_enable_vblank,
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
index 1da1ca2..4d7ea3d 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -1670,6 +1670,9 @@ int drm_gem_handle_create(struct drm_file *file_priv,
 			  u32 *handlep);
 int drm_gem_handle_delete(struct drm_file *filp, u32 handle);
 
+int drm_gem_dumb_destroy(struct drm_file *file,
+			 struct drm_device *dev,
+			 uint32_t handle);
 
 void drm_gem_free_mmap_offset(struct drm_gem_object *obj);
 int drm_gem_create_mmap_offset(struct drm_gem_object *obj);
diff --git a/include/drm/drm_gem_cma_helper.h b/include/drm/drm_gem_cma_helper.h
index c34f27f..89b4d7d 100644
--- a/include/drm/drm_gem_cma_helper.h
+++ b/include/drm/drm_gem_cma_helper.h
@@ -30,14 +30,6 @@ int drm_gem_cma_dumb_map_offset(struct drm_file *file_priv,
 /* set vm_flags and we can change the vm attribute to other one at here. */
 int drm_gem_cma_mmap(struct file *filp, struct vm_area_struct *vma);
 
-/*
- * destroy memory region allocated.
- *	- a gem handle and physical memory region pointed by a gem object
- *	would be released by drm_gem_handle_delete().
- */
-int drm_gem_cma_dumb_destroy(struct drm_file *file_priv,
-		struct drm_device *drm, unsigned int handle);
-
 /* allocate physical memory. */
 struct drm_gem_cma_object *drm_gem_cma_create(struct drm_device *drm,
 		unsigned int size);
-- 
1.8.3.2

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

* Re: [PATCH 13/20] drm/gem: create drm_gem_dumb_destroy
  2013-07-16  7:12 ` [PATCH 13/20] drm/gem: create drm_gem_dumb_destroy Daniel Vetter
@ 2013-07-22 22:52   ` Rob Clark
  2013-07-23  6:24   ` Laurent Pinchart
                     ` (2 subsequent siblings)
  3 siblings, 0 replies; 6+ messages in thread
From: Rob Clark @ 2013-07-22 22:52 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: Intel Graphics Development, DRI Development, Laurent Pinchart

On Tue, Jul 16, 2013 at 3:12 AM, Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> All the gem based kms drivers really want the same function to
> destroy a dumb framebuffer backing storage object.
>
> So give it to them and roll it out in all drivers.
>
> This still leaves the option open for kms drivers which don't use GEM
> for backing storage, but it does decently simplify matters for gem
> drivers.
>
> Cc: Inki Dae <inki.dae@samsung.com>
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Cc: Intel Graphics Development <intel-gfx@lists.freedesktop.org>
> Cc: Ben Skeggs <skeggsb@gmail.com>
> Cc: Rob Clark <robdclark@gmail.com>
> Cc: Alex Deucher <alexdeucher@gmail.com>
> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>

Reviewed-by: Rob Clark <robdclark@gmail.com>

> ---
>  drivers/gpu/drm/ast/ast_drv.c             |  2 +-
>  drivers/gpu/drm/ast/ast_drv.h             |  3 ---
>  drivers/gpu/drm/ast/ast_main.c            |  7 -------
>  drivers/gpu/drm/cirrus/cirrus_drv.c       |  2 +-
>  drivers/gpu/drm/cirrus/cirrus_drv.h       |  3 ---
>  drivers/gpu/drm/cirrus/cirrus_main.c      |  7 -------
>  drivers/gpu/drm/drm_gem.c                 | 14 ++++++++++++++
>  drivers/gpu/drm/drm_gem_cma_helper.c      | 10 ----------
>  drivers/gpu/drm/exynos/exynos_drm_drv.c   |  2 +-
>  drivers/gpu/drm/exynos/exynos_drm_gem.c   | 20 --------------------
>  drivers/gpu/drm/exynos/exynos_drm_gem.h   |  9 ---------
>  drivers/gpu/drm/gma500/gem.c              | 17 -----------------
>  drivers/gpu/drm/gma500/psb_drv.c          |  2 +-
>  drivers/gpu/drm/gma500/psb_drv.h          |  2 --
>  drivers/gpu/drm/i915/i915_drv.c           |  2 +-
>  drivers/gpu/drm/i915/i915_drv.h           |  2 --
>  drivers/gpu/drm/i915/i915_gem.c           |  7 -------
>  drivers/gpu/drm/mgag200/mgag200_drv.c     |  2 +-
>  drivers/gpu/drm/mgag200/mgag200_drv.h     |  3 ---
>  drivers/gpu/drm/mgag200/mgag200_main.c    |  7 -------
>  drivers/gpu/drm/nouveau/nouveau_display.c |  7 -------
>  drivers/gpu/drm/nouveau/nouveau_display.h |  2 --
>  drivers/gpu/drm/nouveau/nouveau_drm.c     |  2 +-
>  drivers/gpu/drm/omapdrm/omap_drv.c        |  2 +-
>  drivers/gpu/drm/omapdrm/omap_drv.h        |  2 --
>  drivers/gpu/drm/omapdrm/omap_gem.c        | 15 ---------------
>  drivers/gpu/drm/qxl/qxl_drv.c             |  2 +-
>  drivers/gpu/drm/qxl/qxl_drv.h             |  3 ---
>  drivers/gpu/drm/qxl/qxl_dumb.c            |  7 -------
>  drivers/gpu/drm/radeon/radeon.h           |  3 ---
>  drivers/gpu/drm/radeon/radeon_drv.c       |  5 +----
>  drivers/gpu/drm/radeon/radeon_gem.c       |  7 -------
>  drivers/gpu/drm/rcar-du/rcar_du_drv.c     |  2 +-
>  drivers/gpu/drm/shmobile/shmob_drm_drv.c  |  2 +-
>  drivers/gpu/drm/tilcdc/tilcdc_drv.c       |  2 +-
>  drivers/gpu/drm/udl/udl_drv.c             |  2 +-
>  drivers/gpu/drm/udl/udl_drv.h             |  2 --
>  drivers/gpu/drm/udl/udl_gem.c             |  6 ------
>  drivers/gpu/host1x/drm/drm.c              |  2 +-
>  drivers/gpu/host1x/drm/gem.c              |  6 ------
>  drivers/gpu/host1x/drm/gem.h              |  2 --
>  drivers/staging/imx-drm/imx-drm-core.c    |  2 +-
>  include/drm/drmP.h                        |  3 +++
>  include/drm/drm_gem_cma_helper.h          |  8 --------
>  44 files changed, 33 insertions(+), 186 deletions(-)
>
> diff --git a/drivers/gpu/drm/ast/ast_drv.c b/drivers/gpu/drm/ast/ast_drv.c
> index df0d0a0..a144fb0 100644
> --- a/drivers/gpu/drm/ast/ast_drv.c
> +++ b/drivers/gpu/drm/ast/ast_drv.c
> @@ -216,7 +216,7 @@ static struct drm_driver driver = {
>         .gem_free_object = ast_gem_free_object,
>         .dumb_create = ast_dumb_create,
>         .dumb_map_offset = ast_dumb_mmap_offset,
> -       .dumb_destroy = ast_dumb_destroy,
> +       .dumb_destroy = drm_gem_dumb_destroy,
>
>  };
>
> diff --git a/drivers/gpu/drm/ast/ast_drv.h b/drivers/gpu/drm/ast/ast_drv.h
> index 622d4ae..796dbb2 100644
> --- a/drivers/gpu/drm/ast/ast_drv.h
> +++ b/drivers/gpu/drm/ast/ast_drv.h
> @@ -322,9 +322,6 @@ ast_bo(struct ttm_buffer_object *bo)
>  extern int ast_dumb_create(struct drm_file *file,
>                            struct drm_device *dev,
>                            struct drm_mode_create_dumb *args);
> -extern int ast_dumb_destroy(struct drm_file *file,
> -                           struct drm_device *dev,
> -                           uint32_t handle);
>
>  extern int ast_gem_init_object(struct drm_gem_object *obj);
>  extern void ast_gem_free_object(struct drm_gem_object *obj);
> diff --git a/drivers/gpu/drm/ast/ast_main.c b/drivers/gpu/drm/ast/ast_main.c
> index f60fd7b..0ef4228 100644
> --- a/drivers/gpu/drm/ast/ast_main.c
> +++ b/drivers/gpu/drm/ast/ast_main.c
> @@ -449,13 +449,6 @@ int ast_dumb_create(struct drm_file *file,
>         return 0;
>  }
>
> -int ast_dumb_destroy(struct drm_file *file,
> -                    struct drm_device *dev,
> -                    uint32_t handle)
> -{
> -       return drm_gem_handle_delete(file, handle);
> -}
> -
>  int ast_gem_init_object(struct drm_gem_object *obj)
>  {
>         BUG();
> diff --git a/drivers/gpu/drm/cirrus/cirrus_drv.c b/drivers/gpu/drm/cirrus/cirrus_drv.c
> index 8ecb601..d35d99c 100644
> --- a/drivers/gpu/drm/cirrus/cirrus_drv.c
> +++ b/drivers/gpu/drm/cirrus/cirrus_drv.c
> @@ -102,7 +102,7 @@ static struct drm_driver driver = {
>         .gem_free_object = cirrus_gem_free_object,
>         .dumb_create = cirrus_dumb_create,
>         .dumb_map_offset = cirrus_dumb_mmap_offset,
> -       .dumb_destroy = cirrus_dumb_destroy,
> +       .dumb_destroy = drm_gem_dumb_destroy,
>  };
>
>  static struct pci_driver cirrus_pci_driver = {
> diff --git a/drivers/gpu/drm/cirrus/cirrus_drv.h b/drivers/gpu/drm/cirrus/cirrus_drv.h
> index bae5560..9b0bb91 100644
> --- a/drivers/gpu/drm/cirrus/cirrus_drv.h
> +++ b/drivers/gpu/drm/cirrus/cirrus_drv.h
> @@ -203,9 +203,6 @@ int cirrus_gem_create(struct drm_device *dev,
>  int cirrus_dumb_create(struct drm_file *file,
>                     struct drm_device *dev,
>                        struct drm_mode_create_dumb *args);
> -int cirrus_dumb_destroy(struct drm_file *file,
> -                    struct drm_device *dev,
> -                       uint32_t handle);
>
>  int cirrus_framebuffer_init(struct drm_device *dev,
>                            struct cirrus_framebuffer *gfb,
> diff --git a/drivers/gpu/drm/cirrus/cirrus_main.c b/drivers/gpu/drm/cirrus/cirrus_main.c
> index 35cbae8..c1ed9e1 100644
> --- a/drivers/gpu/drm/cirrus/cirrus_main.c
> +++ b/drivers/gpu/drm/cirrus/cirrus_main.c
> @@ -255,13 +255,6 @@ int cirrus_dumb_create(struct drm_file *file,
>         return 0;
>  }
>
> -int cirrus_dumb_destroy(struct drm_file *file,
> -                    struct drm_device *dev,
> -                    uint32_t handle)
> -{
> -       return drm_gem_handle_delete(file, handle);
> -}
> -
>  int cirrus_gem_init_object(struct drm_gem_object *obj)
>  {
>         BUG();
> diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
> index 3b5305c..1609a3d 100644
> --- a/drivers/gpu/drm/drm_gem.c
> +++ b/drivers/gpu/drm/drm_gem.c
> @@ -303,6 +303,20 @@ drm_gem_handle_delete(struct drm_file *filp, u32 handle)
>  EXPORT_SYMBOL(drm_gem_handle_delete);
>
>  /**
> + * drm_gem_dumb_destroy - dumb fb callback helper for gem based drivers
> + *
> + * This implements the ->dumb_destroy kms driver callback for drivers which use
> + * gem to manage their backing storage.
> + */
> +int drm_gem_dumb_destroy(struct drm_file *file,
> +                        struct drm_device *dev,
> +                        uint32_t handle)
> +{
> +       return drm_gem_handle_delete(file, handle);
> +}
> +EXPORT_SYMBOL(drm_gem_dumb_destroy);
> +
> +/**
>   * Create a handle for this object. This adds a handle reference
>   * to the object, which includes a regular reference count. Callers
>   * will likely want to dereference the object afterwards.
> diff --git a/drivers/gpu/drm/drm_gem_cma_helper.c b/drivers/gpu/drm/drm_gem_cma_helper.c
> index ece72a8..2e4840d 100644
> --- a/drivers/gpu/drm/drm_gem_cma_helper.c
> +++ b/drivers/gpu/drm/drm_gem_cma_helper.c
> @@ -286,16 +286,6 @@ int drm_gem_cma_mmap(struct file *filp, struct vm_area_struct *vma)
>  }
>  EXPORT_SYMBOL_GPL(drm_gem_cma_mmap);
>
> -/*
> - * drm_gem_cma_dumb_destroy - (struct drm_driver)->dumb_destroy callback function
> - */
> -int drm_gem_cma_dumb_destroy(struct drm_file *file_priv,
> -               struct drm_device *drm, unsigned int handle)
> -{
> -       return drm_gem_handle_delete(file_priv, handle);
> -}
> -EXPORT_SYMBOL_GPL(drm_gem_cma_dumb_destroy);
> -
>  #ifdef CONFIG_DEBUG_FS
>  void drm_gem_cma_describe(struct drm_gem_cma_object *cma_obj, struct seq_file *m)
>  {
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c
> index ca2729a..21fc28a 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
> @@ -271,7 +271,7 @@ static struct drm_driver exynos_drm_driver = {
>         .gem_vm_ops             = &exynos_drm_gem_vm_ops,
>         .dumb_create            = exynos_drm_gem_dumb_create,
>         .dumb_map_offset        = exynos_drm_gem_dumb_map_offset,
> -       .dumb_destroy           = exynos_drm_gem_dumb_destroy,
> +       .dumb_destroy           = drm_gem_dumb_destroy,
>         .prime_handle_to_fd     = drm_gem_prime_handle_to_fd,
>         .prime_fd_to_handle     = drm_gem_prime_fd_to_handle,
>         .gem_prime_export       = exynos_dmabuf_prime_export,
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_gem.c b/drivers/gpu/drm/exynos/exynos_drm_gem.c
> index 16963ca..2ecd945 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_gem.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_gem.c
> @@ -719,26 +719,6 @@ unlock:
>         return ret;
>  }
>
> -int exynos_drm_gem_dumb_destroy(struct drm_file *file_priv,
> -                               struct drm_device *dev,
> -                               unsigned int handle)
> -{
> -       int ret;
> -
> -       /*
> -        * obj->refcount and obj->handle_count are decreased and
> -        * if both them are 0 then exynos_drm_gem_free_object()
> -        * would be called by callback to release resources.
> -        */
> -       ret = drm_gem_handle_delete(file_priv, handle);
> -       if (ret < 0) {
> -               DRM_ERROR("failed to delete drm_gem_handle.\n");
> -               return ret;
> -       }
> -
> -       return 0;
> -}
> -
>  int exynos_drm_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
>  {
>         struct drm_gem_object *obj = vma->vm_private_data;
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_gem.h b/drivers/gpu/drm/exynos/exynos_drm_gem.h
> index 468766b..09555af 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_gem.h
> +++ b/drivers/gpu/drm/exynos/exynos_drm_gem.h
> @@ -151,15 +151,6 @@ int exynos_drm_gem_dumb_map_offset(struct drm_file *file_priv,
>                                    struct drm_device *dev, uint32_t handle,
>                                    uint64_t *offset);
>
> -/*
> - * destroy memory region allocated.
> - *     - a gem handle and physical memory region pointed by a gem object
> - *     would be released by drm_gem_handle_delete().
> - */
> -int exynos_drm_gem_dumb_destroy(struct drm_file *file_priv,
> -                               struct drm_device *dev,
> -                               unsigned int handle);
> -
>  /* page fault handler and mmap fault address(virtual) to physical memory. */
>  int exynos_drm_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf);
>
> diff --git a/drivers/gpu/drm/gma500/gem.c b/drivers/gpu/drm/gma500/gem.c
> index eefd6cc..5ac9741 100644
> --- a/drivers/gpu/drm/gma500/gem.c
> +++ b/drivers/gpu/drm/gma500/gem.c
> @@ -165,23 +165,6 @@ int psb_gem_dumb_create(struct drm_file *file, struct drm_device *dev,
>  }
>
>  /**
> - *     psb_gem_dumb_destroy    -       destroy a dumb buffer
> - *     @file: client file
> - *     @dev: our DRM device
> - *     @handle: the object handle
> - *
> - *     Destroy a handle that was created via psb_gem_dumb_create, at least
> - *     we hope it was created that way. i915 seems to assume the caller
> - *     does the checking but that might be worth review ! FIXME
> - */
> -int psb_gem_dumb_destroy(struct drm_file *file, struct drm_device *dev,
> -                       uint32_t handle)
> -{
> -       /* No special work needed, drop the reference and see what falls out */
> -       return drm_gem_handle_delete(file, handle);
> -}
> -
> -/**
>   *     psb_gem_fault           -       pagefault handler for GEM objects
>   *     @vma: the VMA of the GEM object
>   *     @vmf: fault detail
> diff --git a/drivers/gpu/drm/gma500/psb_drv.c b/drivers/gpu/drm/gma500/psb_drv.c
> index bddea58..ed06d5c 100644
> --- a/drivers/gpu/drm/gma500/psb_drv.c
> +++ b/drivers/gpu/drm/gma500/psb_drv.c
> @@ -652,7 +652,7 @@ static struct drm_driver driver = {
>         .gem_vm_ops = &psb_gem_vm_ops,
>         .dumb_create = psb_gem_dumb_create,
>         .dumb_map_offset = psb_gem_dumb_map_gtt,
> -       .dumb_destroy = psb_gem_dumb_destroy,
> +       .dumb_destroy = drm_gem_dumb_destroy,
>         .fops = &psb_gem_fops,
>         .name = DRIVER_NAME,
>         .desc = DRIVER_DESC,
> diff --git a/drivers/gpu/drm/gma500/psb_drv.h b/drivers/gpu/drm/gma500/psb_drv.h
> index 6053b8a..984cacf 100644
> --- a/drivers/gpu/drm/gma500/psb_drv.h
> +++ b/drivers/gpu/drm/gma500/psb_drv.h
> @@ -838,8 +838,6 @@ extern int psb_gem_get_aperture(struct drm_device *dev, void *data,
>                         struct drm_file *file);
>  extern int psb_gem_dumb_create(struct drm_file *file, struct drm_device *dev,
>                         struct drm_mode_create_dumb *args);
> -extern int psb_gem_dumb_destroy(struct drm_file *file, struct drm_device *dev,
> -                       uint32_t handle);
>  extern int psb_gem_dumb_map_gtt(struct drm_file *file, struct drm_device *dev,
>                         uint32_t handle, uint64_t *offset);
>  extern int psb_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf);
> diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
> index b07362f..cca12db 100644
> --- a/drivers/gpu/drm/i915/i915_drv.c
> +++ b/drivers/gpu/drm/i915/i915_drv.c
> @@ -1163,7 +1163,7 @@ static struct drm_driver driver = {
>
>         .dumb_create = i915_gem_dumb_create,
>         .dumb_map_offset = i915_gem_mmap_gtt,
> -       .dumb_destroy = i915_gem_dumb_destroy,
> +       .dumb_destroy = drm_gem_dumb_destroy,
>         .ioctls = i915_ioctls,
>         .fops = &i915_driver_fops,
>         .name = DRIVER_NAME,
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index cef35d3..5cb3e4d 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -1732,8 +1732,6 @@ int i915_gem_dumb_create(struct drm_file *file_priv,
>                          struct drm_mode_create_dumb *args);
>  int i915_gem_mmap_gtt(struct drm_file *file_priv, struct drm_device *dev,
>                       uint32_t handle, uint64_t *offset);
> -int i915_gem_dumb_destroy(struct drm_file *file_priv, struct drm_device *dev,
> -                         uint32_t handle);
>  /**
>   * Returns true if seq1 is later than seq2.
>   */
> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> index 46bf7e3..10b8c43 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -246,13 +246,6 @@ i915_gem_dumb_create(struct drm_file *file,
>                                args->size, &args->handle);
>  }
>
> -int i915_gem_dumb_destroy(struct drm_file *file,
> -                         struct drm_device *dev,
> -                         uint32_t handle)
> -{
> -       return drm_gem_handle_delete(file, handle);
> -}
> -
>  /**
>   * Creates a new mm object and returns a handle to it.
>   */
> diff --git a/drivers/gpu/drm/mgag200/mgag200_drv.c b/drivers/gpu/drm/mgag200/mgag200_drv.c
> index 122b571..bd91964 100644
> --- a/drivers/gpu/drm/mgag200/mgag200_drv.c
> +++ b/drivers/gpu/drm/mgag200/mgag200_drv.c
> @@ -104,7 +104,7 @@ static struct drm_driver driver = {
>         .gem_free_object = mgag200_gem_free_object,
>         .dumb_create = mgag200_dumb_create,
>         .dumb_map_offset = mgag200_dumb_mmap_offset,
> -       .dumb_destroy = mgag200_dumb_destroy,
> +       .dumb_destroy = drm_gem_dumb_destroy,
>  };
>
>  static struct pci_driver mgag200_pci_driver = {
> diff --git a/drivers/gpu/drm/mgag200/mgag200_drv.h b/drivers/gpu/drm/mgag200/mgag200_drv.h
> index 12e2499..baaae19 100644
> --- a/drivers/gpu/drm/mgag200/mgag200_drv.h
> +++ b/drivers/gpu/drm/mgag200/mgag200_drv.h
> @@ -264,9 +264,6 @@ int mgag200_gem_init_object(struct drm_gem_object *obj);
>  int mgag200_dumb_create(struct drm_file *file,
>                         struct drm_device *dev,
>                         struct drm_mode_create_dumb *args);
> -int mgag200_dumb_destroy(struct drm_file *file,
> -                        struct drm_device *dev,
> -                        uint32_t handle);
>  void mgag200_gem_free_object(struct drm_gem_object *obj);
>  int
>  mgag200_dumb_mmap_offset(struct drm_file *file,
> diff --git a/drivers/gpu/drm/mgag200/mgag200_main.c b/drivers/gpu/drm/mgag200/mgag200_main.c
> index 9fa5685..8d46c22 100644
> --- a/drivers/gpu/drm/mgag200/mgag200_main.c
> +++ b/drivers/gpu/drm/mgag200/mgag200_main.c
> @@ -310,13 +310,6 @@ int mgag200_dumb_create(struct drm_file *file,
>         return 0;
>  }
>
> -int mgag200_dumb_destroy(struct drm_file *file,
> -                    struct drm_device *dev,
> -                    uint32_t handle)
> -{
> -       return drm_gem_handle_delete(file, handle);
> -}
> -
>  int mgag200_gem_init_object(struct drm_gem_object *obj)
>  {
>         BUG();
> diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c
> index 708b2d1..e6dfaaa 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_display.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_display.c
> @@ -681,13 +681,6 @@ nouveau_display_dumb_create(struct drm_file *file_priv, struct drm_device *dev,
>  }
>
>  int
> -nouveau_display_dumb_destroy(struct drm_file *file_priv, struct drm_device *dev,
> -                            uint32_t handle)
> -{
> -       return drm_gem_handle_delete(file_priv, handle);
> -}
> -
> -int
>  nouveau_display_dumb_map_offset(struct drm_file *file_priv,
>                                 struct drm_device *dev,
>                                 uint32_t handle, uint64_t *poffset)
> diff --git a/drivers/gpu/drm/nouveau/nouveau_display.h b/drivers/gpu/drm/nouveau/nouveau_display.h
> index 1ea3e47..185e741 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_display.h
> +++ b/drivers/gpu/drm/nouveau/nouveau_display.h
> @@ -68,8 +68,6 @@ int  nouveau_display_dumb_create(struct drm_file *, struct drm_device *,
>                                  struct drm_mode_create_dumb *args);
>  int  nouveau_display_dumb_map_offset(struct drm_file *, struct drm_device *,
>                                      u32 handle, u64 *offset);
> -int  nouveau_display_dumb_destroy(struct drm_file *, struct drm_device *,
> -                                 u32 handle);
>
>  void nouveau_hdmi_mode_set(struct drm_encoder *, struct drm_display_mode *);
>
> diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c
> index 218a4b5..c683bae 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_drm.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
> @@ -715,7 +715,7 @@ driver = {
>
>         .dumb_create = nouveau_display_dumb_create,
>         .dumb_map_offset = nouveau_display_dumb_map_offset,
> -       .dumb_destroy = nouveau_display_dumb_destroy,
> +       .dumb_destroy = drm_gem_dumb_destroy,
>
>         .name = DRIVER_NAME,
>         .desc = DRIVER_DESC,
> diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c
> index 826586f..75886a3 100644
> --- a/drivers/gpu/drm/omapdrm/omap_drv.c
> +++ b/drivers/gpu/drm/omapdrm/omap_drv.c
> @@ -618,7 +618,7 @@ static struct drm_driver omap_drm_driver = {
>                 .gem_vm_ops = &omap_gem_vm_ops,
>                 .dumb_create = omap_gem_dumb_create,
>                 .dumb_map_offset = omap_gem_dumb_map_offset,
> -               .dumb_destroy = omap_gem_dumb_destroy,
> +               .dumb_destroy = drm_gem_dumb_destroy,
>                 .ioctls = ioctls,
>                 .num_ioctls = DRM_OMAP_NUM_IOCTLS,
>                 .fops = &omapdriver_fops,
> diff --git a/drivers/gpu/drm/omapdrm/omap_drv.h b/drivers/gpu/drm/omapdrm/omap_drv.h
> index 215a20d..fd13601 100644
> --- a/drivers/gpu/drm/omapdrm/omap_drv.h
> +++ b/drivers/gpu/drm/omapdrm/omap_drv.h
> @@ -224,8 +224,6 @@ int omap_gem_init_object(struct drm_gem_object *obj);
>  void *omap_gem_vaddr(struct drm_gem_object *obj);
>  int omap_gem_dumb_map_offset(struct drm_file *file, struct drm_device *dev,
>                 uint32_t handle, uint64_t *offset);
> -int omap_gem_dumb_destroy(struct drm_file *file, struct drm_device *dev,
> -               uint32_t handle);
>  int omap_gem_dumb_create(struct drm_file *file, struct drm_device *dev,
>                 struct drm_mode_create_dumb *args);
>  int omap_gem_mmap(struct file *filp, struct vm_area_struct *vma);
> diff --git a/drivers/gpu/drm/omapdrm/omap_gem.c b/drivers/gpu/drm/omapdrm/omap_gem.c
> index ebbdf41..9c30aaa 100644
> --- a/drivers/gpu/drm/omapdrm/omap_gem.c
> +++ b/drivers/gpu/drm/omapdrm/omap_gem.c
> @@ -629,21 +629,6 @@ int omap_gem_dumb_create(struct drm_file *file, struct drm_device *dev,
>  }
>
>  /**
> - * omap_gem_dumb_destroy       -       destroy a dumb buffer
> - * @file: client file
> - * @dev: our DRM device
> - * @handle: the object handle
> - *
> - * Destroy a handle that was created via omap_gem_dumb_create.
> - */
> -int omap_gem_dumb_destroy(struct drm_file *file, struct drm_device *dev,
> -               uint32_t handle)
> -{
> -       /* No special work needed, drop the reference and see what falls out */
> -       return drm_gem_handle_delete(file, handle);
> -}
> -
> -/**
>   * omap_gem_dumb_map   -       buffer mapping for dumb interface
>   * @file: our drm client file
>   * @dev: drm device
> diff --git a/drivers/gpu/drm/qxl/qxl_drv.c b/drivers/gpu/drm/qxl/qxl_drv.c
> index df0b577..48f2dfd 100644
> --- a/drivers/gpu/drm/qxl/qxl_drv.c
> +++ b/drivers/gpu/drm/qxl/qxl_drv.c
> @@ -221,7 +221,7 @@ static struct drm_driver qxl_driver = {
>
>         .dumb_create = qxl_mode_dumb_create,
>         .dumb_map_offset = qxl_mode_dumb_mmap,
> -       .dumb_destroy = qxl_mode_dumb_destroy,
> +       .dumb_destroy = drm_gem_dumb_destroy,
>  #if defined(CONFIG_DEBUG_FS)
>         .debugfs_init = qxl_debugfs_init,
>         .debugfs_cleanup = qxl_debugfs_takedown,
> diff --git a/drivers/gpu/drm/qxl/qxl_drv.h b/drivers/gpu/drm/qxl/qxl_drv.h
> index aacb791..57cb7a8 100644
> --- a/drivers/gpu/drm/qxl/qxl_drv.h
> +++ b/drivers/gpu/drm/qxl/qxl_drv.h
> @@ -418,9 +418,6 @@ int qxl_bo_kmap(struct qxl_bo *bo, void **ptr);
>  int qxl_mode_dumb_create(struct drm_file *file_priv,
>                          struct drm_device *dev,
>                          struct drm_mode_create_dumb *args);
> -int qxl_mode_dumb_destroy(struct drm_file *file_priv,
> -                         struct drm_device *dev,
> -                         uint32_t handle);
>  int qxl_mode_dumb_mmap(struct drm_file *filp,
>                        struct drm_device *dev,
>                        uint32_t handle, uint64_t *offset_p);
> diff --git a/drivers/gpu/drm/qxl/qxl_dumb.c b/drivers/gpu/drm/qxl/qxl_dumb.c
> index 847c4ee..d34bb41 100644
> --- a/drivers/gpu/drm/qxl/qxl_dumb.c
> +++ b/drivers/gpu/drm/qxl/qxl_dumb.c
> @@ -68,13 +68,6 @@ int qxl_mode_dumb_create(struct drm_file *file_priv,
>         return 0;
>  }
>
> -int qxl_mode_dumb_destroy(struct drm_file *file_priv,
> -                            struct drm_device *dev,
> -                            uint32_t handle)
> -{
> -       return drm_gem_handle_delete(file_priv, handle);
> -}
> -
>  int qxl_mode_dumb_mmap(struct drm_file *file_priv,
>                        struct drm_device *dev,
>                        uint32_t handle, uint64_t *offset_p)
> diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
> index 9b7025d..39e5be8 100644
> --- a/drivers/gpu/drm/radeon/radeon.h
> +++ b/drivers/gpu/drm/radeon/radeon.h
> @@ -490,9 +490,6 @@ int radeon_mode_dumb_create(struct drm_file *file_priv,
>  int radeon_mode_dumb_mmap(struct drm_file *filp,
>                           struct drm_device *dev,
>                           uint32_t handle, uint64_t *offset_p);
> -int radeon_mode_dumb_destroy(struct drm_file *file_priv,
> -                            struct drm_device *dev,
> -                            uint32_t handle);
>
>  /*
>   * Semaphores.
> diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
> index e5419b3..f01a218 100644
> --- a/drivers/gpu/drm/radeon/radeon_drv.c
> +++ b/drivers/gpu/drm/radeon/radeon_drv.c
> @@ -120,9 +120,6 @@ int radeon_mode_dumb_mmap(struct drm_file *filp,
>  int radeon_mode_dumb_create(struct drm_file *file_priv,
>                             struct drm_device *dev,
>                             struct drm_mode_create_dumb *args);
> -int radeon_mode_dumb_destroy(struct drm_file *file_priv,
> -                            struct drm_device *dev,
> -                            uint32_t handle);
>  struct sg_table *radeon_gem_prime_get_sg_table(struct drm_gem_object *obj);
>  struct drm_gem_object *radeon_gem_prime_import_sg_table(struct drm_device *dev,
>                                                         size_t size,
> @@ -420,7 +417,7 @@ static struct drm_driver kms_driver = {
>         .dma_ioctl = radeon_dma_ioctl_kms,
>         .dumb_create = radeon_mode_dumb_create,
>         .dumb_map_offset = radeon_mode_dumb_mmap,
> -       .dumb_destroy = radeon_mode_dumb_destroy,
> +       .dumb_destroy = drm_gem_dumb_destroy,
>         .fops = &radeon_driver_kms_fops,
>
>         .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
> diff --git a/drivers/gpu/drm/radeon/radeon_gem.c b/drivers/gpu/drm/radeon/radeon_gem.c
> index aa79603..dce99c8 100644
> --- a/drivers/gpu/drm/radeon/radeon_gem.c
> +++ b/drivers/gpu/drm/radeon/radeon_gem.c
> @@ -570,13 +570,6 @@ int radeon_mode_dumb_create(struct drm_file *file_priv,
>         return 0;
>  }
>
> -int radeon_mode_dumb_destroy(struct drm_file *file_priv,
> -                            struct drm_device *dev,
> -                            uint32_t handle)
> -{
> -       return drm_gem_handle_delete(file_priv, handle);
> -}
> -
>  #if defined(CONFIG_DEBUG_FS)
>  static int radeon_debugfs_gem_info(struct seq_file *m, void *data)
>  {
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_drv.c b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> index ff82877..3ebd419 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> @@ -253,7 +253,7 @@ static struct drm_driver rcar_du_driver = {
>         .gem_prime_export       = drm_gem_cma_dmabuf_export,
>         .dumb_create            = rcar_du_dumb_create,
>         .dumb_map_offset        = drm_gem_cma_dumb_map_offset,
> -       .dumb_destroy           = drm_gem_cma_dumb_destroy,
> +       .dumb_destroy           = drm_gem_dumb_destroy,
>         .fops                   = &rcar_du_fops,
>         .name                   = "rcar-du",
>         .desc                   = "Renesas R-Car Display Unit",
> diff --git a/drivers/gpu/drm/shmobile/shmob_drm_drv.c b/drivers/gpu/drm/shmobile/shmob_drm_drv.c
> index edc1018..7e1843f 100644
> --- a/drivers/gpu/drm/shmobile/shmob_drm_drv.c
> +++ b/drivers/gpu/drm/shmobile/shmob_drm_drv.c
> @@ -280,7 +280,7 @@ static struct drm_driver shmob_drm_driver = {
>         .gem_prime_export       = drm_gem_cma_dmabuf_export,
>         .dumb_create            = drm_gem_cma_dumb_create,
>         .dumb_map_offset        = drm_gem_cma_dumb_map_offset,
> -       .dumb_destroy           = drm_gem_cma_dumb_destroy,
> +       .dumb_destroy           = drm_gem_dumb_destroy,
>         .fops                   = &shmob_drm_fops,
>         .name                   = "shmob-drm",
>         .desc                   = "Renesas SH Mobile DRM",
> diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> index 40b71da..14801c2 100644
> --- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> +++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> @@ -519,7 +519,7 @@ static struct drm_driver tilcdc_driver = {
>         .gem_vm_ops         = &drm_gem_cma_vm_ops,
>         .dumb_create        = drm_gem_cma_dumb_create,
>         .dumb_map_offset    = drm_gem_cma_dumb_map_offset,
> -       .dumb_destroy       = drm_gem_cma_dumb_destroy,
> +       .dumb_destroy       = drm_gem_dumb_destroy,
>  #ifdef CONFIG_DEBUG_FS
>         .debugfs_init       = tilcdc_debugfs_init,
>         .debugfs_cleanup    = tilcdc_debugfs_cleanup,
> diff --git a/drivers/gpu/drm/udl/udl_drv.c b/drivers/gpu/drm/udl/udl_drv.c
> index c0770db..bb0af58 100644
> --- a/drivers/gpu/drm/udl/udl_drv.c
> +++ b/drivers/gpu/drm/udl/udl_drv.c
> @@ -84,7 +84,7 @@ static struct drm_driver driver = {
>
>         .dumb_create = udl_dumb_create,
>         .dumb_map_offset = udl_gem_mmap,
> -       .dumb_destroy = udl_dumb_destroy,
> +       .dumb_destroy = drm_gem_dumb_destroy,
>         .fops = &udl_driver_fops,
>
>         .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> diff --git a/drivers/gpu/drm/udl/udl_drv.h b/drivers/gpu/drm/udl/udl_drv.h
> index cc6d90f..56aec94 100644
> --- a/drivers/gpu/drm/udl/udl_drv.h
> +++ b/drivers/gpu/drm/udl/udl_drv.h
> @@ -114,8 +114,6 @@ int udl_dumb_create(struct drm_file *file_priv,
>                     struct drm_mode_create_dumb *args);
>  int udl_gem_mmap(struct drm_file *file_priv, struct drm_device *dev,
>                  uint32_t handle, uint64_t *offset);
> -int udl_dumb_destroy(struct drm_file *file_priv, struct drm_device *dev,
> -                    uint32_t handle);
>
>  int udl_gem_init_object(struct drm_gem_object *obj);
>  void udl_gem_free_object(struct drm_gem_object *gem_obj);
> diff --git a/drivers/gpu/drm/udl/udl_gem.c b/drivers/gpu/drm/udl/udl_gem.c
> index ef034fa..c82c84a 100644
> --- a/drivers/gpu/drm/udl/udl_gem.c
> +++ b/drivers/gpu/drm/udl/udl_gem.c
> @@ -66,12 +66,6 @@ int udl_dumb_create(struct drm_file *file,
>                               args->size, &args->handle);
>  }
>
> -int udl_dumb_destroy(struct drm_file *file, struct drm_device *dev,
> -                    uint32_t handle)
> -{
> -       return drm_gem_handle_delete(file, handle);
> -}
> -
>  int udl_drm_gem_mmap(struct file *filp, struct vm_area_struct *vma)
>  {
>         int ret;
> diff --git a/drivers/gpu/host1x/drm/drm.c b/drivers/gpu/host1x/drm/drm.c
> index e184b00..87aa09b 100644
> --- a/drivers/gpu/host1x/drm/drm.c
> +++ b/drivers/gpu/host1x/drm/drm.c
> @@ -633,7 +633,7 @@ struct drm_driver tegra_drm_driver = {
>         .gem_vm_ops = &tegra_bo_vm_ops,
>         .dumb_create = tegra_bo_dumb_create,
>         .dumb_map_offset = tegra_bo_dumb_map_offset,
> -       .dumb_destroy = tegra_bo_dumb_destroy,
> +       .dumb_destroy = drm_gem_dumb_destroy,
>
>         .ioctls = tegra_drm_ioctls,
>         .num_ioctls = ARRAY_SIZE(tegra_drm_ioctls),
> diff --git a/drivers/gpu/host1x/drm/gem.c b/drivers/gpu/host1x/drm/gem.c
> index c5e9a9b..e4fbd78 100644
> --- a/drivers/gpu/host1x/drm/gem.c
> +++ b/drivers/gpu/host1x/drm/gem.c
> @@ -262,9 +262,3 @@ int tegra_drm_mmap(struct file *file, struct vm_area_struct *vma)
>
>         return ret;
>  }
> -
> -int tegra_bo_dumb_destroy(struct drm_file *file, struct drm_device *drm,
> -                         unsigned int handle)
> -{
> -       return drm_gem_handle_delete(file, handle);
> -}
> diff --git a/drivers/gpu/host1x/drm/gem.h b/drivers/gpu/host1x/drm/gem.h
> index 34de2b4..2e93b03 100644
> --- a/drivers/gpu/host1x/drm/gem.h
> +++ b/drivers/gpu/host1x/drm/gem.h
> @@ -49,8 +49,6 @@ int tegra_bo_dumb_create(struct drm_file *file, struct drm_device *drm,
>                          struct drm_mode_create_dumb *args);
>  int tegra_bo_dumb_map_offset(struct drm_file *file, struct drm_device *drm,
>                              uint32_t handle, uint64_t *offset);
> -int tegra_bo_dumb_destroy(struct drm_file *file, struct drm_device *drm,
> -                         unsigned int handle);
>
>  int tegra_drm_mmap(struct file *file, struct vm_area_struct *vma);
>
> diff --git a/drivers/staging/imx-drm/imx-drm-core.c b/drivers/staging/imx-drm/imx-drm-core.c
> index 6455305..9b16b56 100644
> --- a/drivers/staging/imx-drm/imx-drm-core.c
> +++ b/drivers/staging/imx-drm/imx-drm-core.c
> @@ -800,7 +800,7 @@ static struct drm_driver imx_drm_driver = {
>         .gem_vm_ops             = &drm_gem_cma_vm_ops,
>         .dumb_create            = drm_gem_cma_dumb_create,
>         .dumb_map_offset        = drm_gem_cma_dumb_map_offset,
> -       .dumb_destroy           = drm_gem_cma_dumb_destroy,
> +       .dumb_destroy           = drm_gem_dumb_destroy,
>
>         .get_vblank_counter     = drm_vblank_count,
>         .enable_vblank          = imx_drm_enable_vblank,
> diff --git a/include/drm/drmP.h b/include/drm/drmP.h
> index 1da1ca2..4d7ea3d 100644
> --- a/include/drm/drmP.h
> +++ b/include/drm/drmP.h
> @@ -1670,6 +1670,9 @@ int drm_gem_handle_create(struct drm_file *file_priv,
>                           u32 *handlep);
>  int drm_gem_handle_delete(struct drm_file *filp, u32 handle);
>
> +int drm_gem_dumb_destroy(struct drm_file *file,
> +                        struct drm_device *dev,
> +                        uint32_t handle);
>
>  void drm_gem_free_mmap_offset(struct drm_gem_object *obj);
>  int drm_gem_create_mmap_offset(struct drm_gem_object *obj);
> diff --git a/include/drm/drm_gem_cma_helper.h b/include/drm/drm_gem_cma_helper.h
> index c34f27f..89b4d7d 100644
> --- a/include/drm/drm_gem_cma_helper.h
> +++ b/include/drm/drm_gem_cma_helper.h
> @@ -30,14 +30,6 @@ int drm_gem_cma_dumb_map_offset(struct drm_file *file_priv,
>  /* set vm_flags and we can change the vm attribute to other one at here. */
>  int drm_gem_cma_mmap(struct file *filp, struct vm_area_struct *vma);
>
> -/*
> - * destroy memory region allocated.
> - *     - a gem handle and physical memory region pointed by a gem object
> - *     would be released by drm_gem_handle_delete().
> - */
> -int drm_gem_cma_dumb_destroy(struct drm_file *file_priv,
> -               struct drm_device *drm, unsigned int handle);
> -
>  /* allocate physical memory. */
>  struct drm_gem_cma_object *drm_gem_cma_create(struct drm_device *drm,
>                 unsigned int size);
> --
> 1.8.3.2
>

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

* Re: [PATCH 13/20] drm/gem: create drm_gem_dumb_destroy
  2013-07-16  7:12 ` [PATCH 13/20] drm/gem: create drm_gem_dumb_destroy Daniel Vetter
  2013-07-22 22:52   ` Rob Clark
@ 2013-07-23  6:24   ` Laurent Pinchart
  2013-07-23  7:15   ` Inki Dae
  2013-08-01 11:41   ` Patrik Jakobsson
  3 siblings, 0 replies; 6+ messages in thread
From: Laurent Pinchart @ 2013-07-23  6:24 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: Ben Skeggs, Intel Graphics Development, DRI Development, Inki Dae,
	Rob Clark, Alex Deucher

Hi Daniel,

Thanks for the patch.

On Tuesday 16 July 2013 09:12:04 Daniel Vetter wrote:
> All the gem based kms drivers really want the same function to
> destroy a dumb framebuffer backing storage object.
> 
> So give it to them and roll it out in all drivers.
> 
> This still leaves the option open for kms drivers which don't use GEM
> for backing storage, but it does decently simplify matters for gem
> drivers.
> 
> Cc: Inki Dae <inki.dae@samsung.com>
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Cc: Intel Graphics Development <intel-gfx@lists.freedesktop.org>
> Cc: Ben Skeggs <skeggsb@gmail.com>
> Cc: Rob Clark <robdclark@gmail.com>
> Cc: Alex Deucher <alexdeucher@gmail.com>
> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>

Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> ---
>  drivers/gpu/drm/ast/ast_drv.c             |  2 +-
>  drivers/gpu/drm/ast/ast_drv.h             |  3 ---
>  drivers/gpu/drm/ast/ast_main.c            |  7 -------
>  drivers/gpu/drm/cirrus/cirrus_drv.c       |  2 +-
>  drivers/gpu/drm/cirrus/cirrus_drv.h       |  3 ---
>  drivers/gpu/drm/cirrus/cirrus_main.c      |  7 -------
>  drivers/gpu/drm/drm_gem.c                 | 14 ++++++++++++++
>  drivers/gpu/drm/drm_gem_cma_helper.c      | 10 ----------
>  drivers/gpu/drm/exynos/exynos_drm_drv.c   |  2 +-
>  drivers/gpu/drm/exynos/exynos_drm_gem.c   | 20 --------------------
>  drivers/gpu/drm/exynos/exynos_drm_gem.h   |  9 ---------
>  drivers/gpu/drm/gma500/gem.c              | 17 -----------------
>  drivers/gpu/drm/gma500/psb_drv.c          |  2 +-
>  drivers/gpu/drm/gma500/psb_drv.h          |  2 --
>  drivers/gpu/drm/i915/i915_drv.c           |  2 +-
>  drivers/gpu/drm/i915/i915_drv.h           |  2 --
>  drivers/gpu/drm/i915/i915_gem.c           |  7 -------
>  drivers/gpu/drm/mgag200/mgag200_drv.c     |  2 +-
>  drivers/gpu/drm/mgag200/mgag200_drv.h     |  3 ---
>  drivers/gpu/drm/mgag200/mgag200_main.c    |  7 -------
>  drivers/gpu/drm/nouveau/nouveau_display.c |  7 -------
>  drivers/gpu/drm/nouveau/nouveau_display.h |  2 --
>  drivers/gpu/drm/nouveau/nouveau_drm.c     |  2 +-
>  drivers/gpu/drm/omapdrm/omap_drv.c        |  2 +-
>  drivers/gpu/drm/omapdrm/omap_drv.h        |  2 --
>  drivers/gpu/drm/omapdrm/omap_gem.c        | 15 ---------------
>  drivers/gpu/drm/qxl/qxl_drv.c             |  2 +-
>  drivers/gpu/drm/qxl/qxl_drv.h             |  3 ---
>  drivers/gpu/drm/qxl/qxl_dumb.c            |  7 -------
>  drivers/gpu/drm/radeon/radeon.h           |  3 ---
>  drivers/gpu/drm/radeon/radeon_drv.c       |  5 +----
>  drivers/gpu/drm/radeon/radeon_gem.c       |  7 -------
>  drivers/gpu/drm/rcar-du/rcar_du_drv.c     |  2 +-
>  drivers/gpu/drm/shmobile/shmob_drm_drv.c  |  2 +-
>  drivers/gpu/drm/tilcdc/tilcdc_drv.c       |  2 +-
>  drivers/gpu/drm/udl/udl_drv.c             |  2 +-
>  drivers/gpu/drm/udl/udl_drv.h             |  2 --
>  drivers/gpu/drm/udl/udl_gem.c             |  6 ------
>  drivers/gpu/host1x/drm/drm.c              |  2 +-
>  drivers/gpu/host1x/drm/gem.c              |  6 ------
>  drivers/gpu/host1x/drm/gem.h              |  2 --
>  drivers/staging/imx-drm/imx-drm-core.c    |  2 +-
>  include/drm/drmP.h                        |  3 +++
>  include/drm/drm_gem_cma_helper.h          |  8 --------
>  44 files changed, 33 insertions(+), 186 deletions(-)

-- 
Regards,

Laurent Pinchart

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

* RE: [PATCH 13/20] drm/gem: create drm_gem_dumb_destroy
  2013-07-16  7:12 ` [PATCH 13/20] drm/gem: create drm_gem_dumb_destroy Daniel Vetter
  2013-07-22 22:52   ` Rob Clark
  2013-07-23  6:24   ` Laurent Pinchart
@ 2013-07-23  7:15   ` Inki Dae
  2013-08-01 11:41   ` Patrik Jakobsson
  3 siblings, 0 replies; 6+ messages in thread
From: Inki Dae @ 2013-07-23  7:15 UTC (permalink / raw)
  To: 'Daniel Vetter', 'DRI Development'
  Cc: 'Intel Graphics Development', 'Laurent Pinchart'



> -----Original Message-----
> From: Daniel Vetter [mailto:daniel.vetter@ffwll.ch]
> Sent: Tuesday, July 16, 2013 4:12 PM
> To: DRI Development
> Cc: Daniel Vetter; Inki Dae; Laurent Pinchart; Intel Graphics Development;
> Ben Skeggs; Rob Clark; Alex Deucher
> Subject: [PATCH 13/20] drm/gem: create drm_gem_dumb_destroy
> 
> All the gem based kms drivers really want the same function to
> destroy a dumb framebuffer backing storage object.
> 
> So give it to them and roll it out in all drivers.
> 
> This still leaves the option open for kms drivers which don't use GEM
> for backing storage, but it does decently simplify matters for gem
> drivers.
> 
> Cc: Inki Dae <inki.dae@samsung.com>
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Cc: Intel Graphics Development <intel-gfx@lists.freedesktop.org>
> Cc: Ben Skeggs <skeggsb@gmail.com>
> Cc: Rob Clark <robdclark@gmail.com>
> Cc: Alex Deucher <alexdeucher@gmail.com>
> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>

Acked-by: Inki Dae <inki.dae@samsung.com>

Thanks,
Inki Dae

> ---
>  drivers/gpu/drm/ast/ast_drv.c             |  2 +-
>  drivers/gpu/drm/ast/ast_drv.h             |  3 ---
>  drivers/gpu/drm/ast/ast_main.c            |  7 -------
>  drivers/gpu/drm/cirrus/cirrus_drv.c       |  2 +-
>  drivers/gpu/drm/cirrus/cirrus_drv.h       |  3 ---
>  drivers/gpu/drm/cirrus/cirrus_main.c      |  7 -------
>  drivers/gpu/drm/drm_gem.c                 | 14 ++++++++++++++
>  drivers/gpu/drm/drm_gem_cma_helper.c      | 10 ----------
>  drivers/gpu/drm/exynos/exynos_drm_drv.c   |  2 +-
>  drivers/gpu/drm/exynos/exynos_drm_gem.c   | 20 --------------------
>  drivers/gpu/drm/exynos/exynos_drm_gem.h   |  9 ---------
>  drivers/gpu/drm/gma500/gem.c              | 17 -----------------
>  drivers/gpu/drm/gma500/psb_drv.c          |  2 +-
>  drivers/gpu/drm/gma500/psb_drv.h          |  2 --
>  drivers/gpu/drm/i915/i915_drv.c           |  2 +-
>  drivers/gpu/drm/i915/i915_drv.h           |  2 --
>  drivers/gpu/drm/i915/i915_gem.c           |  7 -------
>  drivers/gpu/drm/mgag200/mgag200_drv.c     |  2 +-
>  drivers/gpu/drm/mgag200/mgag200_drv.h     |  3 ---
>  drivers/gpu/drm/mgag200/mgag200_main.c    |  7 -------
>  drivers/gpu/drm/nouveau/nouveau_display.c |  7 -------
>  drivers/gpu/drm/nouveau/nouveau_display.h |  2 --
>  drivers/gpu/drm/nouveau/nouveau_drm.c     |  2 +-
>  drivers/gpu/drm/omapdrm/omap_drv.c        |  2 +-
>  drivers/gpu/drm/omapdrm/omap_drv.h        |  2 --
>  drivers/gpu/drm/omapdrm/omap_gem.c        | 15 ---------------
>  drivers/gpu/drm/qxl/qxl_drv.c             |  2 +-
>  drivers/gpu/drm/qxl/qxl_drv.h             |  3 ---
>  drivers/gpu/drm/qxl/qxl_dumb.c            |  7 -------
>  drivers/gpu/drm/radeon/radeon.h           |  3 ---
>  drivers/gpu/drm/radeon/radeon_drv.c       |  5 +----
>  drivers/gpu/drm/radeon/radeon_gem.c       |  7 -------
>  drivers/gpu/drm/rcar-du/rcar_du_drv.c     |  2 +-
>  drivers/gpu/drm/shmobile/shmob_drm_drv.c  |  2 +-
>  drivers/gpu/drm/tilcdc/tilcdc_drv.c       |  2 +-
>  drivers/gpu/drm/udl/udl_drv.c             |  2 +-
>  drivers/gpu/drm/udl/udl_drv.h             |  2 --
>  drivers/gpu/drm/udl/udl_gem.c             |  6 ------
>  drivers/gpu/host1x/drm/drm.c              |  2 +-
>  drivers/gpu/host1x/drm/gem.c              |  6 ------
>  drivers/gpu/host1x/drm/gem.h              |  2 --
>  drivers/staging/imx-drm/imx-drm-core.c    |  2 +-
>  include/drm/drmP.h                        |  3 +++
>  include/drm/drm_gem_cma_helper.h          |  8 --------
>  44 files changed, 33 insertions(+), 186 deletions(-)
> 
> diff --git a/drivers/gpu/drm/ast/ast_drv.c b/drivers/gpu/drm/ast/ast_drv.c
> index df0d0a0..a144fb0 100644
> --- a/drivers/gpu/drm/ast/ast_drv.c
> +++ b/drivers/gpu/drm/ast/ast_drv.c
> @@ -216,7 +216,7 @@ static struct drm_driver driver = {
>  	.gem_free_object = ast_gem_free_object,
>  	.dumb_create = ast_dumb_create,
>  	.dumb_map_offset = ast_dumb_mmap_offset,
> -	.dumb_destroy = ast_dumb_destroy,
> +	.dumb_destroy = drm_gem_dumb_destroy,
> 
>  };
> 
> diff --git a/drivers/gpu/drm/ast/ast_drv.h b/drivers/gpu/drm/ast/ast_drv.h
> index 622d4ae..796dbb2 100644
> --- a/drivers/gpu/drm/ast/ast_drv.h
> +++ b/drivers/gpu/drm/ast/ast_drv.h
> @@ -322,9 +322,6 @@ ast_bo(struct ttm_buffer_object *bo)
>  extern int ast_dumb_create(struct drm_file *file,
>  			   struct drm_device *dev,
>  			   struct drm_mode_create_dumb *args);
> -extern int ast_dumb_destroy(struct drm_file *file,
> -			    struct drm_device *dev,
> -			    uint32_t handle);
> 
>  extern int ast_gem_init_object(struct drm_gem_object *obj);
>  extern void ast_gem_free_object(struct drm_gem_object *obj);
> diff --git a/drivers/gpu/drm/ast/ast_main.c
> b/drivers/gpu/drm/ast/ast_main.c
> index f60fd7b..0ef4228 100644
> --- a/drivers/gpu/drm/ast/ast_main.c
> +++ b/drivers/gpu/drm/ast/ast_main.c
> @@ -449,13 +449,6 @@ int ast_dumb_create(struct drm_file *file,
>  	return 0;
>  }
> 
> -int ast_dumb_destroy(struct drm_file *file,
> -		     struct drm_device *dev,
> -		     uint32_t handle)
> -{
> -	return drm_gem_handle_delete(file, handle);
> -}
> -
>  int ast_gem_init_object(struct drm_gem_object *obj)
>  {
>  	BUG();
> diff --git a/drivers/gpu/drm/cirrus/cirrus_drv.c
> b/drivers/gpu/drm/cirrus/cirrus_drv.c
> index 8ecb601..d35d99c 100644
> --- a/drivers/gpu/drm/cirrus/cirrus_drv.c
> +++ b/drivers/gpu/drm/cirrus/cirrus_drv.c
> @@ -102,7 +102,7 @@ static struct drm_driver driver = {
>  	.gem_free_object = cirrus_gem_free_object,
>  	.dumb_create = cirrus_dumb_create,
>  	.dumb_map_offset = cirrus_dumb_mmap_offset,
> -	.dumb_destroy = cirrus_dumb_destroy,
> +	.dumb_destroy = drm_gem_dumb_destroy,
>  };
> 
>  static struct pci_driver cirrus_pci_driver = {
> diff --git a/drivers/gpu/drm/cirrus/cirrus_drv.h
> b/drivers/gpu/drm/cirrus/cirrus_drv.h
> index bae5560..9b0bb91 100644
> --- a/drivers/gpu/drm/cirrus/cirrus_drv.h
> +++ b/drivers/gpu/drm/cirrus/cirrus_drv.h
> @@ -203,9 +203,6 @@ int cirrus_gem_create(struct drm_device *dev,
>  int cirrus_dumb_create(struct drm_file *file,
>  		    struct drm_device *dev,
>  		       struct drm_mode_create_dumb *args);
> -int cirrus_dumb_destroy(struct drm_file *file,
> -		     struct drm_device *dev,
> -			uint32_t handle);
> 
>  int cirrus_framebuffer_init(struct drm_device *dev,
>  			   struct cirrus_framebuffer *gfb,
> diff --git a/drivers/gpu/drm/cirrus/cirrus_main.c
> b/drivers/gpu/drm/cirrus/cirrus_main.c
> index 35cbae8..c1ed9e1 100644
> --- a/drivers/gpu/drm/cirrus/cirrus_main.c
> +++ b/drivers/gpu/drm/cirrus/cirrus_main.c
> @@ -255,13 +255,6 @@ int cirrus_dumb_create(struct drm_file *file,
>  	return 0;
>  }
> 
> -int cirrus_dumb_destroy(struct drm_file *file,
> -		     struct drm_device *dev,
> -		     uint32_t handle)
> -{
> -	return drm_gem_handle_delete(file, handle);
> -}
> -
>  int cirrus_gem_init_object(struct drm_gem_object *obj)
>  {
>  	BUG();
> diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
> index 3b5305c..1609a3d 100644
> --- a/drivers/gpu/drm/drm_gem.c
> +++ b/drivers/gpu/drm/drm_gem.c
> @@ -303,6 +303,20 @@ drm_gem_handle_delete(struct drm_file *filp, u32
> handle)
>  EXPORT_SYMBOL(drm_gem_handle_delete);
> 
>  /**
> + * drm_gem_dumb_destroy - dumb fb callback helper for gem based drivers
> + *
> + * This implements the ->dumb_destroy kms driver callback for drivers
> which use
> + * gem to manage their backing storage.
> + */
> +int drm_gem_dumb_destroy(struct drm_file *file,
> +			 struct drm_device *dev,
> +			 uint32_t handle)
> +{
> +	return drm_gem_handle_delete(file, handle);
> +}
> +EXPORT_SYMBOL(drm_gem_dumb_destroy);
> +
> +/**
>   * Create a handle for this object. This adds a handle reference
>   * to the object, which includes a regular reference count. Callers
>   * will likely want to dereference the object afterwards.
> diff --git a/drivers/gpu/drm/drm_gem_cma_helper.c
> b/drivers/gpu/drm/drm_gem_cma_helper.c
> index ece72a8..2e4840d 100644
> --- a/drivers/gpu/drm/drm_gem_cma_helper.c
> +++ b/drivers/gpu/drm/drm_gem_cma_helper.c
> @@ -286,16 +286,6 @@ int drm_gem_cma_mmap(struct file *filp, struct
> vm_area_struct *vma)
>  }
>  EXPORT_SYMBOL_GPL(drm_gem_cma_mmap);
> 
> -/*
> - * drm_gem_cma_dumb_destroy - (struct drm_driver)->dumb_destroy callback
> function
> - */
> -int drm_gem_cma_dumb_destroy(struct drm_file *file_priv,
> -		struct drm_device *drm, unsigned int handle)
> -{
> -	return drm_gem_handle_delete(file_priv, handle);
> -}
> -EXPORT_SYMBOL_GPL(drm_gem_cma_dumb_destroy);
> -
>  #ifdef CONFIG_DEBUG_FS
>  void drm_gem_cma_describe(struct drm_gem_cma_object *cma_obj, struct
> seq_file *m)
>  {
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c
> b/drivers/gpu/drm/exynos/exynos_drm_drv.c
> index ca2729a..21fc28a 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
> @@ -271,7 +271,7 @@ static struct drm_driver exynos_drm_driver = {
>  	.gem_vm_ops		= &exynos_drm_gem_vm_ops,
>  	.dumb_create		= exynos_drm_gem_dumb_create,
>  	.dumb_map_offset	= exynos_drm_gem_dumb_map_offset,
> -	.dumb_destroy		= exynos_drm_gem_dumb_destroy,
> +	.dumb_destroy		= drm_gem_dumb_destroy,
>  	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
>  	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
>  	.gem_prime_export	= exynos_dmabuf_prime_export,
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_gem.c
> b/drivers/gpu/drm/exynos/exynos_drm_gem.c
> index 16963ca..2ecd945 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_gem.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_gem.c
> @@ -719,26 +719,6 @@ unlock:
>  	return ret;
>  }
> 
> -int exynos_drm_gem_dumb_destroy(struct drm_file *file_priv,
> -				struct drm_device *dev,
> -				unsigned int handle)
> -{
> -	int ret;
> -
> -	/*
> -	 * obj->refcount and obj->handle_count are decreased and
> -	 * if both them are 0 then exynos_drm_gem_free_object()
> -	 * would be called by callback to release resources.
> -	 */
> -	ret = drm_gem_handle_delete(file_priv, handle);
> -	if (ret < 0) {
> -		DRM_ERROR("failed to delete drm_gem_handle.\n");
> -		return ret;
> -	}
> -
> -	return 0;
> -}
> -
>  int exynos_drm_gem_fault(struct vm_area_struct *vma, struct vm_fault
*vmf)
>  {
>  	struct drm_gem_object *obj = vma->vm_private_data;
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_gem.h
> b/drivers/gpu/drm/exynos/exynos_drm_gem.h
> index 468766b..09555af 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_gem.h
> +++ b/drivers/gpu/drm/exynos/exynos_drm_gem.h
> @@ -151,15 +151,6 @@ int exynos_drm_gem_dumb_map_offset(struct drm_file
> *file_priv,
>  				   struct drm_device *dev, uint32_t handle,
>  				   uint64_t *offset);
> 
> -/*
> - * destroy memory region allocated.
> - *	- a gem handle and physical memory region pointed by a gem object
> - *	would be released by drm_gem_handle_delete().
> - */
> -int exynos_drm_gem_dumb_destroy(struct drm_file *file_priv,
> -				struct drm_device *dev,
> -				unsigned int handle);
> -
>  /* page fault handler and mmap fault address(virtual) to physical memory.
> */
>  int exynos_drm_gem_fault(struct vm_area_struct *vma, struct vm_fault
> *vmf);
> 
> diff --git a/drivers/gpu/drm/gma500/gem.c b/drivers/gpu/drm/gma500/gem.c
> index eefd6cc..5ac9741 100644
> --- a/drivers/gpu/drm/gma500/gem.c
> +++ b/drivers/gpu/drm/gma500/gem.c
> @@ -165,23 +165,6 @@ int psb_gem_dumb_create(struct drm_file *file, struct
> drm_device *dev,
>  }
> 
>  /**
> - *	psb_gem_dumb_destroy	-	destroy a dumb buffer
> - *	@file: client file
> - *	@dev: our DRM device
> - *	@handle: the object handle
> - *
> - *	Destroy a handle that was created via psb_gem_dumb_create, at least
> - *	we hope it was created that way. i915 seems to assume the caller
> - *	does the checking but that might be worth review ! FIXME
> - */
> -int psb_gem_dumb_destroy(struct drm_file *file, struct drm_device *dev,
> -			uint32_t handle)
> -{
> -	/* No special work needed, drop the reference and see what falls
> out */
> -	return drm_gem_handle_delete(file, handle);
> -}
> -
> -/**
>   *	psb_gem_fault		-	pagefault handler for GEM objects
>   *	@vma: the VMA of the GEM object
>   *	@vmf: fault detail
> diff --git a/drivers/gpu/drm/gma500/psb_drv.c
> b/drivers/gpu/drm/gma500/psb_drv.c
> index bddea58..ed06d5c 100644
> --- a/drivers/gpu/drm/gma500/psb_drv.c
> +++ b/drivers/gpu/drm/gma500/psb_drv.c
> @@ -652,7 +652,7 @@ static struct drm_driver driver = {
>  	.gem_vm_ops = &psb_gem_vm_ops,
>  	.dumb_create = psb_gem_dumb_create,
>  	.dumb_map_offset = psb_gem_dumb_map_gtt,
> -	.dumb_destroy = psb_gem_dumb_destroy,
> +	.dumb_destroy = drm_gem_dumb_destroy,
>  	.fops = &psb_gem_fops,
>  	.name = DRIVER_NAME,
>  	.desc = DRIVER_DESC,
> diff --git a/drivers/gpu/drm/gma500/psb_drv.h
> b/drivers/gpu/drm/gma500/psb_drv.h
> index 6053b8a..984cacf 100644
> --- a/drivers/gpu/drm/gma500/psb_drv.h
> +++ b/drivers/gpu/drm/gma500/psb_drv.h
> @@ -838,8 +838,6 @@ extern int psb_gem_get_aperture(struct drm_device
*dev,
> void *data,
>  			struct drm_file *file);
>  extern int psb_gem_dumb_create(struct drm_file *file, struct drm_device
> *dev,
>  			struct drm_mode_create_dumb *args);
> -extern int psb_gem_dumb_destroy(struct drm_file *file, struct drm_device
> *dev,
> -			uint32_t handle);
>  extern int psb_gem_dumb_map_gtt(struct drm_file *file, struct drm_device
> *dev,
>  			uint32_t handle, uint64_t *offset);
>  extern int psb_gem_fault(struct vm_area_struct *vma, struct vm_fault
> *vmf);
> diff --git a/drivers/gpu/drm/i915/i915_drv.c
> b/drivers/gpu/drm/i915/i915_drv.c
> index b07362f..cca12db 100644
> --- a/drivers/gpu/drm/i915/i915_drv.c
> +++ b/drivers/gpu/drm/i915/i915_drv.c
> @@ -1163,7 +1163,7 @@ static struct drm_driver driver = {
> 
>  	.dumb_create = i915_gem_dumb_create,
>  	.dumb_map_offset = i915_gem_mmap_gtt,
> -	.dumb_destroy = i915_gem_dumb_destroy,
> +	.dumb_destroy = drm_gem_dumb_destroy,
>  	.ioctls = i915_ioctls,
>  	.fops = &i915_driver_fops,
>  	.name = DRIVER_NAME,
> diff --git a/drivers/gpu/drm/i915/i915_drv.h
> b/drivers/gpu/drm/i915/i915_drv.h
> index cef35d3..5cb3e4d 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -1732,8 +1732,6 @@ int i915_gem_dumb_create(struct drm_file *file_priv,
>  			 struct drm_mode_create_dumb *args);
>  int i915_gem_mmap_gtt(struct drm_file *file_priv, struct drm_device *dev,
>  		      uint32_t handle, uint64_t *offset);
> -int i915_gem_dumb_destroy(struct drm_file *file_priv, struct drm_device
> *dev,
> -			  uint32_t handle);
>  /**
>   * Returns true if seq1 is later than seq2.
>   */
> diff --git a/drivers/gpu/drm/i915/i915_gem.c
> b/drivers/gpu/drm/i915/i915_gem.c
> index 46bf7e3..10b8c43 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -246,13 +246,6 @@ i915_gem_dumb_create(struct drm_file *file,
>  			       args->size, &args->handle);
>  }
> 
> -int i915_gem_dumb_destroy(struct drm_file *file,
> -			  struct drm_device *dev,
> -			  uint32_t handle)
> -{
> -	return drm_gem_handle_delete(file, handle);
> -}
> -
>  /**
>   * Creates a new mm object and returns a handle to it.
>   */
> diff --git a/drivers/gpu/drm/mgag200/mgag200_drv.c
> b/drivers/gpu/drm/mgag200/mgag200_drv.c
> index 122b571..bd91964 100644
> --- a/drivers/gpu/drm/mgag200/mgag200_drv.c
> +++ b/drivers/gpu/drm/mgag200/mgag200_drv.c
> @@ -104,7 +104,7 @@ static struct drm_driver driver = {
>  	.gem_free_object = mgag200_gem_free_object,
>  	.dumb_create = mgag200_dumb_create,
>  	.dumb_map_offset = mgag200_dumb_mmap_offset,
> -	.dumb_destroy = mgag200_dumb_destroy,
> +	.dumb_destroy = drm_gem_dumb_destroy,
>  };
> 
>  static struct pci_driver mgag200_pci_driver = {
> diff --git a/drivers/gpu/drm/mgag200/mgag200_drv.h
> b/drivers/gpu/drm/mgag200/mgag200_drv.h
> index 12e2499..baaae19 100644
> --- a/drivers/gpu/drm/mgag200/mgag200_drv.h
> +++ b/drivers/gpu/drm/mgag200/mgag200_drv.h
> @@ -264,9 +264,6 @@ int mgag200_gem_init_object(struct drm_gem_object
> *obj);
>  int mgag200_dumb_create(struct drm_file *file,
>  			struct drm_device *dev,
>  			struct drm_mode_create_dumb *args);
> -int mgag200_dumb_destroy(struct drm_file *file,
> -			 struct drm_device *dev,
> -			 uint32_t handle);
>  void mgag200_gem_free_object(struct drm_gem_object *obj);
>  int
>  mgag200_dumb_mmap_offset(struct drm_file *file,
> diff --git a/drivers/gpu/drm/mgag200/mgag200_main.c
> b/drivers/gpu/drm/mgag200/mgag200_main.c
> index 9fa5685..8d46c22 100644
> --- a/drivers/gpu/drm/mgag200/mgag200_main.c
> +++ b/drivers/gpu/drm/mgag200/mgag200_main.c
> @@ -310,13 +310,6 @@ int mgag200_dumb_create(struct drm_file *file,
>  	return 0;
>  }
> 
> -int mgag200_dumb_destroy(struct drm_file *file,
> -		     struct drm_device *dev,
> -		     uint32_t handle)
> -{
> -	return drm_gem_handle_delete(file, handle);
> -}
> -
>  int mgag200_gem_init_object(struct drm_gem_object *obj)
>  {
>  	BUG();
> diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c
> b/drivers/gpu/drm/nouveau/nouveau_display.c
> index 708b2d1..e6dfaaa 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_display.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_display.c
> @@ -681,13 +681,6 @@ nouveau_display_dumb_create(struct drm_file
> *file_priv, struct drm_device *dev,
>  }
> 
>  int
> -nouveau_display_dumb_destroy(struct drm_file *file_priv, struct
> drm_device *dev,
> -			     uint32_t handle)
> -{
> -	return drm_gem_handle_delete(file_priv, handle);
> -}
> -
> -int
>  nouveau_display_dumb_map_offset(struct drm_file *file_priv,
>  				struct drm_device *dev,
>  				uint32_t handle, uint64_t *poffset)
> diff --git a/drivers/gpu/drm/nouveau/nouveau_display.h
> b/drivers/gpu/drm/nouveau/nouveau_display.h
> index 1ea3e47..185e741 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_display.h
> +++ b/drivers/gpu/drm/nouveau/nouveau_display.h
> @@ -68,8 +68,6 @@ int  nouveau_display_dumb_create(struct drm_file *,
> struct drm_device *,
>  				 struct drm_mode_create_dumb *args);
>  int  nouveau_display_dumb_map_offset(struct drm_file *, struct drm_device
> *,
>  				     u32 handle, u64 *offset);
> -int  nouveau_display_dumb_destroy(struct drm_file *, struct drm_device *,
> -				  u32 handle);
> 
>  void nouveau_hdmi_mode_set(struct drm_encoder *, struct drm_display_mode
> *);
> 
> diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c
> b/drivers/gpu/drm/nouveau/nouveau_drm.c
> index 218a4b5..c683bae 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_drm.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
> @@ -715,7 +715,7 @@ driver = {
> 
>  	.dumb_create = nouveau_display_dumb_create,
>  	.dumb_map_offset = nouveau_display_dumb_map_offset,
> -	.dumb_destroy = nouveau_display_dumb_destroy,
> +	.dumb_destroy = drm_gem_dumb_destroy,
> 
>  	.name = DRIVER_NAME,
>  	.desc = DRIVER_DESC,
> diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c
> b/drivers/gpu/drm/omapdrm/omap_drv.c
> index 826586f..75886a3 100644
> --- a/drivers/gpu/drm/omapdrm/omap_drv.c
> +++ b/drivers/gpu/drm/omapdrm/omap_drv.c
> @@ -618,7 +618,7 @@ static struct drm_driver omap_drm_driver = {
>  		.gem_vm_ops = &omap_gem_vm_ops,
>  		.dumb_create = omap_gem_dumb_create,
>  		.dumb_map_offset = omap_gem_dumb_map_offset,
> -		.dumb_destroy = omap_gem_dumb_destroy,
> +		.dumb_destroy = drm_gem_dumb_destroy,
>  		.ioctls = ioctls,
>  		.num_ioctls = DRM_OMAP_NUM_IOCTLS,
>  		.fops = &omapdriver_fops,
> diff --git a/drivers/gpu/drm/omapdrm/omap_drv.h
> b/drivers/gpu/drm/omapdrm/omap_drv.h
> index 215a20d..fd13601 100644
> --- a/drivers/gpu/drm/omapdrm/omap_drv.h
> +++ b/drivers/gpu/drm/omapdrm/omap_drv.h
> @@ -224,8 +224,6 @@ int omap_gem_init_object(struct drm_gem_object *obj);
>  void *omap_gem_vaddr(struct drm_gem_object *obj);
>  int omap_gem_dumb_map_offset(struct drm_file *file, struct drm_device
> *dev,
>  		uint32_t handle, uint64_t *offset);
> -int omap_gem_dumb_destroy(struct drm_file *file, struct drm_device *dev,
> -		uint32_t handle);
>  int omap_gem_dumb_create(struct drm_file *file, struct drm_device *dev,
>  		struct drm_mode_create_dumb *args);
>  int omap_gem_mmap(struct file *filp, struct vm_area_struct *vma);
> diff --git a/drivers/gpu/drm/omapdrm/omap_gem.c
> b/drivers/gpu/drm/omapdrm/omap_gem.c
> index ebbdf41..9c30aaa 100644
> --- a/drivers/gpu/drm/omapdrm/omap_gem.c
> +++ b/drivers/gpu/drm/omapdrm/omap_gem.c
> @@ -629,21 +629,6 @@ int omap_gem_dumb_create(struct drm_file *file,
> struct drm_device *dev,
>  }
> 
>  /**
> - * omap_gem_dumb_destroy	-	destroy a dumb buffer
> - * @file: client file
> - * @dev: our DRM device
> - * @handle: the object handle
> - *
> - * Destroy a handle that was created via omap_gem_dumb_create.
> - */
> -int omap_gem_dumb_destroy(struct drm_file *file, struct drm_device *dev,
> -		uint32_t handle)
> -{
> -	/* No special work needed, drop the reference and see what falls
> out */
> -	return drm_gem_handle_delete(file, handle);
> -}
> -
> -/**
>   * omap_gem_dumb_map	-	buffer mapping for dumb interface
>   * @file: our drm client file
>   * @dev: drm device
> diff --git a/drivers/gpu/drm/qxl/qxl_drv.c b/drivers/gpu/drm/qxl/qxl_drv.c
> index df0b577..48f2dfd 100644
> --- a/drivers/gpu/drm/qxl/qxl_drv.c
> +++ b/drivers/gpu/drm/qxl/qxl_drv.c
> @@ -221,7 +221,7 @@ static struct drm_driver qxl_driver = {
> 
>  	.dumb_create = qxl_mode_dumb_create,
>  	.dumb_map_offset = qxl_mode_dumb_mmap,
> -	.dumb_destroy = qxl_mode_dumb_destroy,
> +	.dumb_destroy = drm_gem_dumb_destroy,
>  #if defined(CONFIG_DEBUG_FS)
>  	.debugfs_init = qxl_debugfs_init,
>  	.debugfs_cleanup = qxl_debugfs_takedown,
> diff --git a/drivers/gpu/drm/qxl/qxl_drv.h b/drivers/gpu/drm/qxl/qxl_drv.h
> index aacb791..57cb7a8 100644
> --- a/drivers/gpu/drm/qxl/qxl_drv.h
> +++ b/drivers/gpu/drm/qxl/qxl_drv.h
> @@ -418,9 +418,6 @@ int qxl_bo_kmap(struct qxl_bo *bo, void **ptr);
>  int qxl_mode_dumb_create(struct drm_file *file_priv,
>  			 struct drm_device *dev,
>  			 struct drm_mode_create_dumb *args);
> -int qxl_mode_dumb_destroy(struct drm_file *file_priv,
> -			  struct drm_device *dev,
> -			  uint32_t handle);
>  int qxl_mode_dumb_mmap(struct drm_file *filp,
>  		       struct drm_device *dev,
>  		       uint32_t handle, uint64_t *offset_p);
> diff --git a/drivers/gpu/drm/qxl/qxl_dumb.c
> b/drivers/gpu/drm/qxl/qxl_dumb.c
> index 847c4ee..d34bb41 100644
> --- a/drivers/gpu/drm/qxl/qxl_dumb.c
> +++ b/drivers/gpu/drm/qxl/qxl_dumb.c
> @@ -68,13 +68,6 @@ int qxl_mode_dumb_create(struct drm_file *file_priv,
>  	return 0;
>  }
> 
> -int qxl_mode_dumb_destroy(struct drm_file *file_priv,
> -			     struct drm_device *dev,
> -			     uint32_t handle)
> -{
> -	return drm_gem_handle_delete(file_priv, handle);
> -}
> -
>  int qxl_mode_dumb_mmap(struct drm_file *file_priv,
>  		       struct drm_device *dev,
>  		       uint32_t handle, uint64_t *offset_p)
> diff --git a/drivers/gpu/drm/radeon/radeon.h
> b/drivers/gpu/drm/radeon/radeon.h
> index 9b7025d..39e5be8 100644
> --- a/drivers/gpu/drm/radeon/radeon.h
> +++ b/drivers/gpu/drm/radeon/radeon.h
> @@ -490,9 +490,6 @@ int radeon_mode_dumb_create(struct drm_file
*file_priv,
>  int radeon_mode_dumb_mmap(struct drm_file *filp,
>  			  struct drm_device *dev,
>  			  uint32_t handle, uint64_t *offset_p);
> -int radeon_mode_dumb_destroy(struct drm_file *file_priv,
> -			     struct drm_device *dev,
> -			     uint32_t handle);
> 
>  /*
>   * Semaphores.
> diff --git a/drivers/gpu/drm/radeon/radeon_drv.c
> b/drivers/gpu/drm/radeon/radeon_drv.c
> index e5419b3..f01a218 100644
> --- a/drivers/gpu/drm/radeon/radeon_drv.c
> +++ b/drivers/gpu/drm/radeon/radeon_drv.c
> @@ -120,9 +120,6 @@ int radeon_mode_dumb_mmap(struct drm_file *filp,
>  int radeon_mode_dumb_create(struct drm_file *file_priv,
>  			    struct drm_device *dev,
>  			    struct drm_mode_create_dumb *args);
> -int radeon_mode_dumb_destroy(struct drm_file *file_priv,
> -			     struct drm_device *dev,
> -			     uint32_t handle);
>  struct sg_table *radeon_gem_prime_get_sg_table(struct drm_gem_object
> *obj);
>  struct drm_gem_object *radeon_gem_prime_import_sg_table(struct drm_device
> *dev,
>  							size_t size,
> @@ -420,7 +417,7 @@ static struct drm_driver kms_driver = {
>  	.dma_ioctl = radeon_dma_ioctl_kms,
>  	.dumb_create = radeon_mode_dumb_create,
>  	.dumb_map_offset = radeon_mode_dumb_mmap,
> -	.dumb_destroy = radeon_mode_dumb_destroy,
> +	.dumb_destroy = drm_gem_dumb_destroy,
>  	.fops = &radeon_driver_kms_fops,
> 
>  	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
> diff --git a/drivers/gpu/drm/radeon/radeon_gem.c
> b/drivers/gpu/drm/radeon/radeon_gem.c
> index aa79603..dce99c8 100644
> --- a/drivers/gpu/drm/radeon/radeon_gem.c
> +++ b/drivers/gpu/drm/radeon/radeon_gem.c
> @@ -570,13 +570,6 @@ int radeon_mode_dumb_create(struct drm_file
> *file_priv,
>  	return 0;
>  }
> 
> -int radeon_mode_dumb_destroy(struct drm_file *file_priv,
> -			     struct drm_device *dev,
> -			     uint32_t handle)
> -{
> -	return drm_gem_handle_delete(file_priv, handle);
> -}
> -
>  #if defined(CONFIG_DEBUG_FS)
>  static int radeon_debugfs_gem_info(struct seq_file *m, void *data)
>  {
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_drv.c b/drivers/gpu/drm/rcar-
> du/rcar_du_drv.c
> index ff82877..3ebd419 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> @@ -253,7 +253,7 @@ static struct drm_driver rcar_du_driver = {
>  	.gem_prime_export	= drm_gem_cma_dmabuf_export,
>  	.dumb_create		= rcar_du_dumb_create,
>  	.dumb_map_offset	= drm_gem_cma_dumb_map_offset,
> -	.dumb_destroy		= drm_gem_cma_dumb_destroy,
> +	.dumb_destroy		= drm_gem_dumb_destroy,
>  	.fops			= &rcar_du_fops,
>  	.name			= "rcar-du",
>  	.desc			= "Renesas R-Car Display Unit",
> diff --git a/drivers/gpu/drm/shmobile/shmob_drm_drv.c
> b/drivers/gpu/drm/shmobile/shmob_drm_drv.c
> index edc1018..7e1843f 100644
> --- a/drivers/gpu/drm/shmobile/shmob_drm_drv.c
> +++ b/drivers/gpu/drm/shmobile/shmob_drm_drv.c
> @@ -280,7 +280,7 @@ static struct drm_driver shmob_drm_driver = {
>  	.gem_prime_export	= drm_gem_cma_dmabuf_export,
>  	.dumb_create		= drm_gem_cma_dumb_create,
>  	.dumb_map_offset	= drm_gem_cma_dumb_map_offset,
> -	.dumb_destroy		= drm_gem_cma_dumb_destroy,
> +	.dumb_destroy		= drm_gem_dumb_destroy,
>  	.fops			= &shmob_drm_fops,
>  	.name			= "shmob-drm",
>  	.desc			= "Renesas SH Mobile DRM",
> diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> index 40b71da..14801c2 100644
> --- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> +++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> @@ -519,7 +519,7 @@ static struct drm_driver tilcdc_driver = {
>  	.gem_vm_ops         = &drm_gem_cma_vm_ops,
>  	.dumb_create        = drm_gem_cma_dumb_create,
>  	.dumb_map_offset    = drm_gem_cma_dumb_map_offset,
> -	.dumb_destroy       = drm_gem_cma_dumb_destroy,
> +	.dumb_destroy       = drm_gem_dumb_destroy,
>  #ifdef CONFIG_DEBUG_FS
>  	.debugfs_init       = tilcdc_debugfs_init,
>  	.debugfs_cleanup    = tilcdc_debugfs_cleanup,
> diff --git a/drivers/gpu/drm/udl/udl_drv.c b/drivers/gpu/drm/udl/udl_drv.c
> index c0770db..bb0af58 100644
> --- a/drivers/gpu/drm/udl/udl_drv.c
> +++ b/drivers/gpu/drm/udl/udl_drv.c
> @@ -84,7 +84,7 @@ static struct drm_driver driver = {
> 
>  	.dumb_create = udl_dumb_create,
>  	.dumb_map_offset = udl_gem_mmap,
> -	.dumb_destroy = udl_dumb_destroy,
> +	.dumb_destroy = drm_gem_dumb_destroy,
>  	.fops = &udl_driver_fops,
> 
>  	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> diff --git a/drivers/gpu/drm/udl/udl_drv.h b/drivers/gpu/drm/udl/udl_drv.h
> index cc6d90f..56aec94 100644
> --- a/drivers/gpu/drm/udl/udl_drv.h
> +++ b/drivers/gpu/drm/udl/udl_drv.h
> @@ -114,8 +114,6 @@ int udl_dumb_create(struct drm_file *file_priv,
>  		    struct drm_mode_create_dumb *args);
>  int udl_gem_mmap(struct drm_file *file_priv, struct drm_device *dev,
>  		 uint32_t handle, uint64_t *offset);
> -int udl_dumb_destroy(struct drm_file *file_priv, struct drm_device *dev,
> -		     uint32_t handle);
> 
>  int udl_gem_init_object(struct drm_gem_object *obj);
>  void udl_gem_free_object(struct drm_gem_object *gem_obj);
> diff --git a/drivers/gpu/drm/udl/udl_gem.c b/drivers/gpu/drm/udl/udl_gem.c
> index ef034fa..c82c84a 100644
> --- a/drivers/gpu/drm/udl/udl_gem.c
> +++ b/drivers/gpu/drm/udl/udl_gem.c
> @@ -66,12 +66,6 @@ int udl_dumb_create(struct drm_file *file,
>  			      args->size, &args->handle);
>  }
> 
> -int udl_dumb_destroy(struct drm_file *file, struct drm_device *dev,
> -		     uint32_t handle)
> -{
> -	return drm_gem_handle_delete(file, handle);
> -}
> -
>  int udl_drm_gem_mmap(struct file *filp, struct vm_area_struct *vma)
>  {
>  	int ret;
> diff --git a/drivers/gpu/host1x/drm/drm.c b/drivers/gpu/host1x/drm/drm.c
> index e184b00..87aa09b 100644
> --- a/drivers/gpu/host1x/drm/drm.c
> +++ b/drivers/gpu/host1x/drm/drm.c
> @@ -633,7 +633,7 @@ struct drm_driver tegra_drm_driver = {
>  	.gem_vm_ops = &tegra_bo_vm_ops,
>  	.dumb_create = tegra_bo_dumb_create,
>  	.dumb_map_offset = tegra_bo_dumb_map_offset,
> -	.dumb_destroy = tegra_bo_dumb_destroy,
> +	.dumb_destroy = drm_gem_dumb_destroy,
> 
>  	.ioctls = tegra_drm_ioctls,
>  	.num_ioctls = ARRAY_SIZE(tegra_drm_ioctls),
> diff --git a/drivers/gpu/host1x/drm/gem.c b/drivers/gpu/host1x/drm/gem.c
> index c5e9a9b..e4fbd78 100644
> --- a/drivers/gpu/host1x/drm/gem.c
> +++ b/drivers/gpu/host1x/drm/gem.c
> @@ -262,9 +262,3 @@ int tegra_drm_mmap(struct file *file, struct
> vm_area_struct *vma)
> 
>  	return ret;
>  }
> -
> -int tegra_bo_dumb_destroy(struct drm_file *file, struct drm_device *drm,
> -			  unsigned int handle)
> -{
> -	return drm_gem_handle_delete(file, handle);
> -}
> diff --git a/drivers/gpu/host1x/drm/gem.h b/drivers/gpu/host1x/drm/gem.h
> index 34de2b4..2e93b03 100644
> --- a/drivers/gpu/host1x/drm/gem.h
> +++ b/drivers/gpu/host1x/drm/gem.h
> @@ -49,8 +49,6 @@ int tegra_bo_dumb_create(struct drm_file *file, struct
> drm_device *drm,
>  			 struct drm_mode_create_dumb *args);
>  int tegra_bo_dumb_map_offset(struct drm_file *file, struct drm_device
> *drm,
>  			     uint32_t handle, uint64_t *offset);
> -int tegra_bo_dumb_destroy(struct drm_file *file, struct drm_device *drm,
> -			  unsigned int handle);
> 
>  int tegra_drm_mmap(struct file *file, struct vm_area_struct *vma);
> 
> diff --git a/drivers/staging/imx-drm/imx-drm-core.c b/drivers/staging/imx-
> drm/imx-drm-core.c
> index 6455305..9b16b56 100644
> --- a/drivers/staging/imx-drm/imx-drm-core.c
> +++ b/drivers/staging/imx-drm/imx-drm-core.c
> @@ -800,7 +800,7 @@ static struct drm_driver imx_drm_driver = {
>  	.gem_vm_ops		= &drm_gem_cma_vm_ops,
>  	.dumb_create		= drm_gem_cma_dumb_create,
>  	.dumb_map_offset	= drm_gem_cma_dumb_map_offset,
> -	.dumb_destroy		= drm_gem_cma_dumb_destroy,
> +	.dumb_destroy		= drm_gem_dumb_destroy,
> 
>  	.get_vblank_counter	= drm_vblank_count,
>  	.enable_vblank		= imx_drm_enable_vblank,
> diff --git a/include/drm/drmP.h b/include/drm/drmP.h
> index 1da1ca2..4d7ea3d 100644
> --- a/include/drm/drmP.h
> +++ b/include/drm/drmP.h
> @@ -1670,6 +1670,9 @@ int drm_gem_handle_create(struct drm_file
*file_priv,
>  			  u32 *handlep);
>  int drm_gem_handle_delete(struct drm_file *filp, u32 handle);
> 
> +int drm_gem_dumb_destroy(struct drm_file *file,
> +			 struct drm_device *dev,
> +			 uint32_t handle);
> 
>  void drm_gem_free_mmap_offset(struct drm_gem_object *obj);
>  int drm_gem_create_mmap_offset(struct drm_gem_object *obj);
> diff --git a/include/drm/drm_gem_cma_helper.h
> b/include/drm/drm_gem_cma_helper.h
> index c34f27f..89b4d7d 100644
> --- a/include/drm/drm_gem_cma_helper.h
> +++ b/include/drm/drm_gem_cma_helper.h
> @@ -30,14 +30,6 @@ int drm_gem_cma_dumb_map_offset(struct drm_file
> *file_priv,
>  /* set vm_flags and we can change the vm attribute to other one at here.
> */
>  int drm_gem_cma_mmap(struct file *filp, struct vm_area_struct *vma);
> 
> -/*
> - * destroy memory region allocated.
> - *	- a gem handle and physical memory region pointed by a gem object
> - *	would be released by drm_gem_handle_delete().
> - */
> -int drm_gem_cma_dumb_destroy(struct drm_file *file_priv,
> -		struct drm_device *drm, unsigned int handle);
> -
>  /* allocate physical memory. */
>  struct drm_gem_cma_object *drm_gem_cma_create(struct drm_device *drm,
>  		unsigned int size);
> --
> 1.8.3.2

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

* Re: [PATCH 13/20] drm/gem: create drm_gem_dumb_destroy
  2013-07-16  7:12 ` [PATCH 13/20] drm/gem: create drm_gem_dumb_destroy Daniel Vetter
                     ` (2 preceding siblings ...)
  2013-07-23  7:15   ` Inki Dae
@ 2013-08-01 11:41   ` Patrik Jakobsson
  3 siblings, 0 replies; 6+ messages in thread
From: Patrik Jakobsson @ 2013-08-01 11:41 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: Ben Skeggs, Intel Graphics Development, DRI Development, Inki Dae,
	Rob Clark, Laurent Pinchart, Alex Deucher

On Tue, Jul 16, 2013 at 9:12 AM, Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> All the gem based kms drivers really want the same function to
> destroy a dumb framebuffer backing storage object.
>
> So give it to them and roll it out in all drivers.
>
> This still leaves the option open for kms drivers which don't use GEM
> for backing storage, but it does decently simplify matters for gem
> drivers.
>
> Cc: Inki Dae <inki.dae@samsung.com>
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Cc: Intel Graphics Development <intel-gfx@lists.freedesktop.org>
> Cc: Ben Skeggs <skeggsb@gmail.com>
> Cc: Rob Clark <robdclark@gmail.com>
> Cc: Alex Deucher <alexdeucher@gmail.com>
> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> ---
>  drivers/gpu/drm/ast/ast_drv.c             |  2 +-
>  drivers/gpu/drm/ast/ast_drv.h             |  3 ---
>  drivers/gpu/drm/ast/ast_main.c            |  7 -------
>  drivers/gpu/drm/cirrus/cirrus_drv.c       |  2 +-
>  drivers/gpu/drm/cirrus/cirrus_drv.h       |  3 ---
>  drivers/gpu/drm/cirrus/cirrus_main.c      |  7 -------
>  drivers/gpu/drm/drm_gem.c                 | 14 ++++++++++++++
>  drivers/gpu/drm/drm_gem_cma_helper.c      | 10 ----------
>  drivers/gpu/drm/exynos/exynos_drm_drv.c   |  2 +-
>  drivers/gpu/drm/exynos/exynos_drm_gem.c   | 20 --------------------
>  drivers/gpu/drm/exynos/exynos_drm_gem.h   |  9 ---------
>  drivers/gpu/drm/gma500/gem.c              | 17 -----------------
>  drivers/gpu/drm/gma500/psb_drv.c          |  2 +-
>  drivers/gpu/drm/gma500/psb_drv.h          |  2 --
>  drivers/gpu/drm/i915/i915_drv.c           |  2 +-
>  drivers/gpu/drm/i915/i915_drv.h           |  2 --
>  drivers/gpu/drm/i915/i915_gem.c           |  7 -------
>  drivers/gpu/drm/mgag200/mgag200_drv.c     |  2 +-
>  drivers/gpu/drm/mgag200/mgag200_drv.h     |  3 ---
>  drivers/gpu/drm/mgag200/mgag200_main.c    |  7 -------
>  drivers/gpu/drm/nouveau/nouveau_display.c |  7 -------
>  drivers/gpu/drm/nouveau/nouveau_display.h |  2 --
>  drivers/gpu/drm/nouveau/nouveau_drm.c     |  2 +-
>  drivers/gpu/drm/omapdrm/omap_drv.c        |  2 +-
>  drivers/gpu/drm/omapdrm/omap_drv.h        |  2 --
>  drivers/gpu/drm/omapdrm/omap_gem.c        | 15 ---------------
>  drivers/gpu/drm/qxl/qxl_drv.c             |  2 +-
>  drivers/gpu/drm/qxl/qxl_drv.h             |  3 ---
>  drivers/gpu/drm/qxl/qxl_dumb.c            |  7 -------
>  drivers/gpu/drm/radeon/radeon.h           |  3 ---
>  drivers/gpu/drm/radeon/radeon_drv.c       |  5 +----
>  drivers/gpu/drm/radeon/radeon_gem.c       |  7 -------
>  drivers/gpu/drm/rcar-du/rcar_du_drv.c     |  2 +-
>  drivers/gpu/drm/shmobile/shmob_drm_drv.c  |  2 +-
>  drivers/gpu/drm/tilcdc/tilcdc_drv.c       |  2 +-
>  drivers/gpu/drm/udl/udl_drv.c             |  2 +-
>  drivers/gpu/drm/udl/udl_drv.h             |  2 --
>  drivers/gpu/drm/udl/udl_gem.c             |  6 ------
>  drivers/gpu/host1x/drm/drm.c              |  2 +-
>  drivers/gpu/host1x/drm/gem.c              |  6 ------
>  drivers/gpu/host1x/drm/gem.h              |  2 --
>  drivers/staging/imx-drm/imx-drm-core.c    |  2 +-
>  include/drm/drmP.h                        |  3 +++
>  include/drm/drm_gem_cma_helper.h          |  8 --------
>  44 files changed, 33 insertions(+), 186 deletions(-)
>
> diff --git a/drivers/gpu/drm/ast/ast_drv.c b/drivers/gpu/drm/ast/ast_drv.c
> index df0d0a0..a144fb0 100644
> --- a/drivers/gpu/drm/ast/ast_drv.c
> +++ b/drivers/gpu/drm/ast/ast_drv.c
> @@ -216,7 +216,7 @@ static struct drm_driver driver = {
>         .gem_free_object = ast_gem_free_object,
>         .dumb_create = ast_dumb_create,
>         .dumb_map_offset = ast_dumb_mmap_offset,
> -       .dumb_destroy = ast_dumb_destroy,
> +       .dumb_destroy = drm_gem_dumb_destroy,
>
>  };
>
> diff --git a/drivers/gpu/drm/ast/ast_drv.h b/drivers/gpu/drm/ast/ast_drv.h
> index 622d4ae..796dbb2 100644
> --- a/drivers/gpu/drm/ast/ast_drv.h
> +++ b/drivers/gpu/drm/ast/ast_drv.h
> @@ -322,9 +322,6 @@ ast_bo(struct ttm_buffer_object *bo)
>  extern int ast_dumb_create(struct drm_file *file,
>                            struct drm_device *dev,
>                            struct drm_mode_create_dumb *args);
> -extern int ast_dumb_destroy(struct drm_file *file,
> -                           struct drm_device *dev,
> -                           uint32_t handle);
>
>  extern int ast_gem_init_object(struct drm_gem_object *obj);
>  extern void ast_gem_free_object(struct drm_gem_object *obj);
> diff --git a/drivers/gpu/drm/ast/ast_main.c b/drivers/gpu/drm/ast/ast_main.c
> index f60fd7b..0ef4228 100644
> --- a/drivers/gpu/drm/ast/ast_main.c
> +++ b/drivers/gpu/drm/ast/ast_main.c
> @@ -449,13 +449,6 @@ int ast_dumb_create(struct drm_file *file,
>         return 0;
>  }
>
> -int ast_dumb_destroy(struct drm_file *file,
> -                    struct drm_device *dev,
> -                    uint32_t handle)
> -{
> -       return drm_gem_handle_delete(file, handle);
> -}
> -
>  int ast_gem_init_object(struct drm_gem_object *obj)
>  {
>         BUG();
> diff --git a/drivers/gpu/drm/cirrus/cirrus_drv.c b/drivers/gpu/drm/cirrus/cirrus_drv.c
> index 8ecb601..d35d99c 100644
> --- a/drivers/gpu/drm/cirrus/cirrus_drv.c
> +++ b/drivers/gpu/drm/cirrus/cirrus_drv.c
> @@ -102,7 +102,7 @@ static struct drm_driver driver = {
>         .gem_free_object = cirrus_gem_free_object,
>         .dumb_create = cirrus_dumb_create,
>         .dumb_map_offset = cirrus_dumb_mmap_offset,
> -       .dumb_destroy = cirrus_dumb_destroy,
> +       .dumb_destroy = drm_gem_dumb_destroy,
>  };
>
>  static struct pci_driver cirrus_pci_driver = {
> diff --git a/drivers/gpu/drm/cirrus/cirrus_drv.h b/drivers/gpu/drm/cirrus/cirrus_drv.h
> index bae5560..9b0bb91 100644
> --- a/drivers/gpu/drm/cirrus/cirrus_drv.h
> +++ b/drivers/gpu/drm/cirrus/cirrus_drv.h
> @@ -203,9 +203,6 @@ int cirrus_gem_create(struct drm_device *dev,
>  int cirrus_dumb_create(struct drm_file *file,
>                     struct drm_device *dev,
>                        struct drm_mode_create_dumb *args);
> -int cirrus_dumb_destroy(struct drm_file *file,
> -                    struct drm_device *dev,
> -                       uint32_t handle);
>
>  int cirrus_framebuffer_init(struct drm_device *dev,
>                            struct cirrus_framebuffer *gfb,
> diff --git a/drivers/gpu/drm/cirrus/cirrus_main.c b/drivers/gpu/drm/cirrus/cirrus_main.c
> index 35cbae8..c1ed9e1 100644
> --- a/drivers/gpu/drm/cirrus/cirrus_main.c
> +++ b/drivers/gpu/drm/cirrus/cirrus_main.c
> @@ -255,13 +255,6 @@ int cirrus_dumb_create(struct drm_file *file,
>         return 0;
>  }
>
> -int cirrus_dumb_destroy(struct drm_file *file,
> -                    struct drm_device *dev,
> -                    uint32_t handle)
> -{
> -       return drm_gem_handle_delete(file, handle);
> -}
> -
>  int cirrus_gem_init_object(struct drm_gem_object *obj)
>  {
>         BUG();
> diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
> index 3b5305c..1609a3d 100644
> --- a/drivers/gpu/drm/drm_gem.c
> +++ b/drivers/gpu/drm/drm_gem.c
> @@ -303,6 +303,20 @@ drm_gem_handle_delete(struct drm_file *filp, u32 handle)
>  EXPORT_SYMBOL(drm_gem_handle_delete);
>
>  /**
> + * drm_gem_dumb_destroy - dumb fb callback helper for gem based drivers
> + *
> + * This implements the ->dumb_destroy kms driver callback for drivers which use
> + * gem to manage their backing storage.
> + */
> +int drm_gem_dumb_destroy(struct drm_file *file,
> +                        struct drm_device *dev,
> +                        uint32_t handle)
> +{
> +       return drm_gem_handle_delete(file, handle);
> +}
> +EXPORT_SYMBOL(drm_gem_dumb_destroy);
> +
> +/**
>   * Create a handle for this object. This adds a handle reference
>   * to the object, which includes a regular reference count. Callers
>   * will likely want to dereference the object afterwards.
> diff --git a/drivers/gpu/drm/drm_gem_cma_helper.c b/drivers/gpu/drm/drm_gem_cma_helper.c
> index ece72a8..2e4840d 100644
> --- a/drivers/gpu/drm/drm_gem_cma_helper.c
> +++ b/drivers/gpu/drm/drm_gem_cma_helper.c
> @@ -286,16 +286,6 @@ int drm_gem_cma_mmap(struct file *filp, struct vm_area_struct *vma)
>  }
>  EXPORT_SYMBOL_GPL(drm_gem_cma_mmap);
>
> -/*
> - * drm_gem_cma_dumb_destroy - (struct drm_driver)->dumb_destroy callback function
> - */
> -int drm_gem_cma_dumb_destroy(struct drm_file *file_priv,
> -               struct drm_device *drm, unsigned int handle)
> -{
> -       return drm_gem_handle_delete(file_priv, handle);
> -}
> -EXPORT_SYMBOL_GPL(drm_gem_cma_dumb_destroy);
> -
>  #ifdef CONFIG_DEBUG_FS
>  void drm_gem_cma_describe(struct drm_gem_cma_object *cma_obj, struct seq_file *m)
>  {
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c
> index ca2729a..21fc28a 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
> @@ -271,7 +271,7 @@ static struct drm_driver exynos_drm_driver = {
>         .gem_vm_ops             = &exynos_drm_gem_vm_ops,
>         .dumb_create            = exynos_drm_gem_dumb_create,
>         .dumb_map_offset        = exynos_drm_gem_dumb_map_offset,
> -       .dumb_destroy           = exynos_drm_gem_dumb_destroy,
> +       .dumb_destroy           = drm_gem_dumb_destroy,
>         .prime_handle_to_fd     = drm_gem_prime_handle_to_fd,
>         .prime_fd_to_handle     = drm_gem_prime_fd_to_handle,
>         .gem_prime_export       = exynos_dmabuf_prime_export,
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_gem.c b/drivers/gpu/drm/exynos/exynos_drm_gem.c
> index 16963ca..2ecd945 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_gem.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_gem.c
> @@ -719,26 +719,6 @@ unlock:
>         return ret;
>  }
>
> -int exynos_drm_gem_dumb_destroy(struct drm_file *file_priv,
> -                               struct drm_device *dev,
> -                               unsigned int handle)
> -{
> -       int ret;
> -
> -       /*
> -        * obj->refcount and obj->handle_count are decreased and
> -        * if both them are 0 then exynos_drm_gem_free_object()
> -        * would be called by callback to release resources.
> -        */
> -       ret = drm_gem_handle_delete(file_priv, handle);
> -       if (ret < 0) {
> -               DRM_ERROR("failed to delete drm_gem_handle.\n");
> -               return ret;
> -       }
> -
> -       return 0;
> -}
> -
>  int exynos_drm_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
>  {
>         struct drm_gem_object *obj = vma->vm_private_data;
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_gem.h b/drivers/gpu/drm/exynos/exynos_drm_gem.h
> index 468766b..09555af 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_gem.h
> +++ b/drivers/gpu/drm/exynos/exynos_drm_gem.h
> @@ -151,15 +151,6 @@ int exynos_drm_gem_dumb_map_offset(struct drm_file *file_priv,
>                                    struct drm_device *dev, uint32_t handle,
>                                    uint64_t *offset);
>
> -/*
> - * destroy memory region allocated.
> - *     - a gem handle and physical memory region pointed by a gem object
> - *     would be released by drm_gem_handle_delete().
> - */
> -int exynos_drm_gem_dumb_destroy(struct drm_file *file_priv,
> -                               struct drm_device *dev,
> -                               unsigned int handle);
> -
>  /* page fault handler and mmap fault address(virtual) to physical memory. */
>  int exynos_drm_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf);
>
> diff --git a/drivers/gpu/drm/gma500/gem.c b/drivers/gpu/drm/gma500/gem.c
> index eefd6cc..5ac9741 100644
> --- a/drivers/gpu/drm/gma500/gem.c
> +++ b/drivers/gpu/drm/gma500/gem.c
> @@ -165,23 +165,6 @@ int psb_gem_dumb_create(struct drm_file *file, struct drm_device *dev,
>  }
>
>  /**
> - *     psb_gem_dumb_destroy    -       destroy a dumb buffer
> - *     @file: client file
> - *     @dev: our DRM device
> - *     @handle: the object handle
> - *
> - *     Destroy a handle that was created via psb_gem_dumb_create, at least
> - *     we hope it was created that way. i915 seems to assume the caller
> - *     does the checking but that might be worth review ! FIXME
> - */
> -int psb_gem_dumb_destroy(struct drm_file *file, struct drm_device *dev,
> -                       uint32_t handle)
> -{
> -       /* No special work needed, drop the reference and see what falls out */
> -       return drm_gem_handle_delete(file, handle);
> -}
> -
> -/**
>   *     psb_gem_fault           -       pagefault handler for GEM objects
>   *     @vma: the VMA of the GEM object
>   *     @vmf: fault detail
> diff --git a/drivers/gpu/drm/gma500/psb_drv.c b/drivers/gpu/drm/gma500/psb_drv.c
> index bddea58..ed06d5c 100644
> --- a/drivers/gpu/drm/gma500/psb_drv.c
> +++ b/drivers/gpu/drm/gma500/psb_drv.c
> @@ -652,7 +652,7 @@ static struct drm_driver driver = {
>         .gem_vm_ops = &psb_gem_vm_ops,
>         .dumb_create = psb_gem_dumb_create,
>         .dumb_map_offset = psb_gem_dumb_map_gtt,
> -       .dumb_destroy = psb_gem_dumb_destroy,
> +       .dumb_destroy = drm_gem_dumb_destroy,
>         .fops = &psb_gem_fops,
>         .name = DRIVER_NAME,
>         .desc = DRIVER_DESC,
> diff --git a/drivers/gpu/drm/gma500/psb_drv.h b/drivers/gpu/drm/gma500/psb_drv.h
> index 6053b8a..984cacf 100644
> --- a/drivers/gpu/drm/gma500/psb_drv.h
> +++ b/drivers/gpu/drm/gma500/psb_drv.h
> @@ -838,8 +838,6 @@ extern int psb_gem_get_aperture(struct drm_device *dev, void *data,
>                         struct drm_file *file);
>  extern int psb_gem_dumb_create(struct drm_file *file, struct drm_device *dev,
>                         struct drm_mode_create_dumb *args);
> -extern int psb_gem_dumb_destroy(struct drm_file *file, struct drm_device *dev,
> -                       uint32_t handle);
>  extern int psb_gem_dumb_map_gtt(struct drm_file *file, struct drm_device *dev,
>                         uint32_t handle, uint64_t *offset);
>  extern int psb_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf);
> diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
> index b07362f..cca12db 100644
> --- a/drivers/gpu/drm/i915/i915_drv.c
> +++ b/drivers/gpu/drm/i915/i915_drv.c
> @@ -1163,7 +1163,7 @@ static struct drm_driver driver = {
>
>         .dumb_create = i915_gem_dumb_create,
>         .dumb_map_offset = i915_gem_mmap_gtt,
> -       .dumb_destroy = i915_gem_dumb_destroy,
> +       .dumb_destroy = drm_gem_dumb_destroy,
>         .ioctls = i915_ioctls,
>         .fops = &i915_driver_fops,
>         .name = DRIVER_NAME,
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index cef35d3..5cb3e4d 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -1732,8 +1732,6 @@ int i915_gem_dumb_create(struct drm_file *file_priv,
>                          struct drm_mode_create_dumb *args);
>  int i915_gem_mmap_gtt(struct drm_file *file_priv, struct drm_device *dev,
>                       uint32_t handle, uint64_t *offset);
> -int i915_gem_dumb_destroy(struct drm_file *file_priv, struct drm_device *dev,
> -                         uint32_t handle);
>  /**
>   * Returns true if seq1 is later than seq2.
>   */
> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> index 46bf7e3..10b8c43 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -246,13 +246,6 @@ i915_gem_dumb_create(struct drm_file *file,
>                                args->size, &args->handle);
>  }
>
> -int i915_gem_dumb_destroy(struct drm_file *file,
> -                         struct drm_device *dev,
> -                         uint32_t handle)
> -{
> -       return drm_gem_handle_delete(file, handle);
> -}
> -
>  /**
>   * Creates a new mm object and returns a handle to it.
>   */
> diff --git a/drivers/gpu/drm/mgag200/mgag200_drv.c b/drivers/gpu/drm/mgag200/mgag200_drv.c
> index 122b571..bd91964 100644
> --- a/drivers/gpu/drm/mgag200/mgag200_drv.c
> +++ b/drivers/gpu/drm/mgag200/mgag200_drv.c
> @@ -104,7 +104,7 @@ static struct drm_driver driver = {
>         .gem_free_object = mgag200_gem_free_object,
>         .dumb_create = mgag200_dumb_create,
>         .dumb_map_offset = mgag200_dumb_mmap_offset,
> -       .dumb_destroy = mgag200_dumb_destroy,
> +       .dumb_destroy = drm_gem_dumb_destroy,
>  };
>
>  static struct pci_driver mgag200_pci_driver = {
> diff --git a/drivers/gpu/drm/mgag200/mgag200_drv.h b/drivers/gpu/drm/mgag200/mgag200_drv.h
> index 12e2499..baaae19 100644
> --- a/drivers/gpu/drm/mgag200/mgag200_drv.h
> +++ b/drivers/gpu/drm/mgag200/mgag200_drv.h
> @@ -264,9 +264,6 @@ int mgag200_gem_init_object(struct drm_gem_object *obj);
>  int mgag200_dumb_create(struct drm_file *file,
>                         struct drm_device *dev,
>                         struct drm_mode_create_dumb *args);
> -int mgag200_dumb_destroy(struct drm_file *file,
> -                        struct drm_device *dev,
> -                        uint32_t handle);
>  void mgag200_gem_free_object(struct drm_gem_object *obj);
>  int
>  mgag200_dumb_mmap_offset(struct drm_file *file,
> diff --git a/drivers/gpu/drm/mgag200/mgag200_main.c b/drivers/gpu/drm/mgag200/mgag200_main.c
> index 9fa5685..8d46c22 100644
> --- a/drivers/gpu/drm/mgag200/mgag200_main.c
> +++ b/drivers/gpu/drm/mgag200/mgag200_main.c
> @@ -310,13 +310,6 @@ int mgag200_dumb_create(struct drm_file *file,
>         return 0;
>  }
>
> -int mgag200_dumb_destroy(struct drm_file *file,
> -                    struct drm_device *dev,
> -                    uint32_t handle)
> -{
> -       return drm_gem_handle_delete(file, handle);
> -}
> -
>  int mgag200_gem_init_object(struct drm_gem_object *obj)
>  {
>         BUG();
> diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c
> index 708b2d1..e6dfaaa 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_display.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_display.c
> @@ -681,13 +681,6 @@ nouveau_display_dumb_create(struct drm_file *file_priv, struct drm_device *dev,
>  }
>
>  int
> -nouveau_display_dumb_destroy(struct drm_file *file_priv, struct drm_device *dev,
> -                            uint32_t handle)
> -{
> -       return drm_gem_handle_delete(file_priv, handle);
> -}
> -
> -int
>  nouveau_display_dumb_map_offset(struct drm_file *file_priv,
>                                 struct drm_device *dev,
>                                 uint32_t handle, uint64_t *poffset)
> diff --git a/drivers/gpu/drm/nouveau/nouveau_display.h b/drivers/gpu/drm/nouveau/nouveau_display.h
> index 1ea3e47..185e741 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_display.h
> +++ b/drivers/gpu/drm/nouveau/nouveau_display.h
> @@ -68,8 +68,6 @@ int  nouveau_display_dumb_create(struct drm_file *, struct drm_device *,
>                                  struct drm_mode_create_dumb *args);
>  int  nouveau_display_dumb_map_offset(struct drm_file *, struct drm_device *,
>                                      u32 handle, u64 *offset);
> -int  nouveau_display_dumb_destroy(struct drm_file *, struct drm_device *,
> -                                 u32 handle);
>
>  void nouveau_hdmi_mode_set(struct drm_encoder *, struct drm_display_mode *);
>
> diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c
> index 218a4b5..c683bae 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_drm.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
> @@ -715,7 +715,7 @@ driver = {
>
>         .dumb_create = nouveau_display_dumb_create,
>         .dumb_map_offset = nouveau_display_dumb_map_offset,
> -       .dumb_destroy = nouveau_display_dumb_destroy,
> +       .dumb_destroy = drm_gem_dumb_destroy,
>
>         .name = DRIVER_NAME,
>         .desc = DRIVER_DESC,
> diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c
> index 826586f..75886a3 100644
> --- a/drivers/gpu/drm/omapdrm/omap_drv.c
> +++ b/drivers/gpu/drm/omapdrm/omap_drv.c
> @@ -618,7 +618,7 @@ static struct drm_driver omap_drm_driver = {
>                 .gem_vm_ops = &omap_gem_vm_ops,
>                 .dumb_create = omap_gem_dumb_create,
>                 .dumb_map_offset = omap_gem_dumb_map_offset,
> -               .dumb_destroy = omap_gem_dumb_destroy,
> +               .dumb_destroy = drm_gem_dumb_destroy,
>                 .ioctls = ioctls,
>                 .num_ioctls = DRM_OMAP_NUM_IOCTLS,
>                 .fops = &omapdriver_fops,
> diff --git a/drivers/gpu/drm/omapdrm/omap_drv.h b/drivers/gpu/drm/omapdrm/omap_drv.h
> index 215a20d..fd13601 100644
> --- a/drivers/gpu/drm/omapdrm/omap_drv.h
> +++ b/drivers/gpu/drm/omapdrm/omap_drv.h
> @@ -224,8 +224,6 @@ int omap_gem_init_object(struct drm_gem_object *obj);
>  void *omap_gem_vaddr(struct drm_gem_object *obj);
>  int omap_gem_dumb_map_offset(struct drm_file *file, struct drm_device *dev,
>                 uint32_t handle, uint64_t *offset);
> -int omap_gem_dumb_destroy(struct drm_file *file, struct drm_device *dev,
> -               uint32_t handle);
>  int omap_gem_dumb_create(struct drm_file *file, struct drm_device *dev,
>                 struct drm_mode_create_dumb *args);
>  int omap_gem_mmap(struct file *filp, struct vm_area_struct *vma);
> diff --git a/drivers/gpu/drm/omapdrm/omap_gem.c b/drivers/gpu/drm/omapdrm/omap_gem.c
> index ebbdf41..9c30aaa 100644
> --- a/drivers/gpu/drm/omapdrm/omap_gem.c
> +++ b/drivers/gpu/drm/omapdrm/omap_gem.c
> @@ -629,21 +629,6 @@ int omap_gem_dumb_create(struct drm_file *file, struct drm_device *dev,
>  }
>
>  /**
> - * omap_gem_dumb_destroy       -       destroy a dumb buffer
> - * @file: client file
> - * @dev: our DRM device
> - * @handle: the object handle
> - *
> - * Destroy a handle that was created via omap_gem_dumb_create.
> - */
> -int omap_gem_dumb_destroy(struct drm_file *file, struct drm_device *dev,
> -               uint32_t handle)
> -{
> -       /* No special work needed, drop the reference and see what falls out */
> -       return drm_gem_handle_delete(file, handle);
> -}
> -
> -/**
>   * omap_gem_dumb_map   -       buffer mapping for dumb interface
>   * @file: our drm client file
>   * @dev: drm device
> diff --git a/drivers/gpu/drm/qxl/qxl_drv.c b/drivers/gpu/drm/qxl/qxl_drv.c
> index df0b577..48f2dfd 100644
> --- a/drivers/gpu/drm/qxl/qxl_drv.c
> +++ b/drivers/gpu/drm/qxl/qxl_drv.c
> @@ -221,7 +221,7 @@ static struct drm_driver qxl_driver = {
>
>         .dumb_create = qxl_mode_dumb_create,
>         .dumb_map_offset = qxl_mode_dumb_mmap,
> -       .dumb_destroy = qxl_mode_dumb_destroy,
> +       .dumb_destroy = drm_gem_dumb_destroy,
>  #if defined(CONFIG_DEBUG_FS)
>         .debugfs_init = qxl_debugfs_init,
>         .debugfs_cleanup = qxl_debugfs_takedown,
> diff --git a/drivers/gpu/drm/qxl/qxl_drv.h b/drivers/gpu/drm/qxl/qxl_drv.h
> index aacb791..57cb7a8 100644
> --- a/drivers/gpu/drm/qxl/qxl_drv.h
> +++ b/drivers/gpu/drm/qxl/qxl_drv.h
> @@ -418,9 +418,6 @@ int qxl_bo_kmap(struct qxl_bo *bo, void **ptr);
>  int qxl_mode_dumb_create(struct drm_file *file_priv,
>                          struct drm_device *dev,
>                          struct drm_mode_create_dumb *args);
> -int qxl_mode_dumb_destroy(struct drm_file *file_priv,
> -                         struct drm_device *dev,
> -                         uint32_t handle);
>  int qxl_mode_dumb_mmap(struct drm_file *filp,
>                        struct drm_device *dev,
>                        uint32_t handle, uint64_t *offset_p);
> diff --git a/drivers/gpu/drm/qxl/qxl_dumb.c b/drivers/gpu/drm/qxl/qxl_dumb.c
> index 847c4ee..d34bb41 100644
> --- a/drivers/gpu/drm/qxl/qxl_dumb.c
> +++ b/drivers/gpu/drm/qxl/qxl_dumb.c
> @@ -68,13 +68,6 @@ int qxl_mode_dumb_create(struct drm_file *file_priv,
>         return 0;
>  }
>
> -int qxl_mode_dumb_destroy(struct drm_file *file_priv,
> -                            struct drm_device *dev,
> -                            uint32_t handle)
> -{
> -       return drm_gem_handle_delete(file_priv, handle);
> -}
> -
>  int qxl_mode_dumb_mmap(struct drm_file *file_priv,
>                        struct drm_device *dev,
>                        uint32_t handle, uint64_t *offset_p)
> diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
> index 9b7025d..39e5be8 100644
> --- a/drivers/gpu/drm/radeon/radeon.h
> +++ b/drivers/gpu/drm/radeon/radeon.h
> @@ -490,9 +490,6 @@ int radeon_mode_dumb_create(struct drm_file *file_priv,
>  int radeon_mode_dumb_mmap(struct drm_file *filp,
>                           struct drm_device *dev,
>                           uint32_t handle, uint64_t *offset_p);
> -int radeon_mode_dumb_destroy(struct drm_file *file_priv,
> -                            struct drm_device *dev,
> -                            uint32_t handle);
>
>  /*
>   * Semaphores.
> diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
> index e5419b3..f01a218 100644
> --- a/drivers/gpu/drm/radeon/radeon_drv.c
> +++ b/drivers/gpu/drm/radeon/radeon_drv.c
> @@ -120,9 +120,6 @@ int radeon_mode_dumb_mmap(struct drm_file *filp,
>  int radeon_mode_dumb_create(struct drm_file *file_priv,
>                             struct drm_device *dev,
>                             struct drm_mode_create_dumb *args);
> -int radeon_mode_dumb_destroy(struct drm_file *file_priv,
> -                            struct drm_device *dev,
> -                            uint32_t handle);
>  struct sg_table *radeon_gem_prime_get_sg_table(struct drm_gem_object *obj);
>  struct drm_gem_object *radeon_gem_prime_import_sg_table(struct drm_device *dev,
>                                                         size_t size,
> @@ -420,7 +417,7 @@ static struct drm_driver kms_driver = {
>         .dma_ioctl = radeon_dma_ioctl_kms,
>         .dumb_create = radeon_mode_dumb_create,
>         .dumb_map_offset = radeon_mode_dumb_mmap,
> -       .dumb_destroy = radeon_mode_dumb_destroy,
> +       .dumb_destroy = drm_gem_dumb_destroy,
>         .fops = &radeon_driver_kms_fops,
>
>         .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
> diff --git a/drivers/gpu/drm/radeon/radeon_gem.c b/drivers/gpu/drm/radeon/radeon_gem.c
> index aa79603..dce99c8 100644
> --- a/drivers/gpu/drm/radeon/radeon_gem.c
> +++ b/drivers/gpu/drm/radeon/radeon_gem.c
> @@ -570,13 +570,6 @@ int radeon_mode_dumb_create(struct drm_file *file_priv,
>         return 0;
>  }
>
> -int radeon_mode_dumb_destroy(struct drm_file *file_priv,
> -                            struct drm_device *dev,
> -                            uint32_t handle)
> -{
> -       return drm_gem_handle_delete(file_priv, handle);
> -}
> -
>  #if defined(CONFIG_DEBUG_FS)
>  static int radeon_debugfs_gem_info(struct seq_file *m, void *data)
>  {
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_drv.c b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> index ff82877..3ebd419 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> @@ -253,7 +253,7 @@ static struct drm_driver rcar_du_driver = {
>         .gem_prime_export       = drm_gem_cma_dmabuf_export,
>         .dumb_create            = rcar_du_dumb_create,
>         .dumb_map_offset        = drm_gem_cma_dumb_map_offset,
> -       .dumb_destroy           = drm_gem_cma_dumb_destroy,
> +       .dumb_destroy           = drm_gem_dumb_destroy,
>         .fops                   = &rcar_du_fops,
>         .name                   = "rcar-du",
>         .desc                   = "Renesas R-Car Display Unit",
> diff --git a/drivers/gpu/drm/shmobile/shmob_drm_drv.c b/drivers/gpu/drm/shmobile/shmob_drm_drv.c
> index edc1018..7e1843f 100644
> --- a/drivers/gpu/drm/shmobile/shmob_drm_drv.c
> +++ b/drivers/gpu/drm/shmobile/shmob_drm_drv.c
> @@ -280,7 +280,7 @@ static struct drm_driver shmob_drm_driver = {
>         .gem_prime_export       = drm_gem_cma_dmabuf_export,
>         .dumb_create            = drm_gem_cma_dumb_create,
>         .dumb_map_offset        = drm_gem_cma_dumb_map_offset,
> -       .dumb_destroy           = drm_gem_cma_dumb_destroy,
> +       .dumb_destroy           = drm_gem_dumb_destroy,
>         .fops                   = &shmob_drm_fops,
>         .name                   = "shmob-drm",
>         .desc                   = "Renesas SH Mobile DRM",
> diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> index 40b71da..14801c2 100644
> --- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> +++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> @@ -519,7 +519,7 @@ static struct drm_driver tilcdc_driver = {
>         .gem_vm_ops         = &drm_gem_cma_vm_ops,
>         .dumb_create        = drm_gem_cma_dumb_create,
>         .dumb_map_offset    = drm_gem_cma_dumb_map_offset,
> -       .dumb_destroy       = drm_gem_cma_dumb_destroy,
> +       .dumb_destroy       = drm_gem_dumb_destroy,
>  #ifdef CONFIG_DEBUG_FS
>         .debugfs_init       = tilcdc_debugfs_init,
>         .debugfs_cleanup    = tilcdc_debugfs_cleanup,
> diff --git a/drivers/gpu/drm/udl/udl_drv.c b/drivers/gpu/drm/udl/udl_drv.c
> index c0770db..bb0af58 100644
> --- a/drivers/gpu/drm/udl/udl_drv.c
> +++ b/drivers/gpu/drm/udl/udl_drv.c
> @@ -84,7 +84,7 @@ static struct drm_driver driver = {
>
>         .dumb_create = udl_dumb_create,
>         .dumb_map_offset = udl_gem_mmap,
> -       .dumb_destroy = udl_dumb_destroy,
> +       .dumb_destroy = drm_gem_dumb_destroy,
>         .fops = &udl_driver_fops,
>
>         .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> diff --git a/drivers/gpu/drm/udl/udl_drv.h b/drivers/gpu/drm/udl/udl_drv.h
> index cc6d90f..56aec94 100644
> --- a/drivers/gpu/drm/udl/udl_drv.h
> +++ b/drivers/gpu/drm/udl/udl_drv.h
> @@ -114,8 +114,6 @@ int udl_dumb_create(struct drm_file *file_priv,
>                     struct drm_mode_create_dumb *args);
>  int udl_gem_mmap(struct drm_file *file_priv, struct drm_device *dev,
>                  uint32_t handle, uint64_t *offset);
> -int udl_dumb_destroy(struct drm_file *file_priv, struct drm_device *dev,
> -                    uint32_t handle);
>
>  int udl_gem_init_object(struct drm_gem_object *obj);
>  void udl_gem_free_object(struct drm_gem_object *gem_obj);
> diff --git a/drivers/gpu/drm/udl/udl_gem.c b/drivers/gpu/drm/udl/udl_gem.c
> index ef034fa..c82c84a 100644
> --- a/drivers/gpu/drm/udl/udl_gem.c
> +++ b/drivers/gpu/drm/udl/udl_gem.c
> @@ -66,12 +66,6 @@ int udl_dumb_create(struct drm_file *file,
>                               args->size, &args->handle);
>  }
>
> -int udl_dumb_destroy(struct drm_file *file, struct drm_device *dev,
> -                    uint32_t handle)
> -{
> -       return drm_gem_handle_delete(file, handle);
> -}
> -
>  int udl_drm_gem_mmap(struct file *filp, struct vm_area_struct *vma)
>  {
>         int ret;
> diff --git a/drivers/gpu/host1x/drm/drm.c b/drivers/gpu/host1x/drm/drm.c
> index e184b00..87aa09b 100644
> --- a/drivers/gpu/host1x/drm/drm.c
> +++ b/drivers/gpu/host1x/drm/drm.c
> @@ -633,7 +633,7 @@ struct drm_driver tegra_drm_driver = {
>         .gem_vm_ops = &tegra_bo_vm_ops,
>         .dumb_create = tegra_bo_dumb_create,
>         .dumb_map_offset = tegra_bo_dumb_map_offset,
> -       .dumb_destroy = tegra_bo_dumb_destroy,
> +       .dumb_destroy = drm_gem_dumb_destroy,
>
>         .ioctls = tegra_drm_ioctls,
>         .num_ioctls = ARRAY_SIZE(tegra_drm_ioctls),
> diff --git a/drivers/gpu/host1x/drm/gem.c b/drivers/gpu/host1x/drm/gem.c
> index c5e9a9b..e4fbd78 100644
> --- a/drivers/gpu/host1x/drm/gem.c
> +++ b/drivers/gpu/host1x/drm/gem.c
> @@ -262,9 +262,3 @@ int tegra_drm_mmap(struct file *file, struct vm_area_struct *vma)
>
>         return ret;
>  }
> -
> -int tegra_bo_dumb_destroy(struct drm_file *file, struct drm_device *drm,
> -                         unsigned int handle)
> -{
> -       return drm_gem_handle_delete(file, handle);
> -}
> diff --git a/drivers/gpu/host1x/drm/gem.h b/drivers/gpu/host1x/drm/gem.h
> index 34de2b4..2e93b03 100644
> --- a/drivers/gpu/host1x/drm/gem.h
> +++ b/drivers/gpu/host1x/drm/gem.h
> @@ -49,8 +49,6 @@ int tegra_bo_dumb_create(struct drm_file *file, struct drm_device *drm,
>                          struct drm_mode_create_dumb *args);
>  int tegra_bo_dumb_map_offset(struct drm_file *file, struct drm_device *drm,
>                              uint32_t handle, uint64_t *offset);
> -int tegra_bo_dumb_destroy(struct drm_file *file, struct drm_device *drm,
> -                         unsigned int handle);
>
>  int tegra_drm_mmap(struct file *file, struct vm_area_struct *vma);
>
> diff --git a/drivers/staging/imx-drm/imx-drm-core.c b/drivers/staging/imx-drm/imx-drm-core.c
> index 6455305..9b16b56 100644
> --- a/drivers/staging/imx-drm/imx-drm-core.c
> +++ b/drivers/staging/imx-drm/imx-drm-core.c
> @@ -800,7 +800,7 @@ static struct drm_driver imx_drm_driver = {
>         .gem_vm_ops             = &drm_gem_cma_vm_ops,
>         .dumb_create            = drm_gem_cma_dumb_create,
>         .dumb_map_offset        = drm_gem_cma_dumb_map_offset,
> -       .dumb_destroy           = drm_gem_cma_dumb_destroy,
> +       .dumb_destroy           = drm_gem_dumb_destroy,
>
>         .get_vblank_counter     = drm_vblank_count,
>         .enable_vblank          = imx_drm_enable_vblank,
> diff --git a/include/drm/drmP.h b/include/drm/drmP.h
> index 1da1ca2..4d7ea3d 100644
> --- a/include/drm/drmP.h
> +++ b/include/drm/drmP.h
> @@ -1670,6 +1670,9 @@ int drm_gem_handle_create(struct drm_file *file_priv,
>                           u32 *handlep);
>  int drm_gem_handle_delete(struct drm_file *filp, u32 handle);
>
> +int drm_gem_dumb_destroy(struct drm_file *file,
> +                        struct drm_device *dev,
> +                        uint32_t handle);
>
>  void drm_gem_free_mmap_offset(struct drm_gem_object *obj);
>  int drm_gem_create_mmap_offset(struct drm_gem_object *obj);
> diff --git a/include/drm/drm_gem_cma_helper.h b/include/drm/drm_gem_cma_helper.h
> index c34f27f..89b4d7d 100644
> --- a/include/drm/drm_gem_cma_helper.h
> +++ b/include/drm/drm_gem_cma_helper.h
> @@ -30,14 +30,6 @@ int drm_gem_cma_dumb_map_offset(struct drm_file *file_priv,
>  /* set vm_flags and we can change the vm attribute to other one at here. */
>  int drm_gem_cma_mmap(struct file *filp, struct vm_area_struct *vma);
>
> -/*
> - * destroy memory region allocated.
> - *     - a gem handle and physical memory region pointed by a gem object
> - *     would be released by drm_gem_handle_delete().
> - */
> -int drm_gem_cma_dumb_destroy(struct drm_file *file_priv,
> -               struct drm_device *drm, unsigned int handle);
> -
>  /* allocate physical memory. */
>  struct drm_gem_cma_object *drm_gem_cma_create(struct drm_device *drm,
>                 unsigned int size);
> --
> 1.8.3.2

Looks good
Acked-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>

Thanks
Patrik

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

end of thread, other threads:[~2013-08-01 11:41 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <1373958731-4132-1-git-send-email-daniel.vetter@ffwll.ch>
2013-07-16  7:11 ` [PATCH 01/20] drm: use common drm_gem_dmabuf_release in i915/exynos drivers Daniel Vetter
2013-07-16  7:12 ` [PATCH 13/20] drm/gem: create drm_gem_dumb_destroy Daniel Vetter
2013-07-22 22:52   ` Rob Clark
2013-07-23  6:24   ` Laurent Pinchart
2013-07-23  7:15   ` Inki Dae
2013-08-01 11:41   ` Patrik Jakobsson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox