All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 1/2] drm/prime: Passing the right owner through to dma_buf_export()
@ 2016-09-30 11:44 ` Chris Wilson
  0 siblings, 0 replies; 9+ messages in thread
From: Chris Wilson @ 2016-09-30 11:44 UTC (permalink / raw)
  To: dri-devel; +Cc: intel-gfx, Chris Wilson, Petri Latvala, stable

dma_buf_export() adds a reference to the owning module to the dmabuf (to
prevent the driver from being unloaded whilst a third party still refers
to the dmabuf). However, drm_gem_prime_export() was passing its own
THIS_MODULE (i.e. drm.ko) rather than the driver. Expand the interface
so that driver passes the struct module to the helper.

v2: Use C99 initializers to zero out unset elements of
dma_buf_export_info

Testcase: igt/vgem_reload_basic
Reported-by: Petri Latvala <petri.latvala@intel.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Petri Latvala <petri.latvala@intel.com>
Cc: stable@vger.kernel.org
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c       |  3 ++-
 drivers/gpu/drm/arc/arcpgu_drv.c                |  4 +++-
 drivers/gpu/drm/arm/hdlcd_drv.c                 |  4 +++-
 drivers/gpu/drm/arm/malidp_drv.c                |  4 +++-
 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c    |  4 +++-
 drivers/gpu/drm/drm_prime.c                     | 22 +++++++++++++++-------
 drivers/gpu/drm/etnaviv/etnaviv_drv.c           |  4 +++-
 drivers/gpu/drm/exynos/exynos_drm_drv.c         |  4 +++-
 drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c       |  4 +++-
 drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c |  4 +++-
 drivers/gpu/drm/imx/imx-drm-core.c              |  4 +++-
 drivers/gpu/drm/mediatek/mtk_drm_drv.c          |  4 +++-
 drivers/gpu/drm/msm/msm_drv.c                   |  4 +++-
 drivers/gpu/drm/nouveau/nouveau_drm.c           |  4 +++-
 drivers/gpu/drm/qxl/qxl_drv.c                   |  4 +++-
 drivers/gpu/drm/radeon/radeon_prime.c           |  3 ++-
 drivers/gpu/drm/rcar-du/rcar_du_drv.c           |  4 +++-
 drivers/gpu/drm/rockchip/rockchip_drm_drv.c     |  4 +++-
 drivers/gpu/drm/shmobile/shmob_drm_drv.c        |  4 +++-
 drivers/gpu/drm/sti/sti_drv.c                   |  4 +++-
 drivers/gpu/drm/sun4i/sun4i_drv.c               |  4 +++-
 drivers/gpu/drm/tilcdc/tilcdc_drv.c             |  4 +++-
 drivers/gpu/drm/vc4/vc4_bo.c                    |  3 ++-
 drivers/gpu/drm/vgem/vgem_drv.c                 |  4 +++-
 drivers/gpu/drm/virtio/virtgpu_drv.c            |  3 ++-
 include/drm/drmP.h                              | 14 +++++++++++++-
 26 files changed, 96 insertions(+), 32 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
index 7700dc22f243..4b56f067e141 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
@@ -121,5 +121,6 @@ struct dma_buf *amdgpu_gem_prime_export(struct drm_device *dev,
 	if (amdgpu_ttm_tt_get_usermm(bo->tbo.ttm))
 		return ERR_PTR(-EPERM);
 
-	return drm_gem_prime_export(dev, gobj, flags);
+	return drm_gem_prime_export(dev, gobj, flags,
+				    THIS_MODULE, KBUILD_MODNAME);
 }
diff --git a/drivers/gpu/drm/arc/arcpgu_drv.c b/drivers/gpu/drm/arc/arcpgu_drv.c
index 28e6471257d0..1cc1370aae98 100644
--- a/drivers/gpu/drm/arc/arcpgu_drv.c
+++ b/drivers/gpu/drm/arc/arcpgu_drv.c
@@ -164,6 +164,8 @@ static int arcpgu_unload(struct drm_device *drm)
 	return 0;
 }
 
+static DRM_GEM_PRIME_EXPORT(arcgpu_gem_prime_export)
+
 static struct drm_driver arcpgu_drm_driver = {
 	.driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME |
 			   DRIVER_ATOMIC,
@@ -183,7 +185,7 @@ static struct drm_driver arcpgu_drm_driver = {
 	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
 	.gem_free_object_unlocked = drm_gem_cma_free_object,
 	.gem_vm_ops = &drm_gem_cma_vm_ops,
-	.gem_prime_export = drm_gem_prime_export,
+	.gem_prime_export = arcgpu_gem_prime_export,
 	.gem_prime_import = drm_gem_prime_import,
 	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
 	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_drv.c
index fb6a418ce6be..d82629f619ed 100644
--- a/drivers/gpu/drm/arm/hdlcd_drv.c
+++ b/drivers/gpu/drm/arm/hdlcd_drv.c
@@ -277,6 +277,8 @@ static const struct file_operations fops = {
 	.mmap		= drm_gem_cma_mmap,
 };
 
+static DRM_GEM_PRIME_EXPORT(hdlcd_gem_prime_export)
+
 static struct drm_driver hdlcd_driver = {
 	.driver_features = DRIVER_HAVE_IRQ | DRIVER_GEM |
 			   DRIVER_MODESET | DRIVER_PRIME |
@@ -296,7 +298,7 @@ static struct drm_driver hdlcd_driver = {
 	.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 = drm_gem_prime_export,
+	.gem_prime_export = hdlcd_gem_prime_export,
 	.gem_prime_import = drm_gem_prime_import,
 	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
 	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
diff --git a/drivers/gpu/drm/arm/malidp_drv.c b/drivers/gpu/drm/arm/malidp_drv.c
index 9280358b8f15..36065f5aebeb 100644
--- a/drivers/gpu/drm/arm/malidp_drv.c
+++ b/drivers/gpu/drm/arm/malidp_drv.c
@@ -206,6 +206,8 @@ static const struct file_operations fops = {
 	.mmap = drm_gem_cma_mmap,
 };
 
+static DRM_GEM_PRIME_EXPORT(malidp_gem_prime_export)
+
 static struct drm_driver malidp_driver = {
 	.driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC |
 			   DRIVER_PRIME,
@@ -220,7 +222,7 @@ static struct drm_driver malidp_driver = {
 	.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 = drm_gem_prime_export,
+	.gem_prime_export = malidp_gem_prime_export,
 	.gem_prime_import = drm_gem_prime_import,
 	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
 	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
index 5f484310bee9..3ccd3b4899c1 100644
--- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
@@ -757,6 +757,8 @@ static const struct file_operations fops = {
 	.mmap               = drm_gem_cma_mmap,
 };
 
+static DRM_GEM_PRIME_EXPORT(atmel_gem_prime_export)
+
 static struct drm_driver atmel_hlcdc_dc_driver = {
 	.driver_features = DRIVER_HAVE_IRQ | DRIVER_GEM |
 			   DRIVER_MODESET | DRIVER_PRIME |
@@ -774,7 +776,7 @@ static struct drm_driver atmel_hlcdc_dc_driver = {
 	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
 	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
 	.gem_prime_import = drm_gem_prime_import,
-	.gem_prime_export = drm_gem_prime_export,
+	.gem_prime_export = atmel_gem_prime_export,
 	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
 	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
 	.gem_prime_vmap = drm_gem_cma_prime_vmap,
diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
index 57201d68cf61..443b6da011ff 100644
--- a/drivers/gpu/drm/drm_prime.c
+++ b/drivers/gpu/drm/drm_prime.c
@@ -392,19 +392,27 @@ static const struct dma_buf_ops drm_gem_prime_dmabuf_ops =  {
  * @dev: drm_device to export from
  * @obj: GEM object to export
  * @flags: flags like DRM_CLOEXEC and DRM_RDWR
+ * @owner: module that owns the backing storage and dmabuf operations,
+ *         pass THIS_MODULE
+ * @name: name of the owner, pass KBUILD_MODNAME
  *
  * This is the implementation of the gem_prime_export functions for GEM drivers
  * using the PRIME helpers.
  */
 struct dma_buf *drm_gem_prime_export(struct drm_device *dev,
-				     struct drm_gem_object *obj, int flags)
+				     struct drm_gem_object *obj,
+				     int flags,
+				     struct module *owner,
+				     const char *name)
 {
-	DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
-
-	exp_info.ops = &drm_gem_prime_dmabuf_ops;
-	exp_info.size = obj->size;
-	exp_info.flags = flags;
-	exp_info.priv = obj;
+	struct dma_buf_export_info exp_info = {
+		.exp_name = name,
+		.owner = owner,
+		.ops = &drm_gem_prime_dmabuf_ops,
+		.size = obj->size,
+		.flags = flags,
+		.priv = obj,
+	};
 
 	if (dev->driver->gem_prime_res_obj)
 		exp_info.resv = dev->driver->gem_prime_res_obj(obj);
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
index aa687669e22b..30af3c56a189 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
@@ -487,6 +487,8 @@ static const struct file_operations fops = {
 	.mmap               = etnaviv_gem_mmap,
 };
 
+static DRM_GEM_PRIME_EXPORT(rockchip_gem_prime_export)
+
 static struct drm_driver etnaviv_drm_driver = {
 	.driver_features    = DRIVER_GEM |
 				DRIVER_PRIME |
@@ -497,7 +499,7 @@ static struct drm_driver etnaviv_drm_driver = {
 	.gem_vm_ops         = &vm_ops,
 	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
 	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
-	.gem_prime_export   = drm_gem_prime_export,
+	.gem_prime_export   = etaniv_gem_prime_export,
 	.gem_prime_import   = drm_gem_prime_import,
 	.gem_prime_pin      = etnaviv_gem_prime_pin,
 	.gem_prime_unpin    = etnaviv_gem_prime_unpin,
diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c
index 486943e70f70..8b927ba430c0 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
@@ -393,6 +393,8 @@ static const struct file_operations exynos_drm_driver_fops = {
 	.release	= drm_release,
 };
 
+static DRM_GEM_PRIME_EXPORT(exynos_gem_prime_export)
+
 static struct drm_driver exynos_drm_driver = {
 	.driver_features	= DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME
 				  | DRIVER_ATOMIC | DRIVER_RENDER,
@@ -412,7 +414,7 @@ static struct drm_driver exynos_drm_driver = {
 	.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	= drm_gem_prime_export,
+	.gem_prime_export	= exynos_gem_prime_export,
 	.gem_prime_import	= drm_gem_prime_import,
 	.gem_prime_get_sg_table	= exynos_drm_gem_prime_get_sg_table,
 	.gem_prime_import_sg_table	= exynos_drm_gem_prime_import_sg_table,
diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
index 0884c45aefe8..3b7c50ed4327 100644
--- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
+++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
@@ -189,6 +189,8 @@ static const struct file_operations fsl_dcu_drm_fops = {
 	.mmap		= drm_gem_cma_mmap,
 };
 
+static DRM_GEM_PRIME_EXPORT(fsl_gem_prime_export)
+
 static struct drm_driver fsl_dcu_drm_driver = {
 	.driver_features	= DRIVER_HAVE_IRQ | DRIVER_GEM | DRIVER_MODESET
 				| DRIVER_PRIME | DRIVER_ATOMIC,
@@ -204,7 +206,7 @@ static struct drm_driver fsl_dcu_drm_driver = {
 	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
 	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
 	.gem_prime_import	= drm_gem_prime_import,
-	.gem_prime_export	= drm_gem_prime_export,
+	.gem_prime_export	= fsl_gem_prime_export,
 	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
 	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
 	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
index 90377a609c98..7a38851e8fe3 100644
--- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
@@ -167,6 +167,8 @@ static int kirin_gem_cma_dumb_create(struct drm_file *file,
 	return drm_gem_cma_dumb_create_internal(file, dev, args);
 }
 
+static DRM_GEM_PRIME_EXPORT(kirin_gem_prime_export)
+
 static struct drm_driver kirin_drm_driver = {
 	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME |
 				  DRIVER_ATOMIC,
@@ -180,7 +182,7 @@ static struct drm_driver kirin_drm_driver = {
 
 	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
 	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
-	.gem_prime_export	= drm_gem_prime_export,
+	.gem_prime_export	= kirin_gem_prime_export,
 	.gem_prime_import	= drm_gem_prime_import,
 	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
 	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
diff --git a/drivers/gpu/drm/imx/imx-drm-core.c b/drivers/gpu/drm/imx/imx-drm-core.c
index 98df09c2b388..d887a80635a8 100644
--- a/drivers/gpu/drm/imx/imx-drm-core.c
+++ b/drivers/gpu/drm/imx/imx-drm-core.c
@@ -297,6 +297,8 @@ static const struct drm_ioctl_desc imx_drm_ioctls[] = {
 	/* none so far */
 };
 
+static DRM_GEM_PRIME_EXPORT(imx_gem_prime_export)
+
 static struct drm_driver imx_drm_driver = {
 	.driver_features	= DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME |
 				  DRIVER_ATOMIC,
@@ -310,7 +312,7 @@ static struct drm_driver imx_drm_driver = {
 	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
 	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
 	.gem_prime_import	= drm_gem_prime_import,
-	.gem_prime_export	= drm_gem_prime_export,
+	.gem_prime_export	= imx_gem_prime_export,
 	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
 	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
 	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
index cf83f6507ec8..76f5888dca62 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
@@ -252,6 +252,8 @@ static const struct file_operations mtk_drm_fops = {
 #endif
 };
 
+static DRM_GEM_PRIME_EXPORT(mtk_gem_prime_export)
+
 static struct drm_driver mtk_drm_driver = {
 	.driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME |
 			   DRIVER_ATOMIC,
@@ -268,7 +270,7 @@ static struct drm_driver mtk_drm_driver = {
 
 	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
 	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
-	.gem_prime_export = drm_gem_prime_export,
+	.gem_prime_export = mtk_gem_prime_export,
 	.gem_prime_import = drm_gem_prime_import,
 	.gem_prime_get_sg_table = mtk_gem_prime_get_sg_table,
 	.gem_prime_import_sg_table = mtk_gem_prime_import_sg_table,
diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index fb5c0b0a7594..e00a449f0b3c 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -775,6 +775,8 @@ static const struct file_operations fops = {
 	.mmap               = msm_gem_mmap,
 };
 
+static DRM_GEM_PRIME_EXPORT(msm_gem_prime_export)
+
 static struct drm_driver msm_driver = {
 	.driver_features    = DRIVER_HAVE_IRQ |
 				DRIVER_GEM |
@@ -799,7 +801,7 @@ static struct drm_driver msm_driver = {
 	.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   = drm_gem_prime_export,
+	.gem_prime_export   = msm_gem_prime_export,
 	.gem_prime_import   = drm_gem_prime_import,
 	.gem_prime_pin      = msm_gem_prime_pin,
 	.gem_prime_unpin    = msm_gem_prime_unpin,
diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c
index 3100fd88a015..a8775d02a125 100644
--- a/drivers/gpu/drm/nouveau/nouveau_drm.c
+++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
@@ -941,6 +941,8 @@ nouveau_driver_fops = {
 	.llseek = noop_llseek,
 };
 
+static DRM_GEM_PRIME_EXPORT(nouveau_gem_prime_export)
+
 static struct drm_driver
 driver_stub = {
 	.driver_features =
@@ -971,7 +973,7 @@ driver_stub = {
 
 	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
 	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
-	.gem_prime_export = drm_gem_prime_export,
+	.gem_prime_export = nouveau_gem_prime_export,
 	.gem_prime_import = drm_gem_prime_import,
 	.gem_prime_pin = nouveau_gem_prime_pin,
 	.gem_prime_res_obj = nouveau_gem_prime_res_obj,
diff --git a/drivers/gpu/drm/qxl/qxl_drv.c b/drivers/gpu/drm/qxl/qxl_drv.c
index 460bbceae297..594414e23168 100644
--- a/drivers/gpu/drm/qxl/qxl_drv.c
+++ b/drivers/gpu/drm/qxl/qxl_drv.c
@@ -227,6 +227,8 @@ static struct pci_driver qxl_pci_driver = {
 	 .driver.pm = &qxl_pm_ops,
 };
 
+static DRM_GEM_PRIME_EXPORT(qxl_gem_prime_export)
+
 static struct drm_driver qxl_driver = {
 	.driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME |
 			   DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED,
@@ -247,7 +249,7 @@ static struct drm_driver qxl_driver = {
 #endif
 	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
 	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
-	.gem_prime_export = drm_gem_prime_export,
+	.gem_prime_export = qxl_gem_prime_export,
 	.gem_prime_import = drm_gem_prime_import,
 	.gem_prime_pin = qxl_gem_prime_pin,
 	.gem_prime_unpin = qxl_gem_prime_unpin,
diff --git a/drivers/gpu/drm/radeon/radeon_prime.c b/drivers/gpu/drm/radeon/radeon_prime.c
index f3609c97496b..661a033c3c70 100644
--- a/drivers/gpu/drm/radeon/radeon_prime.c
+++ b/drivers/gpu/drm/radeon/radeon_prime.c
@@ -123,5 +123,6 @@ struct dma_buf *radeon_gem_prime_export(struct drm_device *dev,
 	struct radeon_bo *bo = gem_to_radeon_bo(gobj);
 	if (radeon_ttm_tt_has_userptr(bo->tbo.ttm))
 		return ERR_PTR(-EPERM);
-	return drm_gem_prime_export(dev, gobj, flags);
+	return drm_gem_prime_export(dev, gobj, flags,
+				    THIS_MODULE, KBUILD_MODNAME);
 }
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_drv.c b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
index 73c971e39b1c..a3bd017f08ce 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_drv.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
@@ -210,6 +210,8 @@ static const struct file_operations rcar_du_fops = {
 	.mmap		= drm_gem_cma_mmap,
 };
 
+static DRM_GEM_PRIME_EXPORT(rcar_gem_prime_export)
+
 static struct drm_driver rcar_du_driver = {
 	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME
 				| DRIVER_ATOMIC,
@@ -222,7 +224,7 @@ static struct drm_driver rcar_du_driver = {
 	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
 	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
 	.gem_prime_import	= drm_gem_prime_import,
-	.gem_prime_export	= drm_gem_prime_export,
+	.gem_prime_export	= rcar_gem_prime_export,
 	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
 	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
 	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
index 8c8cbe837e61..66c09c6930af 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
@@ -280,6 +280,8 @@ static const struct file_operations rockchip_drm_driver_fops = {
 	.release = drm_release,
 };
 
+static DRM_GEM_PRIME_EXPORT(rockchip_gem_prime_export)
+
 static struct drm_driver rockchip_drm_driver = {
 	.driver_features	= DRIVER_MODESET | DRIVER_GEM |
 				  DRIVER_PRIME | DRIVER_ATOMIC,
@@ -295,7 +297,7 @@ static struct drm_driver rockchip_drm_driver = {
 	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
 	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
 	.gem_prime_import	= drm_gem_prime_import,
-	.gem_prime_export	= drm_gem_prime_export,
+	.gem_prime_export	= rockchip_gem_prime_export,
 	.gem_prime_get_sg_table	= rockchip_gem_prime_get_sg_table,
 	.gem_prime_vmap		= rockchip_gem_prime_vmap,
 	.gem_prime_vunmap	= rockchip_gem_prime_vunmap,
diff --git a/drivers/gpu/drm/shmobile/shmob_drm_drv.c b/drivers/gpu/drm/shmobile/shmob_drm_drv.c
index f0492603ea88..63aa6325ae34 100644
--- a/drivers/gpu/drm/shmobile/shmob_drm_drv.c
+++ b/drivers/gpu/drm/shmobile/shmob_drm_drv.c
@@ -254,6 +254,8 @@ static const struct file_operations shmob_drm_fops = {
 	.mmap		= drm_gem_cma_mmap,
 };
 
+static DRM_GEM_PRIME_EXPORT(shmob_gem_prime_export)
+
 static struct drm_driver shmob_drm_driver = {
 	.driver_features	= DRIVER_HAVE_IRQ | DRIVER_GEM | DRIVER_MODESET
 				| DRIVER_PRIME,
@@ -268,7 +270,7 @@ static struct drm_driver shmob_drm_driver = {
 	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
 	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
 	.gem_prime_import	= drm_gem_prime_import,
-	.gem_prime_export	= drm_gem_prime_export,
+	.gem_prime_export	= shmob_gem_prime_export,
 	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
 	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
 	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
diff --git a/drivers/gpu/drm/sti/sti_drv.c b/drivers/gpu/drm/sti/sti_drv.c
index 2784919a7366..5606532162ad 100644
--- a/drivers/gpu/drm/sti/sti_drv.c
+++ b/drivers/gpu/drm/sti/sti_drv.c
@@ -281,6 +281,8 @@ static const struct file_operations sti_driver_fops = {
 	.release = drm_release,
 };
 
+static DRM_GEM_PRIME_EXPORT(sti_gem_prime_export)
+
 static struct drm_driver sti_driver = {
 	.driver_features = DRIVER_MODESET |
 	    DRIVER_GEM | DRIVER_PRIME | DRIVER_ATOMIC,
@@ -297,7 +299,7 @@ static struct drm_driver sti_driver = {
 
 	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
 	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
-	.gem_prime_export = drm_gem_prime_export,
+	.gem_prime_export = sti_gem_prime_export,
 	.gem_prime_import = drm_gem_prime_import,
 	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
 	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c
index 0da9862ad8ed..2b7114d6bd64 100644
--- a/drivers/gpu/drm/sun4i/sun4i_drv.c
+++ b/drivers/gpu/drm/sun4i/sun4i_drv.c
@@ -61,6 +61,8 @@ static const struct file_operations sun4i_drv_fops = {
 	.mmap		= drm_gem_cma_mmap,
 };
 
+static DRM_GEM_PRIME_EXPORT(sun4i_gem_prime_export)
+
 static struct drm_driver sun4i_drv_driver = {
 	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME | DRIVER_ATOMIC,
 
@@ -83,7 +85,7 @@ static struct drm_driver sun4i_drv_driver = {
 	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
 	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
 	.gem_prime_import	= drm_gem_prime_import,
-	.gem_prime_export	= drm_gem_prime_export,
+	.gem_prime_export	= sun4i_gem_prime_export,
 	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
 	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
 	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
index a694977c32f4..518f0216e4e9 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
@@ -584,6 +584,8 @@ static const struct file_operations fops = {
 	.mmap               = drm_gem_cma_mmap,
 };
 
+static DRM_GEM_PRIME_EXPORT(tilcdc_gem_prime_export)
+
 static struct drm_driver tilcdc_driver = {
 	.driver_features    = (DRIVER_HAVE_IRQ | DRIVER_GEM | DRIVER_MODESET |
 			       DRIVER_PRIME | DRIVER_ATOMIC),
@@ -603,7 +605,7 @@ static struct drm_driver tilcdc_driver = {
 	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
 	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
 	.gem_prime_import	= drm_gem_prime_import,
-	.gem_prime_export	= drm_gem_prime_export,
+	.gem_prime_export	= tilcdc_gem_prime_export,
 	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
 	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
 	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
diff --git a/drivers/gpu/drm/vc4/vc4_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c
index 3f6704cf6608..218c26075110 100644
--- a/drivers/gpu/drm/vc4/vc4_bo.c
+++ b/drivers/gpu/drm/vc4/vc4_bo.c
@@ -367,7 +367,8 @@ vc4_prime_export(struct drm_device *dev, struct drm_gem_object *obj, int flags)
 		return ERR_PTR(-EINVAL);
 	}
 
-	return drm_gem_prime_export(dev, obj, flags);
+	return drm_gem_prime_export(dev, obj, flags,
+				    THIS_MODULE, KBUILD_MODNAME);
 }
 
 int vc4_mmap(struct file *filp, struct vm_area_struct *vma)
diff --git a/drivers/gpu/drm/vgem/vgem_drv.c b/drivers/gpu/drm/vgem/vgem_drv.c
index f36c14729b55..034e51c0dd70 100644
--- a/drivers/gpu/drm/vgem/vgem_drv.c
+++ b/drivers/gpu/drm/vgem/vgem_drv.c
@@ -240,6 +240,8 @@ static int vgem_prime_pin(struct drm_gem_object *obj)
 	return 0;
 }
 
+static DRM_GEM_PRIME_EXPORT(vgem_prime_export)
+
 static struct sg_table *vgem_prime_get_sg_table(struct drm_gem_object *obj)
 {
 	struct sg_table *st;
@@ -314,7 +316,7 @@ static struct drm_driver vgem_driver = {
 
 	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
 	.gem_prime_pin = vgem_prime_pin,
-	.gem_prime_export = drm_gem_prime_export,
+	.gem_prime_export = vgem_prime_export,
 	.gem_prime_get_sg_table = vgem_prime_get_sg_table,
 	.gem_prime_vmap = vgem_prime_vmap,
 	.gem_prime_vunmap = vgem_prime_vunmap,
diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.c b/drivers/gpu/drm/virtio/virtgpu_drv.c
index c13f70cfc461..474ae8280fd2 100644
--- a/drivers/gpu/drm/virtio/virtgpu_drv.c
+++ b/drivers/gpu/drm/virtio/virtgpu_drv.c
@@ -114,6 +114,7 @@ static const struct file_operations virtio_gpu_driver_fops = {
 	.llseek = noop_llseek,
 };
 
+static DRM_GEM_PRIME_EXPORT(virtgpu_gem_prime_export)
 
 static struct drm_driver driver = {
 	.driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME | DRIVER_RENDER | DRIVER_ATOMIC,
@@ -132,7 +133,7 @@ static struct drm_driver driver = {
 #endif
 	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
 	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
-	.gem_prime_export = drm_gem_prime_export,
+	.gem_prime_export = virtgpu_gem_prime_export,
 	.gem_prime_import = drm_gem_prime_import,
 	.gem_prime_pin = virtgpu_gem_prime_pin,
 	.gem_prime_unpin = virtgpu_gem_prime_unpin,
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
index 0e99669159c1..9e5da8b08778 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -1012,7 +1012,10 @@ static inline int drm_debugfs_remove_files(const struct drm_info_list *files,
 #endif
 
 extern struct dma_buf *drm_gem_prime_export(struct drm_device *dev,
-		struct drm_gem_object *obj, int flags);
+					    struct drm_gem_object *obj,
+					    int flags,
+					    struct module *owner,
+					    const char *name);
 extern int drm_gem_prime_handle_to_fd(struct drm_device *dev,
 		struct drm_file *file_priv, uint32_t handle, uint32_t flags,
 		int *prime_fd);
@@ -1109,4 +1112,13 @@ static __inline__ bool drm_can_sleep(void)
 /* helper for handling conditionals in various for_each macros */
 #define for_each_if(condition) if (!(condition)) {} else
 
+#define DRM_GEM_PRIME_EXPORT(name)					\
+struct dma_buf *name(struct drm_device *dev,				\
+		     struct drm_gem_object *obj,			\
+		     int flags)						\
+{									\
+	return drm_gem_prime_export(dev, obj, flags,			\
+				    THIS_MODULE, KBUILD_MODNAME);	\
+}
+
 #endif
-- 
2.9.3


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

* [PATCH v2 1/2] drm/prime: Passing the right owner through to dma_buf_export()
@ 2016-09-30 11:44 ` Chris Wilson
  0 siblings, 0 replies; 9+ messages in thread
From: Chris Wilson @ 2016-09-30 11:44 UTC (permalink / raw)
  To: dri-devel; +Cc: intel-gfx, stable

dma_buf_export() adds a reference to the owning module to the dmabuf (to
prevent the driver from being unloaded whilst a third party still refers
to the dmabuf). However, drm_gem_prime_export() was passing its own
THIS_MODULE (i.e. drm.ko) rather than the driver. Expand the interface
so that driver passes the struct module to the helper.

v2: Use C99 initializers to zero out unset elements of
dma_buf_export_info

Testcase: igt/vgem_reload_basic
Reported-by: Petri Latvala <petri.latvala@intel.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Petri Latvala <petri.latvala@intel.com>
Cc: stable@vger.kernel.org
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c       |  3 ++-
 drivers/gpu/drm/arc/arcpgu_drv.c                |  4 +++-
 drivers/gpu/drm/arm/hdlcd_drv.c                 |  4 +++-
 drivers/gpu/drm/arm/malidp_drv.c                |  4 +++-
 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c    |  4 +++-
 drivers/gpu/drm/drm_prime.c                     | 22 +++++++++++++++-------
 drivers/gpu/drm/etnaviv/etnaviv_drv.c           |  4 +++-
 drivers/gpu/drm/exynos/exynos_drm_drv.c         |  4 +++-
 drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c       |  4 +++-
 drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c |  4 +++-
 drivers/gpu/drm/imx/imx-drm-core.c              |  4 +++-
 drivers/gpu/drm/mediatek/mtk_drm_drv.c          |  4 +++-
 drivers/gpu/drm/msm/msm_drv.c                   |  4 +++-
 drivers/gpu/drm/nouveau/nouveau_drm.c           |  4 +++-
 drivers/gpu/drm/qxl/qxl_drv.c                   |  4 +++-
 drivers/gpu/drm/radeon/radeon_prime.c           |  3 ++-
 drivers/gpu/drm/rcar-du/rcar_du_drv.c           |  4 +++-
 drivers/gpu/drm/rockchip/rockchip_drm_drv.c     |  4 +++-
 drivers/gpu/drm/shmobile/shmob_drm_drv.c        |  4 +++-
 drivers/gpu/drm/sti/sti_drv.c                   |  4 +++-
 drivers/gpu/drm/sun4i/sun4i_drv.c               |  4 +++-
 drivers/gpu/drm/tilcdc/tilcdc_drv.c             |  4 +++-
 drivers/gpu/drm/vc4/vc4_bo.c                    |  3 ++-
 drivers/gpu/drm/vgem/vgem_drv.c                 |  4 +++-
 drivers/gpu/drm/virtio/virtgpu_drv.c            |  3 ++-
 include/drm/drmP.h                              | 14 +++++++++++++-
 26 files changed, 96 insertions(+), 32 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
index 7700dc22f243..4b56f067e141 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
@@ -121,5 +121,6 @@ struct dma_buf *amdgpu_gem_prime_export(struct drm_device *dev,
 	if (amdgpu_ttm_tt_get_usermm(bo->tbo.ttm))
 		return ERR_PTR(-EPERM);
 
-	return drm_gem_prime_export(dev, gobj, flags);
+	return drm_gem_prime_export(dev, gobj, flags,
+				    THIS_MODULE, KBUILD_MODNAME);
 }
diff --git a/drivers/gpu/drm/arc/arcpgu_drv.c b/drivers/gpu/drm/arc/arcpgu_drv.c
index 28e6471257d0..1cc1370aae98 100644
--- a/drivers/gpu/drm/arc/arcpgu_drv.c
+++ b/drivers/gpu/drm/arc/arcpgu_drv.c
@@ -164,6 +164,8 @@ static int arcpgu_unload(struct drm_device *drm)
 	return 0;
 }
 
+static DRM_GEM_PRIME_EXPORT(arcgpu_gem_prime_export)
+
 static struct drm_driver arcpgu_drm_driver = {
 	.driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME |
 			   DRIVER_ATOMIC,
@@ -183,7 +185,7 @@ static struct drm_driver arcpgu_drm_driver = {
 	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
 	.gem_free_object_unlocked = drm_gem_cma_free_object,
 	.gem_vm_ops = &drm_gem_cma_vm_ops,
-	.gem_prime_export = drm_gem_prime_export,
+	.gem_prime_export = arcgpu_gem_prime_export,
 	.gem_prime_import = drm_gem_prime_import,
 	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
 	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_drv.c
index fb6a418ce6be..d82629f619ed 100644
--- a/drivers/gpu/drm/arm/hdlcd_drv.c
+++ b/drivers/gpu/drm/arm/hdlcd_drv.c
@@ -277,6 +277,8 @@ static const struct file_operations fops = {
 	.mmap		= drm_gem_cma_mmap,
 };
 
+static DRM_GEM_PRIME_EXPORT(hdlcd_gem_prime_export)
+
 static struct drm_driver hdlcd_driver = {
 	.driver_features = DRIVER_HAVE_IRQ | DRIVER_GEM |
 			   DRIVER_MODESET | DRIVER_PRIME |
@@ -296,7 +298,7 @@ static struct drm_driver hdlcd_driver = {
 	.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 = drm_gem_prime_export,
+	.gem_prime_export = hdlcd_gem_prime_export,
 	.gem_prime_import = drm_gem_prime_import,
 	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
 	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
diff --git a/drivers/gpu/drm/arm/malidp_drv.c b/drivers/gpu/drm/arm/malidp_drv.c
index 9280358b8f15..36065f5aebeb 100644
--- a/drivers/gpu/drm/arm/malidp_drv.c
+++ b/drivers/gpu/drm/arm/malidp_drv.c
@@ -206,6 +206,8 @@ static const struct file_operations fops = {
 	.mmap = drm_gem_cma_mmap,
 };
 
+static DRM_GEM_PRIME_EXPORT(malidp_gem_prime_export)
+
 static struct drm_driver malidp_driver = {
 	.driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC |
 			   DRIVER_PRIME,
@@ -220,7 +222,7 @@ static struct drm_driver malidp_driver = {
 	.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 = drm_gem_prime_export,
+	.gem_prime_export = malidp_gem_prime_export,
 	.gem_prime_import = drm_gem_prime_import,
 	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
 	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
index 5f484310bee9..3ccd3b4899c1 100644
--- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
@@ -757,6 +757,8 @@ static const struct file_operations fops = {
 	.mmap               = drm_gem_cma_mmap,
 };
 
+static DRM_GEM_PRIME_EXPORT(atmel_gem_prime_export)
+
 static struct drm_driver atmel_hlcdc_dc_driver = {
 	.driver_features = DRIVER_HAVE_IRQ | DRIVER_GEM |
 			   DRIVER_MODESET | DRIVER_PRIME |
@@ -774,7 +776,7 @@ static struct drm_driver atmel_hlcdc_dc_driver = {
 	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
 	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
 	.gem_prime_import = drm_gem_prime_import,
-	.gem_prime_export = drm_gem_prime_export,
+	.gem_prime_export = atmel_gem_prime_export,
 	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
 	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
 	.gem_prime_vmap = drm_gem_cma_prime_vmap,
diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
index 57201d68cf61..443b6da011ff 100644
--- a/drivers/gpu/drm/drm_prime.c
+++ b/drivers/gpu/drm/drm_prime.c
@@ -392,19 +392,27 @@ static const struct dma_buf_ops drm_gem_prime_dmabuf_ops =  {
  * @dev: drm_device to export from
  * @obj: GEM object to export
  * @flags: flags like DRM_CLOEXEC and DRM_RDWR
+ * @owner: module that owns the backing storage and dmabuf operations,
+ *         pass THIS_MODULE
+ * @name: name of the owner, pass KBUILD_MODNAME
  *
  * This is the implementation of the gem_prime_export functions for GEM drivers
  * using the PRIME helpers.
  */
 struct dma_buf *drm_gem_prime_export(struct drm_device *dev,
-				     struct drm_gem_object *obj, int flags)
+				     struct drm_gem_object *obj,
+				     int flags,
+				     struct module *owner,
+				     const char *name)
 {
-	DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
-
-	exp_info.ops = &drm_gem_prime_dmabuf_ops;
-	exp_info.size = obj->size;
-	exp_info.flags = flags;
-	exp_info.priv = obj;
+	struct dma_buf_export_info exp_info = {
+		.exp_name = name,
+		.owner = owner,
+		.ops = &drm_gem_prime_dmabuf_ops,
+		.size = obj->size,
+		.flags = flags,
+		.priv = obj,
+	};
 
 	if (dev->driver->gem_prime_res_obj)
 		exp_info.resv = dev->driver->gem_prime_res_obj(obj);
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
index aa687669e22b..30af3c56a189 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
@@ -487,6 +487,8 @@ static const struct file_operations fops = {
 	.mmap               = etnaviv_gem_mmap,
 };
 
+static DRM_GEM_PRIME_EXPORT(rockchip_gem_prime_export)
+
 static struct drm_driver etnaviv_drm_driver = {
 	.driver_features    = DRIVER_GEM |
 				DRIVER_PRIME |
@@ -497,7 +499,7 @@ static struct drm_driver etnaviv_drm_driver = {
 	.gem_vm_ops         = &vm_ops,
 	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
 	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
-	.gem_prime_export   = drm_gem_prime_export,
+	.gem_prime_export   = etaniv_gem_prime_export,
 	.gem_prime_import   = drm_gem_prime_import,
 	.gem_prime_pin      = etnaviv_gem_prime_pin,
 	.gem_prime_unpin    = etnaviv_gem_prime_unpin,
diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c
index 486943e70f70..8b927ba430c0 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
@@ -393,6 +393,8 @@ static const struct file_operations exynos_drm_driver_fops = {
 	.release	= drm_release,
 };
 
+static DRM_GEM_PRIME_EXPORT(exynos_gem_prime_export)
+
 static struct drm_driver exynos_drm_driver = {
 	.driver_features	= DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME
 				  | DRIVER_ATOMIC | DRIVER_RENDER,
@@ -412,7 +414,7 @@ static struct drm_driver exynos_drm_driver = {
 	.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	= drm_gem_prime_export,
+	.gem_prime_export	= exynos_gem_prime_export,
 	.gem_prime_import	= drm_gem_prime_import,
 	.gem_prime_get_sg_table	= exynos_drm_gem_prime_get_sg_table,
 	.gem_prime_import_sg_table	= exynos_drm_gem_prime_import_sg_table,
diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
index 0884c45aefe8..3b7c50ed4327 100644
--- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
+++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
@@ -189,6 +189,8 @@ static const struct file_operations fsl_dcu_drm_fops = {
 	.mmap		= drm_gem_cma_mmap,
 };
 
+static DRM_GEM_PRIME_EXPORT(fsl_gem_prime_export)
+
 static struct drm_driver fsl_dcu_drm_driver = {
 	.driver_features	= DRIVER_HAVE_IRQ | DRIVER_GEM | DRIVER_MODESET
 				| DRIVER_PRIME | DRIVER_ATOMIC,
@@ -204,7 +206,7 @@ static struct drm_driver fsl_dcu_drm_driver = {
 	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
 	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
 	.gem_prime_import	= drm_gem_prime_import,
-	.gem_prime_export	= drm_gem_prime_export,
+	.gem_prime_export	= fsl_gem_prime_export,
 	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
 	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
 	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
index 90377a609c98..7a38851e8fe3 100644
--- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
@@ -167,6 +167,8 @@ static int kirin_gem_cma_dumb_create(struct drm_file *file,
 	return drm_gem_cma_dumb_create_internal(file, dev, args);
 }
 
+static DRM_GEM_PRIME_EXPORT(kirin_gem_prime_export)
+
 static struct drm_driver kirin_drm_driver = {
 	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME |
 				  DRIVER_ATOMIC,
@@ -180,7 +182,7 @@ static struct drm_driver kirin_drm_driver = {
 
 	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
 	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
-	.gem_prime_export	= drm_gem_prime_export,
+	.gem_prime_export	= kirin_gem_prime_export,
 	.gem_prime_import	= drm_gem_prime_import,
 	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
 	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
diff --git a/drivers/gpu/drm/imx/imx-drm-core.c b/drivers/gpu/drm/imx/imx-drm-core.c
index 98df09c2b388..d887a80635a8 100644
--- a/drivers/gpu/drm/imx/imx-drm-core.c
+++ b/drivers/gpu/drm/imx/imx-drm-core.c
@@ -297,6 +297,8 @@ static const struct drm_ioctl_desc imx_drm_ioctls[] = {
 	/* none so far */
 };
 
+static DRM_GEM_PRIME_EXPORT(imx_gem_prime_export)
+
 static struct drm_driver imx_drm_driver = {
 	.driver_features	= DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME |
 				  DRIVER_ATOMIC,
@@ -310,7 +312,7 @@ static struct drm_driver imx_drm_driver = {
 	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
 	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
 	.gem_prime_import	= drm_gem_prime_import,
-	.gem_prime_export	= drm_gem_prime_export,
+	.gem_prime_export	= imx_gem_prime_export,
 	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
 	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
 	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
index cf83f6507ec8..76f5888dca62 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
@@ -252,6 +252,8 @@ static const struct file_operations mtk_drm_fops = {
 #endif
 };
 
+static DRM_GEM_PRIME_EXPORT(mtk_gem_prime_export)
+
 static struct drm_driver mtk_drm_driver = {
 	.driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME |
 			   DRIVER_ATOMIC,
@@ -268,7 +270,7 @@ static struct drm_driver mtk_drm_driver = {
 
 	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
 	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
-	.gem_prime_export = drm_gem_prime_export,
+	.gem_prime_export = mtk_gem_prime_export,
 	.gem_prime_import = drm_gem_prime_import,
 	.gem_prime_get_sg_table = mtk_gem_prime_get_sg_table,
 	.gem_prime_import_sg_table = mtk_gem_prime_import_sg_table,
diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index fb5c0b0a7594..e00a449f0b3c 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -775,6 +775,8 @@ static const struct file_operations fops = {
 	.mmap               = msm_gem_mmap,
 };
 
+static DRM_GEM_PRIME_EXPORT(msm_gem_prime_export)
+
 static struct drm_driver msm_driver = {
 	.driver_features    = DRIVER_HAVE_IRQ |
 				DRIVER_GEM |
@@ -799,7 +801,7 @@ static struct drm_driver msm_driver = {
 	.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   = drm_gem_prime_export,
+	.gem_prime_export   = msm_gem_prime_export,
 	.gem_prime_import   = drm_gem_prime_import,
 	.gem_prime_pin      = msm_gem_prime_pin,
 	.gem_prime_unpin    = msm_gem_prime_unpin,
diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c
index 3100fd88a015..a8775d02a125 100644
--- a/drivers/gpu/drm/nouveau/nouveau_drm.c
+++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
@@ -941,6 +941,8 @@ nouveau_driver_fops = {
 	.llseek = noop_llseek,
 };
 
+static DRM_GEM_PRIME_EXPORT(nouveau_gem_prime_export)
+
 static struct drm_driver
 driver_stub = {
 	.driver_features =
@@ -971,7 +973,7 @@ driver_stub = {
 
 	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
 	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
-	.gem_prime_export = drm_gem_prime_export,
+	.gem_prime_export = nouveau_gem_prime_export,
 	.gem_prime_import = drm_gem_prime_import,
 	.gem_prime_pin = nouveau_gem_prime_pin,
 	.gem_prime_res_obj = nouveau_gem_prime_res_obj,
diff --git a/drivers/gpu/drm/qxl/qxl_drv.c b/drivers/gpu/drm/qxl/qxl_drv.c
index 460bbceae297..594414e23168 100644
--- a/drivers/gpu/drm/qxl/qxl_drv.c
+++ b/drivers/gpu/drm/qxl/qxl_drv.c
@@ -227,6 +227,8 @@ static struct pci_driver qxl_pci_driver = {
 	 .driver.pm = &qxl_pm_ops,
 };
 
+static DRM_GEM_PRIME_EXPORT(qxl_gem_prime_export)
+
 static struct drm_driver qxl_driver = {
 	.driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME |
 			   DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED,
@@ -247,7 +249,7 @@ static struct drm_driver qxl_driver = {
 #endif
 	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
 	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
-	.gem_prime_export = drm_gem_prime_export,
+	.gem_prime_export = qxl_gem_prime_export,
 	.gem_prime_import = drm_gem_prime_import,
 	.gem_prime_pin = qxl_gem_prime_pin,
 	.gem_prime_unpin = qxl_gem_prime_unpin,
diff --git a/drivers/gpu/drm/radeon/radeon_prime.c b/drivers/gpu/drm/radeon/radeon_prime.c
index f3609c97496b..661a033c3c70 100644
--- a/drivers/gpu/drm/radeon/radeon_prime.c
+++ b/drivers/gpu/drm/radeon/radeon_prime.c
@@ -123,5 +123,6 @@ struct dma_buf *radeon_gem_prime_export(struct drm_device *dev,
 	struct radeon_bo *bo = gem_to_radeon_bo(gobj);
 	if (radeon_ttm_tt_has_userptr(bo->tbo.ttm))
 		return ERR_PTR(-EPERM);
-	return drm_gem_prime_export(dev, gobj, flags);
+	return drm_gem_prime_export(dev, gobj, flags,
+				    THIS_MODULE, KBUILD_MODNAME);
 }
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_drv.c b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
index 73c971e39b1c..a3bd017f08ce 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_drv.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
@@ -210,6 +210,8 @@ static const struct file_operations rcar_du_fops = {
 	.mmap		= drm_gem_cma_mmap,
 };
 
+static DRM_GEM_PRIME_EXPORT(rcar_gem_prime_export)
+
 static struct drm_driver rcar_du_driver = {
 	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME
 				| DRIVER_ATOMIC,
@@ -222,7 +224,7 @@ static struct drm_driver rcar_du_driver = {
 	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
 	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
 	.gem_prime_import	= drm_gem_prime_import,
-	.gem_prime_export	= drm_gem_prime_export,
+	.gem_prime_export	= rcar_gem_prime_export,
 	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
 	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
 	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
index 8c8cbe837e61..66c09c6930af 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
@@ -280,6 +280,8 @@ static const struct file_operations rockchip_drm_driver_fops = {
 	.release = drm_release,
 };
 
+static DRM_GEM_PRIME_EXPORT(rockchip_gem_prime_export)
+
 static struct drm_driver rockchip_drm_driver = {
 	.driver_features	= DRIVER_MODESET | DRIVER_GEM |
 				  DRIVER_PRIME | DRIVER_ATOMIC,
@@ -295,7 +297,7 @@ static struct drm_driver rockchip_drm_driver = {
 	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
 	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
 	.gem_prime_import	= drm_gem_prime_import,
-	.gem_prime_export	= drm_gem_prime_export,
+	.gem_prime_export	= rockchip_gem_prime_export,
 	.gem_prime_get_sg_table	= rockchip_gem_prime_get_sg_table,
 	.gem_prime_vmap		= rockchip_gem_prime_vmap,
 	.gem_prime_vunmap	= rockchip_gem_prime_vunmap,
diff --git a/drivers/gpu/drm/shmobile/shmob_drm_drv.c b/drivers/gpu/drm/shmobile/shmob_drm_drv.c
index f0492603ea88..63aa6325ae34 100644
--- a/drivers/gpu/drm/shmobile/shmob_drm_drv.c
+++ b/drivers/gpu/drm/shmobile/shmob_drm_drv.c
@@ -254,6 +254,8 @@ static const struct file_operations shmob_drm_fops = {
 	.mmap		= drm_gem_cma_mmap,
 };
 
+static DRM_GEM_PRIME_EXPORT(shmob_gem_prime_export)
+
 static struct drm_driver shmob_drm_driver = {
 	.driver_features	= DRIVER_HAVE_IRQ | DRIVER_GEM | DRIVER_MODESET
 				| DRIVER_PRIME,
@@ -268,7 +270,7 @@ static struct drm_driver shmob_drm_driver = {
 	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
 	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
 	.gem_prime_import	= drm_gem_prime_import,
-	.gem_prime_export	= drm_gem_prime_export,
+	.gem_prime_export	= shmob_gem_prime_export,
 	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
 	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
 	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
diff --git a/drivers/gpu/drm/sti/sti_drv.c b/drivers/gpu/drm/sti/sti_drv.c
index 2784919a7366..5606532162ad 100644
--- a/drivers/gpu/drm/sti/sti_drv.c
+++ b/drivers/gpu/drm/sti/sti_drv.c
@@ -281,6 +281,8 @@ static const struct file_operations sti_driver_fops = {
 	.release = drm_release,
 };
 
+static DRM_GEM_PRIME_EXPORT(sti_gem_prime_export)
+
 static struct drm_driver sti_driver = {
 	.driver_features = DRIVER_MODESET |
 	    DRIVER_GEM | DRIVER_PRIME | DRIVER_ATOMIC,
@@ -297,7 +299,7 @@ static struct drm_driver sti_driver = {
 
 	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
 	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
-	.gem_prime_export = drm_gem_prime_export,
+	.gem_prime_export = sti_gem_prime_export,
 	.gem_prime_import = drm_gem_prime_import,
 	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
 	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c
index 0da9862ad8ed..2b7114d6bd64 100644
--- a/drivers/gpu/drm/sun4i/sun4i_drv.c
+++ b/drivers/gpu/drm/sun4i/sun4i_drv.c
@@ -61,6 +61,8 @@ static const struct file_operations sun4i_drv_fops = {
 	.mmap		= drm_gem_cma_mmap,
 };
 
+static DRM_GEM_PRIME_EXPORT(sun4i_gem_prime_export)
+
 static struct drm_driver sun4i_drv_driver = {
 	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME | DRIVER_ATOMIC,
 
@@ -83,7 +85,7 @@ static struct drm_driver sun4i_drv_driver = {
 	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
 	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
 	.gem_prime_import	= drm_gem_prime_import,
-	.gem_prime_export	= drm_gem_prime_export,
+	.gem_prime_export	= sun4i_gem_prime_export,
 	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
 	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
 	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
index a694977c32f4..518f0216e4e9 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
@@ -584,6 +584,8 @@ static const struct file_operations fops = {
 	.mmap               = drm_gem_cma_mmap,
 };
 
+static DRM_GEM_PRIME_EXPORT(tilcdc_gem_prime_export)
+
 static struct drm_driver tilcdc_driver = {
 	.driver_features    = (DRIVER_HAVE_IRQ | DRIVER_GEM | DRIVER_MODESET |
 			       DRIVER_PRIME | DRIVER_ATOMIC),
@@ -603,7 +605,7 @@ static struct drm_driver tilcdc_driver = {
 	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
 	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
 	.gem_prime_import	= drm_gem_prime_import,
-	.gem_prime_export	= drm_gem_prime_export,
+	.gem_prime_export	= tilcdc_gem_prime_export,
 	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
 	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
 	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
diff --git a/drivers/gpu/drm/vc4/vc4_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c
index 3f6704cf6608..218c26075110 100644
--- a/drivers/gpu/drm/vc4/vc4_bo.c
+++ b/drivers/gpu/drm/vc4/vc4_bo.c
@@ -367,7 +367,8 @@ vc4_prime_export(struct drm_device *dev, struct drm_gem_object *obj, int flags)
 		return ERR_PTR(-EINVAL);
 	}
 
-	return drm_gem_prime_export(dev, obj, flags);
+	return drm_gem_prime_export(dev, obj, flags,
+				    THIS_MODULE, KBUILD_MODNAME);
 }
 
 int vc4_mmap(struct file *filp, struct vm_area_struct *vma)
diff --git a/drivers/gpu/drm/vgem/vgem_drv.c b/drivers/gpu/drm/vgem/vgem_drv.c
index f36c14729b55..034e51c0dd70 100644
--- a/drivers/gpu/drm/vgem/vgem_drv.c
+++ b/drivers/gpu/drm/vgem/vgem_drv.c
@@ -240,6 +240,8 @@ static int vgem_prime_pin(struct drm_gem_object *obj)
 	return 0;
 }
 
+static DRM_GEM_PRIME_EXPORT(vgem_prime_export)
+
 static struct sg_table *vgem_prime_get_sg_table(struct drm_gem_object *obj)
 {
 	struct sg_table *st;
@@ -314,7 +316,7 @@ static struct drm_driver vgem_driver = {
 
 	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
 	.gem_prime_pin = vgem_prime_pin,
-	.gem_prime_export = drm_gem_prime_export,
+	.gem_prime_export = vgem_prime_export,
 	.gem_prime_get_sg_table = vgem_prime_get_sg_table,
 	.gem_prime_vmap = vgem_prime_vmap,
 	.gem_prime_vunmap = vgem_prime_vunmap,
diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.c b/drivers/gpu/drm/virtio/virtgpu_drv.c
index c13f70cfc461..474ae8280fd2 100644
--- a/drivers/gpu/drm/virtio/virtgpu_drv.c
+++ b/drivers/gpu/drm/virtio/virtgpu_drv.c
@@ -114,6 +114,7 @@ static const struct file_operations virtio_gpu_driver_fops = {
 	.llseek = noop_llseek,
 };
 
+static DRM_GEM_PRIME_EXPORT(virtgpu_gem_prime_export)
 
 static struct drm_driver driver = {
 	.driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME | DRIVER_RENDER | DRIVER_ATOMIC,
@@ -132,7 +133,7 @@ static struct drm_driver driver = {
 #endif
 	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
 	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
-	.gem_prime_export = drm_gem_prime_export,
+	.gem_prime_export = virtgpu_gem_prime_export,
 	.gem_prime_import = drm_gem_prime_import,
 	.gem_prime_pin = virtgpu_gem_prime_pin,
 	.gem_prime_unpin = virtgpu_gem_prime_unpin,
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
index 0e99669159c1..9e5da8b08778 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -1012,7 +1012,10 @@ static inline int drm_debugfs_remove_files(const struct drm_info_list *files,
 #endif
 
 extern struct dma_buf *drm_gem_prime_export(struct drm_device *dev,
-		struct drm_gem_object *obj, int flags);
+					    struct drm_gem_object *obj,
+					    int flags,
+					    struct module *owner,
+					    const char *name);
 extern int drm_gem_prime_handle_to_fd(struct drm_device *dev,
 		struct drm_file *file_priv, uint32_t handle, uint32_t flags,
 		int *prime_fd);
@@ -1109,4 +1112,13 @@ static __inline__ bool drm_can_sleep(void)
 /* helper for handling conditionals in various for_each macros */
 #define for_each_if(condition) if (!(condition)) {} else
 
+#define DRM_GEM_PRIME_EXPORT(name)					\
+struct dma_buf *name(struct drm_device *dev,				\
+		     struct drm_gem_object *obj,			\
+		     int flags)						\
+{									\
+	return drm_gem_prime_export(dev, obj, flags,			\
+				    THIS_MODULE, KBUILD_MODNAME);	\
+}
+
 #endif
-- 
2.9.3

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

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

* [PATCH v2 2/2] drm/prime: Take a ref on the drm_dev when exporting a dma_buf
  2016-09-30 11:44 ` Chris Wilson
@ 2016-09-30 11:44   ` Chris Wilson
  -1 siblings, 0 replies; 9+ messages in thread
From: Chris Wilson @ 2016-09-30 11:44 UTC (permalink / raw)
  To: dri-devel; +Cc: intel-gfx, Chris Wilson, Petri Latvala, Daniel Vetter, stable

dma_buf may live a long time, longer than the last direct user of the
driver. We already hold a reference to the owner module (that prevents
the object code from disappearing), but there is no reference to the
drm_dev - so the pointers to the driver backend themselves may vanish.

Suggested-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Petri Latvala <petri.latvala@intel.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: stable@vger.kernel.org
---
 drivers/gpu/drm/armada/armada_gem.c    |  9 +++++++--
 drivers/gpu/drm/drm_prime.c            | 10 +++++++++-
 drivers/gpu/drm/i915/i915_gem_dmabuf.c |  1 +
 drivers/gpu/drm/tegra/gem.c            |  7 ++++++-
 drivers/gpu/drm/udl/udl_dmabuf.c       |  7 ++++++-
 5 files changed, 29 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/armada/armada_gem.c b/drivers/gpu/drm/armada/armada_gem.c
index cb8f0347b934..bdd3af043827 100644
--- a/drivers/gpu/drm/armada/armada_gem.c
+++ b/drivers/gpu/drm/armada/armada_gem.c
@@ -541,13 +541,18 @@ armada_gem_prime_export(struct drm_device *dev, struct drm_gem_object *obj,
 	int flags)
 {
 	DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
+	struct dma_buf *dma_buf;
 
 	exp_info.ops = &armada_gem_prime_dmabuf_ops;
 	exp_info.size = obj->size;
-	exp_info.flags = O_RDWR;
+	exp_info.flags = flags;
 	exp_info.priv = obj;
 
-	return dma_buf_export(&exp_info);
+	dma_buf = dma_buf_export(&exp_info);
+	if (!IS_ERR(dma_buf))
+		drm_dev_ref(dev);
+
+	return dma_buf;
 }
 
 struct drm_gem_object *
diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
index 443b6da011ff..add375f54b6d 100644
--- a/drivers/gpu/drm/drm_prime.c
+++ b/drivers/gpu/drm/drm_prime.c
@@ -293,9 +293,12 @@ static void drm_gem_unmap_dma_buf(struct dma_buf_attachment *attach,
 void drm_gem_dmabuf_release(struct dma_buf *dma_buf)
 {
 	struct drm_gem_object *obj = dma_buf->priv;
+	struct drm_device *dev = obj->dev;
 
 	/* drop the reference on the export fd holds */
 	drm_gem_object_unreference_unlocked(obj);
+
+	drm_dev_unref(dev);
 }
 EXPORT_SYMBOL(drm_gem_dmabuf_release);
 
@@ -413,11 +416,16 @@ struct dma_buf *drm_gem_prime_export(struct drm_device *dev,
 		.flags = flags,
 		.priv = obj,
 	};
+	struct dma_buf *dma_buf;
 
 	if (dev->driver->gem_prime_res_obj)
 		exp_info.resv = dev->driver->gem_prime_res_obj(obj);
 
-	return dma_buf_export(&exp_info);
+	dma_buf = dma_buf_export(&exp_info);
+	if (!IS_ERR(dma_buf))
+		drm_dev_ref(dev);
+
+	return dma_buf;
 }
 EXPORT_SYMBOL(drm_gem_prime_export);
 
diff --git a/drivers/gpu/drm/i915/i915_gem_dmabuf.c b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
index 10265bb35604..b58b2e63add1 100644
--- a/drivers/gpu/drm/i915/i915_gem_dmabuf.c
+++ b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
@@ -288,6 +288,7 @@ struct dma_buf *i915_gem_prime_export(struct drm_device *dev,
 		return dma_buf;
 
 	export_fences(obj, dma_buf);
+	drm_dev_ref(obj->base.dev);
 	return dma_buf;
 }
 
diff --git a/drivers/gpu/drm/tegra/gem.c b/drivers/gpu/drm/tegra/gem.c
index aa60d9909ea2..aaae8b6ba668 100644
--- a/drivers/gpu/drm/tegra/gem.c
+++ b/drivers/gpu/drm/tegra/gem.c
@@ -607,13 +607,18 @@ struct dma_buf *tegra_gem_prime_export(struct drm_device *drm,
 				       int flags)
 {
 	DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
+	struct dma_buf *dma_buf;
 
 	exp_info.ops = &tegra_gem_prime_dmabuf_ops;
 	exp_info.size = gem->size;
 	exp_info.flags = flags;
 	exp_info.priv = gem;
 
-	return dma_buf_export(&exp_info);
+	dma_buf = dma_buf_export(&exp_info);
+	if (!IS_ERR(dma_buf))
+		drm_dev_ref(drm);
+
+	return dma_buf;
 }
 
 struct drm_gem_object *tegra_gem_prime_import(struct drm_device *drm,
diff --git a/drivers/gpu/drm/udl/udl_dmabuf.c b/drivers/gpu/drm/udl/udl_dmabuf.c
index e2243edd1ce3..249cc1072112 100644
--- a/drivers/gpu/drm/udl/udl_dmabuf.c
+++ b/drivers/gpu/drm/udl/udl_dmabuf.c
@@ -203,13 +203,18 @@ struct dma_buf *udl_gem_prime_export(struct drm_device *dev,
 				     struct drm_gem_object *obj, int flags)
 {
 	DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
+	struct dma_buf *dma_buf;
 
 	exp_info.ops = &udl_dmabuf_ops;
 	exp_info.size = obj->size;
 	exp_info.flags = flags;
 	exp_info.priv = obj;
 
-	return dma_buf_export(&exp_info);
+	dma_buf = dma_buf_export(&exp_info);
+	if (!IS_ERR(dma_buf))
+		drm_dev_ref(dev);
+
+	return dma_buf;
 }
 
 static int udl_prime_create(struct drm_device *dev,
-- 
2.9.3


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

* [PATCH v2 2/2] drm/prime: Take a ref on the drm_dev when exporting a dma_buf
@ 2016-09-30 11:44   ` Chris Wilson
  0 siblings, 0 replies; 9+ messages in thread
From: Chris Wilson @ 2016-09-30 11:44 UTC (permalink / raw)
  To: dri-devel; +Cc: Daniel Vetter, intel-gfx, stable

dma_buf may live a long time, longer than the last direct user of the
driver. We already hold a reference to the owner module (that prevents
the object code from disappearing), but there is no reference to the
drm_dev - so the pointers to the driver backend themselves may vanish.

Suggested-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Petri Latvala <petri.latvala@intel.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: stable@vger.kernel.org
---
 drivers/gpu/drm/armada/armada_gem.c    |  9 +++++++--
 drivers/gpu/drm/drm_prime.c            | 10 +++++++++-
 drivers/gpu/drm/i915/i915_gem_dmabuf.c |  1 +
 drivers/gpu/drm/tegra/gem.c            |  7 ++++++-
 drivers/gpu/drm/udl/udl_dmabuf.c       |  7 ++++++-
 5 files changed, 29 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/armada/armada_gem.c b/drivers/gpu/drm/armada/armada_gem.c
index cb8f0347b934..bdd3af043827 100644
--- a/drivers/gpu/drm/armada/armada_gem.c
+++ b/drivers/gpu/drm/armada/armada_gem.c
@@ -541,13 +541,18 @@ armada_gem_prime_export(struct drm_device *dev, struct drm_gem_object *obj,
 	int flags)
 {
 	DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
+	struct dma_buf *dma_buf;
 
 	exp_info.ops = &armada_gem_prime_dmabuf_ops;
 	exp_info.size = obj->size;
-	exp_info.flags = O_RDWR;
+	exp_info.flags = flags;
 	exp_info.priv = obj;
 
-	return dma_buf_export(&exp_info);
+	dma_buf = dma_buf_export(&exp_info);
+	if (!IS_ERR(dma_buf))
+		drm_dev_ref(dev);
+
+	return dma_buf;
 }
 
 struct drm_gem_object *
diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
index 443b6da011ff..add375f54b6d 100644
--- a/drivers/gpu/drm/drm_prime.c
+++ b/drivers/gpu/drm/drm_prime.c
@@ -293,9 +293,12 @@ static void drm_gem_unmap_dma_buf(struct dma_buf_attachment *attach,
 void drm_gem_dmabuf_release(struct dma_buf *dma_buf)
 {
 	struct drm_gem_object *obj = dma_buf->priv;
+	struct drm_device *dev = obj->dev;
 
 	/* drop the reference on the export fd holds */
 	drm_gem_object_unreference_unlocked(obj);
+
+	drm_dev_unref(dev);
 }
 EXPORT_SYMBOL(drm_gem_dmabuf_release);
 
@@ -413,11 +416,16 @@ struct dma_buf *drm_gem_prime_export(struct drm_device *dev,
 		.flags = flags,
 		.priv = obj,
 	};
+	struct dma_buf *dma_buf;
 
 	if (dev->driver->gem_prime_res_obj)
 		exp_info.resv = dev->driver->gem_prime_res_obj(obj);
 
-	return dma_buf_export(&exp_info);
+	dma_buf = dma_buf_export(&exp_info);
+	if (!IS_ERR(dma_buf))
+		drm_dev_ref(dev);
+
+	return dma_buf;
 }
 EXPORT_SYMBOL(drm_gem_prime_export);
 
diff --git a/drivers/gpu/drm/i915/i915_gem_dmabuf.c b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
index 10265bb35604..b58b2e63add1 100644
--- a/drivers/gpu/drm/i915/i915_gem_dmabuf.c
+++ b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
@@ -288,6 +288,7 @@ struct dma_buf *i915_gem_prime_export(struct drm_device *dev,
 		return dma_buf;
 
 	export_fences(obj, dma_buf);
+	drm_dev_ref(obj->base.dev);
 	return dma_buf;
 }
 
diff --git a/drivers/gpu/drm/tegra/gem.c b/drivers/gpu/drm/tegra/gem.c
index aa60d9909ea2..aaae8b6ba668 100644
--- a/drivers/gpu/drm/tegra/gem.c
+++ b/drivers/gpu/drm/tegra/gem.c
@@ -607,13 +607,18 @@ struct dma_buf *tegra_gem_prime_export(struct drm_device *drm,
 				       int flags)
 {
 	DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
+	struct dma_buf *dma_buf;
 
 	exp_info.ops = &tegra_gem_prime_dmabuf_ops;
 	exp_info.size = gem->size;
 	exp_info.flags = flags;
 	exp_info.priv = gem;
 
-	return dma_buf_export(&exp_info);
+	dma_buf = dma_buf_export(&exp_info);
+	if (!IS_ERR(dma_buf))
+		drm_dev_ref(drm);
+
+	return dma_buf;
 }
 
 struct drm_gem_object *tegra_gem_prime_import(struct drm_device *drm,
diff --git a/drivers/gpu/drm/udl/udl_dmabuf.c b/drivers/gpu/drm/udl/udl_dmabuf.c
index e2243edd1ce3..249cc1072112 100644
--- a/drivers/gpu/drm/udl/udl_dmabuf.c
+++ b/drivers/gpu/drm/udl/udl_dmabuf.c
@@ -203,13 +203,18 @@ struct dma_buf *udl_gem_prime_export(struct drm_device *dev,
 				     struct drm_gem_object *obj, int flags)
 {
 	DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
+	struct dma_buf *dma_buf;
 
 	exp_info.ops = &udl_dmabuf_ops;
 	exp_info.size = obj->size;
 	exp_info.flags = flags;
 	exp_info.priv = obj;
 
-	return dma_buf_export(&exp_info);
+	dma_buf = dma_buf_export(&exp_info);
+	if (!IS_ERR(dma_buf))
+		drm_dev_ref(dev);
+
+	return dma_buf;
 }
 
 static int udl_prime_create(struct drm_device *dev,
-- 
2.9.3

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

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

* Re: [PATCH v2 1/2] drm/prime: Passing the right owner through to dma_buf_export()
  2016-09-30 11:44 ` Chris Wilson
@ 2016-09-30 12:26   ` Petri Latvala
  -1 siblings, 0 replies; 9+ messages in thread
From: Petri Latvala @ 2016-09-30 12:26 UTC (permalink / raw)
  To: Chris Wilson, dri-devel; +Cc: intel-gfx, stable

The series is

Tested-by: Petri Latvala <petri.latvala@intel.com>


On 09/30/2016 02:44 PM, Chris Wilson wrote:
> dma_buf_export() adds a reference to the owning module to the dmabuf (to
> prevent the driver from being unloaded whilst a third party still refers
> to the dmabuf). However, drm_gem_prime_export() was passing its own
> THIS_MODULE (i.e. drm.ko) rather than the driver. Expand the interface
> so that driver passes the struct module to the helper.
>
> v2: Use C99 initializers to zero out unset elements of
> dma_buf_export_info
>
> Testcase: igt/vgem_reload_basic
> Reported-by: Petri Latvala <petri.latvala@intel.com>
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Petri Latvala <petri.latvala@intel.com>
> Cc: stable@vger.kernel.org
> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c       |  3 ++-
>   drivers/gpu/drm/arc/arcpgu_drv.c                |  4 +++-
>   drivers/gpu/drm/arm/hdlcd_drv.c                 |  4 +++-
>   drivers/gpu/drm/arm/malidp_drv.c                |  4 +++-
>   drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c    |  4 +++-
>   drivers/gpu/drm/drm_prime.c                     | 22 +++++++++++++++-------
>   drivers/gpu/drm/etnaviv/etnaviv_drv.c           |  4 +++-
>   drivers/gpu/drm/exynos/exynos_drm_drv.c         |  4 +++-
>   drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c       |  4 +++-
>   drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c |  4 +++-
>   drivers/gpu/drm/imx/imx-drm-core.c              |  4 +++-
>   drivers/gpu/drm/mediatek/mtk_drm_drv.c          |  4 +++-
>   drivers/gpu/drm/msm/msm_drv.c                   |  4 +++-
>   drivers/gpu/drm/nouveau/nouveau_drm.c           |  4 +++-
>   drivers/gpu/drm/qxl/qxl_drv.c                   |  4 +++-
>   drivers/gpu/drm/radeon/radeon_prime.c           |  3 ++-
>   drivers/gpu/drm/rcar-du/rcar_du_drv.c           |  4 +++-
>   drivers/gpu/drm/rockchip/rockchip_drm_drv.c     |  4 +++-
>   drivers/gpu/drm/shmobile/shmob_drm_drv.c        |  4 +++-
>   drivers/gpu/drm/sti/sti_drv.c                   |  4 +++-
>   drivers/gpu/drm/sun4i/sun4i_drv.c               |  4 +++-
>   drivers/gpu/drm/tilcdc/tilcdc_drv.c             |  4 +++-
>   drivers/gpu/drm/vc4/vc4_bo.c                    |  3 ++-
>   drivers/gpu/drm/vgem/vgem_drv.c                 |  4 +++-
>   drivers/gpu/drm/virtio/virtgpu_drv.c            |  3 ++-
>   include/drm/drmP.h                              | 14 +++++++++++++-
>   26 files changed, 96 insertions(+), 32 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> index 7700dc22f243..4b56f067e141 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> @@ -121,5 +121,6 @@ struct dma_buf *amdgpu_gem_prime_export(struct drm_device *dev,
>   	if (amdgpu_ttm_tt_get_usermm(bo->tbo.ttm))
>   		return ERR_PTR(-EPERM);
>   
> -	return drm_gem_prime_export(dev, gobj, flags);
> +	return drm_gem_prime_export(dev, gobj, flags,
> +				    THIS_MODULE, KBUILD_MODNAME);
>   }
> diff --git a/drivers/gpu/drm/arc/arcpgu_drv.c b/drivers/gpu/drm/arc/arcpgu_drv.c
> index 28e6471257d0..1cc1370aae98 100644
> --- a/drivers/gpu/drm/arc/arcpgu_drv.c
> +++ b/drivers/gpu/drm/arc/arcpgu_drv.c
> @@ -164,6 +164,8 @@ static int arcpgu_unload(struct drm_device *drm)
>   	return 0;
>   }
>   
> +static DRM_GEM_PRIME_EXPORT(arcgpu_gem_prime_export)
> +
>   static struct drm_driver arcpgu_drm_driver = {
>   	.driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME |
>   			   DRIVER_ATOMIC,
> @@ -183,7 +185,7 @@ static struct drm_driver arcpgu_drm_driver = {
>   	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>   	.gem_free_object_unlocked = drm_gem_cma_free_object,
>   	.gem_vm_ops = &drm_gem_cma_vm_ops,
> -	.gem_prime_export = drm_gem_prime_export,
> +	.gem_prime_export = arcgpu_gem_prime_export,
>   	.gem_prime_import = drm_gem_prime_import,
>   	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
> diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_drv.c
> index fb6a418ce6be..d82629f619ed 100644
> --- a/drivers/gpu/drm/arm/hdlcd_drv.c
> +++ b/drivers/gpu/drm/arm/hdlcd_drv.c
> @@ -277,6 +277,8 @@ static const struct file_operations fops = {
>   	.mmap		= drm_gem_cma_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(hdlcd_gem_prime_export)
> +
>   static struct drm_driver hdlcd_driver = {
>   	.driver_features = DRIVER_HAVE_IRQ | DRIVER_GEM |
>   			   DRIVER_MODESET | DRIVER_PRIME |
> @@ -296,7 +298,7 @@ static struct drm_driver hdlcd_driver = {
>   	.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 = drm_gem_prime_export,
> +	.gem_prime_export = hdlcd_gem_prime_export,
>   	.gem_prime_import = drm_gem_prime_import,
>   	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
> diff --git a/drivers/gpu/drm/arm/malidp_drv.c b/drivers/gpu/drm/arm/malidp_drv.c
> index 9280358b8f15..36065f5aebeb 100644
> --- a/drivers/gpu/drm/arm/malidp_drv.c
> +++ b/drivers/gpu/drm/arm/malidp_drv.c
> @@ -206,6 +206,8 @@ static const struct file_operations fops = {
>   	.mmap = drm_gem_cma_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(malidp_gem_prime_export)
> +
>   static struct drm_driver malidp_driver = {
>   	.driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC |
>   			   DRIVER_PRIME,
> @@ -220,7 +222,7 @@ static struct drm_driver malidp_driver = {
>   	.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 = drm_gem_prime_export,
> +	.gem_prime_export = malidp_gem_prime_export,
>   	.gem_prime_import = drm_gem_prime_import,
>   	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
> diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> index 5f484310bee9..3ccd3b4899c1 100644
> --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> @@ -757,6 +757,8 @@ static const struct file_operations fops = {
>   	.mmap               = drm_gem_cma_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(atmel_gem_prime_export)
> +
>   static struct drm_driver atmel_hlcdc_dc_driver = {
>   	.driver_features = DRIVER_HAVE_IRQ | DRIVER_GEM |
>   			   DRIVER_MODESET | DRIVER_PRIME |
> @@ -774,7 +776,7 @@ static struct drm_driver atmel_hlcdc_dc_driver = {
>   	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>   	.gem_prime_import = drm_gem_prime_import,
> -	.gem_prime_export = drm_gem_prime_export,
> +	.gem_prime_export = atmel_gem_prime_export,
>   	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
>   	.gem_prime_vmap = drm_gem_cma_prime_vmap,
> diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
> index 57201d68cf61..443b6da011ff 100644
> --- a/drivers/gpu/drm/drm_prime.c
> +++ b/drivers/gpu/drm/drm_prime.c
> @@ -392,19 +392,27 @@ static const struct dma_buf_ops drm_gem_prime_dmabuf_ops =  {
>    * @dev: drm_device to export from
>    * @obj: GEM object to export
>    * @flags: flags like DRM_CLOEXEC and DRM_RDWR
> + * @owner: module that owns the backing storage and dmabuf operations,
> + *         pass THIS_MODULE
> + * @name: name of the owner, pass KBUILD_MODNAME
>    *
>    * This is the implementation of the gem_prime_export functions for GEM drivers
>    * using the PRIME helpers.
>    */
>   struct dma_buf *drm_gem_prime_export(struct drm_device *dev,
> -				     struct drm_gem_object *obj, int flags)
> +				     struct drm_gem_object *obj,
> +				     int flags,
> +				     struct module *owner,
> +				     const char *name)
>   {
> -	DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
> -
> -	exp_info.ops = &drm_gem_prime_dmabuf_ops;
> -	exp_info.size = obj->size;
> -	exp_info.flags = flags;
> -	exp_info.priv = obj;
> +	struct dma_buf_export_info exp_info = {
> +		.exp_name = name,
> +		.owner = owner,
> +		.ops = &drm_gem_prime_dmabuf_ops,
> +		.size = obj->size,
> +		.flags = flags,
> +		.priv = obj,
> +	};
>   
>   	if (dev->driver->gem_prime_res_obj)
>   		exp_info.resv = dev->driver->gem_prime_res_obj(obj);
> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> index aa687669e22b..30af3c56a189 100644
> --- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> +++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> @@ -487,6 +487,8 @@ static const struct file_operations fops = {
>   	.mmap               = etnaviv_gem_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(rockchip_gem_prime_export)
> +
>   static struct drm_driver etnaviv_drm_driver = {
>   	.driver_features    = DRIVER_GEM |
>   				DRIVER_PRIME |
> @@ -497,7 +499,7 @@ static struct drm_driver etnaviv_drm_driver = {
>   	.gem_vm_ops         = &vm_ops,
>   	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> -	.gem_prime_export   = drm_gem_prime_export,
> +	.gem_prime_export   = etaniv_gem_prime_export,
>   	.gem_prime_import   = drm_gem_prime_import,
>   	.gem_prime_pin      = etnaviv_gem_prime_pin,
>   	.gem_prime_unpin    = etnaviv_gem_prime_unpin,
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c
> index 486943e70f70..8b927ba430c0 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
> @@ -393,6 +393,8 @@ static const struct file_operations exynos_drm_driver_fops = {
>   	.release	= drm_release,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(exynos_gem_prime_export)
> +
>   static struct drm_driver exynos_drm_driver = {
>   	.driver_features	= DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME
>   				  | DRIVER_ATOMIC | DRIVER_RENDER,
> @@ -412,7 +414,7 @@ static struct drm_driver exynos_drm_driver = {
>   	.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	= drm_gem_prime_export,
> +	.gem_prime_export	= exynos_gem_prime_export,
>   	.gem_prime_import	= drm_gem_prime_import,
>   	.gem_prime_get_sg_table	= exynos_drm_gem_prime_get_sg_table,
>   	.gem_prime_import_sg_table	= exynos_drm_gem_prime_import_sg_table,
> diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
> index 0884c45aefe8..3b7c50ed4327 100644
> --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
> +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
> @@ -189,6 +189,8 @@ static const struct file_operations fsl_dcu_drm_fops = {
>   	.mmap		= drm_gem_cma_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(fsl_gem_prime_export)
> +
>   static struct drm_driver fsl_dcu_drm_driver = {
>   	.driver_features	= DRIVER_HAVE_IRQ | DRIVER_GEM | DRIVER_MODESET
>   				| DRIVER_PRIME | DRIVER_ATOMIC,
> @@ -204,7 +206,7 @@ static struct drm_driver fsl_dcu_drm_driver = {
>   	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
>   	.gem_prime_import	= drm_gem_prime_import,
> -	.gem_prime_export	= drm_gem_prime_export,
> +	.gem_prime_export	= fsl_gem_prime_export,
>   	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
>   	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
> diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
> index 90377a609c98..7a38851e8fe3 100644
> --- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
> +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
> @@ -167,6 +167,8 @@ static int kirin_gem_cma_dumb_create(struct drm_file *file,
>   	return drm_gem_cma_dumb_create_internal(file, dev, args);
>   }
>   
> +static DRM_GEM_PRIME_EXPORT(kirin_gem_prime_export)
> +
>   static struct drm_driver kirin_drm_driver = {
>   	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME |
>   				  DRIVER_ATOMIC,
> @@ -180,7 +182,7 @@ static struct drm_driver kirin_drm_driver = {
>   
>   	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
> -	.gem_prime_export	= drm_gem_prime_export,
> +	.gem_prime_export	= kirin_gem_prime_export,
>   	.gem_prime_import	= drm_gem_prime_import,
>   	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
> diff --git a/drivers/gpu/drm/imx/imx-drm-core.c b/drivers/gpu/drm/imx/imx-drm-core.c
> index 98df09c2b388..d887a80635a8 100644
> --- a/drivers/gpu/drm/imx/imx-drm-core.c
> +++ b/drivers/gpu/drm/imx/imx-drm-core.c
> @@ -297,6 +297,8 @@ static const struct drm_ioctl_desc imx_drm_ioctls[] = {
>   	/* none so far */
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(imx_gem_prime_export)
> +
>   static struct drm_driver imx_drm_driver = {
>   	.driver_features	= DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME |
>   				  DRIVER_ATOMIC,
> @@ -310,7 +312,7 @@ static struct drm_driver imx_drm_driver = {
>   	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
>   	.gem_prime_import	= drm_gem_prime_import,
> -	.gem_prime_export	= drm_gem_prime_export,
> +	.gem_prime_export	= imx_gem_prime_export,
>   	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
>   	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> index cf83f6507ec8..76f5888dca62 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> @@ -252,6 +252,8 @@ static const struct file_operations mtk_drm_fops = {
>   #endif
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(mtk_gem_prime_export)
> +
>   static struct drm_driver mtk_drm_driver = {
>   	.driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME |
>   			   DRIVER_ATOMIC,
> @@ -268,7 +270,7 @@ static struct drm_driver mtk_drm_driver = {
>   
>   	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> -	.gem_prime_export = drm_gem_prime_export,
> +	.gem_prime_export = mtk_gem_prime_export,
>   	.gem_prime_import = drm_gem_prime_import,
>   	.gem_prime_get_sg_table = mtk_gem_prime_get_sg_table,
>   	.gem_prime_import_sg_table = mtk_gem_prime_import_sg_table,
> diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
> index fb5c0b0a7594..e00a449f0b3c 100644
> --- a/drivers/gpu/drm/msm/msm_drv.c
> +++ b/drivers/gpu/drm/msm/msm_drv.c
> @@ -775,6 +775,8 @@ static const struct file_operations fops = {
>   	.mmap               = msm_gem_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(msm_gem_prime_export)
> +
>   static struct drm_driver msm_driver = {
>   	.driver_features    = DRIVER_HAVE_IRQ |
>   				DRIVER_GEM |
> @@ -799,7 +801,7 @@ static struct drm_driver msm_driver = {
>   	.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   = drm_gem_prime_export,
> +	.gem_prime_export   = msm_gem_prime_export,
>   	.gem_prime_import   = drm_gem_prime_import,
>   	.gem_prime_pin      = msm_gem_prime_pin,
>   	.gem_prime_unpin    = msm_gem_prime_unpin,
> diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c
> index 3100fd88a015..a8775d02a125 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_drm.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
> @@ -941,6 +941,8 @@ nouveau_driver_fops = {
>   	.llseek = noop_llseek,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(nouveau_gem_prime_export)
> +
>   static struct drm_driver
>   driver_stub = {
>   	.driver_features =
> @@ -971,7 +973,7 @@ driver_stub = {
>   
>   	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> -	.gem_prime_export = drm_gem_prime_export,
> +	.gem_prime_export = nouveau_gem_prime_export,
>   	.gem_prime_import = drm_gem_prime_import,
>   	.gem_prime_pin = nouveau_gem_prime_pin,
>   	.gem_prime_res_obj = nouveau_gem_prime_res_obj,
> diff --git a/drivers/gpu/drm/qxl/qxl_drv.c b/drivers/gpu/drm/qxl/qxl_drv.c
> index 460bbceae297..594414e23168 100644
> --- a/drivers/gpu/drm/qxl/qxl_drv.c
> +++ b/drivers/gpu/drm/qxl/qxl_drv.c
> @@ -227,6 +227,8 @@ static struct pci_driver qxl_pci_driver = {
>   	 .driver.pm = &qxl_pm_ops,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(qxl_gem_prime_export)
> +
>   static struct drm_driver qxl_driver = {
>   	.driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME |
>   			   DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED,
> @@ -247,7 +249,7 @@ static struct drm_driver qxl_driver = {
>   #endif
>   	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> -	.gem_prime_export = drm_gem_prime_export,
> +	.gem_prime_export = qxl_gem_prime_export,
>   	.gem_prime_import = drm_gem_prime_import,
>   	.gem_prime_pin = qxl_gem_prime_pin,
>   	.gem_prime_unpin = qxl_gem_prime_unpin,
> diff --git a/drivers/gpu/drm/radeon/radeon_prime.c b/drivers/gpu/drm/radeon/radeon_prime.c
> index f3609c97496b..661a033c3c70 100644
> --- a/drivers/gpu/drm/radeon/radeon_prime.c
> +++ b/drivers/gpu/drm/radeon/radeon_prime.c
> @@ -123,5 +123,6 @@ struct dma_buf *radeon_gem_prime_export(struct drm_device *dev,
>   	struct radeon_bo *bo = gem_to_radeon_bo(gobj);
>   	if (radeon_ttm_tt_has_userptr(bo->tbo.ttm))
>   		return ERR_PTR(-EPERM);
> -	return drm_gem_prime_export(dev, gobj, flags);
> +	return drm_gem_prime_export(dev, gobj, flags,
> +				    THIS_MODULE, KBUILD_MODNAME);
>   }
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_drv.c b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> index 73c971e39b1c..a3bd017f08ce 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> @@ -210,6 +210,8 @@ static const struct file_operations rcar_du_fops = {
>   	.mmap		= drm_gem_cma_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(rcar_gem_prime_export)
> +
>   static struct drm_driver rcar_du_driver = {
>   	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME
>   				| DRIVER_ATOMIC,
> @@ -222,7 +224,7 @@ static struct drm_driver rcar_du_driver = {
>   	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
>   	.gem_prime_import	= drm_gem_prime_import,
> -	.gem_prime_export	= drm_gem_prime_export,
> +	.gem_prime_export	= rcar_gem_prime_export,
>   	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
>   	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> index 8c8cbe837e61..66c09c6930af 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> @@ -280,6 +280,8 @@ static const struct file_operations rockchip_drm_driver_fops = {
>   	.release = drm_release,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(rockchip_gem_prime_export)
> +
>   static struct drm_driver rockchip_drm_driver = {
>   	.driver_features	= DRIVER_MODESET | DRIVER_GEM |
>   				  DRIVER_PRIME | DRIVER_ATOMIC,
> @@ -295,7 +297,7 @@ static struct drm_driver rockchip_drm_driver = {
>   	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
>   	.gem_prime_import	= drm_gem_prime_import,
> -	.gem_prime_export	= drm_gem_prime_export,
> +	.gem_prime_export	= rockchip_gem_prime_export,
>   	.gem_prime_get_sg_table	= rockchip_gem_prime_get_sg_table,
>   	.gem_prime_vmap		= rockchip_gem_prime_vmap,
>   	.gem_prime_vunmap	= rockchip_gem_prime_vunmap,
> diff --git a/drivers/gpu/drm/shmobile/shmob_drm_drv.c b/drivers/gpu/drm/shmobile/shmob_drm_drv.c
> index f0492603ea88..63aa6325ae34 100644
> --- a/drivers/gpu/drm/shmobile/shmob_drm_drv.c
> +++ b/drivers/gpu/drm/shmobile/shmob_drm_drv.c
> @@ -254,6 +254,8 @@ static const struct file_operations shmob_drm_fops = {
>   	.mmap		= drm_gem_cma_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(shmob_gem_prime_export)
> +
>   static struct drm_driver shmob_drm_driver = {
>   	.driver_features	= DRIVER_HAVE_IRQ | DRIVER_GEM | DRIVER_MODESET
>   				| DRIVER_PRIME,
> @@ -268,7 +270,7 @@ static struct drm_driver shmob_drm_driver = {
>   	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
>   	.gem_prime_import	= drm_gem_prime_import,
> -	.gem_prime_export	= drm_gem_prime_export,
> +	.gem_prime_export	= shmob_gem_prime_export,
>   	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
>   	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
> diff --git a/drivers/gpu/drm/sti/sti_drv.c b/drivers/gpu/drm/sti/sti_drv.c
> index 2784919a7366..5606532162ad 100644
> --- a/drivers/gpu/drm/sti/sti_drv.c
> +++ b/drivers/gpu/drm/sti/sti_drv.c
> @@ -281,6 +281,8 @@ static const struct file_operations sti_driver_fops = {
>   	.release = drm_release,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(sti_gem_prime_export)
> +
>   static struct drm_driver sti_driver = {
>   	.driver_features = DRIVER_MODESET |
>   	    DRIVER_GEM | DRIVER_PRIME | DRIVER_ATOMIC,
> @@ -297,7 +299,7 @@ static struct drm_driver sti_driver = {
>   
>   	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> -	.gem_prime_export = drm_gem_prime_export,
> +	.gem_prime_export = sti_gem_prime_export,
>   	.gem_prime_import = drm_gem_prime_import,
>   	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
> diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c
> index 0da9862ad8ed..2b7114d6bd64 100644
> --- a/drivers/gpu/drm/sun4i/sun4i_drv.c
> +++ b/drivers/gpu/drm/sun4i/sun4i_drv.c
> @@ -61,6 +61,8 @@ static const struct file_operations sun4i_drv_fops = {
>   	.mmap		= drm_gem_cma_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(sun4i_gem_prime_export)
> +
>   static struct drm_driver sun4i_drv_driver = {
>   	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME | DRIVER_ATOMIC,
>   
> @@ -83,7 +85,7 @@ static struct drm_driver sun4i_drv_driver = {
>   	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
>   	.gem_prime_import	= drm_gem_prime_import,
> -	.gem_prime_export	= drm_gem_prime_export,
> +	.gem_prime_export	= sun4i_gem_prime_export,
>   	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
>   	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
> diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> index a694977c32f4..518f0216e4e9 100644
> --- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> +++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> @@ -584,6 +584,8 @@ static const struct file_operations fops = {
>   	.mmap               = drm_gem_cma_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(tilcdc_gem_prime_export)
> +
>   static struct drm_driver tilcdc_driver = {
>   	.driver_features    = (DRIVER_HAVE_IRQ | DRIVER_GEM | DRIVER_MODESET |
>   			       DRIVER_PRIME | DRIVER_ATOMIC),
> @@ -603,7 +605,7 @@ static struct drm_driver tilcdc_driver = {
>   	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
>   	.gem_prime_import	= drm_gem_prime_import,
> -	.gem_prime_export	= drm_gem_prime_export,
> +	.gem_prime_export	= tilcdc_gem_prime_export,
>   	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
>   	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
> diff --git a/drivers/gpu/drm/vc4/vc4_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c
> index 3f6704cf6608..218c26075110 100644
> --- a/drivers/gpu/drm/vc4/vc4_bo.c
> +++ b/drivers/gpu/drm/vc4/vc4_bo.c
> @@ -367,7 +367,8 @@ vc4_prime_export(struct drm_device *dev, struct drm_gem_object *obj, int flags)
>   		return ERR_PTR(-EINVAL);
>   	}
>   
> -	return drm_gem_prime_export(dev, obj, flags);
> +	return drm_gem_prime_export(dev, obj, flags,
> +				    THIS_MODULE, KBUILD_MODNAME);
>   }
>   
>   int vc4_mmap(struct file *filp, struct vm_area_struct *vma)
> diff --git a/drivers/gpu/drm/vgem/vgem_drv.c b/drivers/gpu/drm/vgem/vgem_drv.c
> index f36c14729b55..034e51c0dd70 100644
> --- a/drivers/gpu/drm/vgem/vgem_drv.c
> +++ b/drivers/gpu/drm/vgem/vgem_drv.c
> @@ -240,6 +240,8 @@ static int vgem_prime_pin(struct drm_gem_object *obj)
>   	return 0;
>   }
>   
> +static DRM_GEM_PRIME_EXPORT(vgem_prime_export)
> +
>   static struct sg_table *vgem_prime_get_sg_table(struct drm_gem_object *obj)
>   {
>   	struct sg_table *st;
> @@ -314,7 +316,7 @@ static struct drm_driver vgem_driver = {
>   
>   	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>   	.gem_prime_pin = vgem_prime_pin,
> -	.gem_prime_export = drm_gem_prime_export,
> +	.gem_prime_export = vgem_prime_export,
>   	.gem_prime_get_sg_table = vgem_prime_get_sg_table,
>   	.gem_prime_vmap = vgem_prime_vmap,
>   	.gem_prime_vunmap = vgem_prime_vunmap,
> diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.c b/drivers/gpu/drm/virtio/virtgpu_drv.c
> index c13f70cfc461..474ae8280fd2 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_drv.c
> +++ b/drivers/gpu/drm/virtio/virtgpu_drv.c
> @@ -114,6 +114,7 @@ static const struct file_operations virtio_gpu_driver_fops = {
>   	.llseek = noop_llseek,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(virtgpu_gem_prime_export)
>   
>   static struct drm_driver driver = {
>   	.driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME | DRIVER_RENDER | DRIVER_ATOMIC,
> @@ -132,7 +133,7 @@ static struct drm_driver driver = {
>   #endif
>   	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> -	.gem_prime_export = drm_gem_prime_export,
> +	.gem_prime_export = virtgpu_gem_prime_export,
>   	.gem_prime_import = drm_gem_prime_import,
>   	.gem_prime_pin = virtgpu_gem_prime_pin,
>   	.gem_prime_unpin = virtgpu_gem_prime_unpin,
> diff --git a/include/drm/drmP.h b/include/drm/drmP.h
> index 0e99669159c1..9e5da8b08778 100644
> --- a/include/drm/drmP.h
> +++ b/include/drm/drmP.h
> @@ -1012,7 +1012,10 @@ static inline int drm_debugfs_remove_files(const struct drm_info_list *files,
>   #endif
>   
>   extern struct dma_buf *drm_gem_prime_export(struct drm_device *dev,
> -		struct drm_gem_object *obj, int flags);
> +					    struct drm_gem_object *obj,
> +					    int flags,
> +					    struct module *owner,
> +					    const char *name);
>   extern int drm_gem_prime_handle_to_fd(struct drm_device *dev,
>   		struct drm_file *file_priv, uint32_t handle, uint32_t flags,
>   		int *prime_fd);
> @@ -1109,4 +1112,13 @@ static __inline__ bool drm_can_sleep(void)
>   /* helper for handling conditionals in various for_each macros */
>   #define for_each_if(condition) if (!(condition)) {} else
>   
> +#define DRM_GEM_PRIME_EXPORT(name)					\
> +struct dma_buf *name(struct drm_device *dev,				\
> +		     struct drm_gem_object *obj,			\
> +		     int flags)						\
> +{									\
> +	return drm_gem_prime_export(dev, obj, flags,			\
> +				    THIS_MODULE, KBUILD_MODNAME);	\
> +}
> +
>   #endif


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

* Re: [PATCH v2 1/2] drm/prime: Passing the right owner through to dma_buf_export()
@ 2016-09-30 12:26   ` Petri Latvala
  0 siblings, 0 replies; 9+ messages in thread
From: Petri Latvala @ 2016-09-30 12:26 UTC (permalink / raw)
  To: Chris Wilson, dri-devel; +Cc: intel-gfx, stable

The series is

Tested-by: Petri Latvala <petri.latvala@intel.com>


On 09/30/2016 02:44 PM, Chris Wilson wrote:
> dma_buf_export() adds a reference to the owning module to the dmabuf (to
> prevent the driver from being unloaded whilst a third party still refers
> to the dmabuf). However, drm_gem_prime_export() was passing its own
> THIS_MODULE (i.e. drm.ko) rather than the driver. Expand the interface
> so that driver passes the struct module to the helper.
>
> v2: Use C99 initializers to zero out unset elements of
> dma_buf_export_info
>
> Testcase: igt/vgem_reload_basic
> Reported-by: Petri Latvala <petri.latvala@intel.com>
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Petri Latvala <petri.latvala@intel.com>
> Cc: stable@vger.kernel.org
> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c       |  3 ++-
>   drivers/gpu/drm/arc/arcpgu_drv.c                |  4 +++-
>   drivers/gpu/drm/arm/hdlcd_drv.c                 |  4 +++-
>   drivers/gpu/drm/arm/malidp_drv.c                |  4 +++-
>   drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c    |  4 +++-
>   drivers/gpu/drm/drm_prime.c                     | 22 +++++++++++++++-------
>   drivers/gpu/drm/etnaviv/etnaviv_drv.c           |  4 +++-
>   drivers/gpu/drm/exynos/exynos_drm_drv.c         |  4 +++-
>   drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c       |  4 +++-
>   drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c |  4 +++-
>   drivers/gpu/drm/imx/imx-drm-core.c              |  4 +++-
>   drivers/gpu/drm/mediatek/mtk_drm_drv.c          |  4 +++-
>   drivers/gpu/drm/msm/msm_drv.c                   |  4 +++-
>   drivers/gpu/drm/nouveau/nouveau_drm.c           |  4 +++-
>   drivers/gpu/drm/qxl/qxl_drv.c                   |  4 +++-
>   drivers/gpu/drm/radeon/radeon_prime.c           |  3 ++-
>   drivers/gpu/drm/rcar-du/rcar_du_drv.c           |  4 +++-
>   drivers/gpu/drm/rockchip/rockchip_drm_drv.c     |  4 +++-
>   drivers/gpu/drm/shmobile/shmob_drm_drv.c        |  4 +++-
>   drivers/gpu/drm/sti/sti_drv.c                   |  4 +++-
>   drivers/gpu/drm/sun4i/sun4i_drv.c               |  4 +++-
>   drivers/gpu/drm/tilcdc/tilcdc_drv.c             |  4 +++-
>   drivers/gpu/drm/vc4/vc4_bo.c                    |  3 ++-
>   drivers/gpu/drm/vgem/vgem_drv.c                 |  4 +++-
>   drivers/gpu/drm/virtio/virtgpu_drv.c            |  3 ++-
>   include/drm/drmP.h                              | 14 +++++++++++++-
>   26 files changed, 96 insertions(+), 32 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> index 7700dc22f243..4b56f067e141 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> @@ -121,5 +121,6 @@ struct dma_buf *amdgpu_gem_prime_export(struct drm_device *dev,
>   	if (amdgpu_ttm_tt_get_usermm(bo->tbo.ttm))
>   		return ERR_PTR(-EPERM);
>   
> -	return drm_gem_prime_export(dev, gobj, flags);
> +	return drm_gem_prime_export(dev, gobj, flags,
> +				    THIS_MODULE, KBUILD_MODNAME);
>   }
> diff --git a/drivers/gpu/drm/arc/arcpgu_drv.c b/drivers/gpu/drm/arc/arcpgu_drv.c
> index 28e6471257d0..1cc1370aae98 100644
> --- a/drivers/gpu/drm/arc/arcpgu_drv.c
> +++ b/drivers/gpu/drm/arc/arcpgu_drv.c
> @@ -164,6 +164,8 @@ static int arcpgu_unload(struct drm_device *drm)
>   	return 0;
>   }
>   
> +static DRM_GEM_PRIME_EXPORT(arcgpu_gem_prime_export)
> +
>   static struct drm_driver arcpgu_drm_driver = {
>   	.driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME |
>   			   DRIVER_ATOMIC,
> @@ -183,7 +185,7 @@ static struct drm_driver arcpgu_drm_driver = {
>   	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>   	.gem_free_object_unlocked = drm_gem_cma_free_object,
>   	.gem_vm_ops = &drm_gem_cma_vm_ops,
> -	.gem_prime_export = drm_gem_prime_export,
> +	.gem_prime_export = arcgpu_gem_prime_export,
>   	.gem_prime_import = drm_gem_prime_import,
>   	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
> diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_drv.c
> index fb6a418ce6be..d82629f619ed 100644
> --- a/drivers/gpu/drm/arm/hdlcd_drv.c
> +++ b/drivers/gpu/drm/arm/hdlcd_drv.c
> @@ -277,6 +277,8 @@ static const struct file_operations fops = {
>   	.mmap		= drm_gem_cma_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(hdlcd_gem_prime_export)
> +
>   static struct drm_driver hdlcd_driver = {
>   	.driver_features = DRIVER_HAVE_IRQ | DRIVER_GEM |
>   			   DRIVER_MODESET | DRIVER_PRIME |
> @@ -296,7 +298,7 @@ static struct drm_driver hdlcd_driver = {
>   	.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 = drm_gem_prime_export,
> +	.gem_prime_export = hdlcd_gem_prime_export,
>   	.gem_prime_import = drm_gem_prime_import,
>   	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
> diff --git a/drivers/gpu/drm/arm/malidp_drv.c b/drivers/gpu/drm/arm/malidp_drv.c
> index 9280358b8f15..36065f5aebeb 100644
> --- a/drivers/gpu/drm/arm/malidp_drv.c
> +++ b/drivers/gpu/drm/arm/malidp_drv.c
> @@ -206,6 +206,8 @@ static const struct file_operations fops = {
>   	.mmap = drm_gem_cma_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(malidp_gem_prime_export)
> +
>   static struct drm_driver malidp_driver = {
>   	.driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC |
>   			   DRIVER_PRIME,
> @@ -220,7 +222,7 @@ static struct drm_driver malidp_driver = {
>   	.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 = drm_gem_prime_export,
> +	.gem_prime_export = malidp_gem_prime_export,
>   	.gem_prime_import = drm_gem_prime_import,
>   	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
> diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> index 5f484310bee9..3ccd3b4899c1 100644
> --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> @@ -757,6 +757,8 @@ static const struct file_operations fops = {
>   	.mmap               = drm_gem_cma_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(atmel_gem_prime_export)
> +
>   static struct drm_driver atmel_hlcdc_dc_driver = {
>   	.driver_features = DRIVER_HAVE_IRQ | DRIVER_GEM |
>   			   DRIVER_MODESET | DRIVER_PRIME |
> @@ -774,7 +776,7 @@ static struct drm_driver atmel_hlcdc_dc_driver = {
>   	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>   	.gem_prime_import = drm_gem_prime_import,
> -	.gem_prime_export = drm_gem_prime_export,
> +	.gem_prime_export = atmel_gem_prime_export,
>   	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
>   	.gem_prime_vmap = drm_gem_cma_prime_vmap,
> diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
> index 57201d68cf61..443b6da011ff 100644
> --- a/drivers/gpu/drm/drm_prime.c
> +++ b/drivers/gpu/drm/drm_prime.c
> @@ -392,19 +392,27 @@ static const struct dma_buf_ops drm_gem_prime_dmabuf_ops =  {
>    * @dev: drm_device to export from
>    * @obj: GEM object to export
>    * @flags: flags like DRM_CLOEXEC and DRM_RDWR
> + * @owner: module that owns the backing storage and dmabuf operations,
> + *         pass THIS_MODULE
> + * @name: name of the owner, pass KBUILD_MODNAME
>    *
>    * This is the implementation of the gem_prime_export functions for GEM drivers
>    * using the PRIME helpers.
>    */
>   struct dma_buf *drm_gem_prime_export(struct drm_device *dev,
> -				     struct drm_gem_object *obj, int flags)
> +				     struct drm_gem_object *obj,
> +				     int flags,
> +				     struct module *owner,
> +				     const char *name)
>   {
> -	DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
> -
> -	exp_info.ops = &drm_gem_prime_dmabuf_ops;
> -	exp_info.size = obj->size;
> -	exp_info.flags = flags;
> -	exp_info.priv = obj;
> +	struct dma_buf_export_info exp_info = {
> +		.exp_name = name,
> +		.owner = owner,
> +		.ops = &drm_gem_prime_dmabuf_ops,
> +		.size = obj->size,
> +		.flags = flags,
> +		.priv = obj,
> +	};
>   
>   	if (dev->driver->gem_prime_res_obj)
>   		exp_info.resv = dev->driver->gem_prime_res_obj(obj);
> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> index aa687669e22b..30af3c56a189 100644
> --- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> +++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> @@ -487,6 +487,8 @@ static const struct file_operations fops = {
>   	.mmap               = etnaviv_gem_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(rockchip_gem_prime_export)
> +
>   static struct drm_driver etnaviv_drm_driver = {
>   	.driver_features    = DRIVER_GEM |
>   				DRIVER_PRIME |
> @@ -497,7 +499,7 @@ static struct drm_driver etnaviv_drm_driver = {
>   	.gem_vm_ops         = &vm_ops,
>   	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> -	.gem_prime_export   = drm_gem_prime_export,
> +	.gem_prime_export   = etaniv_gem_prime_export,
>   	.gem_prime_import   = drm_gem_prime_import,
>   	.gem_prime_pin      = etnaviv_gem_prime_pin,
>   	.gem_prime_unpin    = etnaviv_gem_prime_unpin,
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c
> index 486943e70f70..8b927ba430c0 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
> @@ -393,6 +393,8 @@ static const struct file_operations exynos_drm_driver_fops = {
>   	.release	= drm_release,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(exynos_gem_prime_export)
> +
>   static struct drm_driver exynos_drm_driver = {
>   	.driver_features	= DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME
>   				  | DRIVER_ATOMIC | DRIVER_RENDER,
> @@ -412,7 +414,7 @@ static struct drm_driver exynos_drm_driver = {
>   	.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	= drm_gem_prime_export,
> +	.gem_prime_export	= exynos_gem_prime_export,
>   	.gem_prime_import	= drm_gem_prime_import,
>   	.gem_prime_get_sg_table	= exynos_drm_gem_prime_get_sg_table,
>   	.gem_prime_import_sg_table	= exynos_drm_gem_prime_import_sg_table,
> diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
> index 0884c45aefe8..3b7c50ed4327 100644
> --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
> +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
> @@ -189,6 +189,8 @@ static const struct file_operations fsl_dcu_drm_fops = {
>   	.mmap		= drm_gem_cma_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(fsl_gem_prime_export)
> +
>   static struct drm_driver fsl_dcu_drm_driver = {
>   	.driver_features	= DRIVER_HAVE_IRQ | DRIVER_GEM | DRIVER_MODESET
>   				| DRIVER_PRIME | DRIVER_ATOMIC,
> @@ -204,7 +206,7 @@ static struct drm_driver fsl_dcu_drm_driver = {
>   	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
>   	.gem_prime_import	= drm_gem_prime_import,
> -	.gem_prime_export	= drm_gem_prime_export,
> +	.gem_prime_export	= fsl_gem_prime_export,
>   	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
>   	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
> diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
> index 90377a609c98..7a38851e8fe3 100644
> --- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
> +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
> @@ -167,6 +167,8 @@ static int kirin_gem_cma_dumb_create(struct drm_file *file,
>   	return drm_gem_cma_dumb_create_internal(file, dev, args);
>   }
>   
> +static DRM_GEM_PRIME_EXPORT(kirin_gem_prime_export)
> +
>   static struct drm_driver kirin_drm_driver = {
>   	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME |
>   				  DRIVER_ATOMIC,
> @@ -180,7 +182,7 @@ static struct drm_driver kirin_drm_driver = {
>   
>   	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
> -	.gem_prime_export	= drm_gem_prime_export,
> +	.gem_prime_export	= kirin_gem_prime_export,
>   	.gem_prime_import	= drm_gem_prime_import,
>   	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
> diff --git a/drivers/gpu/drm/imx/imx-drm-core.c b/drivers/gpu/drm/imx/imx-drm-core.c
> index 98df09c2b388..d887a80635a8 100644
> --- a/drivers/gpu/drm/imx/imx-drm-core.c
> +++ b/drivers/gpu/drm/imx/imx-drm-core.c
> @@ -297,6 +297,8 @@ static const struct drm_ioctl_desc imx_drm_ioctls[] = {
>   	/* none so far */
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(imx_gem_prime_export)
> +
>   static struct drm_driver imx_drm_driver = {
>   	.driver_features	= DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME |
>   				  DRIVER_ATOMIC,
> @@ -310,7 +312,7 @@ static struct drm_driver imx_drm_driver = {
>   	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
>   	.gem_prime_import	= drm_gem_prime_import,
> -	.gem_prime_export	= drm_gem_prime_export,
> +	.gem_prime_export	= imx_gem_prime_export,
>   	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
>   	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> index cf83f6507ec8..76f5888dca62 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> @@ -252,6 +252,8 @@ static const struct file_operations mtk_drm_fops = {
>   #endif
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(mtk_gem_prime_export)
> +
>   static struct drm_driver mtk_drm_driver = {
>   	.driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME |
>   			   DRIVER_ATOMIC,
> @@ -268,7 +270,7 @@ static struct drm_driver mtk_drm_driver = {
>   
>   	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> -	.gem_prime_export = drm_gem_prime_export,
> +	.gem_prime_export = mtk_gem_prime_export,
>   	.gem_prime_import = drm_gem_prime_import,
>   	.gem_prime_get_sg_table = mtk_gem_prime_get_sg_table,
>   	.gem_prime_import_sg_table = mtk_gem_prime_import_sg_table,
> diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
> index fb5c0b0a7594..e00a449f0b3c 100644
> --- a/drivers/gpu/drm/msm/msm_drv.c
> +++ b/drivers/gpu/drm/msm/msm_drv.c
> @@ -775,6 +775,8 @@ static const struct file_operations fops = {
>   	.mmap               = msm_gem_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(msm_gem_prime_export)
> +
>   static struct drm_driver msm_driver = {
>   	.driver_features    = DRIVER_HAVE_IRQ |
>   				DRIVER_GEM |
> @@ -799,7 +801,7 @@ static struct drm_driver msm_driver = {
>   	.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   = drm_gem_prime_export,
> +	.gem_prime_export   = msm_gem_prime_export,
>   	.gem_prime_import   = drm_gem_prime_import,
>   	.gem_prime_pin      = msm_gem_prime_pin,
>   	.gem_prime_unpin    = msm_gem_prime_unpin,
> diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c
> index 3100fd88a015..a8775d02a125 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_drm.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
> @@ -941,6 +941,8 @@ nouveau_driver_fops = {
>   	.llseek = noop_llseek,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(nouveau_gem_prime_export)
> +
>   static struct drm_driver
>   driver_stub = {
>   	.driver_features =
> @@ -971,7 +973,7 @@ driver_stub = {
>   
>   	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> -	.gem_prime_export = drm_gem_prime_export,
> +	.gem_prime_export = nouveau_gem_prime_export,
>   	.gem_prime_import = drm_gem_prime_import,
>   	.gem_prime_pin = nouveau_gem_prime_pin,
>   	.gem_prime_res_obj = nouveau_gem_prime_res_obj,
> diff --git a/drivers/gpu/drm/qxl/qxl_drv.c b/drivers/gpu/drm/qxl/qxl_drv.c
> index 460bbceae297..594414e23168 100644
> --- a/drivers/gpu/drm/qxl/qxl_drv.c
> +++ b/drivers/gpu/drm/qxl/qxl_drv.c
> @@ -227,6 +227,8 @@ static struct pci_driver qxl_pci_driver = {
>   	 .driver.pm = &qxl_pm_ops,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(qxl_gem_prime_export)
> +
>   static struct drm_driver qxl_driver = {
>   	.driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME |
>   			   DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED,
> @@ -247,7 +249,7 @@ static struct drm_driver qxl_driver = {
>   #endif
>   	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> -	.gem_prime_export = drm_gem_prime_export,
> +	.gem_prime_export = qxl_gem_prime_export,
>   	.gem_prime_import = drm_gem_prime_import,
>   	.gem_prime_pin = qxl_gem_prime_pin,
>   	.gem_prime_unpin = qxl_gem_prime_unpin,
> diff --git a/drivers/gpu/drm/radeon/radeon_prime.c b/drivers/gpu/drm/radeon/radeon_prime.c
> index f3609c97496b..661a033c3c70 100644
> --- a/drivers/gpu/drm/radeon/radeon_prime.c
> +++ b/drivers/gpu/drm/radeon/radeon_prime.c
> @@ -123,5 +123,6 @@ struct dma_buf *radeon_gem_prime_export(struct drm_device *dev,
>   	struct radeon_bo *bo = gem_to_radeon_bo(gobj);
>   	if (radeon_ttm_tt_has_userptr(bo->tbo.ttm))
>   		return ERR_PTR(-EPERM);
> -	return drm_gem_prime_export(dev, gobj, flags);
> +	return drm_gem_prime_export(dev, gobj, flags,
> +				    THIS_MODULE, KBUILD_MODNAME);
>   }
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_drv.c b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> index 73c971e39b1c..a3bd017f08ce 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> @@ -210,6 +210,8 @@ static const struct file_operations rcar_du_fops = {
>   	.mmap		= drm_gem_cma_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(rcar_gem_prime_export)
> +
>   static struct drm_driver rcar_du_driver = {
>   	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME
>   				| DRIVER_ATOMIC,
> @@ -222,7 +224,7 @@ static struct drm_driver rcar_du_driver = {
>   	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
>   	.gem_prime_import	= drm_gem_prime_import,
> -	.gem_prime_export	= drm_gem_prime_export,
> +	.gem_prime_export	= rcar_gem_prime_export,
>   	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
>   	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> index 8c8cbe837e61..66c09c6930af 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> @@ -280,6 +280,8 @@ static const struct file_operations rockchip_drm_driver_fops = {
>   	.release = drm_release,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(rockchip_gem_prime_export)
> +
>   static struct drm_driver rockchip_drm_driver = {
>   	.driver_features	= DRIVER_MODESET | DRIVER_GEM |
>   				  DRIVER_PRIME | DRIVER_ATOMIC,
> @@ -295,7 +297,7 @@ static struct drm_driver rockchip_drm_driver = {
>   	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
>   	.gem_prime_import	= drm_gem_prime_import,
> -	.gem_prime_export	= drm_gem_prime_export,
> +	.gem_prime_export	= rockchip_gem_prime_export,
>   	.gem_prime_get_sg_table	= rockchip_gem_prime_get_sg_table,
>   	.gem_prime_vmap		= rockchip_gem_prime_vmap,
>   	.gem_prime_vunmap	= rockchip_gem_prime_vunmap,
> diff --git a/drivers/gpu/drm/shmobile/shmob_drm_drv.c b/drivers/gpu/drm/shmobile/shmob_drm_drv.c
> index f0492603ea88..63aa6325ae34 100644
> --- a/drivers/gpu/drm/shmobile/shmob_drm_drv.c
> +++ b/drivers/gpu/drm/shmobile/shmob_drm_drv.c
> @@ -254,6 +254,8 @@ static const struct file_operations shmob_drm_fops = {
>   	.mmap		= drm_gem_cma_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(shmob_gem_prime_export)
> +
>   static struct drm_driver shmob_drm_driver = {
>   	.driver_features	= DRIVER_HAVE_IRQ | DRIVER_GEM | DRIVER_MODESET
>   				| DRIVER_PRIME,
> @@ -268,7 +270,7 @@ static struct drm_driver shmob_drm_driver = {
>   	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
>   	.gem_prime_import	= drm_gem_prime_import,
> -	.gem_prime_export	= drm_gem_prime_export,
> +	.gem_prime_export	= shmob_gem_prime_export,
>   	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
>   	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
> diff --git a/drivers/gpu/drm/sti/sti_drv.c b/drivers/gpu/drm/sti/sti_drv.c
> index 2784919a7366..5606532162ad 100644
> --- a/drivers/gpu/drm/sti/sti_drv.c
> +++ b/drivers/gpu/drm/sti/sti_drv.c
> @@ -281,6 +281,8 @@ static const struct file_operations sti_driver_fops = {
>   	.release = drm_release,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(sti_gem_prime_export)
> +
>   static struct drm_driver sti_driver = {
>   	.driver_features = DRIVER_MODESET |
>   	    DRIVER_GEM | DRIVER_PRIME | DRIVER_ATOMIC,
> @@ -297,7 +299,7 @@ static struct drm_driver sti_driver = {
>   
>   	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> -	.gem_prime_export = drm_gem_prime_export,
> +	.gem_prime_export = sti_gem_prime_export,
>   	.gem_prime_import = drm_gem_prime_import,
>   	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
> diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c
> index 0da9862ad8ed..2b7114d6bd64 100644
> --- a/drivers/gpu/drm/sun4i/sun4i_drv.c
> +++ b/drivers/gpu/drm/sun4i/sun4i_drv.c
> @@ -61,6 +61,8 @@ static const struct file_operations sun4i_drv_fops = {
>   	.mmap		= drm_gem_cma_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(sun4i_gem_prime_export)
> +
>   static struct drm_driver sun4i_drv_driver = {
>   	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME | DRIVER_ATOMIC,
>   
> @@ -83,7 +85,7 @@ static struct drm_driver sun4i_drv_driver = {
>   	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
>   	.gem_prime_import	= drm_gem_prime_import,
> -	.gem_prime_export	= drm_gem_prime_export,
> +	.gem_prime_export	= sun4i_gem_prime_export,
>   	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
>   	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
> diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> index a694977c32f4..518f0216e4e9 100644
> --- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> +++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> @@ -584,6 +584,8 @@ static const struct file_operations fops = {
>   	.mmap               = drm_gem_cma_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(tilcdc_gem_prime_export)
> +
>   static struct drm_driver tilcdc_driver = {
>   	.driver_features    = (DRIVER_HAVE_IRQ | DRIVER_GEM | DRIVER_MODESET |
>   			       DRIVER_PRIME | DRIVER_ATOMIC),
> @@ -603,7 +605,7 @@ static struct drm_driver tilcdc_driver = {
>   	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
>   	.gem_prime_import	= drm_gem_prime_import,
> -	.gem_prime_export	= drm_gem_prime_export,
> +	.gem_prime_export	= tilcdc_gem_prime_export,
>   	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
>   	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
> diff --git a/drivers/gpu/drm/vc4/vc4_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c
> index 3f6704cf6608..218c26075110 100644
> --- a/drivers/gpu/drm/vc4/vc4_bo.c
> +++ b/drivers/gpu/drm/vc4/vc4_bo.c
> @@ -367,7 +367,8 @@ vc4_prime_export(struct drm_device *dev, struct drm_gem_object *obj, int flags)
>   		return ERR_PTR(-EINVAL);
>   	}
>   
> -	return drm_gem_prime_export(dev, obj, flags);
> +	return drm_gem_prime_export(dev, obj, flags,
> +				    THIS_MODULE, KBUILD_MODNAME);
>   }
>   
>   int vc4_mmap(struct file *filp, struct vm_area_struct *vma)
> diff --git a/drivers/gpu/drm/vgem/vgem_drv.c b/drivers/gpu/drm/vgem/vgem_drv.c
> index f36c14729b55..034e51c0dd70 100644
> --- a/drivers/gpu/drm/vgem/vgem_drv.c
> +++ b/drivers/gpu/drm/vgem/vgem_drv.c
> @@ -240,6 +240,8 @@ static int vgem_prime_pin(struct drm_gem_object *obj)
>   	return 0;
>   }
>   
> +static DRM_GEM_PRIME_EXPORT(vgem_prime_export)
> +
>   static struct sg_table *vgem_prime_get_sg_table(struct drm_gem_object *obj)
>   {
>   	struct sg_table *st;
> @@ -314,7 +316,7 @@ static struct drm_driver vgem_driver = {
>   
>   	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>   	.gem_prime_pin = vgem_prime_pin,
> -	.gem_prime_export = drm_gem_prime_export,
> +	.gem_prime_export = vgem_prime_export,
>   	.gem_prime_get_sg_table = vgem_prime_get_sg_table,
>   	.gem_prime_vmap = vgem_prime_vmap,
>   	.gem_prime_vunmap = vgem_prime_vunmap,
> diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.c b/drivers/gpu/drm/virtio/virtgpu_drv.c
> index c13f70cfc461..474ae8280fd2 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_drv.c
> +++ b/drivers/gpu/drm/virtio/virtgpu_drv.c
> @@ -114,6 +114,7 @@ static const struct file_operations virtio_gpu_driver_fops = {
>   	.llseek = noop_llseek,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(virtgpu_gem_prime_export)
>   
>   static struct drm_driver driver = {
>   	.driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME | DRIVER_RENDER | DRIVER_ATOMIC,
> @@ -132,7 +133,7 @@ static struct drm_driver driver = {
>   #endif
>   	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> -	.gem_prime_export = drm_gem_prime_export,
> +	.gem_prime_export = virtgpu_gem_prime_export,
>   	.gem_prime_import = drm_gem_prime_import,
>   	.gem_prime_pin = virtgpu_gem_prime_pin,
>   	.gem_prime_unpin = virtgpu_gem_prime_unpin,
> diff --git a/include/drm/drmP.h b/include/drm/drmP.h
> index 0e99669159c1..9e5da8b08778 100644
> --- a/include/drm/drmP.h
> +++ b/include/drm/drmP.h
> @@ -1012,7 +1012,10 @@ static inline int drm_debugfs_remove_files(const struct drm_info_list *files,
>   #endif
>   
>   extern struct dma_buf *drm_gem_prime_export(struct drm_device *dev,
> -		struct drm_gem_object *obj, int flags);
> +					    struct drm_gem_object *obj,
> +					    int flags,
> +					    struct module *owner,
> +					    const char *name);
>   extern int drm_gem_prime_handle_to_fd(struct drm_device *dev,
>   		struct drm_file *file_priv, uint32_t handle, uint32_t flags,
>   		int *prime_fd);
> @@ -1109,4 +1112,13 @@ static __inline__ bool drm_can_sleep(void)
>   /* helper for handling conditionals in various for_each macros */
>   #define for_each_if(condition) if (!(condition)) {} else
>   
> +#define DRM_GEM_PRIME_EXPORT(name)					\
> +struct dma_buf *name(struct drm_device *dev,				\
> +		     struct drm_gem_object *obj,			\
> +		     int flags)						\
> +{									\
> +	return drm_gem_prime_export(dev, obj, flags,			\
> +				    THIS_MODULE, KBUILD_MODNAME);	\
> +}
> +
>   #endif

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

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

* Re: [PATCH v2 1/2] drm/prime: Passing the right owner through to dma_buf_export()
  2016-09-30 11:44 ` Chris Wilson
@ 2016-09-30 12:34   ` Christian König
  -1 siblings, 0 replies; 9+ messages in thread
From: Christian König @ 2016-09-30 12:34 UTC (permalink / raw)
  To: Chris Wilson, dri-devel; +Cc: intel-gfx, Petri Latvala, stable

Why not just use dev->fops->owner instead of changing the interface 
everywhere?

Regards,
Christian.

Am 30.09.2016 um 13:44 schrieb Chris Wilson:
> dma_buf_export() adds a reference to the owning module to the dmabuf (to
> prevent the driver from being unloaded whilst a third party still refers
> to the dmabuf). However, drm_gem_prime_export() was passing its own
> THIS_MODULE (i.e. drm.ko) rather than the driver. Expand the interface
> so that driver passes the struct module to the helper.
>
> v2: Use C99 initializers to zero out unset elements of
> dma_buf_export_info
>
> Testcase: igt/vgem_reload_basic
> Reported-by: Petri Latvala <petri.latvala@intel.com>
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Petri Latvala <petri.latvala@intel.com>
> Cc: stable@vger.kernel.org
> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c       |  3 ++-
>   drivers/gpu/drm/arc/arcpgu_drv.c                |  4 +++-
>   drivers/gpu/drm/arm/hdlcd_drv.c                 |  4 +++-
>   drivers/gpu/drm/arm/malidp_drv.c                |  4 +++-
>   drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c    |  4 +++-
>   drivers/gpu/drm/drm_prime.c                     | 22 +++++++++++++++-------
>   drivers/gpu/drm/etnaviv/etnaviv_drv.c           |  4 +++-
>   drivers/gpu/drm/exynos/exynos_drm_drv.c         |  4 +++-
>   drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c       |  4 +++-
>   drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c |  4 +++-
>   drivers/gpu/drm/imx/imx-drm-core.c              |  4 +++-
>   drivers/gpu/drm/mediatek/mtk_drm_drv.c          |  4 +++-
>   drivers/gpu/drm/msm/msm_drv.c                   |  4 +++-
>   drivers/gpu/drm/nouveau/nouveau_drm.c           |  4 +++-
>   drivers/gpu/drm/qxl/qxl_drv.c                   |  4 +++-
>   drivers/gpu/drm/radeon/radeon_prime.c           |  3 ++-
>   drivers/gpu/drm/rcar-du/rcar_du_drv.c           |  4 +++-
>   drivers/gpu/drm/rockchip/rockchip_drm_drv.c     |  4 +++-
>   drivers/gpu/drm/shmobile/shmob_drm_drv.c        |  4 +++-
>   drivers/gpu/drm/sti/sti_drv.c                   |  4 +++-
>   drivers/gpu/drm/sun4i/sun4i_drv.c               |  4 +++-
>   drivers/gpu/drm/tilcdc/tilcdc_drv.c             |  4 +++-
>   drivers/gpu/drm/vc4/vc4_bo.c                    |  3 ++-
>   drivers/gpu/drm/vgem/vgem_drv.c                 |  4 +++-
>   drivers/gpu/drm/virtio/virtgpu_drv.c            |  3 ++-
>   include/drm/drmP.h                              | 14 +++++++++++++-
>   26 files changed, 96 insertions(+), 32 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> index 7700dc22f243..4b56f067e141 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> @@ -121,5 +121,6 @@ struct dma_buf *amdgpu_gem_prime_export(struct drm_device *dev,
>   	if (amdgpu_ttm_tt_get_usermm(bo->tbo.ttm))
>   		return ERR_PTR(-EPERM);
>   
> -	return drm_gem_prime_export(dev, gobj, flags);
> +	return drm_gem_prime_export(dev, gobj, flags,
> +				    THIS_MODULE, KBUILD_MODNAME);
>   }
> diff --git a/drivers/gpu/drm/arc/arcpgu_drv.c b/drivers/gpu/drm/arc/arcpgu_drv.c
> index 28e6471257d0..1cc1370aae98 100644
> --- a/drivers/gpu/drm/arc/arcpgu_drv.c
> +++ b/drivers/gpu/drm/arc/arcpgu_drv.c
> @@ -164,6 +164,8 @@ static int arcpgu_unload(struct drm_device *drm)
>   	return 0;
>   }
>   
> +static DRM_GEM_PRIME_EXPORT(arcgpu_gem_prime_export)
> +
>   static struct drm_driver arcpgu_drm_driver = {
>   	.driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME |
>   			   DRIVER_ATOMIC,
> @@ -183,7 +185,7 @@ static struct drm_driver arcpgu_drm_driver = {
>   	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>   	.gem_free_object_unlocked = drm_gem_cma_free_object,
>   	.gem_vm_ops = &drm_gem_cma_vm_ops,
> -	.gem_prime_export = drm_gem_prime_export,
> +	.gem_prime_export = arcgpu_gem_prime_export,
>   	.gem_prime_import = drm_gem_prime_import,
>   	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
> diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_drv.c
> index fb6a418ce6be..d82629f619ed 100644
> --- a/drivers/gpu/drm/arm/hdlcd_drv.c
> +++ b/drivers/gpu/drm/arm/hdlcd_drv.c
> @@ -277,6 +277,8 @@ static const struct file_operations fops = {
>   	.mmap		= drm_gem_cma_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(hdlcd_gem_prime_export)
> +
>   static struct drm_driver hdlcd_driver = {
>   	.driver_features = DRIVER_HAVE_IRQ | DRIVER_GEM |
>   			   DRIVER_MODESET | DRIVER_PRIME |
> @@ -296,7 +298,7 @@ static struct drm_driver hdlcd_driver = {
>   	.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 = drm_gem_prime_export,
> +	.gem_prime_export = hdlcd_gem_prime_export,
>   	.gem_prime_import = drm_gem_prime_import,
>   	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
> diff --git a/drivers/gpu/drm/arm/malidp_drv.c b/drivers/gpu/drm/arm/malidp_drv.c
> index 9280358b8f15..36065f5aebeb 100644
> --- a/drivers/gpu/drm/arm/malidp_drv.c
> +++ b/drivers/gpu/drm/arm/malidp_drv.c
> @@ -206,6 +206,8 @@ static const struct file_operations fops = {
>   	.mmap = drm_gem_cma_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(malidp_gem_prime_export)
> +
>   static struct drm_driver malidp_driver = {
>   	.driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC |
>   			   DRIVER_PRIME,
> @@ -220,7 +222,7 @@ static struct drm_driver malidp_driver = {
>   	.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 = drm_gem_prime_export,
> +	.gem_prime_export = malidp_gem_prime_export,
>   	.gem_prime_import = drm_gem_prime_import,
>   	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
> diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> index 5f484310bee9..3ccd3b4899c1 100644
> --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> @@ -757,6 +757,8 @@ static const struct file_operations fops = {
>   	.mmap               = drm_gem_cma_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(atmel_gem_prime_export)
> +
>   static struct drm_driver atmel_hlcdc_dc_driver = {
>   	.driver_features = DRIVER_HAVE_IRQ | DRIVER_GEM |
>   			   DRIVER_MODESET | DRIVER_PRIME |
> @@ -774,7 +776,7 @@ static struct drm_driver atmel_hlcdc_dc_driver = {
>   	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>   	.gem_prime_import = drm_gem_prime_import,
> -	.gem_prime_export = drm_gem_prime_export,
> +	.gem_prime_export = atmel_gem_prime_export,
>   	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
>   	.gem_prime_vmap = drm_gem_cma_prime_vmap,
> diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
> index 57201d68cf61..443b6da011ff 100644
> --- a/drivers/gpu/drm/drm_prime.c
> +++ b/drivers/gpu/drm/drm_prime.c
> @@ -392,19 +392,27 @@ static const struct dma_buf_ops drm_gem_prime_dmabuf_ops =  {
>    * @dev: drm_device to export from
>    * @obj: GEM object to export
>    * @flags: flags like DRM_CLOEXEC and DRM_RDWR
> + * @owner: module that owns the backing storage and dmabuf operations,
> + *         pass THIS_MODULE
> + * @name: name of the owner, pass KBUILD_MODNAME
>    *
>    * This is the implementation of the gem_prime_export functions for GEM drivers
>    * using the PRIME helpers.
>    */
>   struct dma_buf *drm_gem_prime_export(struct drm_device *dev,
> -				     struct drm_gem_object *obj, int flags)
> +				     struct drm_gem_object *obj,
> +				     int flags,
> +				     struct module *owner,
> +				     const char *name)
>   {
> -	DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
> -
> -	exp_info.ops = &drm_gem_prime_dmabuf_ops;
> -	exp_info.size = obj->size;
> -	exp_info.flags = flags;
> -	exp_info.priv = obj;
> +	struct dma_buf_export_info exp_info = {
> +		.exp_name = name,
> +		.owner = owner,
> +		.ops = &drm_gem_prime_dmabuf_ops,
> +		.size = obj->size,
> +		.flags = flags,
> +		.priv = obj,
> +	};
>   
>   	if (dev->driver->gem_prime_res_obj)
>   		exp_info.resv = dev->driver->gem_prime_res_obj(obj);
> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> index aa687669e22b..30af3c56a189 100644
> --- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> +++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> @@ -487,6 +487,8 @@ static const struct file_operations fops = {
>   	.mmap               = etnaviv_gem_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(rockchip_gem_prime_export)
> +
>   static struct drm_driver etnaviv_drm_driver = {
>   	.driver_features    = DRIVER_GEM |
>   				DRIVER_PRIME |
> @@ -497,7 +499,7 @@ static struct drm_driver etnaviv_drm_driver = {
>   	.gem_vm_ops         = &vm_ops,
>   	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> -	.gem_prime_export   = drm_gem_prime_export,
> +	.gem_prime_export   = etaniv_gem_prime_export,
>   	.gem_prime_import   = drm_gem_prime_import,
>   	.gem_prime_pin      = etnaviv_gem_prime_pin,
>   	.gem_prime_unpin    = etnaviv_gem_prime_unpin,
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c
> index 486943e70f70..8b927ba430c0 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
> @@ -393,6 +393,8 @@ static const struct file_operations exynos_drm_driver_fops = {
>   	.release	= drm_release,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(exynos_gem_prime_export)
> +
>   static struct drm_driver exynos_drm_driver = {
>   	.driver_features	= DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME
>   				  | DRIVER_ATOMIC | DRIVER_RENDER,
> @@ -412,7 +414,7 @@ static struct drm_driver exynos_drm_driver = {
>   	.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	= drm_gem_prime_export,
> +	.gem_prime_export	= exynos_gem_prime_export,
>   	.gem_prime_import	= drm_gem_prime_import,
>   	.gem_prime_get_sg_table	= exynos_drm_gem_prime_get_sg_table,
>   	.gem_prime_import_sg_table	= exynos_drm_gem_prime_import_sg_table,
> diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
> index 0884c45aefe8..3b7c50ed4327 100644
> --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
> +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
> @@ -189,6 +189,8 @@ static const struct file_operations fsl_dcu_drm_fops = {
>   	.mmap		= drm_gem_cma_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(fsl_gem_prime_export)
> +
>   static struct drm_driver fsl_dcu_drm_driver = {
>   	.driver_features	= DRIVER_HAVE_IRQ | DRIVER_GEM | DRIVER_MODESET
>   				| DRIVER_PRIME | DRIVER_ATOMIC,
> @@ -204,7 +206,7 @@ static struct drm_driver fsl_dcu_drm_driver = {
>   	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
>   	.gem_prime_import	= drm_gem_prime_import,
> -	.gem_prime_export	= drm_gem_prime_export,
> +	.gem_prime_export	= fsl_gem_prime_export,
>   	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
>   	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
> diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
> index 90377a609c98..7a38851e8fe3 100644
> --- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
> +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
> @@ -167,6 +167,8 @@ static int kirin_gem_cma_dumb_create(struct drm_file *file,
>   	return drm_gem_cma_dumb_create_internal(file, dev, args);
>   }
>   
> +static DRM_GEM_PRIME_EXPORT(kirin_gem_prime_export)
> +
>   static struct drm_driver kirin_drm_driver = {
>   	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME |
>   				  DRIVER_ATOMIC,
> @@ -180,7 +182,7 @@ static struct drm_driver kirin_drm_driver = {
>   
>   	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
> -	.gem_prime_export	= drm_gem_prime_export,
> +	.gem_prime_export	= kirin_gem_prime_export,
>   	.gem_prime_import	= drm_gem_prime_import,
>   	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
> diff --git a/drivers/gpu/drm/imx/imx-drm-core.c b/drivers/gpu/drm/imx/imx-drm-core.c
> index 98df09c2b388..d887a80635a8 100644
> --- a/drivers/gpu/drm/imx/imx-drm-core.c
> +++ b/drivers/gpu/drm/imx/imx-drm-core.c
> @@ -297,6 +297,8 @@ static const struct drm_ioctl_desc imx_drm_ioctls[] = {
>   	/* none so far */
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(imx_gem_prime_export)
> +
>   static struct drm_driver imx_drm_driver = {
>   	.driver_features	= DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME |
>   				  DRIVER_ATOMIC,
> @@ -310,7 +312,7 @@ static struct drm_driver imx_drm_driver = {
>   	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
>   	.gem_prime_import	= drm_gem_prime_import,
> -	.gem_prime_export	= drm_gem_prime_export,
> +	.gem_prime_export	= imx_gem_prime_export,
>   	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
>   	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> index cf83f6507ec8..76f5888dca62 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> @@ -252,6 +252,8 @@ static const struct file_operations mtk_drm_fops = {
>   #endif
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(mtk_gem_prime_export)
> +
>   static struct drm_driver mtk_drm_driver = {
>   	.driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME |
>   			   DRIVER_ATOMIC,
> @@ -268,7 +270,7 @@ static struct drm_driver mtk_drm_driver = {
>   
>   	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> -	.gem_prime_export = drm_gem_prime_export,
> +	.gem_prime_export = mtk_gem_prime_export,
>   	.gem_prime_import = drm_gem_prime_import,
>   	.gem_prime_get_sg_table = mtk_gem_prime_get_sg_table,
>   	.gem_prime_import_sg_table = mtk_gem_prime_import_sg_table,
> diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
> index fb5c0b0a7594..e00a449f0b3c 100644
> --- a/drivers/gpu/drm/msm/msm_drv.c
> +++ b/drivers/gpu/drm/msm/msm_drv.c
> @@ -775,6 +775,8 @@ static const struct file_operations fops = {
>   	.mmap               = msm_gem_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(msm_gem_prime_export)
> +
>   static struct drm_driver msm_driver = {
>   	.driver_features    = DRIVER_HAVE_IRQ |
>   				DRIVER_GEM |
> @@ -799,7 +801,7 @@ static struct drm_driver msm_driver = {
>   	.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   = drm_gem_prime_export,
> +	.gem_prime_export   = msm_gem_prime_export,
>   	.gem_prime_import   = drm_gem_prime_import,
>   	.gem_prime_pin      = msm_gem_prime_pin,
>   	.gem_prime_unpin    = msm_gem_prime_unpin,
> diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c
> index 3100fd88a015..a8775d02a125 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_drm.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
> @@ -941,6 +941,8 @@ nouveau_driver_fops = {
>   	.llseek = noop_llseek,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(nouveau_gem_prime_export)
> +
>   static struct drm_driver
>   driver_stub = {
>   	.driver_features =
> @@ -971,7 +973,7 @@ driver_stub = {
>   
>   	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> -	.gem_prime_export = drm_gem_prime_export,
> +	.gem_prime_export = nouveau_gem_prime_export,
>   	.gem_prime_import = drm_gem_prime_import,
>   	.gem_prime_pin = nouveau_gem_prime_pin,
>   	.gem_prime_res_obj = nouveau_gem_prime_res_obj,
> diff --git a/drivers/gpu/drm/qxl/qxl_drv.c b/drivers/gpu/drm/qxl/qxl_drv.c
> index 460bbceae297..594414e23168 100644
> --- a/drivers/gpu/drm/qxl/qxl_drv.c
> +++ b/drivers/gpu/drm/qxl/qxl_drv.c
> @@ -227,6 +227,8 @@ static struct pci_driver qxl_pci_driver = {
>   	 .driver.pm = &qxl_pm_ops,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(qxl_gem_prime_export)
> +
>   static struct drm_driver qxl_driver = {
>   	.driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME |
>   			   DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED,
> @@ -247,7 +249,7 @@ static struct drm_driver qxl_driver = {
>   #endif
>   	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> -	.gem_prime_export = drm_gem_prime_export,
> +	.gem_prime_export = qxl_gem_prime_export,
>   	.gem_prime_import = drm_gem_prime_import,
>   	.gem_prime_pin = qxl_gem_prime_pin,
>   	.gem_prime_unpin = qxl_gem_prime_unpin,
> diff --git a/drivers/gpu/drm/radeon/radeon_prime.c b/drivers/gpu/drm/radeon/radeon_prime.c
> index f3609c97496b..661a033c3c70 100644
> --- a/drivers/gpu/drm/radeon/radeon_prime.c
> +++ b/drivers/gpu/drm/radeon/radeon_prime.c
> @@ -123,5 +123,6 @@ struct dma_buf *radeon_gem_prime_export(struct drm_device *dev,
>   	struct radeon_bo *bo = gem_to_radeon_bo(gobj);
>   	if (radeon_ttm_tt_has_userptr(bo->tbo.ttm))
>   		return ERR_PTR(-EPERM);
> -	return drm_gem_prime_export(dev, gobj, flags);
> +	return drm_gem_prime_export(dev, gobj, flags,
> +				    THIS_MODULE, KBUILD_MODNAME);
>   }
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_drv.c b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> index 73c971e39b1c..a3bd017f08ce 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> @@ -210,6 +210,8 @@ static const struct file_operations rcar_du_fops = {
>   	.mmap		= drm_gem_cma_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(rcar_gem_prime_export)
> +
>   static struct drm_driver rcar_du_driver = {
>   	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME
>   				| DRIVER_ATOMIC,
> @@ -222,7 +224,7 @@ static struct drm_driver rcar_du_driver = {
>   	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
>   	.gem_prime_import	= drm_gem_prime_import,
> -	.gem_prime_export	= drm_gem_prime_export,
> +	.gem_prime_export	= rcar_gem_prime_export,
>   	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
>   	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> index 8c8cbe837e61..66c09c6930af 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> @@ -280,6 +280,8 @@ static const struct file_operations rockchip_drm_driver_fops = {
>   	.release = drm_release,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(rockchip_gem_prime_export)
> +
>   static struct drm_driver rockchip_drm_driver = {
>   	.driver_features	= DRIVER_MODESET | DRIVER_GEM |
>   				  DRIVER_PRIME | DRIVER_ATOMIC,
> @@ -295,7 +297,7 @@ static struct drm_driver rockchip_drm_driver = {
>   	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
>   	.gem_prime_import	= drm_gem_prime_import,
> -	.gem_prime_export	= drm_gem_prime_export,
> +	.gem_prime_export	= rockchip_gem_prime_export,
>   	.gem_prime_get_sg_table	= rockchip_gem_prime_get_sg_table,
>   	.gem_prime_vmap		= rockchip_gem_prime_vmap,
>   	.gem_prime_vunmap	= rockchip_gem_prime_vunmap,
> diff --git a/drivers/gpu/drm/shmobile/shmob_drm_drv.c b/drivers/gpu/drm/shmobile/shmob_drm_drv.c
> index f0492603ea88..63aa6325ae34 100644
> --- a/drivers/gpu/drm/shmobile/shmob_drm_drv.c
> +++ b/drivers/gpu/drm/shmobile/shmob_drm_drv.c
> @@ -254,6 +254,8 @@ static const struct file_operations shmob_drm_fops = {
>   	.mmap		= drm_gem_cma_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(shmob_gem_prime_export)
> +
>   static struct drm_driver shmob_drm_driver = {
>   	.driver_features	= DRIVER_HAVE_IRQ | DRIVER_GEM | DRIVER_MODESET
>   				| DRIVER_PRIME,
> @@ -268,7 +270,7 @@ static struct drm_driver shmob_drm_driver = {
>   	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
>   	.gem_prime_import	= drm_gem_prime_import,
> -	.gem_prime_export	= drm_gem_prime_export,
> +	.gem_prime_export	= shmob_gem_prime_export,
>   	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
>   	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
> diff --git a/drivers/gpu/drm/sti/sti_drv.c b/drivers/gpu/drm/sti/sti_drv.c
> index 2784919a7366..5606532162ad 100644
> --- a/drivers/gpu/drm/sti/sti_drv.c
> +++ b/drivers/gpu/drm/sti/sti_drv.c
> @@ -281,6 +281,8 @@ static const struct file_operations sti_driver_fops = {
>   	.release = drm_release,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(sti_gem_prime_export)
> +
>   static struct drm_driver sti_driver = {
>   	.driver_features = DRIVER_MODESET |
>   	    DRIVER_GEM | DRIVER_PRIME | DRIVER_ATOMIC,
> @@ -297,7 +299,7 @@ static struct drm_driver sti_driver = {
>   
>   	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> -	.gem_prime_export = drm_gem_prime_export,
> +	.gem_prime_export = sti_gem_prime_export,
>   	.gem_prime_import = drm_gem_prime_import,
>   	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
> diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c
> index 0da9862ad8ed..2b7114d6bd64 100644
> --- a/drivers/gpu/drm/sun4i/sun4i_drv.c
> +++ b/drivers/gpu/drm/sun4i/sun4i_drv.c
> @@ -61,6 +61,8 @@ static const struct file_operations sun4i_drv_fops = {
>   	.mmap		= drm_gem_cma_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(sun4i_gem_prime_export)
> +
>   static struct drm_driver sun4i_drv_driver = {
>   	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME | DRIVER_ATOMIC,
>   
> @@ -83,7 +85,7 @@ static struct drm_driver sun4i_drv_driver = {
>   	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
>   	.gem_prime_import	= drm_gem_prime_import,
> -	.gem_prime_export	= drm_gem_prime_export,
> +	.gem_prime_export	= sun4i_gem_prime_export,
>   	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
>   	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
> diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> index a694977c32f4..518f0216e4e9 100644
> --- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> +++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> @@ -584,6 +584,8 @@ static const struct file_operations fops = {
>   	.mmap               = drm_gem_cma_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(tilcdc_gem_prime_export)
> +
>   static struct drm_driver tilcdc_driver = {
>   	.driver_features    = (DRIVER_HAVE_IRQ | DRIVER_GEM | DRIVER_MODESET |
>   			       DRIVER_PRIME | DRIVER_ATOMIC),
> @@ -603,7 +605,7 @@ static struct drm_driver tilcdc_driver = {
>   	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
>   	.gem_prime_import	= drm_gem_prime_import,
> -	.gem_prime_export	= drm_gem_prime_export,
> +	.gem_prime_export	= tilcdc_gem_prime_export,
>   	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
>   	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
> diff --git a/drivers/gpu/drm/vc4/vc4_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c
> index 3f6704cf6608..218c26075110 100644
> --- a/drivers/gpu/drm/vc4/vc4_bo.c
> +++ b/drivers/gpu/drm/vc4/vc4_bo.c
> @@ -367,7 +367,8 @@ vc4_prime_export(struct drm_device *dev, struct drm_gem_object *obj, int flags)
>   		return ERR_PTR(-EINVAL);
>   	}
>   
> -	return drm_gem_prime_export(dev, obj, flags);
> +	return drm_gem_prime_export(dev, obj, flags,
> +				    THIS_MODULE, KBUILD_MODNAME);
>   }
>   
>   int vc4_mmap(struct file *filp, struct vm_area_struct *vma)
> diff --git a/drivers/gpu/drm/vgem/vgem_drv.c b/drivers/gpu/drm/vgem/vgem_drv.c
> index f36c14729b55..034e51c0dd70 100644
> --- a/drivers/gpu/drm/vgem/vgem_drv.c
> +++ b/drivers/gpu/drm/vgem/vgem_drv.c
> @@ -240,6 +240,8 @@ static int vgem_prime_pin(struct drm_gem_object *obj)
>   	return 0;
>   }
>   
> +static DRM_GEM_PRIME_EXPORT(vgem_prime_export)
> +
>   static struct sg_table *vgem_prime_get_sg_table(struct drm_gem_object *obj)
>   {
>   	struct sg_table *st;
> @@ -314,7 +316,7 @@ static struct drm_driver vgem_driver = {
>   
>   	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>   	.gem_prime_pin = vgem_prime_pin,
> -	.gem_prime_export = drm_gem_prime_export,
> +	.gem_prime_export = vgem_prime_export,
>   	.gem_prime_get_sg_table = vgem_prime_get_sg_table,
>   	.gem_prime_vmap = vgem_prime_vmap,
>   	.gem_prime_vunmap = vgem_prime_vunmap,
> diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.c b/drivers/gpu/drm/virtio/virtgpu_drv.c
> index c13f70cfc461..474ae8280fd2 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_drv.c
> +++ b/drivers/gpu/drm/virtio/virtgpu_drv.c
> @@ -114,6 +114,7 @@ static const struct file_operations virtio_gpu_driver_fops = {
>   	.llseek = noop_llseek,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(virtgpu_gem_prime_export)
>   
>   static struct drm_driver driver = {
>   	.driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME | DRIVER_RENDER | DRIVER_ATOMIC,
> @@ -132,7 +133,7 @@ static struct drm_driver driver = {
>   #endif
>   	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> -	.gem_prime_export = drm_gem_prime_export,
> +	.gem_prime_export = virtgpu_gem_prime_export,
>   	.gem_prime_import = drm_gem_prime_import,
>   	.gem_prime_pin = virtgpu_gem_prime_pin,
>   	.gem_prime_unpin = virtgpu_gem_prime_unpin,
> diff --git a/include/drm/drmP.h b/include/drm/drmP.h
> index 0e99669159c1..9e5da8b08778 100644
> --- a/include/drm/drmP.h
> +++ b/include/drm/drmP.h
> @@ -1012,7 +1012,10 @@ static inline int drm_debugfs_remove_files(const struct drm_info_list *files,
>   #endif
>   
>   extern struct dma_buf *drm_gem_prime_export(struct drm_device *dev,
> -		struct drm_gem_object *obj, int flags);
> +					    struct drm_gem_object *obj,
> +					    int flags,
> +					    struct module *owner,
> +					    const char *name);
>   extern int drm_gem_prime_handle_to_fd(struct drm_device *dev,
>   		struct drm_file *file_priv, uint32_t handle, uint32_t flags,
>   		int *prime_fd);
> @@ -1109,4 +1112,13 @@ static __inline__ bool drm_can_sleep(void)
>   /* helper for handling conditionals in various for_each macros */
>   #define for_each_if(condition) if (!(condition)) {} else
>   
> +#define DRM_GEM_PRIME_EXPORT(name)					\
> +struct dma_buf *name(struct drm_device *dev,				\
> +		     struct drm_gem_object *obj,			\
> +		     int flags)						\
> +{									\
> +	return drm_gem_prime_export(dev, obj, flags,			\
> +				    THIS_MODULE, KBUILD_MODNAME);	\
> +}
> +
>   #endif



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

* Re: [PATCH v2 1/2] drm/prime: Passing the right owner through to dma_buf_export()
@ 2016-09-30 12:34   ` Christian König
  0 siblings, 0 replies; 9+ messages in thread
From: Christian König @ 2016-09-30 12:34 UTC (permalink / raw)
  To: Chris Wilson, dri-devel; +Cc: intel-gfx, Petri Latvala, stable

Why not just use dev->fops->owner instead of changing the interface 
everywhere?

Regards,
Christian.

Am 30.09.2016 um 13:44 schrieb Chris Wilson:
> dma_buf_export() adds a reference to the owning module to the dmabuf (to
> prevent the driver from being unloaded whilst a third party still refers
> to the dmabuf). However, drm_gem_prime_export() was passing its own
> THIS_MODULE (i.e. drm.ko) rather than the driver. Expand the interface
> so that driver passes the struct module to the helper.
>
> v2: Use C99 initializers to zero out unset elements of
> dma_buf_export_info
>
> Testcase: igt/vgem_reload_basic
> Reported-by: Petri Latvala <petri.latvala@intel.com>
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Petri Latvala <petri.latvala@intel.com>
> Cc: stable@vger.kernel.org
> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c       |  3 ++-
>   drivers/gpu/drm/arc/arcpgu_drv.c                |  4 +++-
>   drivers/gpu/drm/arm/hdlcd_drv.c                 |  4 +++-
>   drivers/gpu/drm/arm/malidp_drv.c                |  4 +++-
>   drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c    |  4 +++-
>   drivers/gpu/drm/drm_prime.c                     | 22 +++++++++++++++-------
>   drivers/gpu/drm/etnaviv/etnaviv_drv.c           |  4 +++-
>   drivers/gpu/drm/exynos/exynos_drm_drv.c         |  4 +++-
>   drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c       |  4 +++-
>   drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c |  4 +++-
>   drivers/gpu/drm/imx/imx-drm-core.c              |  4 +++-
>   drivers/gpu/drm/mediatek/mtk_drm_drv.c          |  4 +++-
>   drivers/gpu/drm/msm/msm_drv.c                   |  4 +++-
>   drivers/gpu/drm/nouveau/nouveau_drm.c           |  4 +++-
>   drivers/gpu/drm/qxl/qxl_drv.c                   |  4 +++-
>   drivers/gpu/drm/radeon/radeon_prime.c           |  3 ++-
>   drivers/gpu/drm/rcar-du/rcar_du_drv.c           |  4 +++-
>   drivers/gpu/drm/rockchip/rockchip_drm_drv.c     |  4 +++-
>   drivers/gpu/drm/shmobile/shmob_drm_drv.c        |  4 +++-
>   drivers/gpu/drm/sti/sti_drv.c                   |  4 +++-
>   drivers/gpu/drm/sun4i/sun4i_drv.c               |  4 +++-
>   drivers/gpu/drm/tilcdc/tilcdc_drv.c             |  4 +++-
>   drivers/gpu/drm/vc4/vc4_bo.c                    |  3 ++-
>   drivers/gpu/drm/vgem/vgem_drv.c                 |  4 +++-
>   drivers/gpu/drm/virtio/virtgpu_drv.c            |  3 ++-
>   include/drm/drmP.h                              | 14 +++++++++++++-
>   26 files changed, 96 insertions(+), 32 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> index 7700dc22f243..4b56f067e141 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
> @@ -121,5 +121,6 @@ struct dma_buf *amdgpu_gem_prime_export(struct drm_device *dev,
>   	if (amdgpu_ttm_tt_get_usermm(bo->tbo.ttm))
>   		return ERR_PTR(-EPERM);
>   
> -	return drm_gem_prime_export(dev, gobj, flags);
> +	return drm_gem_prime_export(dev, gobj, flags,
> +				    THIS_MODULE, KBUILD_MODNAME);
>   }
> diff --git a/drivers/gpu/drm/arc/arcpgu_drv.c b/drivers/gpu/drm/arc/arcpgu_drv.c
> index 28e6471257d0..1cc1370aae98 100644
> --- a/drivers/gpu/drm/arc/arcpgu_drv.c
> +++ b/drivers/gpu/drm/arc/arcpgu_drv.c
> @@ -164,6 +164,8 @@ static int arcpgu_unload(struct drm_device *drm)
>   	return 0;
>   }
>   
> +static DRM_GEM_PRIME_EXPORT(arcgpu_gem_prime_export)
> +
>   static struct drm_driver arcpgu_drm_driver = {
>   	.driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME |
>   			   DRIVER_ATOMIC,
> @@ -183,7 +185,7 @@ static struct drm_driver arcpgu_drm_driver = {
>   	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>   	.gem_free_object_unlocked = drm_gem_cma_free_object,
>   	.gem_vm_ops = &drm_gem_cma_vm_ops,
> -	.gem_prime_export = drm_gem_prime_export,
> +	.gem_prime_export = arcgpu_gem_prime_export,
>   	.gem_prime_import = drm_gem_prime_import,
>   	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
> diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_drv.c
> index fb6a418ce6be..d82629f619ed 100644
> --- a/drivers/gpu/drm/arm/hdlcd_drv.c
> +++ b/drivers/gpu/drm/arm/hdlcd_drv.c
> @@ -277,6 +277,8 @@ static const struct file_operations fops = {
>   	.mmap		= drm_gem_cma_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(hdlcd_gem_prime_export)
> +
>   static struct drm_driver hdlcd_driver = {
>   	.driver_features = DRIVER_HAVE_IRQ | DRIVER_GEM |
>   			   DRIVER_MODESET | DRIVER_PRIME |
> @@ -296,7 +298,7 @@ static struct drm_driver hdlcd_driver = {
>   	.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 = drm_gem_prime_export,
> +	.gem_prime_export = hdlcd_gem_prime_export,
>   	.gem_prime_import = drm_gem_prime_import,
>   	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
> diff --git a/drivers/gpu/drm/arm/malidp_drv.c b/drivers/gpu/drm/arm/malidp_drv.c
> index 9280358b8f15..36065f5aebeb 100644
> --- a/drivers/gpu/drm/arm/malidp_drv.c
> +++ b/drivers/gpu/drm/arm/malidp_drv.c
> @@ -206,6 +206,8 @@ static const struct file_operations fops = {
>   	.mmap = drm_gem_cma_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(malidp_gem_prime_export)
> +
>   static struct drm_driver malidp_driver = {
>   	.driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC |
>   			   DRIVER_PRIME,
> @@ -220,7 +222,7 @@ static struct drm_driver malidp_driver = {
>   	.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 = drm_gem_prime_export,
> +	.gem_prime_export = malidp_gem_prime_export,
>   	.gem_prime_import = drm_gem_prime_import,
>   	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
> diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> index 5f484310bee9..3ccd3b4899c1 100644
> --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> @@ -757,6 +757,8 @@ static const struct file_operations fops = {
>   	.mmap               = drm_gem_cma_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(atmel_gem_prime_export)
> +
>   static struct drm_driver atmel_hlcdc_dc_driver = {
>   	.driver_features = DRIVER_HAVE_IRQ | DRIVER_GEM |
>   			   DRIVER_MODESET | DRIVER_PRIME |
> @@ -774,7 +776,7 @@ static struct drm_driver atmel_hlcdc_dc_driver = {
>   	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>   	.gem_prime_import = drm_gem_prime_import,
> -	.gem_prime_export = drm_gem_prime_export,
> +	.gem_prime_export = atmel_gem_prime_export,
>   	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
>   	.gem_prime_vmap = drm_gem_cma_prime_vmap,
> diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
> index 57201d68cf61..443b6da011ff 100644
> --- a/drivers/gpu/drm/drm_prime.c
> +++ b/drivers/gpu/drm/drm_prime.c
> @@ -392,19 +392,27 @@ static const struct dma_buf_ops drm_gem_prime_dmabuf_ops =  {
>    * @dev: drm_device to export from
>    * @obj: GEM object to export
>    * @flags: flags like DRM_CLOEXEC and DRM_RDWR
> + * @owner: module that owns the backing storage and dmabuf operations,
> + *         pass THIS_MODULE
> + * @name: name of the owner, pass KBUILD_MODNAME
>    *
>    * This is the implementation of the gem_prime_export functions for GEM drivers
>    * using the PRIME helpers.
>    */
>   struct dma_buf *drm_gem_prime_export(struct drm_device *dev,
> -				     struct drm_gem_object *obj, int flags)
> +				     struct drm_gem_object *obj,
> +				     int flags,
> +				     struct module *owner,
> +				     const char *name)
>   {
> -	DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
> -
> -	exp_info.ops = &drm_gem_prime_dmabuf_ops;
> -	exp_info.size = obj->size;
> -	exp_info.flags = flags;
> -	exp_info.priv = obj;
> +	struct dma_buf_export_info exp_info = {
> +		.exp_name = name,
> +		.owner = owner,
> +		.ops = &drm_gem_prime_dmabuf_ops,
> +		.size = obj->size,
> +		.flags = flags,
> +		.priv = obj,
> +	};
>   
>   	if (dev->driver->gem_prime_res_obj)
>   		exp_info.resv = dev->driver->gem_prime_res_obj(obj);
> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> index aa687669e22b..30af3c56a189 100644
> --- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> +++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> @@ -487,6 +487,8 @@ static const struct file_operations fops = {
>   	.mmap               = etnaviv_gem_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(rockchip_gem_prime_export)
> +
>   static struct drm_driver etnaviv_drm_driver = {
>   	.driver_features    = DRIVER_GEM |
>   				DRIVER_PRIME |
> @@ -497,7 +499,7 @@ static struct drm_driver etnaviv_drm_driver = {
>   	.gem_vm_ops         = &vm_ops,
>   	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> -	.gem_prime_export   = drm_gem_prime_export,
> +	.gem_prime_export   = etaniv_gem_prime_export,
>   	.gem_prime_import   = drm_gem_prime_import,
>   	.gem_prime_pin      = etnaviv_gem_prime_pin,
>   	.gem_prime_unpin    = etnaviv_gem_prime_unpin,
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c
> index 486943e70f70..8b927ba430c0 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
> @@ -393,6 +393,8 @@ static const struct file_operations exynos_drm_driver_fops = {
>   	.release	= drm_release,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(exynos_gem_prime_export)
> +
>   static struct drm_driver exynos_drm_driver = {
>   	.driver_features	= DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME
>   				  | DRIVER_ATOMIC | DRIVER_RENDER,
> @@ -412,7 +414,7 @@ static struct drm_driver exynos_drm_driver = {
>   	.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	= drm_gem_prime_export,
> +	.gem_prime_export	= exynos_gem_prime_export,
>   	.gem_prime_import	= drm_gem_prime_import,
>   	.gem_prime_get_sg_table	= exynos_drm_gem_prime_get_sg_table,
>   	.gem_prime_import_sg_table	= exynos_drm_gem_prime_import_sg_table,
> diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
> index 0884c45aefe8..3b7c50ed4327 100644
> --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
> +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
> @@ -189,6 +189,8 @@ static const struct file_operations fsl_dcu_drm_fops = {
>   	.mmap		= drm_gem_cma_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(fsl_gem_prime_export)
> +
>   static struct drm_driver fsl_dcu_drm_driver = {
>   	.driver_features	= DRIVER_HAVE_IRQ | DRIVER_GEM | DRIVER_MODESET
>   				| DRIVER_PRIME | DRIVER_ATOMIC,
> @@ -204,7 +206,7 @@ static struct drm_driver fsl_dcu_drm_driver = {
>   	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
>   	.gem_prime_import	= drm_gem_prime_import,
> -	.gem_prime_export	= drm_gem_prime_export,
> +	.gem_prime_export	= fsl_gem_prime_export,
>   	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
>   	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
> diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
> index 90377a609c98..7a38851e8fe3 100644
> --- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
> +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
> @@ -167,6 +167,8 @@ static int kirin_gem_cma_dumb_create(struct drm_file *file,
>   	return drm_gem_cma_dumb_create_internal(file, dev, args);
>   }
>   
> +static DRM_GEM_PRIME_EXPORT(kirin_gem_prime_export)
> +
>   static struct drm_driver kirin_drm_driver = {
>   	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME |
>   				  DRIVER_ATOMIC,
> @@ -180,7 +182,7 @@ static struct drm_driver kirin_drm_driver = {
>   
>   	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
> -	.gem_prime_export	= drm_gem_prime_export,
> +	.gem_prime_export	= kirin_gem_prime_export,
>   	.gem_prime_import	= drm_gem_prime_import,
>   	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
> diff --git a/drivers/gpu/drm/imx/imx-drm-core.c b/drivers/gpu/drm/imx/imx-drm-core.c
> index 98df09c2b388..d887a80635a8 100644
> --- a/drivers/gpu/drm/imx/imx-drm-core.c
> +++ b/drivers/gpu/drm/imx/imx-drm-core.c
> @@ -297,6 +297,8 @@ static const struct drm_ioctl_desc imx_drm_ioctls[] = {
>   	/* none so far */
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(imx_gem_prime_export)
> +
>   static struct drm_driver imx_drm_driver = {
>   	.driver_features	= DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME |
>   				  DRIVER_ATOMIC,
> @@ -310,7 +312,7 @@ static struct drm_driver imx_drm_driver = {
>   	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
>   	.gem_prime_import	= drm_gem_prime_import,
> -	.gem_prime_export	= drm_gem_prime_export,
> +	.gem_prime_export	= imx_gem_prime_export,
>   	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
>   	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> index cf83f6507ec8..76f5888dca62 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> @@ -252,6 +252,8 @@ static const struct file_operations mtk_drm_fops = {
>   #endif
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(mtk_gem_prime_export)
> +
>   static struct drm_driver mtk_drm_driver = {
>   	.driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME |
>   			   DRIVER_ATOMIC,
> @@ -268,7 +270,7 @@ static struct drm_driver mtk_drm_driver = {
>   
>   	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> -	.gem_prime_export = drm_gem_prime_export,
> +	.gem_prime_export = mtk_gem_prime_export,
>   	.gem_prime_import = drm_gem_prime_import,
>   	.gem_prime_get_sg_table = mtk_gem_prime_get_sg_table,
>   	.gem_prime_import_sg_table = mtk_gem_prime_import_sg_table,
> diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
> index fb5c0b0a7594..e00a449f0b3c 100644
> --- a/drivers/gpu/drm/msm/msm_drv.c
> +++ b/drivers/gpu/drm/msm/msm_drv.c
> @@ -775,6 +775,8 @@ static const struct file_operations fops = {
>   	.mmap               = msm_gem_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(msm_gem_prime_export)
> +
>   static struct drm_driver msm_driver = {
>   	.driver_features    = DRIVER_HAVE_IRQ |
>   				DRIVER_GEM |
> @@ -799,7 +801,7 @@ static struct drm_driver msm_driver = {
>   	.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   = drm_gem_prime_export,
> +	.gem_prime_export   = msm_gem_prime_export,
>   	.gem_prime_import   = drm_gem_prime_import,
>   	.gem_prime_pin      = msm_gem_prime_pin,
>   	.gem_prime_unpin    = msm_gem_prime_unpin,
> diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c
> index 3100fd88a015..a8775d02a125 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_drm.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
> @@ -941,6 +941,8 @@ nouveau_driver_fops = {
>   	.llseek = noop_llseek,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(nouveau_gem_prime_export)
> +
>   static struct drm_driver
>   driver_stub = {
>   	.driver_features =
> @@ -971,7 +973,7 @@ driver_stub = {
>   
>   	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> -	.gem_prime_export = drm_gem_prime_export,
> +	.gem_prime_export = nouveau_gem_prime_export,
>   	.gem_prime_import = drm_gem_prime_import,
>   	.gem_prime_pin = nouveau_gem_prime_pin,
>   	.gem_prime_res_obj = nouveau_gem_prime_res_obj,
> diff --git a/drivers/gpu/drm/qxl/qxl_drv.c b/drivers/gpu/drm/qxl/qxl_drv.c
> index 460bbceae297..594414e23168 100644
> --- a/drivers/gpu/drm/qxl/qxl_drv.c
> +++ b/drivers/gpu/drm/qxl/qxl_drv.c
> @@ -227,6 +227,8 @@ static struct pci_driver qxl_pci_driver = {
>   	 .driver.pm = &qxl_pm_ops,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(qxl_gem_prime_export)
> +
>   static struct drm_driver qxl_driver = {
>   	.driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME |
>   			   DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED,
> @@ -247,7 +249,7 @@ static struct drm_driver qxl_driver = {
>   #endif
>   	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> -	.gem_prime_export = drm_gem_prime_export,
> +	.gem_prime_export = qxl_gem_prime_export,
>   	.gem_prime_import = drm_gem_prime_import,
>   	.gem_prime_pin = qxl_gem_prime_pin,
>   	.gem_prime_unpin = qxl_gem_prime_unpin,
> diff --git a/drivers/gpu/drm/radeon/radeon_prime.c b/drivers/gpu/drm/radeon/radeon_prime.c
> index f3609c97496b..661a033c3c70 100644
> --- a/drivers/gpu/drm/radeon/radeon_prime.c
> +++ b/drivers/gpu/drm/radeon/radeon_prime.c
> @@ -123,5 +123,6 @@ struct dma_buf *radeon_gem_prime_export(struct drm_device *dev,
>   	struct radeon_bo *bo = gem_to_radeon_bo(gobj);
>   	if (radeon_ttm_tt_has_userptr(bo->tbo.ttm))
>   		return ERR_PTR(-EPERM);
> -	return drm_gem_prime_export(dev, gobj, flags);
> +	return drm_gem_prime_export(dev, gobj, flags,
> +				    THIS_MODULE, KBUILD_MODNAME);
>   }
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_drv.c b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> index 73c971e39b1c..a3bd017f08ce 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> @@ -210,6 +210,8 @@ static const struct file_operations rcar_du_fops = {
>   	.mmap		= drm_gem_cma_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(rcar_gem_prime_export)
> +
>   static struct drm_driver rcar_du_driver = {
>   	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME
>   				| DRIVER_ATOMIC,
> @@ -222,7 +224,7 @@ static struct drm_driver rcar_du_driver = {
>   	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
>   	.gem_prime_import	= drm_gem_prime_import,
> -	.gem_prime_export	= drm_gem_prime_export,
> +	.gem_prime_export	= rcar_gem_prime_export,
>   	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
>   	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> index 8c8cbe837e61..66c09c6930af 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> @@ -280,6 +280,8 @@ static const struct file_operations rockchip_drm_driver_fops = {
>   	.release = drm_release,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(rockchip_gem_prime_export)
> +
>   static struct drm_driver rockchip_drm_driver = {
>   	.driver_features	= DRIVER_MODESET | DRIVER_GEM |
>   				  DRIVER_PRIME | DRIVER_ATOMIC,
> @@ -295,7 +297,7 @@ static struct drm_driver rockchip_drm_driver = {
>   	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
>   	.gem_prime_import	= drm_gem_prime_import,
> -	.gem_prime_export	= drm_gem_prime_export,
> +	.gem_prime_export	= rockchip_gem_prime_export,
>   	.gem_prime_get_sg_table	= rockchip_gem_prime_get_sg_table,
>   	.gem_prime_vmap		= rockchip_gem_prime_vmap,
>   	.gem_prime_vunmap	= rockchip_gem_prime_vunmap,
> diff --git a/drivers/gpu/drm/shmobile/shmob_drm_drv.c b/drivers/gpu/drm/shmobile/shmob_drm_drv.c
> index f0492603ea88..63aa6325ae34 100644
> --- a/drivers/gpu/drm/shmobile/shmob_drm_drv.c
> +++ b/drivers/gpu/drm/shmobile/shmob_drm_drv.c
> @@ -254,6 +254,8 @@ static const struct file_operations shmob_drm_fops = {
>   	.mmap		= drm_gem_cma_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(shmob_gem_prime_export)
> +
>   static struct drm_driver shmob_drm_driver = {
>   	.driver_features	= DRIVER_HAVE_IRQ | DRIVER_GEM | DRIVER_MODESET
>   				| DRIVER_PRIME,
> @@ -268,7 +270,7 @@ static struct drm_driver shmob_drm_driver = {
>   	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
>   	.gem_prime_import	= drm_gem_prime_import,
> -	.gem_prime_export	= drm_gem_prime_export,
> +	.gem_prime_export	= shmob_gem_prime_export,
>   	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
>   	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
> diff --git a/drivers/gpu/drm/sti/sti_drv.c b/drivers/gpu/drm/sti/sti_drv.c
> index 2784919a7366..5606532162ad 100644
> --- a/drivers/gpu/drm/sti/sti_drv.c
> +++ b/drivers/gpu/drm/sti/sti_drv.c
> @@ -281,6 +281,8 @@ static const struct file_operations sti_driver_fops = {
>   	.release = drm_release,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(sti_gem_prime_export)
> +
>   static struct drm_driver sti_driver = {
>   	.driver_features = DRIVER_MODESET |
>   	    DRIVER_GEM | DRIVER_PRIME | DRIVER_ATOMIC,
> @@ -297,7 +299,7 @@ static struct drm_driver sti_driver = {
>   
>   	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> -	.gem_prime_export = drm_gem_prime_export,
> +	.gem_prime_export = sti_gem_prime_export,
>   	.gem_prime_import = drm_gem_prime_import,
>   	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
> diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c
> index 0da9862ad8ed..2b7114d6bd64 100644
> --- a/drivers/gpu/drm/sun4i/sun4i_drv.c
> +++ b/drivers/gpu/drm/sun4i/sun4i_drv.c
> @@ -61,6 +61,8 @@ static const struct file_operations sun4i_drv_fops = {
>   	.mmap		= drm_gem_cma_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(sun4i_gem_prime_export)
> +
>   static struct drm_driver sun4i_drv_driver = {
>   	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME | DRIVER_ATOMIC,
>   
> @@ -83,7 +85,7 @@ static struct drm_driver sun4i_drv_driver = {
>   	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
>   	.gem_prime_import	= drm_gem_prime_import,
> -	.gem_prime_export	= drm_gem_prime_export,
> +	.gem_prime_export	= sun4i_gem_prime_export,
>   	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
>   	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
> diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> index a694977c32f4..518f0216e4e9 100644
> --- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> +++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> @@ -584,6 +584,8 @@ static const struct file_operations fops = {
>   	.mmap               = drm_gem_cma_mmap,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(tilcdc_gem_prime_export)
> +
>   static struct drm_driver tilcdc_driver = {
>   	.driver_features    = (DRIVER_HAVE_IRQ | DRIVER_GEM | DRIVER_MODESET |
>   			       DRIVER_PRIME | DRIVER_ATOMIC),
> @@ -603,7 +605,7 @@ static struct drm_driver tilcdc_driver = {
>   	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
>   	.gem_prime_import	= drm_gem_prime_import,
> -	.gem_prime_export	= drm_gem_prime_export,
> +	.gem_prime_export	= tilcdc_gem_prime_export,
>   	.gem_prime_get_sg_table	= drm_gem_cma_prime_get_sg_table,
>   	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
>   	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
> diff --git a/drivers/gpu/drm/vc4/vc4_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c
> index 3f6704cf6608..218c26075110 100644
> --- a/drivers/gpu/drm/vc4/vc4_bo.c
> +++ b/drivers/gpu/drm/vc4/vc4_bo.c
> @@ -367,7 +367,8 @@ vc4_prime_export(struct drm_device *dev, struct drm_gem_object *obj, int flags)
>   		return ERR_PTR(-EINVAL);
>   	}
>   
> -	return drm_gem_prime_export(dev, obj, flags);
> +	return drm_gem_prime_export(dev, obj, flags,
> +				    THIS_MODULE, KBUILD_MODNAME);
>   }
>   
>   int vc4_mmap(struct file *filp, struct vm_area_struct *vma)
> diff --git a/drivers/gpu/drm/vgem/vgem_drv.c b/drivers/gpu/drm/vgem/vgem_drv.c
> index f36c14729b55..034e51c0dd70 100644
> --- a/drivers/gpu/drm/vgem/vgem_drv.c
> +++ b/drivers/gpu/drm/vgem/vgem_drv.c
> @@ -240,6 +240,8 @@ static int vgem_prime_pin(struct drm_gem_object *obj)
>   	return 0;
>   }
>   
> +static DRM_GEM_PRIME_EXPORT(vgem_prime_export)
> +
>   static struct sg_table *vgem_prime_get_sg_table(struct drm_gem_object *obj)
>   {
>   	struct sg_table *st;
> @@ -314,7 +316,7 @@ static struct drm_driver vgem_driver = {
>   
>   	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>   	.gem_prime_pin = vgem_prime_pin,
> -	.gem_prime_export = drm_gem_prime_export,
> +	.gem_prime_export = vgem_prime_export,
>   	.gem_prime_get_sg_table = vgem_prime_get_sg_table,
>   	.gem_prime_vmap = vgem_prime_vmap,
>   	.gem_prime_vunmap = vgem_prime_vunmap,
> diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.c b/drivers/gpu/drm/virtio/virtgpu_drv.c
> index c13f70cfc461..474ae8280fd2 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_drv.c
> +++ b/drivers/gpu/drm/virtio/virtgpu_drv.c
> @@ -114,6 +114,7 @@ static const struct file_operations virtio_gpu_driver_fops = {
>   	.llseek = noop_llseek,
>   };
>   
> +static DRM_GEM_PRIME_EXPORT(virtgpu_gem_prime_export)
>   
>   static struct drm_driver driver = {
>   	.driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME | DRIVER_RENDER | DRIVER_ATOMIC,
> @@ -132,7 +133,7 @@ static struct drm_driver driver = {
>   #endif
>   	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>   	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> -	.gem_prime_export = drm_gem_prime_export,
> +	.gem_prime_export = virtgpu_gem_prime_export,
>   	.gem_prime_import = drm_gem_prime_import,
>   	.gem_prime_pin = virtgpu_gem_prime_pin,
>   	.gem_prime_unpin = virtgpu_gem_prime_unpin,
> diff --git a/include/drm/drmP.h b/include/drm/drmP.h
> index 0e99669159c1..9e5da8b08778 100644
> --- a/include/drm/drmP.h
> +++ b/include/drm/drmP.h
> @@ -1012,7 +1012,10 @@ static inline int drm_debugfs_remove_files(const struct drm_info_list *files,
>   #endif
>   
>   extern struct dma_buf *drm_gem_prime_export(struct drm_device *dev,
> -		struct drm_gem_object *obj, int flags);
> +					    struct drm_gem_object *obj,
> +					    int flags,
> +					    struct module *owner,
> +					    const char *name);
>   extern int drm_gem_prime_handle_to_fd(struct drm_device *dev,
>   		struct drm_file *file_priv, uint32_t handle, uint32_t flags,
>   		int *prime_fd);
> @@ -1109,4 +1112,13 @@ static __inline__ bool drm_can_sleep(void)
>   /* helper for handling conditionals in various for_each macros */
>   #define for_each_if(condition) if (!(condition)) {} else
>   
> +#define DRM_GEM_PRIME_EXPORT(name)					\
> +struct dma_buf *name(struct drm_device *dev,				\
> +		     struct drm_gem_object *obj,			\
> +		     int flags)						\
> +{									\
> +	return drm_gem_prime_export(dev, obj, flags,			\
> +				    THIS_MODULE, KBUILD_MODNAME);	\
> +}
> +
>   #endif


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

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

* ✗ Fi.CI.BAT: warning for series starting with [v2,1/2] drm/prime: Passing the right owner through to dma_buf_export()
  2016-09-30 11:44 ` Chris Wilson
                   ` (3 preceding siblings ...)
  (?)
@ 2016-09-30 13:49 ` Patchwork
  -1 siblings, 0 replies; 9+ messages in thread
From: Patchwork @ 2016-09-30 13:49 UTC (permalink / raw)
  To: Chris Wilson; +Cc: intel-gfx

== Series Details ==

Series: series starting with [v2,1/2] drm/prime: Passing the right owner through to dma_buf_export()
URL   : https://patchwork.freedesktop.org/series/13136/
State : warning

== Summary ==

Series 13136v1 Series without cover letter
https://patchwork.freedesktop.org/api/1.0/series/13136/revisions/1/mbox/

Test kms_pipe_crc_basic:
        Subgroup suspend-read-crc-pipe-a:
                pass       -> DMESG-WARN (fi-byt-j1900)
        Subgroup suspend-read-crc-pipe-b:
                pass       -> DMESG-WARN (fi-byt-j1900)
Test kms_psr_sink_crc:
        Subgroup psr_basic:
                dmesg-warn -> PASS       (fi-skl-6700hq)

fi-bdw-5557u     total:244  pass:229  dwarn:0   dfail:0   fail:0   skip:15 
fi-bsw-n3050     total:244  pass:202  dwarn:0   dfail:0   fail:0   skip:42 
fi-bxt-t5700     total:244  pass:214  dwarn:0   dfail:0   fail:0   skip:30 
fi-byt-j1900     total:244  pass:210  dwarn:2   dfail:0   fail:1   skip:31 
fi-byt-n2820     total:244  pass:208  dwarn:0   dfail:0   fail:1   skip:35 
fi-hsw-4770      total:244  pass:222  dwarn:0   dfail:0   fail:0   skip:22 
fi-hsw-4770r     total:244  pass:222  dwarn:0   dfail:0   fail:0   skip:22 
fi-ilk-650       total:244  pass:182  dwarn:0   dfail:0   fail:2   skip:60 
fi-ivb-3520m     total:244  pass:219  dwarn:0   dfail:0   fail:0   skip:25 
fi-ivb-3770      total:244  pass:207  dwarn:0   dfail:0   fail:0   skip:37 
fi-skl-6260u     total:244  pass:230  dwarn:0   dfail:0   fail:0   skip:14 
fi-skl-6700hq    total:244  pass:222  dwarn:0   dfail:0   fail:0   skip:22 
fi-skl-6700k     total:244  pass:219  dwarn:1   dfail:0   fail:0   skip:24 
fi-skl-6770hq    total:244  pass:228  dwarn:1   dfail:0   fail:1   skip:14 
fi-snb-2520m     total:244  pass:208  dwarn:0   dfail:0   fail:0   skip:36 
fi-snb-2600      total:244  pass:207  dwarn:0   dfail:0   fail:0   skip:37 

Results at /archive/results/CI_IGT_test/Patchwork_2603/

d0534bd0217c83c083ba146b9c987e19b219e0e4 drm-intel-nightly: 2016y-09m-30d-10h-31m-00s UTC integration manifest
6c1ccdb drm/prime: Take a ref on the drm_dev when exporting a dma_buf
1eb0f4d drm/prime: Passing the right owner through to dma_buf_export()

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

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

end of thread, other threads:[~2016-09-30 13:49 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-09-30 11:44 [PATCH v2 1/2] drm/prime: Passing the right owner through to dma_buf_export() Chris Wilson
2016-09-30 11:44 ` Chris Wilson
2016-09-30 11:44 ` [PATCH v2 2/2] drm/prime: Take a ref on the drm_dev when exporting a dma_buf Chris Wilson
2016-09-30 11:44   ` Chris Wilson
2016-09-30 12:26 ` [PATCH v2 1/2] drm/prime: Passing the right owner through to dma_buf_export() Petri Latvala
2016-09-30 12:26   ` Petri Latvala
2016-09-30 12:34 ` Christian König
2016-09-30 12:34   ` Christian König
2016-09-30 13:49 ` ✗ Fi.CI.BAT: warning for series starting with [v2,1/2] " Patchwork

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.