From patchwork Fri Sep 30 10:38:05 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chris Wilson X-Patchwork-Id: 9357951 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id AB3FF60757 for ; Fri, 30 Sep 2016 10:38:15 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9C97529F24 for ; Fri, 30 Sep 2016 10:38:15 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 916EF29FA7; Fri, 30 Sep 2016 10:38:15 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.1 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 3A39529F24 for ; Fri, 30 Sep 2016 10:38:14 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id AF2546E9C3; Fri, 30 Sep 2016 10:38:13 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wm0-x242.google.com (mail-wm0-x242.google.com [IPv6:2a00:1450:400c:c09::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6AE916E9C4; Fri, 30 Sep 2016 10:38:12 +0000 (UTC) Received: by mail-wm0-x242.google.com with SMTP id p197so1347678wmg.1; Fri, 30 Sep 2016 03:38:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id; bh=SnE572MON0+0v/2nHZkmbOn/5QSU+G8OUt5HcJuRtpw=; b=fP8POVUnmWeFBtbGyLF+4Gc5xs9e96nNy0frutuNLJS3kkET0IL3zHeT2c2L/9TN8O xWLVMfgsGEBdnQBiSDzKOlPJWJeynpvD+QhxVUYX7xb1vWL/YfIIi+bLKAC9Z74nWeDc qnfXhmycjGB+P1//3FXXFYHYMIhSemw96FtOsk638/qlgp4ELIDfPqOCaEqhh4XRT4oz /4daLbL4bai6MAfN5EiW65C8qt6Ync7DOeUBu+gSbhWOmZdhdPEObcNIsSk4Qtwvvm8l yTJIEoad4E0zXFaUXcGrOolz1g2utTWWK2aAQT1N6vPs8VMQKu2bVkzE0p/FgKrGioVC ZYAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id; bh=SnE572MON0+0v/2nHZkmbOn/5QSU+G8OUt5HcJuRtpw=; b=dshHO1mhQTHue4kiLVGZxFcy/NaxS865JcWBCqIYr0NaGLByy1CcbMOS9LC4+7zbem BZhYjRd1cNjfYfKlZhbltox5wk8nmxzUl3Xa034He4W75ZHO5mPK7QUHT+XvPGtQvpF7 8heSq8oQItVKEVOfeQJ62RYSEeEArxJvMDOxMIAwP7O98/bt5c7mPsXSlo2OlrnE+Htp 2aq1Og/FnnhIuBgnDw7kXJpRJXhxn5SQXqk9fk1SUYxvvIFzX2c1zTFTVgjhBA8mBmNe V+EROTKrleAwnoNB3umgt+DtgMm3IUWxqZbk3pt9sml5coRedXO0LSkIasgVuvBMDGcb w9hA== X-Gm-Message-State: AA6/9RmDnpJl2ZvpYOnPx2vsbHbAT6RNwbnvbvZp4yWywJzeXzB9SxNlZ1apkw07/EcnjQ== X-Received: by 10.28.29.15 with SMTP id d15mr2974990wmd.75.1475231890652; Fri, 30 Sep 2016 03:38:10 -0700 (PDT) Received: from haswell.alporthouse.com ([78.156.65.138]) by smtp.gmail.com with ESMTPSA id y4sm3425717wmy.22.2016.09.30.03.38.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 30 Sep 2016 03:38:09 -0700 (PDT) From: Chris Wilson To: dri-devel@lists.freedesktop.org Subject: [PATCH] drm/prime: Passing the right owner through to dma_buf_export() Date: Fri, 30 Sep 2016 11:38:05 +0100 Message-Id: <20160930103805.13550-1-chris@chris-wilson.co.uk> X-Mailer: git-send-email 2.9.3 Cc: intel-gfx@lists.freedesktop.org, Petri Latvala , stable@vger.kernel.org X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP 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. Testcase: igt/vgem_reload_basic Reported-by: Petri Latvala Signed-off-by: Chris Wilson Cc: Petri Latvala Cc: stable@vger.kernel.org Reviewed-by: Joonas Lahtinen --- 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 | 12 ++++++++++-- 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, 91 insertions(+), 27 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..3effd6df7025 100644 --- a/drivers/gpu/drm/drm_prime.c +++ b/drivers/gpu/drm/drm_prime.c @@ -392,15 +392,23 @@ 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); + struct dma_buf_export_info exp_info; + exp_info.exp_name = name; + exp_info.owner = owner; exp_info.ops = &drm_gem_prime_dmabuf_ops; exp_info.size = obj->size; exp_info.flags = flags; 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..2574a103e3ba 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