* [PATCH 0/2] drm: Remove gem_prime_mmap callback
@ 2023-06-13 14:51 Thomas Zimmermann
2023-06-13 14:51 ` [PATCH 1/2] drm/msm: Initialize mmap offset after constructing the buffer object Thomas Zimmermann
2023-06-13 14:51 ` [PATCH 2/2] drm: Remove struct drm_driver.gem_prime_mmap Thomas Zimmermann
0 siblings, 2 replies; 9+ messages in thread
From: Thomas Zimmermann @ 2023-06-13 14:51 UTC (permalink / raw)
To: daniel, airlied, robdclark, quic_abhinavk, sean
Cc: dri-devel, linux-arm-msm, freedreno, Thomas Zimmermann
Remove the gem_prime_mmap callback from struct drm_driver. Rework
msm, which has its own implementation. Then remove the callback and
call drm_gem_prime_mmap() directly. This closes a long-standing item
on the TODO list.
The change removes the last GEM callback from the driver structure.
GEM memory managers should implement the callbacks in struct dma_buf_ops
and struct drm_gem_object_funcs to adapt the DRM to their needs.
Thomas Zimmermann (2):
drm/msm: Initialize mmap offset after constructing the buffer object
drm: Remove struct drm_driver.gem_prime_mmap
Documentation/gpu/todo.rst | 9 ---------
drivers/accel/ivpu/ivpu_drv.c | 1 -
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 1 -
drivers/gpu/drm/drm_fbdev_dma.c | 6 +-----
drivers/gpu/drm/drm_prime.c | 14 ++------------
drivers/gpu/drm/etnaviv/etnaviv_drv.c | 1 -
drivers/gpu/drm/exynos/exynos_drm_drv.c | 1 -
drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c | 1 -
drivers/gpu/drm/lima/lima_drv.c | 1 -
drivers/gpu/drm/mediatek/mtk_drm_drv.c | 1 -
drivers/gpu/drm/msm/msm_drv.c | 1 -
drivers/gpu/drm/msm/msm_drv.h | 1 -
drivers/gpu/drm/msm/msm_gem.c | 8 ++++++++
drivers/gpu/drm/msm/msm_gem_prime.c | 15 ---------------
drivers/gpu/drm/nouveau/nouveau_drm.c | 1 -
drivers/gpu/drm/panfrost/panfrost_drv.c | 1 -
drivers/gpu/drm/pl111/pl111_drv.c | 1 -
drivers/gpu/drm/radeon/radeon_drv.c | 1 -
drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c | 1 -
drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 1 -
drivers/gpu/drm/v3d/v3d_drv.c | 1 -
drivers/gpu/drm/virtio/virtgpu_drv.c | 1 -
drivers/gpu/drm/xen/xen_drm_front.c | 1 -
include/drm/drm_drv.h | 14 --------------
include/drm/drm_gem_dma_helper.h | 6 ++----
include/drm/drm_gem_shmem_helper.h | 1 -
include/drm/drm_gem_vram_helper.h | 1 -
27 files changed, 13 insertions(+), 79 deletions(-)
base-commit: 63a468ec7c7652afa80e3fa6ad203f9e64d04e83
--
2.41.0
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 1/2] drm/msm: Initialize mmap offset after constructing the buffer object
2023-06-13 14:51 [PATCH 0/2] drm: Remove gem_prime_mmap callback Thomas Zimmermann
@ 2023-06-13 14:51 ` Thomas Zimmermann
2023-06-13 14:51 ` [PATCH 2/2] drm: Remove struct drm_driver.gem_prime_mmap Thomas Zimmermann
1 sibling, 0 replies; 9+ messages in thread
From: Thomas Zimmermann @ 2023-06-13 14:51 UTC (permalink / raw)
To: daniel, airlied, robdclark, quic_abhinavk, sean
Cc: dri-devel, linux-arm-msm, freedreno, Thomas Zimmermann
Only the msm driver provides its own implementation of gem_prime_mmap
from struct drm_driver. All other drivers use the drm_gem_prime_mmap()
helper.
Initialize the mmap offset when constructing the buffer object in msm
and reduce the gem_prime_mmap code to the generic helper. Prepares
msm for the removal of struct drm_driver.gem_prime_mmap.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
drivers/gpu/drm/msm/msm_gem.c | 8 ++++++++
drivers/gpu/drm/msm/msm_gem_prime.c | 10 ----------
2 files changed, 8 insertions(+), 10 deletions(-)
diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c
index 20cfd86d2b324..635744bc4765f 100644
--- a/drivers/gpu/drm/msm/msm_gem.c
+++ b/drivers/gpu/drm/msm/msm_gem.c
@@ -1234,6 +1234,10 @@ struct drm_gem_object *msm_gem_new(struct drm_device *dev, uint32_t size, uint32
list_add_tail(&msm_obj->node, &priv->objects);
mutex_unlock(&priv->obj_lock);
+ ret = drm_gem_create_mmap_offset(obj);
+ if (ret)
+ goto fail;
+
return obj;
fail:
@@ -1290,6 +1294,10 @@ struct drm_gem_object *msm_gem_import(struct drm_device *dev,
list_add_tail(&msm_obj->node, &priv->objects);
mutex_unlock(&priv->obj_lock);
+ ret = drm_gem_create_mmap_offset(obj);
+ if (ret)
+ goto fail;
+
return obj;
fail:
diff --git a/drivers/gpu/drm/msm/msm_gem_prime.c b/drivers/gpu/drm/msm/msm_gem_prime.c
index c1d91863df055..2c846afe049e4 100644
--- a/drivers/gpu/drm/msm/msm_gem_prime.c
+++ b/drivers/gpu/drm/msm/msm_gem_prime.c
@@ -13,16 +13,6 @@
int msm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)
{
- int ret;
-
- /* Ensure the mmap offset is initialized. We lazily initialize it,
- * so if it has not been first mmap'd directly as a GEM object, the
- * mmap offset will not be already initialized.
- */
- ret = drm_gem_create_mmap_offset(obj);
- if (ret)
- return ret;
-
return drm_gem_prime_mmap(obj, vma);
}
--
2.41.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 2/2] drm: Remove struct drm_driver.gem_prime_mmap
2023-06-13 14:51 [PATCH 0/2] drm: Remove gem_prime_mmap callback Thomas Zimmermann
2023-06-13 14:51 ` [PATCH 1/2] drm/msm: Initialize mmap offset after constructing the buffer object Thomas Zimmermann
@ 2023-06-13 14:51 ` Thomas Zimmermann
2023-06-13 15:32 ` Alex Deucher
2023-06-13 17:27 ` [2/2] " Sui Jingfeng
1 sibling, 2 replies; 9+ messages in thread
From: Thomas Zimmermann @ 2023-06-13 14:51 UTC (permalink / raw)
To: daniel, airlied, robdclark, quic_abhinavk, sean
Cc: dri-devel, linux-arm-msm, freedreno, Thomas Zimmermann
All drivers initialize this field with drm_gem_prime_mmap(). Call
the function directly and remove the field. Simplifies the code and
resolves a long-standing TODO item.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
Documentation/gpu/todo.rst | 9 ---------
drivers/accel/ivpu/ivpu_drv.c | 1 -
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 1 -
drivers/gpu/drm/drm_fbdev_dma.c | 6 +-----
drivers/gpu/drm/drm_prime.c | 14 ++------------
drivers/gpu/drm/etnaviv/etnaviv_drv.c | 1 -
drivers/gpu/drm/exynos/exynos_drm_drv.c | 1 -
drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c | 1 -
drivers/gpu/drm/lima/lima_drv.c | 1 -
drivers/gpu/drm/mediatek/mtk_drm_drv.c | 1 -
drivers/gpu/drm/msm/msm_drv.c | 1 -
drivers/gpu/drm/msm/msm_drv.h | 1 -
drivers/gpu/drm/msm/msm_gem_prime.c | 5 -----
drivers/gpu/drm/nouveau/nouveau_drm.c | 1 -
drivers/gpu/drm/panfrost/panfrost_drv.c | 1 -
drivers/gpu/drm/pl111/pl111_drv.c | 1 -
drivers/gpu/drm/radeon/radeon_drv.c | 1 -
drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c | 1 -
drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 1 -
drivers/gpu/drm/v3d/v3d_drv.c | 1 -
drivers/gpu/drm/virtio/virtgpu_drv.c | 1 -
drivers/gpu/drm/xen/xen_drm_front.c | 1 -
include/drm/drm_drv.h | 14 --------------
include/drm/drm_gem_dma_helper.h | 6 ++----
include/drm/drm_gem_shmem_helper.h | 1 -
include/drm/drm_gem_vram_helper.h | 1 -
26 files changed, 5 insertions(+), 69 deletions(-)
diff --git a/Documentation/gpu/todo.rst b/Documentation/gpu/todo.rst
index 68bdafa0284f5..ca1efad8c89c3 100644
--- a/Documentation/gpu/todo.rst
+++ b/Documentation/gpu/todo.rst
@@ -319,15 +319,6 @@ Contact: Daniel Vetter, Noralf Tronnes
Level: Advanced
-struct drm_gem_object_funcs
----------------------------
-
-GEM objects can now have a function table instead of having the callbacks on the
-DRM driver struct. This is now the preferred way. Callbacks in drivers have been
-converted, except for struct drm_driver.gem_prime_mmap.
-
-Level: Intermediate
-
connector register/unregister fixes
-----------------------------------
diff --git a/drivers/accel/ivpu/ivpu_drv.c b/drivers/accel/ivpu/ivpu_drv.c
index 2df7643b843d5..9f2b9fdcc5498 100644
--- a/drivers/accel/ivpu/ivpu_drv.c
+++ b/drivers/accel/ivpu/ivpu_drv.c
@@ -376,7 +376,6 @@ static const struct drm_driver driver = {
.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
.gem_prime_import = ivpu_gem_prime_import,
- .gem_prime_mmap = drm_gem_prime_mmap,
.ioctls = ivpu_drm_ioctls,
.num_ioctls = ARRAY_SIZE(ivpu_drm_ioctls),
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
index c9a41c997c6c7..7681f79f462eb 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
@@ -2809,7 +2809,6 @@ static const struct drm_driver amdgpu_kms_driver = {
.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
.gem_prime_import = amdgpu_gem_prime_import,
- .gem_prime_mmap = drm_gem_prime_mmap,
.name = DRIVER_NAME,
.desc = DRIVER_DESC,
diff --git a/drivers/gpu/drm/drm_fbdev_dma.c b/drivers/gpu/drm/drm_fbdev_dma.c
index d86773fa8ab00..8217f1ddc0075 100644
--- a/drivers/gpu/drm/drm_fbdev_dma.c
+++ b/drivers/gpu/drm/drm_fbdev_dma.c
@@ -54,12 +54,8 @@ static void drm_fbdev_dma_fb_destroy(struct fb_info *info)
static int drm_fbdev_dma_fb_mmap(struct fb_info *info, struct vm_area_struct *vma)
{
struct drm_fb_helper *fb_helper = info->par;
- struct drm_device *dev = fb_helper->dev;
-
- if (drm_WARN_ON_ONCE(dev, !fb_helper->dev->driver->gem_prime_mmap))
- return -ENODEV;
- return fb_helper->dev->driver->gem_prime_mmap(fb_helper->buffer->gem, vma);
+ return drm_gem_prime_mmap(fb_helper->buffer->gem, vma);
}
static const struct fb_ops drm_fbdev_dma_fb_ops = {
diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
index d29dafce9bb0a..6bcf324ef81c9 100644
--- a/drivers/gpu/drm/drm_prime.c
+++ b/drivers/gpu/drm/drm_prime.c
@@ -715,8 +715,6 @@ EXPORT_SYMBOL(drm_gem_dmabuf_vunmap);
* the same codepath that is used for regular GEM buffer mapping on the DRM fd.
* The fake GEM offset is added to vma->vm_pgoff and &drm_driver->fops->mmap is
* called to set up the mapping.
- *
- * Drivers can use this as their &drm_driver.gem_prime_mmap callback.
*/
int drm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)
{
@@ -772,25 +770,17 @@ EXPORT_SYMBOL(drm_gem_prime_mmap);
* @vma: virtual address range
*
* Provides memory mapping for the buffer. This can be used as the
- * &dma_buf_ops.mmap callback. It just forwards to &drm_driver.gem_prime_mmap,
- * which should be set to drm_gem_prime_mmap().
- *
- * FIXME: There's really no point to this wrapper, drivers which need anything
- * else but drm_gem_prime_mmap can roll their own &dma_buf_ops.mmap callback.
+ * &dma_buf_ops.mmap callback. It just forwards to drm_gem_prime_mmap().
*
* Returns 0 on success or a negative error code on failure.
*/
int drm_gem_dmabuf_mmap(struct dma_buf *dma_buf, struct vm_area_struct *vma)
{
struct drm_gem_object *obj = dma_buf->priv;
- struct drm_device *dev = obj->dev;
dma_resv_assert_held(dma_buf->resv);
- if (!dev->driver->gem_prime_mmap)
- return -ENOSYS;
-
- return dev->driver->gem_prime_mmap(obj, vma);
+ return drm_gem_prime_mmap(obj, vma);
}
EXPORT_SYMBOL(drm_gem_dmabuf_mmap);
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
index 31a7f59ccb49e..00223a8749092 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
@@ -484,7 +484,6 @@ static const struct drm_driver etnaviv_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_sg_table = etnaviv_gem_prime_import_sg_table,
- .gem_prime_mmap = drm_gem_prime_mmap,
#ifdef CONFIG_DEBUG_FS
.debugfs_init = etnaviv_debugfs_init,
#endif
diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c
index 6b73fb7a83c3c..c9e3c88fb329c 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
@@ -113,7 +113,6 @@ static const struct drm_driver exynos_drm_driver = {
.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
.gem_prime_import = exynos_drm_gem_prime_import,
.gem_prime_import_sg_table = exynos_drm_gem_prime_import_sg_table,
- .gem_prime_mmap = drm_gem_prime_mmap,
.ioctls = exynos_ioctls,
.num_ioctls = ARRAY_SIZE(exynos_ioctls),
.fops = &exynos_drm_driver_fops,
diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
index 0c4aa4d9b0a77..8a98fa276e8a9 100644
--- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
+++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
@@ -63,7 +63,6 @@ static const struct drm_driver hibmc_driver = {
.debugfs_init = drm_vram_mm_debugfs_init,
.dumb_create = hibmc_dumb_create,
.dumb_map_offset = drm_gem_ttm_dumb_map_offset,
- .gem_prime_mmap = drm_gem_prime_mmap,
};
static int __maybe_unused hibmc_pm_suspend(struct device *dev)
diff --git a/drivers/gpu/drm/lima/lima_drv.c b/drivers/gpu/drm/lima/lima_drv.c
index e8566211e9fa1..65c31dc38049a 100644
--- a/drivers/gpu/drm/lima/lima_drv.c
+++ b/drivers/gpu/drm/lima/lima_drv.c
@@ -279,7 +279,6 @@ static const struct drm_driver lima_drm_driver = {
.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
.gem_prime_import_sg_table = drm_gem_shmem_prime_import_sg_table,
.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
- .gem_prime_mmap = drm_gem_prime_mmap,
};
struct lima_block_reader {
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
index 6dcb4ba2466c0..5693bb8d29ce4 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
@@ -560,7 +560,6 @@ static const struct drm_driver mtk_drm_driver = {
.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
.gem_prime_import = mtk_drm_gem_prime_import,
.gem_prime_import_sg_table = mtk_gem_prime_import_sg_table,
- .gem_prime_mmap = drm_gem_prime_mmap,
.fops = &mtk_drm_fops,
.name = DRIVER_NAME,
diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index 891eff8433a9c..47efa3c4492c4 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -1089,7 +1089,6 @@ static const struct drm_driver msm_driver = {
.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
.gem_prime_import_sg_table = msm_gem_prime_import_sg_table,
- .gem_prime_mmap = msm_gem_prime_mmap,
#ifdef CONFIG_DEBUG_FS
.debugfs_init = msm_debugfs_init,
#endif
diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h
index e13a8cbd61c95..44c9e06f2dffa 100644
--- a/drivers/gpu/drm/msm/msm_drv.h
+++ b/drivers/gpu/drm/msm/msm_drv.h
@@ -282,7 +282,6 @@ unsigned long msm_gem_shrinker_shrink(struct drm_device *dev, unsigned long nr_t
void msm_gem_shrinker_init(struct drm_device *dev);
void msm_gem_shrinker_cleanup(struct drm_device *dev);
-int msm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma);
struct sg_table *msm_gem_prime_get_sg_table(struct drm_gem_object *obj);
int msm_gem_prime_vmap(struct drm_gem_object *obj, struct iosys_map *map);
void msm_gem_prime_vunmap(struct drm_gem_object *obj, struct iosys_map *map);
diff --git a/drivers/gpu/drm/msm/msm_gem_prime.c b/drivers/gpu/drm/msm/msm_gem_prime.c
index 2c846afe049e4..5f68e31a3e4e1 100644
--- a/drivers/gpu/drm/msm/msm_gem_prime.c
+++ b/drivers/gpu/drm/msm/msm_gem_prime.c
@@ -11,11 +11,6 @@
#include "msm_drv.h"
#include "msm_gem.h"
-int msm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)
-{
- return drm_gem_prime_mmap(obj, vma);
-}
-
struct sg_table *msm_gem_prime_get_sg_table(struct drm_gem_object *obj)
{
struct msm_gem_object *msm_obj = to_msm_bo(obj);
diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c
index cc7c5b4a05fd8..4199b8294e6e8 100644
--- a/drivers/gpu/drm/nouveau/nouveau_drm.c
+++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
@@ -1237,7 +1237,6 @@ driver_stub = {
.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
.gem_prime_import_sg_table = nouveau_gem_prime_import_sg_table,
- .gem_prime_mmap = drm_gem_prime_mmap,
.dumb_create = nouveau_display_dumb_create,
.dumb_map_offset = drm_gem_ttm_dumb_map_offset,
diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c
index 19f8cff52e533..d2916bf435473 100644
--- a/drivers/gpu/drm/panfrost/panfrost_drv.c
+++ b/drivers/gpu/drm/panfrost/panfrost_drv.c
@@ -542,7 +542,6 @@ static const struct drm_driver panfrost_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_sg_table = panfrost_gem_prime_import_sg_table,
- .gem_prime_mmap = drm_gem_prime_mmap,
};
static int panfrost_probe(struct platform_device *pdev)
diff --git a/drivers/gpu/drm/pl111/pl111_drv.c b/drivers/gpu/drm/pl111/pl111_drv.c
index 43049c8028b21..c4b8357ea9996 100644
--- a/drivers/gpu/drm/pl111/pl111_drv.c
+++ b/drivers/gpu/drm/pl111/pl111_drv.c
@@ -227,7 +227,6 @@ static const struct drm_driver pl111_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_sg_table = pl111_gem_import_sg_table,
- .gem_prime_mmap = drm_gem_prime_mmap,
#if defined(CONFIG_DEBUG_FS)
.debugfs_init = pl111_debugfs_init,
diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
index e4374814f0ef6..cf1b960c4200c 100644
--- a/drivers/gpu/drm/radeon/radeon_drv.c
+++ b/drivers/gpu/drm/radeon/radeon_drv.c
@@ -607,7 +607,6 @@ static const struct drm_driver kms_driver = {
.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
.gem_prime_import_sg_table = radeon_gem_prime_import_sg_table,
- .gem_prime_mmap = drm_gem_prime_mmap,
.name = DRIVER_NAME,
.desc = DRIVER_DESC,
diff --git a/drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c b/drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c
index ed3ee3d15baec..4280ff5fa91f2 100644
--- a/drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c
+++ b/drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c
@@ -608,7 +608,6 @@ static const 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_sg_table = rcar_du_gem_prime_import_sg_table,
- .gem_prime_mmap = drm_gem_prime_mmap,
.fops = &rcar_du_fops,
.name = "rcar-du",
.desc = "Renesas R-Car Display Unit",
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
index c0ebfdf56a711..b8cf89f0cc566 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
@@ -227,7 +227,6 @@ static const 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_sg_table = rockchip_gem_prime_import_sg_table,
- .gem_prime_mmap = drm_gem_prime_mmap,
.fops = &rockchip_drm_driver_fops,
.name = DRIVER_NAME,
.desc = DRIVER_DESC,
diff --git a/drivers/gpu/drm/v3d/v3d_drv.c b/drivers/gpu/drm/v3d/v3d_drv.c
index 71f9fdde24b41..845a36e36450d 100644
--- a/drivers/gpu/drm/v3d/v3d_drv.c
+++ b/drivers/gpu/drm/v3d/v3d_drv.c
@@ -174,7 +174,6 @@ static const struct drm_driver v3d_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_sg_table = v3d_prime_import_sg_table,
- .gem_prime_mmap = drm_gem_prime_mmap,
.ioctls = v3d_drm_ioctls,
.num_ioctls = ARRAY_SIZE(v3d_drm_ioctls),
diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.c b/drivers/gpu/drm/virtio/virtgpu_drv.c
index add075681e18f..91ace7a44f2a6 100644
--- a/drivers/gpu/drm/virtio/virtgpu_drv.c
+++ b/drivers/gpu/drm/virtio/virtgpu_drv.c
@@ -188,7 +188,6 @@ static const 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_mmap = drm_gem_prime_mmap,
.gem_prime_import = virtgpu_gem_prime_import,
.gem_prime_import_sg_table = virtgpu_gem_prime_import_sg_table,
diff --git a/drivers/gpu/drm/xen/xen_drm_front.c b/drivers/gpu/drm/xen/xen_drm_front.c
index 90996c108146d..62c3c13b3a175 100644
--- a/drivers/gpu/drm/xen/xen_drm_front.c
+++ b/drivers/gpu/drm/xen/xen_drm_front.c
@@ -477,7 +477,6 @@ static const struct drm_driver xen_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_sg_table = xen_drm_front_gem_import_sg_table,
- .gem_prime_mmap = drm_gem_prime_mmap,
.dumb_create = xen_drm_drv_dumb_create,
.fops = &xen_drm_dev_fops,
.name = "xendrm-du",
diff --git a/include/drm/drm_drv.h b/include/drm/drm_drv.h
index 89e2706cac561..870278ecd8ba9 100644
--- a/include/drm/drm_drv.h
+++ b/include/drm/drm_drv.h
@@ -343,20 +343,6 @@ struct drm_driver {
struct drm_device *dev,
struct dma_buf_attachment *attach,
struct sg_table *sgt);
- /**
- * @gem_prime_mmap:
- *
- * mmap hook for GEM drivers, used to implement dma-buf mmap in the
- * PRIME helpers.
- *
- * This hook only exists for historical reasons. Drivers must use
- * drm_gem_prime_mmap() to implement it.
- *
- * FIXME: Convert all drivers to implement mmap in struct
- * &drm_gem_object_funcs and inline drm_gem_prime_mmap() into
- * its callers. This hook should be removed afterwards.
- */
- int (*gem_prime_mmap)(struct drm_gem_object *obj, struct vm_area_struct *vma);
/**
* @dumb_create:
diff --git a/include/drm/drm_gem_dma_helper.h b/include/drm/drm_gem_dma_helper.h
index 8a043235dad81..61da596780b64 100644
--- a/include/drm/drm_gem_dma_helper.h
+++ b/include/drm/drm_gem_dma_helper.h
@@ -169,8 +169,7 @@ drm_gem_dma_prime_import_sg_table(struct drm_device *dev,
.dumb_create = (dumb_create_func), \
.prime_handle_to_fd = drm_gem_prime_handle_to_fd, \
.prime_fd_to_handle = drm_gem_prime_fd_to_handle, \
- .gem_prime_import_sg_table = drm_gem_dma_prime_import_sg_table, \
- .gem_prime_mmap = drm_gem_prime_mmap
+ .gem_prime_import_sg_table = drm_gem_dma_prime_import_sg_table
/**
* DRM_GEM_DMA_DRIVER_OPS - DMA GEM driver operations
@@ -207,8 +206,7 @@ drm_gem_dma_prime_import_sg_table(struct drm_device *dev,
.dumb_create = dumb_create_func, \
.prime_handle_to_fd = drm_gem_prime_handle_to_fd, \
.prime_fd_to_handle = drm_gem_prime_fd_to_handle, \
- .gem_prime_import_sg_table = drm_gem_dma_prime_import_sg_table_vmap, \
- .gem_prime_mmap = drm_gem_prime_mmap
+ .gem_prime_import_sg_table = drm_gem_dma_prime_import_sg_table_vmap
/**
* DRM_GEM_DMA_DRIVER_OPS_VMAP - DMA GEM driver operations ensuring a virtual
diff --git a/include/drm/drm_gem_shmem_helper.h b/include/drm/drm_gem_shmem_helper.h
index 5994fed5e3278..46eb46e690630 100644
--- a/include/drm/drm_gem_shmem_helper.h
+++ b/include/drm/drm_gem_shmem_helper.h
@@ -293,7 +293,6 @@ int drm_gem_shmem_dumb_create(struct drm_file *file, struct drm_device *dev,
.prime_handle_to_fd = drm_gem_prime_handle_to_fd, \
.prime_fd_to_handle = drm_gem_prime_fd_to_handle, \
.gem_prime_import_sg_table = drm_gem_shmem_prime_import_sg_table, \
- .gem_prime_mmap = drm_gem_prime_mmap, \
.dumb_create = drm_gem_shmem_dumb_create
#endif /* __DRM_GEM_SHMEM_HELPER_H__ */
diff --git a/include/drm/drm_gem_vram_helper.h b/include/drm/drm_gem_vram_helper.h
index f4aab64411d82..6b265cb9f45a4 100644
--- a/include/drm/drm_gem_vram_helper.h
+++ b/include/drm/drm_gem_vram_helper.h
@@ -160,7 +160,6 @@ void drm_gem_vram_simple_display_pipe_cleanup_fb(
.debugfs_init = drm_vram_mm_debugfs_init, \
.dumb_create = drm_gem_vram_driver_dumb_create, \
.dumb_map_offset = drm_gem_ttm_dumb_map_offset, \
- .gem_prime_mmap = drm_gem_prime_mmap, \
.prime_handle_to_fd = drm_gem_prime_handle_to_fd, \
.prime_fd_to_handle = drm_gem_prime_fd_to_handle
--
2.41.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2] drm: Remove struct drm_driver.gem_prime_mmap
2023-06-13 14:51 ` [PATCH 2/2] drm: Remove struct drm_driver.gem_prime_mmap Thomas Zimmermann
@ 2023-06-13 15:32 ` Alex Deucher
2023-06-13 17:27 ` [2/2] " Sui Jingfeng
1 sibling, 0 replies; 9+ messages in thread
From: Alex Deucher @ 2023-06-13 15:32 UTC (permalink / raw)
To: Thomas Zimmermann
Cc: daniel, airlied, robdclark, quic_abhinavk, sean, linux-arm-msm,
freedreno, dri-devel
On Tue, Jun 13, 2023 at 11:05 AM Thomas Zimmermann <tzimmermann@suse.de> wrote:
>
> All drivers initialize this field with drm_gem_prime_mmap(). Call
> the function directly and remove the field. Simplifies the code and
> resolves a long-standing TODO item.
>
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Series is:
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
> ---
> Documentation/gpu/todo.rst | 9 ---------
> drivers/accel/ivpu/ivpu_drv.c | 1 -
> drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 1 -
> drivers/gpu/drm/drm_fbdev_dma.c | 6 +-----
> drivers/gpu/drm/drm_prime.c | 14 ++------------
> drivers/gpu/drm/etnaviv/etnaviv_drv.c | 1 -
> drivers/gpu/drm/exynos/exynos_drm_drv.c | 1 -
> drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c | 1 -
> drivers/gpu/drm/lima/lima_drv.c | 1 -
> drivers/gpu/drm/mediatek/mtk_drm_drv.c | 1 -
> drivers/gpu/drm/msm/msm_drv.c | 1 -
> drivers/gpu/drm/msm/msm_drv.h | 1 -
> drivers/gpu/drm/msm/msm_gem_prime.c | 5 -----
> drivers/gpu/drm/nouveau/nouveau_drm.c | 1 -
> drivers/gpu/drm/panfrost/panfrost_drv.c | 1 -
> drivers/gpu/drm/pl111/pl111_drv.c | 1 -
> drivers/gpu/drm/radeon/radeon_drv.c | 1 -
> drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c | 1 -
> drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 1 -
> drivers/gpu/drm/v3d/v3d_drv.c | 1 -
> drivers/gpu/drm/virtio/virtgpu_drv.c | 1 -
> drivers/gpu/drm/xen/xen_drm_front.c | 1 -
> include/drm/drm_drv.h | 14 --------------
> include/drm/drm_gem_dma_helper.h | 6 ++----
> include/drm/drm_gem_shmem_helper.h | 1 -
> include/drm/drm_gem_vram_helper.h | 1 -
> 26 files changed, 5 insertions(+), 69 deletions(-)
>
> diff --git a/Documentation/gpu/todo.rst b/Documentation/gpu/todo.rst
> index 68bdafa0284f5..ca1efad8c89c3 100644
> --- a/Documentation/gpu/todo.rst
> +++ b/Documentation/gpu/todo.rst
> @@ -319,15 +319,6 @@ Contact: Daniel Vetter, Noralf Tronnes
>
> Level: Advanced
>
> -struct drm_gem_object_funcs
> ----------------------------
> -
> -GEM objects can now have a function table instead of having the callbacks on the
> -DRM driver struct. This is now the preferred way. Callbacks in drivers have been
> -converted, except for struct drm_driver.gem_prime_mmap.
> -
> -Level: Intermediate
> -
> connector register/unregister fixes
> -----------------------------------
>
> diff --git a/drivers/accel/ivpu/ivpu_drv.c b/drivers/accel/ivpu/ivpu_drv.c
> index 2df7643b843d5..9f2b9fdcc5498 100644
> --- a/drivers/accel/ivpu/ivpu_drv.c
> +++ b/drivers/accel/ivpu/ivpu_drv.c
> @@ -376,7 +376,6 @@ static const struct drm_driver driver = {
> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> .gem_prime_import = ivpu_gem_prime_import,
> - .gem_prime_mmap = drm_gem_prime_mmap,
>
> .ioctls = ivpu_drm_ioctls,
> .num_ioctls = ARRAY_SIZE(ivpu_drm_ioctls),
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> index c9a41c997c6c7..7681f79f462eb 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> @@ -2809,7 +2809,6 @@ static const struct drm_driver amdgpu_kms_driver = {
> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> .gem_prime_import = amdgpu_gem_prime_import,
> - .gem_prime_mmap = drm_gem_prime_mmap,
>
> .name = DRIVER_NAME,
> .desc = DRIVER_DESC,
> diff --git a/drivers/gpu/drm/drm_fbdev_dma.c b/drivers/gpu/drm/drm_fbdev_dma.c
> index d86773fa8ab00..8217f1ddc0075 100644
> --- a/drivers/gpu/drm/drm_fbdev_dma.c
> +++ b/drivers/gpu/drm/drm_fbdev_dma.c
> @@ -54,12 +54,8 @@ static void drm_fbdev_dma_fb_destroy(struct fb_info *info)
> static int drm_fbdev_dma_fb_mmap(struct fb_info *info, struct vm_area_struct *vma)
> {
> struct drm_fb_helper *fb_helper = info->par;
> - struct drm_device *dev = fb_helper->dev;
> -
> - if (drm_WARN_ON_ONCE(dev, !fb_helper->dev->driver->gem_prime_mmap))
> - return -ENODEV;
>
> - return fb_helper->dev->driver->gem_prime_mmap(fb_helper->buffer->gem, vma);
> + return drm_gem_prime_mmap(fb_helper->buffer->gem, vma);
> }
>
> static const struct fb_ops drm_fbdev_dma_fb_ops = {
> diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
> index d29dafce9bb0a..6bcf324ef81c9 100644
> --- a/drivers/gpu/drm/drm_prime.c
> +++ b/drivers/gpu/drm/drm_prime.c
> @@ -715,8 +715,6 @@ EXPORT_SYMBOL(drm_gem_dmabuf_vunmap);
> * the same codepath that is used for regular GEM buffer mapping on the DRM fd.
> * The fake GEM offset is added to vma->vm_pgoff and &drm_driver->fops->mmap is
> * called to set up the mapping.
> - *
> - * Drivers can use this as their &drm_driver.gem_prime_mmap callback.
> */
> int drm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)
> {
> @@ -772,25 +770,17 @@ EXPORT_SYMBOL(drm_gem_prime_mmap);
> * @vma: virtual address range
> *
> * Provides memory mapping for the buffer. This can be used as the
> - * &dma_buf_ops.mmap callback. It just forwards to &drm_driver.gem_prime_mmap,
> - * which should be set to drm_gem_prime_mmap().
> - *
> - * FIXME: There's really no point to this wrapper, drivers which need anything
> - * else but drm_gem_prime_mmap can roll their own &dma_buf_ops.mmap callback.
> + * &dma_buf_ops.mmap callback. It just forwards to drm_gem_prime_mmap().
> *
> * Returns 0 on success or a negative error code on failure.
> */
> int drm_gem_dmabuf_mmap(struct dma_buf *dma_buf, struct vm_area_struct *vma)
> {
> struct drm_gem_object *obj = dma_buf->priv;
> - struct drm_device *dev = obj->dev;
>
> dma_resv_assert_held(dma_buf->resv);
>
> - if (!dev->driver->gem_prime_mmap)
> - return -ENOSYS;
> -
> - return dev->driver->gem_prime_mmap(obj, vma);
> + return drm_gem_prime_mmap(obj, vma);
> }
> EXPORT_SYMBOL(drm_gem_dmabuf_mmap);
>
> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> index 31a7f59ccb49e..00223a8749092 100644
> --- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> +++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> @@ -484,7 +484,6 @@ static const struct drm_driver etnaviv_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_sg_table = etnaviv_gem_prime_import_sg_table,
> - .gem_prime_mmap = drm_gem_prime_mmap,
> #ifdef CONFIG_DEBUG_FS
> .debugfs_init = etnaviv_debugfs_init,
> #endif
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c
> index 6b73fb7a83c3c..c9e3c88fb329c 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
> @@ -113,7 +113,6 @@ static const struct drm_driver exynos_drm_driver = {
> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> .gem_prime_import = exynos_drm_gem_prime_import,
> .gem_prime_import_sg_table = exynos_drm_gem_prime_import_sg_table,
> - .gem_prime_mmap = drm_gem_prime_mmap,
> .ioctls = exynos_ioctls,
> .num_ioctls = ARRAY_SIZE(exynos_ioctls),
> .fops = &exynos_drm_driver_fops,
> diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
> index 0c4aa4d9b0a77..8a98fa276e8a9 100644
> --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
> +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
> @@ -63,7 +63,6 @@ static const struct drm_driver hibmc_driver = {
> .debugfs_init = drm_vram_mm_debugfs_init,
> .dumb_create = hibmc_dumb_create,
> .dumb_map_offset = drm_gem_ttm_dumb_map_offset,
> - .gem_prime_mmap = drm_gem_prime_mmap,
> };
>
> static int __maybe_unused hibmc_pm_suspend(struct device *dev)
> diff --git a/drivers/gpu/drm/lima/lima_drv.c b/drivers/gpu/drm/lima/lima_drv.c
> index e8566211e9fa1..65c31dc38049a 100644
> --- a/drivers/gpu/drm/lima/lima_drv.c
> +++ b/drivers/gpu/drm/lima/lima_drv.c
> @@ -279,7 +279,6 @@ static const struct drm_driver lima_drm_driver = {
> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> .gem_prime_import_sg_table = drm_gem_shmem_prime_import_sg_table,
> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
> - .gem_prime_mmap = drm_gem_prime_mmap,
> };
>
> struct lima_block_reader {
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> index 6dcb4ba2466c0..5693bb8d29ce4 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> @@ -560,7 +560,6 @@ static const struct drm_driver mtk_drm_driver = {
> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> .gem_prime_import = mtk_drm_gem_prime_import,
> .gem_prime_import_sg_table = mtk_gem_prime_import_sg_table,
> - .gem_prime_mmap = drm_gem_prime_mmap,
> .fops = &mtk_drm_fops,
>
> .name = DRIVER_NAME,
> diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
> index 891eff8433a9c..47efa3c4492c4 100644
> --- a/drivers/gpu/drm/msm/msm_drv.c
> +++ b/drivers/gpu/drm/msm/msm_drv.c
> @@ -1089,7 +1089,6 @@ static const struct drm_driver msm_driver = {
> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> .gem_prime_import_sg_table = msm_gem_prime_import_sg_table,
> - .gem_prime_mmap = msm_gem_prime_mmap,
> #ifdef CONFIG_DEBUG_FS
> .debugfs_init = msm_debugfs_init,
> #endif
> diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h
> index e13a8cbd61c95..44c9e06f2dffa 100644
> --- a/drivers/gpu/drm/msm/msm_drv.h
> +++ b/drivers/gpu/drm/msm/msm_drv.h
> @@ -282,7 +282,6 @@ unsigned long msm_gem_shrinker_shrink(struct drm_device *dev, unsigned long nr_t
> void msm_gem_shrinker_init(struct drm_device *dev);
> void msm_gem_shrinker_cleanup(struct drm_device *dev);
>
> -int msm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma);
> struct sg_table *msm_gem_prime_get_sg_table(struct drm_gem_object *obj);
> int msm_gem_prime_vmap(struct drm_gem_object *obj, struct iosys_map *map);
> void msm_gem_prime_vunmap(struct drm_gem_object *obj, struct iosys_map *map);
> diff --git a/drivers/gpu/drm/msm/msm_gem_prime.c b/drivers/gpu/drm/msm/msm_gem_prime.c
> index 2c846afe049e4..5f68e31a3e4e1 100644
> --- a/drivers/gpu/drm/msm/msm_gem_prime.c
> +++ b/drivers/gpu/drm/msm/msm_gem_prime.c
> @@ -11,11 +11,6 @@
> #include "msm_drv.h"
> #include "msm_gem.h"
>
> -int msm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)
> -{
> - return drm_gem_prime_mmap(obj, vma);
> -}
> -
> struct sg_table *msm_gem_prime_get_sg_table(struct drm_gem_object *obj)
> {
> struct msm_gem_object *msm_obj = to_msm_bo(obj);
> diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c
> index cc7c5b4a05fd8..4199b8294e6e8 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_drm.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
> @@ -1237,7 +1237,6 @@ driver_stub = {
> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> .gem_prime_import_sg_table = nouveau_gem_prime_import_sg_table,
> - .gem_prime_mmap = drm_gem_prime_mmap,
>
> .dumb_create = nouveau_display_dumb_create,
> .dumb_map_offset = drm_gem_ttm_dumb_map_offset,
> diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c
> index 19f8cff52e533..d2916bf435473 100644
> --- a/drivers/gpu/drm/panfrost/panfrost_drv.c
> +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c
> @@ -542,7 +542,6 @@ static const struct drm_driver panfrost_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_sg_table = panfrost_gem_prime_import_sg_table,
> - .gem_prime_mmap = drm_gem_prime_mmap,
> };
>
> static int panfrost_probe(struct platform_device *pdev)
> diff --git a/drivers/gpu/drm/pl111/pl111_drv.c b/drivers/gpu/drm/pl111/pl111_drv.c
> index 43049c8028b21..c4b8357ea9996 100644
> --- a/drivers/gpu/drm/pl111/pl111_drv.c
> +++ b/drivers/gpu/drm/pl111/pl111_drv.c
> @@ -227,7 +227,6 @@ static const struct drm_driver pl111_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_sg_table = pl111_gem_import_sg_table,
> - .gem_prime_mmap = drm_gem_prime_mmap,
>
> #if defined(CONFIG_DEBUG_FS)
> .debugfs_init = pl111_debugfs_init,
> diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
> index e4374814f0ef6..cf1b960c4200c 100644
> --- a/drivers/gpu/drm/radeon/radeon_drv.c
> +++ b/drivers/gpu/drm/radeon/radeon_drv.c
> @@ -607,7 +607,6 @@ static const struct drm_driver kms_driver = {
> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> .gem_prime_import_sg_table = radeon_gem_prime_import_sg_table,
> - .gem_prime_mmap = drm_gem_prime_mmap,
>
> .name = DRIVER_NAME,
> .desc = DRIVER_DESC,
> diff --git a/drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c b/drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c
> index ed3ee3d15baec..4280ff5fa91f2 100644
> --- a/drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c
> +++ b/drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c
> @@ -608,7 +608,6 @@ static const 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_sg_table = rcar_du_gem_prime_import_sg_table,
> - .gem_prime_mmap = drm_gem_prime_mmap,
> .fops = &rcar_du_fops,
> .name = "rcar-du",
> .desc = "Renesas R-Car Display Unit",
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> index c0ebfdf56a711..b8cf89f0cc566 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> @@ -227,7 +227,6 @@ static const 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_sg_table = rockchip_gem_prime_import_sg_table,
> - .gem_prime_mmap = drm_gem_prime_mmap,
> .fops = &rockchip_drm_driver_fops,
> .name = DRIVER_NAME,
> .desc = DRIVER_DESC,
> diff --git a/drivers/gpu/drm/v3d/v3d_drv.c b/drivers/gpu/drm/v3d/v3d_drv.c
> index 71f9fdde24b41..845a36e36450d 100644
> --- a/drivers/gpu/drm/v3d/v3d_drv.c
> +++ b/drivers/gpu/drm/v3d/v3d_drv.c
> @@ -174,7 +174,6 @@ static const struct drm_driver v3d_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_sg_table = v3d_prime_import_sg_table,
> - .gem_prime_mmap = drm_gem_prime_mmap,
>
> .ioctls = v3d_drm_ioctls,
> .num_ioctls = ARRAY_SIZE(v3d_drm_ioctls),
> diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.c b/drivers/gpu/drm/virtio/virtgpu_drv.c
> index add075681e18f..91ace7a44f2a6 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_drv.c
> +++ b/drivers/gpu/drm/virtio/virtgpu_drv.c
> @@ -188,7 +188,6 @@ static const 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_mmap = drm_gem_prime_mmap,
> .gem_prime_import = virtgpu_gem_prime_import,
> .gem_prime_import_sg_table = virtgpu_gem_prime_import_sg_table,
>
> diff --git a/drivers/gpu/drm/xen/xen_drm_front.c b/drivers/gpu/drm/xen/xen_drm_front.c
> index 90996c108146d..62c3c13b3a175 100644
> --- a/drivers/gpu/drm/xen/xen_drm_front.c
> +++ b/drivers/gpu/drm/xen/xen_drm_front.c
> @@ -477,7 +477,6 @@ static const struct drm_driver xen_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_sg_table = xen_drm_front_gem_import_sg_table,
> - .gem_prime_mmap = drm_gem_prime_mmap,
> .dumb_create = xen_drm_drv_dumb_create,
> .fops = &xen_drm_dev_fops,
> .name = "xendrm-du",
> diff --git a/include/drm/drm_drv.h b/include/drm/drm_drv.h
> index 89e2706cac561..870278ecd8ba9 100644
> --- a/include/drm/drm_drv.h
> +++ b/include/drm/drm_drv.h
> @@ -343,20 +343,6 @@ struct drm_driver {
> struct drm_device *dev,
> struct dma_buf_attachment *attach,
> struct sg_table *sgt);
> - /**
> - * @gem_prime_mmap:
> - *
> - * mmap hook for GEM drivers, used to implement dma-buf mmap in the
> - * PRIME helpers.
> - *
> - * This hook only exists for historical reasons. Drivers must use
> - * drm_gem_prime_mmap() to implement it.
> - *
> - * FIXME: Convert all drivers to implement mmap in struct
> - * &drm_gem_object_funcs and inline drm_gem_prime_mmap() into
> - * its callers. This hook should be removed afterwards.
> - */
> - int (*gem_prime_mmap)(struct drm_gem_object *obj, struct vm_area_struct *vma);
>
> /**
> * @dumb_create:
> diff --git a/include/drm/drm_gem_dma_helper.h b/include/drm/drm_gem_dma_helper.h
> index 8a043235dad81..61da596780b64 100644
> --- a/include/drm/drm_gem_dma_helper.h
> +++ b/include/drm/drm_gem_dma_helper.h
> @@ -169,8 +169,7 @@ drm_gem_dma_prime_import_sg_table(struct drm_device *dev,
> .dumb_create = (dumb_create_func), \
> .prime_handle_to_fd = drm_gem_prime_handle_to_fd, \
> .prime_fd_to_handle = drm_gem_prime_fd_to_handle, \
> - .gem_prime_import_sg_table = drm_gem_dma_prime_import_sg_table, \
> - .gem_prime_mmap = drm_gem_prime_mmap
> + .gem_prime_import_sg_table = drm_gem_dma_prime_import_sg_table
>
> /**
> * DRM_GEM_DMA_DRIVER_OPS - DMA GEM driver operations
> @@ -207,8 +206,7 @@ drm_gem_dma_prime_import_sg_table(struct drm_device *dev,
> .dumb_create = dumb_create_func, \
> .prime_handle_to_fd = drm_gem_prime_handle_to_fd, \
> .prime_fd_to_handle = drm_gem_prime_fd_to_handle, \
> - .gem_prime_import_sg_table = drm_gem_dma_prime_import_sg_table_vmap, \
> - .gem_prime_mmap = drm_gem_prime_mmap
> + .gem_prime_import_sg_table = drm_gem_dma_prime_import_sg_table_vmap
>
> /**
> * DRM_GEM_DMA_DRIVER_OPS_VMAP - DMA GEM driver operations ensuring a virtual
> diff --git a/include/drm/drm_gem_shmem_helper.h b/include/drm/drm_gem_shmem_helper.h
> index 5994fed5e3278..46eb46e690630 100644
> --- a/include/drm/drm_gem_shmem_helper.h
> +++ b/include/drm/drm_gem_shmem_helper.h
> @@ -293,7 +293,6 @@ int drm_gem_shmem_dumb_create(struct drm_file *file, struct drm_device *dev,
> .prime_handle_to_fd = drm_gem_prime_handle_to_fd, \
> .prime_fd_to_handle = drm_gem_prime_fd_to_handle, \
> .gem_prime_import_sg_table = drm_gem_shmem_prime_import_sg_table, \
> - .gem_prime_mmap = drm_gem_prime_mmap, \
> .dumb_create = drm_gem_shmem_dumb_create
>
> #endif /* __DRM_GEM_SHMEM_HELPER_H__ */
> diff --git a/include/drm/drm_gem_vram_helper.h b/include/drm/drm_gem_vram_helper.h
> index f4aab64411d82..6b265cb9f45a4 100644
> --- a/include/drm/drm_gem_vram_helper.h
> +++ b/include/drm/drm_gem_vram_helper.h
> @@ -160,7 +160,6 @@ void drm_gem_vram_simple_display_pipe_cleanup_fb(
> .debugfs_init = drm_vram_mm_debugfs_init, \
> .dumb_create = drm_gem_vram_driver_dumb_create, \
> .dumb_map_offset = drm_gem_ttm_dumb_map_offset, \
> - .gem_prime_mmap = drm_gem_prime_mmap, \
> .prime_handle_to_fd = drm_gem_prime_handle_to_fd, \
> .prime_fd_to_handle = drm_gem_prime_fd_to_handle
>
> --
> 2.41.0
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [2/2] drm: Remove struct drm_driver.gem_prime_mmap
2023-06-13 14:51 ` [PATCH 2/2] drm: Remove struct drm_driver.gem_prime_mmap Thomas Zimmermann
2023-06-13 15:32 ` Alex Deucher
@ 2023-06-13 17:27 ` Sui Jingfeng
2023-06-14 2:06 ` Sui Jingfeng
1 sibling, 1 reply; 9+ messages in thread
From: Sui Jingfeng @ 2023-06-13 17:27 UTC (permalink / raw)
To: Thomas Zimmermann, daniel, airlied, robdclark, quic_abhinavk, sean
Cc: linux-arm-msm, freedreno, dri-devel
Wow, so many drivers get nuked!
On 2023/6/13 22:51, Thomas Zimmermann wrote:
> All drivers initialize this field with drm_gem_prime_mmap(). Call
> the function directly and remove the field. Simplifies the code and
> resolves a long-standing TODO item.
>
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
I have tested this patch briefly with drm/amdgpu(RX560), Running
glmark2, the rendered scene looks OK.
But single driver is self-sharing. I think I should test this more with
multiple video card.
> ---
> Documentation/gpu/todo.rst | 9 ---------
> drivers/accel/ivpu/ivpu_drv.c | 1 -
> drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 1 -
> drivers/gpu/drm/drm_fbdev_dma.c | 6 +-----
> drivers/gpu/drm/drm_prime.c | 14 ++------------
> drivers/gpu/drm/etnaviv/etnaviv_drv.c | 1 -
> drivers/gpu/drm/exynos/exynos_drm_drv.c | 1 -
> drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c | 1 -
> drivers/gpu/drm/lima/lima_drv.c | 1 -
> drivers/gpu/drm/mediatek/mtk_drm_drv.c | 1 -
> drivers/gpu/drm/msm/msm_drv.c | 1 -
> drivers/gpu/drm/msm/msm_drv.h | 1 -
> drivers/gpu/drm/msm/msm_gem_prime.c | 5 -----
> drivers/gpu/drm/nouveau/nouveau_drm.c | 1 -
> drivers/gpu/drm/panfrost/panfrost_drv.c | 1 -
> drivers/gpu/drm/pl111/pl111_drv.c | 1 -
> drivers/gpu/drm/radeon/radeon_drv.c | 1 -
> drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c | 1 -
> drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 1 -
> drivers/gpu/drm/v3d/v3d_drv.c | 1 -
> drivers/gpu/drm/virtio/virtgpu_drv.c | 1 -
> drivers/gpu/drm/xen/xen_drm_front.c | 1 -
> include/drm/drm_drv.h | 14 --------------
> include/drm/drm_gem_dma_helper.h | 6 ++----
> include/drm/drm_gem_shmem_helper.h | 1 -
> include/drm/drm_gem_vram_helper.h | 1 -
> 26 files changed, 5 insertions(+), 69 deletions(-)
>
> diff --git a/Documentation/gpu/todo.rst b/Documentation/gpu/todo.rst
> index 68bdafa0284f5..ca1efad8c89c3 100644
> --- a/Documentation/gpu/todo.rst
> +++ b/Documentation/gpu/todo.rst
> @@ -319,15 +319,6 @@ Contact: Daniel Vetter, Noralf Tronnes
>
> Level: Advanced
>
> -struct drm_gem_object_funcs
> ----------------------------
> -
> -GEM objects can now have a function table instead of having the callbacks on the
> -DRM driver struct. This is now the preferred way. Callbacks in drivers have been
> -converted, except for struct drm_driver.gem_prime_mmap.
> -
> -Level: Intermediate
> -
> connector register/unregister fixes
> -----------------------------------
>
> diff --git a/drivers/accel/ivpu/ivpu_drv.c b/drivers/accel/ivpu/ivpu_drv.c
> index 2df7643b843d5..9f2b9fdcc5498 100644
> --- a/drivers/accel/ivpu/ivpu_drv.c
> +++ b/drivers/accel/ivpu/ivpu_drv.c
> @@ -376,7 +376,6 @@ static const struct drm_driver driver = {
> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> .gem_prime_import = ivpu_gem_prime_import,
> - .gem_prime_mmap = drm_gem_prime_mmap,
>
> .ioctls = ivpu_drm_ioctls,
> .num_ioctls = ARRAY_SIZE(ivpu_drm_ioctls),
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> index c9a41c997c6c7..7681f79f462eb 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> @@ -2809,7 +2809,6 @@ static const struct drm_driver amdgpu_kms_driver = {
> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> .gem_prime_import = amdgpu_gem_prime_import,
> - .gem_prime_mmap = drm_gem_prime_mmap,
>
> .name = DRIVER_NAME,
> .desc = DRIVER_DESC,
> diff --git a/drivers/gpu/drm/drm_fbdev_dma.c b/drivers/gpu/drm/drm_fbdev_dma.c
> index d86773fa8ab00..8217f1ddc0075 100644
> --- a/drivers/gpu/drm/drm_fbdev_dma.c
> +++ b/drivers/gpu/drm/drm_fbdev_dma.c
> @@ -54,12 +54,8 @@ static void drm_fbdev_dma_fb_destroy(struct fb_info *info)
> static int drm_fbdev_dma_fb_mmap(struct fb_info *info, struct vm_area_struct *vma)
> {
> struct drm_fb_helper *fb_helper = info->par;
> - struct drm_device *dev = fb_helper->dev;
> -
> - if (drm_WARN_ON_ONCE(dev, !fb_helper->dev->driver->gem_prime_mmap))
> - return -ENODEV;
>
> - return fb_helper->dev->driver->gem_prime_mmap(fb_helper->buffer->gem, vma);
> + return drm_gem_prime_mmap(fb_helper->buffer->gem, vma);
> }
>
> static const struct fb_ops drm_fbdev_dma_fb_ops = {
> diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
> index d29dafce9bb0a..6bcf324ef81c9 100644
> --- a/drivers/gpu/drm/drm_prime.c
> +++ b/drivers/gpu/drm/drm_prime.c
> @@ -715,8 +715,6 @@ EXPORT_SYMBOL(drm_gem_dmabuf_vunmap);
> * the same codepath that is used for regular GEM buffer mapping on the DRM fd.
> * The fake GEM offset is added to vma->vm_pgoff and &drm_driver->fops->mmap is
> * called to set up the mapping.
> - *
> - * Drivers can use this as their &drm_driver.gem_prime_mmap callback.
> */
> int drm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)
> {
> @@ -772,25 +770,17 @@ EXPORT_SYMBOL(drm_gem_prime_mmap);
> * @vma: virtual address range
> *
> * Provides memory mapping for the buffer. This can be used as the
> - * &dma_buf_ops.mmap callback. It just forwards to &drm_driver.gem_prime_mmap,
> - * which should be set to drm_gem_prime_mmap().
> - *
> - * FIXME: There's really no point to this wrapper, drivers which need anything
> - * else but drm_gem_prime_mmap can roll their own &dma_buf_ops.mmap callback.
> + * &dma_buf_ops.mmap callback. It just forwards to drm_gem_prime_mmap().
> *
> * Returns 0 on success or a negative error code on failure.
> */
> int drm_gem_dmabuf_mmap(struct dma_buf *dma_buf, struct vm_area_struct *vma)
> {
> struct drm_gem_object *obj = dma_buf->priv;
> - struct drm_device *dev = obj->dev;
>
> dma_resv_assert_held(dma_buf->resv);
>
> - if (!dev->driver->gem_prime_mmap)
> - return -ENOSYS;
> -
> - return dev->driver->gem_prime_mmap(obj, vma);
> + return drm_gem_prime_mmap(obj, vma);
> }
> EXPORT_SYMBOL(drm_gem_dmabuf_mmap);
>
> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> index 31a7f59ccb49e..00223a8749092 100644
> --- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> +++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> @@ -484,7 +484,6 @@ static const struct drm_driver etnaviv_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_sg_table = etnaviv_gem_prime_import_sg_table,
> - .gem_prime_mmap = drm_gem_prime_mmap,
> #ifdef CONFIG_DEBUG_FS
> .debugfs_init = etnaviv_debugfs_init,
> #endif
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c
> index 6b73fb7a83c3c..c9e3c88fb329c 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
> @@ -113,7 +113,6 @@ static const struct drm_driver exynos_drm_driver = {
> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> .gem_prime_import = exynos_drm_gem_prime_import,
> .gem_prime_import_sg_table = exynos_drm_gem_prime_import_sg_table,
> - .gem_prime_mmap = drm_gem_prime_mmap,
> .ioctls = exynos_ioctls,
> .num_ioctls = ARRAY_SIZE(exynos_ioctls),
> .fops = &exynos_drm_driver_fops,
> diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
> index 0c4aa4d9b0a77..8a98fa276e8a9 100644
> --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
> +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
> @@ -63,7 +63,6 @@ static const struct drm_driver hibmc_driver = {
> .debugfs_init = drm_vram_mm_debugfs_init,
> .dumb_create = hibmc_dumb_create,
> .dumb_map_offset = drm_gem_ttm_dumb_map_offset,
> - .gem_prime_mmap = drm_gem_prime_mmap,
> };
>
> static int __maybe_unused hibmc_pm_suspend(struct device *dev)
> diff --git a/drivers/gpu/drm/lima/lima_drv.c b/drivers/gpu/drm/lima/lima_drv.c
> index e8566211e9fa1..65c31dc38049a 100644
> --- a/drivers/gpu/drm/lima/lima_drv.c
> +++ b/drivers/gpu/drm/lima/lima_drv.c
> @@ -279,7 +279,6 @@ static const struct drm_driver lima_drm_driver = {
> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> .gem_prime_import_sg_table = drm_gem_shmem_prime_import_sg_table,
> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
> - .gem_prime_mmap = drm_gem_prime_mmap,
> };
>
> struct lima_block_reader {
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> index 6dcb4ba2466c0..5693bb8d29ce4 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> @@ -560,7 +560,6 @@ static const struct drm_driver mtk_drm_driver = {
> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> .gem_prime_import = mtk_drm_gem_prime_import,
> .gem_prime_import_sg_table = mtk_gem_prime_import_sg_table,
> - .gem_prime_mmap = drm_gem_prime_mmap,
> .fops = &mtk_drm_fops,
>
> .name = DRIVER_NAME,
> diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
> index 891eff8433a9c..47efa3c4492c4 100644
> --- a/drivers/gpu/drm/msm/msm_drv.c
> +++ b/drivers/gpu/drm/msm/msm_drv.c
> @@ -1089,7 +1089,6 @@ static const struct drm_driver msm_driver = {
> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> .gem_prime_import_sg_table = msm_gem_prime_import_sg_table,
> - .gem_prime_mmap = msm_gem_prime_mmap,
> #ifdef CONFIG_DEBUG_FS
> .debugfs_init = msm_debugfs_init,
> #endif
> diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h
> index e13a8cbd61c95..44c9e06f2dffa 100644
> --- a/drivers/gpu/drm/msm/msm_drv.h
> +++ b/drivers/gpu/drm/msm/msm_drv.h
> @@ -282,7 +282,6 @@ unsigned long msm_gem_shrinker_shrink(struct drm_device *dev, unsigned long nr_t
> void msm_gem_shrinker_init(struct drm_device *dev);
> void msm_gem_shrinker_cleanup(struct drm_device *dev);
>
> -int msm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma);
> struct sg_table *msm_gem_prime_get_sg_table(struct drm_gem_object *obj);
> int msm_gem_prime_vmap(struct drm_gem_object *obj, struct iosys_map *map);
> void msm_gem_prime_vunmap(struct drm_gem_object *obj, struct iosys_map *map);
> diff --git a/drivers/gpu/drm/msm/msm_gem_prime.c b/drivers/gpu/drm/msm/msm_gem_prime.c
> index 2c846afe049e4..5f68e31a3e4e1 100644
> --- a/drivers/gpu/drm/msm/msm_gem_prime.c
> +++ b/drivers/gpu/drm/msm/msm_gem_prime.c
> @@ -11,11 +11,6 @@
> #include "msm_drv.h"
> #include "msm_gem.h"
>
> -int msm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)
> -{
> - return drm_gem_prime_mmap(obj, vma);
> -}
> -
> struct sg_table *msm_gem_prime_get_sg_table(struct drm_gem_object *obj)
> {
> struct msm_gem_object *msm_obj = to_msm_bo(obj);
> diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c
> index cc7c5b4a05fd8..4199b8294e6e8 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_drm.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
> @@ -1237,7 +1237,6 @@ driver_stub = {
> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> .gem_prime_import_sg_table = nouveau_gem_prime_import_sg_table,
> - .gem_prime_mmap = drm_gem_prime_mmap,
>
> .dumb_create = nouveau_display_dumb_create,
> .dumb_map_offset = drm_gem_ttm_dumb_map_offset,
> diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c
> index 19f8cff52e533..d2916bf435473 100644
> --- a/drivers/gpu/drm/panfrost/panfrost_drv.c
> +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c
> @@ -542,7 +542,6 @@ static const struct drm_driver panfrost_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_sg_table = panfrost_gem_prime_import_sg_table,
> - .gem_prime_mmap = drm_gem_prime_mmap,
> };
>
> static int panfrost_probe(struct platform_device *pdev)
> diff --git a/drivers/gpu/drm/pl111/pl111_drv.c b/drivers/gpu/drm/pl111/pl111_drv.c
> index 43049c8028b21..c4b8357ea9996 100644
> --- a/drivers/gpu/drm/pl111/pl111_drv.c
> +++ b/drivers/gpu/drm/pl111/pl111_drv.c
> @@ -227,7 +227,6 @@ static const struct drm_driver pl111_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_sg_table = pl111_gem_import_sg_table,
> - .gem_prime_mmap = drm_gem_prime_mmap,
>
> #if defined(CONFIG_DEBUG_FS)
> .debugfs_init = pl111_debugfs_init,
> diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
> index e4374814f0ef6..cf1b960c4200c 100644
> --- a/drivers/gpu/drm/radeon/radeon_drv.c
> +++ b/drivers/gpu/drm/radeon/radeon_drv.c
> @@ -607,7 +607,6 @@ static const struct drm_driver kms_driver = {
> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
> .gem_prime_import_sg_table = radeon_gem_prime_import_sg_table,
> - .gem_prime_mmap = drm_gem_prime_mmap,
>
> .name = DRIVER_NAME,
> .desc = DRIVER_DESC,
> diff --git a/drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c b/drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c
> index ed3ee3d15baec..4280ff5fa91f2 100644
> --- a/drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c
> +++ b/drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c
> @@ -608,7 +608,6 @@ static const 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_sg_table = rcar_du_gem_prime_import_sg_table,
> - .gem_prime_mmap = drm_gem_prime_mmap,
> .fops = &rcar_du_fops,
> .name = "rcar-du",
> .desc = "Renesas R-Car Display Unit",
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> index c0ebfdf56a711..b8cf89f0cc566 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> @@ -227,7 +227,6 @@ static const 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_sg_table = rockchip_gem_prime_import_sg_table,
> - .gem_prime_mmap = drm_gem_prime_mmap,
> .fops = &rockchip_drm_driver_fops,
> .name = DRIVER_NAME,
> .desc = DRIVER_DESC,
> diff --git a/drivers/gpu/drm/v3d/v3d_drv.c b/drivers/gpu/drm/v3d/v3d_drv.c
> index 71f9fdde24b41..845a36e36450d 100644
> --- a/drivers/gpu/drm/v3d/v3d_drv.c
> +++ b/drivers/gpu/drm/v3d/v3d_drv.c
> @@ -174,7 +174,6 @@ static const struct drm_driver v3d_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_sg_table = v3d_prime_import_sg_table,
> - .gem_prime_mmap = drm_gem_prime_mmap,
>
> .ioctls = v3d_drm_ioctls,
> .num_ioctls = ARRAY_SIZE(v3d_drm_ioctls),
> diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.c b/drivers/gpu/drm/virtio/virtgpu_drv.c
> index add075681e18f..91ace7a44f2a6 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_drv.c
> +++ b/drivers/gpu/drm/virtio/virtgpu_drv.c
> @@ -188,7 +188,6 @@ static const 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_mmap = drm_gem_prime_mmap,
> .gem_prime_import = virtgpu_gem_prime_import,
> .gem_prime_import_sg_table = virtgpu_gem_prime_import_sg_table,
>
> diff --git a/drivers/gpu/drm/xen/xen_drm_front.c b/drivers/gpu/drm/xen/xen_drm_front.c
> index 90996c108146d..62c3c13b3a175 100644
> --- a/drivers/gpu/drm/xen/xen_drm_front.c
> +++ b/drivers/gpu/drm/xen/xen_drm_front.c
> @@ -477,7 +477,6 @@ static const struct drm_driver xen_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_sg_table = xen_drm_front_gem_import_sg_table,
> - .gem_prime_mmap = drm_gem_prime_mmap,
> .dumb_create = xen_drm_drv_dumb_create,
> .fops = &xen_drm_dev_fops,
> .name = "xendrm-du",
> diff --git a/include/drm/drm_drv.h b/include/drm/drm_drv.h
> index 89e2706cac561..870278ecd8ba9 100644
> --- a/include/drm/drm_drv.h
> +++ b/include/drm/drm_drv.h
> @@ -343,20 +343,6 @@ struct drm_driver {
> struct drm_device *dev,
> struct dma_buf_attachment *attach,
> struct sg_table *sgt);
> - /**
> - * @gem_prime_mmap:
> - *
> - * mmap hook for GEM drivers, used to implement dma-buf mmap in the
> - * PRIME helpers.
> - *
> - * This hook only exists for historical reasons. Drivers must use
> - * drm_gem_prime_mmap() to implement it.
> - *
> - * FIXME: Convert all drivers to implement mmap in struct
> - * &drm_gem_object_funcs and inline drm_gem_prime_mmap() into
> - * its callers. This hook should be removed afterwards.
> - */
> - int (*gem_prime_mmap)(struct drm_gem_object *obj, struct vm_area_struct *vma);
>
> /**
> * @dumb_create:
> diff --git a/include/drm/drm_gem_dma_helper.h b/include/drm/drm_gem_dma_helper.h
> index 8a043235dad81..61da596780b64 100644
> --- a/include/drm/drm_gem_dma_helper.h
> +++ b/include/drm/drm_gem_dma_helper.h
> @@ -169,8 +169,7 @@ drm_gem_dma_prime_import_sg_table(struct drm_device *dev,
> .dumb_create = (dumb_create_func), \
> .prime_handle_to_fd = drm_gem_prime_handle_to_fd, \
> .prime_fd_to_handle = drm_gem_prime_fd_to_handle, \
> - .gem_prime_import_sg_table = drm_gem_dma_prime_import_sg_table, \
> - .gem_prime_mmap = drm_gem_prime_mmap
> + .gem_prime_import_sg_table = drm_gem_dma_prime_import_sg_table
>
> /**
> * DRM_GEM_DMA_DRIVER_OPS - DMA GEM driver operations
> @@ -207,8 +206,7 @@ drm_gem_dma_prime_import_sg_table(struct drm_device *dev,
> .dumb_create = dumb_create_func, \
> .prime_handle_to_fd = drm_gem_prime_handle_to_fd, \
> .prime_fd_to_handle = drm_gem_prime_fd_to_handle, \
> - .gem_prime_import_sg_table = drm_gem_dma_prime_import_sg_table_vmap, \
> - .gem_prime_mmap = drm_gem_prime_mmap
> + .gem_prime_import_sg_table = drm_gem_dma_prime_import_sg_table_vmap
>
> /**
> * DRM_GEM_DMA_DRIVER_OPS_VMAP - DMA GEM driver operations ensuring a virtual
> diff --git a/include/drm/drm_gem_shmem_helper.h b/include/drm/drm_gem_shmem_helper.h
> index 5994fed5e3278..46eb46e690630 100644
> --- a/include/drm/drm_gem_shmem_helper.h
> +++ b/include/drm/drm_gem_shmem_helper.h
> @@ -293,7 +293,6 @@ int drm_gem_shmem_dumb_create(struct drm_file *file, struct drm_device *dev,
> .prime_handle_to_fd = drm_gem_prime_handle_to_fd, \
> .prime_fd_to_handle = drm_gem_prime_fd_to_handle, \
> .gem_prime_import_sg_table = drm_gem_shmem_prime_import_sg_table, \
> - .gem_prime_mmap = drm_gem_prime_mmap, \
> .dumb_create = drm_gem_shmem_dumb_create
>
> #endif /* __DRM_GEM_SHMEM_HELPER_H__ */
> diff --git a/include/drm/drm_gem_vram_helper.h b/include/drm/drm_gem_vram_helper.h
> index f4aab64411d82..6b265cb9f45a4 100644
> --- a/include/drm/drm_gem_vram_helper.h
> +++ b/include/drm/drm_gem_vram_helper.h
> @@ -160,7 +160,6 @@ void drm_gem_vram_simple_display_pipe_cleanup_fb(
> .debugfs_init = drm_vram_mm_debugfs_init, \
> .dumb_create = drm_gem_vram_driver_dumb_create, \
> .dumb_map_offset = drm_gem_ttm_dumb_map_offset, \
> - .gem_prime_mmap = drm_gem_prime_mmap, \
> .prime_handle_to_fd = drm_gem_prime_handle_to_fd, \
> .prime_fd_to_handle = drm_gem_prime_fd_to_handle
>
--
Jingfeng
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [2/2] drm: Remove struct drm_driver.gem_prime_mmap
2023-06-13 17:27 ` [2/2] " Sui Jingfeng
@ 2023-06-14 2:06 ` Sui Jingfeng
2023-06-14 5:34 ` Thomas Zimmermann
0 siblings, 1 reply; 9+ messages in thread
From: Sui Jingfeng @ 2023-06-14 2:06 UTC (permalink / raw)
To: Thomas Zimmermann, daniel, airlied, robdclark, quic_abhinavk, sean
Cc: linux-arm-msm, freedreno, dri-devel
On 2023/6/14 01:27, Sui Jingfeng wrote:
> Wow, so many drivers get nuked!
>
> On 2023/6/13 22:51, Thomas Zimmermann wrote:
>> All drivers initialize this field with drm_gem_prime_mmap(). Call
>> the function directly and remove the field. Simplifies the code and
>> resolves a long-standing TODO item.
>>
>> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
>> Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
>
>
> I have tested this patch briefly with drm/amdgpu(RX560), Running
> glmark2, the rendered scene looks OK.
>
> But single driver is self-sharing. I think I should test this more
> with multiple video card.
>
No need to test; it's equivalent to removing a wrapper.
But new DRM (un-upstreamed) drivers cannot be compiled anymore with this
patch applied.
This makes them all out-of-date or going to be outdated; this is
embarrassing!
>
>> ---
>> Documentation/gpu/todo.rst | 9 ---------
>> drivers/accel/ivpu/ivpu_drv.c | 1 -
>> drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 1 -
>> drivers/gpu/drm/drm_fbdev_dma.c | 6 +-----
>> drivers/gpu/drm/drm_prime.c | 14 ++------------
>> drivers/gpu/drm/etnaviv/etnaviv_drv.c | 1 -
>> drivers/gpu/drm/exynos/exynos_drm_drv.c | 1 -
>> drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c | 1 -
>> drivers/gpu/drm/lima/lima_drv.c | 1 -
>> drivers/gpu/drm/mediatek/mtk_drm_drv.c | 1 -
>> drivers/gpu/drm/msm/msm_drv.c | 1 -
>> drivers/gpu/drm/msm/msm_drv.h | 1 -
>> drivers/gpu/drm/msm/msm_gem_prime.c | 5 -----
>> drivers/gpu/drm/nouveau/nouveau_drm.c | 1 -
>> drivers/gpu/drm/panfrost/panfrost_drv.c | 1 -
>> drivers/gpu/drm/pl111/pl111_drv.c | 1 -
>> drivers/gpu/drm/radeon/radeon_drv.c | 1 -
>> drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c | 1 -
>> drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 1 -
>> drivers/gpu/drm/v3d/v3d_drv.c | 1 -
>> drivers/gpu/drm/virtio/virtgpu_drv.c | 1 -
>> drivers/gpu/drm/xen/xen_drm_front.c | 1 -
>> include/drm/drm_drv.h | 14 --------------
>> include/drm/drm_gem_dma_helper.h | 6 ++----
>> include/drm/drm_gem_shmem_helper.h | 1 -
>> include/drm/drm_gem_vram_helper.h | 1 -
>> 26 files changed, 5 insertions(+), 69 deletions(-)
>>
>> diff --git a/Documentation/gpu/todo.rst b/Documentation/gpu/todo.rst
>> index 68bdafa0284f5..ca1efad8c89c3 100644
>> --- a/Documentation/gpu/todo.rst
>> +++ b/Documentation/gpu/todo.rst
>> @@ -319,15 +319,6 @@ Contact: Daniel Vetter, Noralf Tronnes
>> Level: Advanced
>> -struct drm_gem_object_funcs
>> ----------------------------
>> -
>> -GEM objects can now have a function table instead of having the
>> callbacks on the
>> -DRM driver struct. This is now the preferred way. Callbacks in
>> drivers have been
>> -converted, except for struct drm_driver.gem_prime_mmap.
>> -
>> -Level: Intermediate
>> -
>> connector register/unregister fixes
>> -----------------------------------
>> diff --git a/drivers/accel/ivpu/ivpu_drv.c
>> b/drivers/accel/ivpu/ivpu_drv.c
>> index 2df7643b843d5..9f2b9fdcc5498 100644
>> --- a/drivers/accel/ivpu/ivpu_drv.c
>> +++ b/drivers/accel/ivpu/ivpu_drv.c
>> @@ -376,7 +376,6 @@ static const struct drm_driver driver = {
>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>> .gem_prime_import = ivpu_gem_prime_import,
>> - .gem_prime_mmap = drm_gem_prime_mmap,
>> .ioctls = ivpu_drm_ioctls,
>> .num_ioctls = ARRAY_SIZE(ivpu_drm_ioctls),
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>> index c9a41c997c6c7..7681f79f462eb 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>> @@ -2809,7 +2809,6 @@ static const struct drm_driver
>> amdgpu_kms_driver = {
>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>> .gem_prime_import = amdgpu_gem_prime_import,
>> - .gem_prime_mmap = drm_gem_prime_mmap,
>> .name = DRIVER_NAME,
>> .desc = DRIVER_DESC,
>> diff --git a/drivers/gpu/drm/drm_fbdev_dma.c
>> b/drivers/gpu/drm/drm_fbdev_dma.c
>> index d86773fa8ab00..8217f1ddc0075 100644
>> --- a/drivers/gpu/drm/drm_fbdev_dma.c
>> +++ b/drivers/gpu/drm/drm_fbdev_dma.c
>> @@ -54,12 +54,8 @@ static void drm_fbdev_dma_fb_destroy(struct
>> fb_info *info)
>> static int drm_fbdev_dma_fb_mmap(struct fb_info *info, struct
>> vm_area_struct *vma)
>> {
>> struct drm_fb_helper *fb_helper = info->par;
>> - struct drm_device *dev = fb_helper->dev;
>> -
>> - if (drm_WARN_ON_ONCE(dev, !fb_helper->dev->driver->gem_prime_mmap))
>> - return -ENODEV;
>> - return
>> fb_helper->dev->driver->gem_prime_mmap(fb_helper->buffer->gem, vma);
>> + return drm_gem_prime_mmap(fb_helper->buffer->gem, vma);
>> }
>> static const struct fb_ops drm_fbdev_dma_fb_ops = {
>> diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
>> index d29dafce9bb0a..6bcf324ef81c9 100644
>> --- a/drivers/gpu/drm/drm_prime.c
>> +++ b/drivers/gpu/drm/drm_prime.c
>> @@ -715,8 +715,6 @@ EXPORT_SYMBOL(drm_gem_dmabuf_vunmap);
>> * the same codepath that is used for regular GEM buffer mapping on
>> the DRM fd.
>> * The fake GEM offset is added to vma->vm_pgoff and
>> &drm_driver->fops->mmap is
>> * called to set up the mapping.
>> - *
>> - * Drivers can use this as their &drm_driver.gem_prime_mmap callback.
>> */
>> int drm_gem_prime_mmap(struct drm_gem_object *obj, struct
>> vm_area_struct *vma)
>> {
>> @@ -772,25 +770,17 @@ EXPORT_SYMBOL(drm_gem_prime_mmap);
>> * @vma: virtual address range
>> *
>> * Provides memory mapping for the buffer. This can be used as the
>> - * &dma_buf_ops.mmap callback. It just forwards to
>> &drm_driver.gem_prime_mmap,
>> - * which should be set to drm_gem_prime_mmap().
>> - *
>> - * FIXME: There's really no point to this wrapper, drivers which
>> need anything
>> - * else but drm_gem_prime_mmap can roll their own &dma_buf_ops.mmap
>> callback.
>> + * &dma_buf_ops.mmap callback. It just forwards to
>> drm_gem_prime_mmap().
>> *
>> * Returns 0 on success or a negative error code on failure.
>> */
>> int drm_gem_dmabuf_mmap(struct dma_buf *dma_buf, struct
>> vm_area_struct *vma)
>> {
>> struct drm_gem_object *obj = dma_buf->priv;
>> - struct drm_device *dev = obj->dev;
>> dma_resv_assert_held(dma_buf->resv);
>> - if (!dev->driver->gem_prime_mmap)
>> - return -ENOSYS;
>> -
>> - return dev->driver->gem_prime_mmap(obj, vma);
>> + return drm_gem_prime_mmap(obj, vma);
>> }
>> EXPORT_SYMBOL(drm_gem_dmabuf_mmap);
>> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c
>> b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
>> index 31a7f59ccb49e..00223a8749092 100644
>> --- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c
>> +++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
>> @@ -484,7 +484,6 @@ static const struct drm_driver etnaviv_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_sg_table = etnaviv_gem_prime_import_sg_table,
>> - .gem_prime_mmap = drm_gem_prime_mmap,
>> #ifdef CONFIG_DEBUG_FS
>> .debugfs_init = etnaviv_debugfs_init,
>> #endif
>> diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c
>> b/drivers/gpu/drm/exynos/exynos_drm_drv.c
>> index 6b73fb7a83c3c..c9e3c88fb329c 100644
>> --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
>> +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
>> @@ -113,7 +113,6 @@ static const struct drm_driver exynos_drm_driver = {
>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>> .gem_prime_import = exynos_drm_gem_prime_import,
>> .gem_prime_import_sg_table =
>> exynos_drm_gem_prime_import_sg_table,
>> - .gem_prime_mmap = drm_gem_prime_mmap,
>> .ioctls = exynos_ioctls,
>> .num_ioctls = ARRAY_SIZE(exynos_ioctls),
>> .fops = &exynos_drm_driver_fops,
>> diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
>> b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
>> index 0c4aa4d9b0a77..8a98fa276e8a9 100644
>> --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
>> +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
>> @@ -63,7 +63,6 @@ static const struct drm_driver hibmc_driver = {
>> .debugfs_init = drm_vram_mm_debugfs_init,
>> .dumb_create = hibmc_dumb_create,
>> .dumb_map_offset = drm_gem_ttm_dumb_map_offset,
>> - .gem_prime_mmap = drm_gem_prime_mmap,
>> };
>> static int __maybe_unused hibmc_pm_suspend(struct device *dev)
>> diff --git a/drivers/gpu/drm/lima/lima_drv.c
>> b/drivers/gpu/drm/lima/lima_drv.c
>> index e8566211e9fa1..65c31dc38049a 100644
>> --- a/drivers/gpu/drm/lima/lima_drv.c
>> +++ b/drivers/gpu/drm/lima/lima_drv.c
>> @@ -279,7 +279,6 @@ static const struct drm_driver lima_drm_driver = {
>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>> .gem_prime_import_sg_table = drm_gem_shmem_prime_import_sg_table,
>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>> - .gem_prime_mmap = drm_gem_prime_mmap,
>> };
>> struct lima_block_reader {
>> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
>> b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
>> index 6dcb4ba2466c0..5693bb8d29ce4 100644
>> --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
>> +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
>> @@ -560,7 +560,6 @@ static const struct drm_driver mtk_drm_driver = {
>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>> .gem_prime_import = mtk_drm_gem_prime_import,
>> .gem_prime_import_sg_table = mtk_gem_prime_import_sg_table,
>> - .gem_prime_mmap = drm_gem_prime_mmap,
>> .fops = &mtk_drm_fops,
>> .name = DRIVER_NAME,
>> diff --git a/drivers/gpu/drm/msm/msm_drv.c
>> b/drivers/gpu/drm/msm/msm_drv.c
>> index 891eff8433a9c..47efa3c4492c4 100644
>> --- a/drivers/gpu/drm/msm/msm_drv.c
>> +++ b/drivers/gpu/drm/msm/msm_drv.c
>> @@ -1089,7 +1089,6 @@ static const struct drm_driver msm_driver = {
>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>> .gem_prime_import_sg_table = msm_gem_prime_import_sg_table,
>> - .gem_prime_mmap = msm_gem_prime_mmap,
>> #ifdef CONFIG_DEBUG_FS
>> .debugfs_init = msm_debugfs_init,
>> #endif
>> diff --git a/drivers/gpu/drm/msm/msm_drv.h
>> b/drivers/gpu/drm/msm/msm_drv.h
>> index e13a8cbd61c95..44c9e06f2dffa 100644
>> --- a/drivers/gpu/drm/msm/msm_drv.h
>> +++ b/drivers/gpu/drm/msm/msm_drv.h
>> @@ -282,7 +282,6 @@ unsigned long msm_gem_shrinker_shrink(struct
>> drm_device *dev, unsigned long nr_t
>> void msm_gem_shrinker_init(struct drm_device *dev);
>> void msm_gem_shrinker_cleanup(struct drm_device *dev);
>> -int msm_gem_prime_mmap(struct drm_gem_object *obj, struct
>> vm_area_struct *vma);
>> struct sg_table *msm_gem_prime_get_sg_table(struct drm_gem_object
>> *obj);
>> int msm_gem_prime_vmap(struct drm_gem_object *obj, struct iosys_map
>> *map);
>> void msm_gem_prime_vunmap(struct drm_gem_object *obj, struct
>> iosys_map *map);
>> diff --git a/drivers/gpu/drm/msm/msm_gem_prime.c
>> b/drivers/gpu/drm/msm/msm_gem_prime.c
>> index 2c846afe049e4..5f68e31a3e4e1 100644
>> --- a/drivers/gpu/drm/msm/msm_gem_prime.c
>> +++ b/drivers/gpu/drm/msm/msm_gem_prime.c
>> @@ -11,11 +11,6 @@
>> #include "msm_drv.h"
>> #include "msm_gem.h"
>> -int msm_gem_prime_mmap(struct drm_gem_object *obj, struct
>> vm_area_struct *vma)
>> -{
>> - return drm_gem_prime_mmap(obj, vma);
>> -}
>> -
>> struct sg_table *msm_gem_prime_get_sg_table(struct drm_gem_object
>> *obj)
>> {
>> struct msm_gem_object *msm_obj = to_msm_bo(obj);
>> diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c
>> b/drivers/gpu/drm/nouveau/nouveau_drm.c
>> index cc7c5b4a05fd8..4199b8294e6e8 100644
>> --- a/drivers/gpu/drm/nouveau/nouveau_drm.c
>> +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
>> @@ -1237,7 +1237,6 @@ driver_stub = {
>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>> .gem_prime_import_sg_table = nouveau_gem_prime_import_sg_table,
>> - .gem_prime_mmap = drm_gem_prime_mmap,
>> .dumb_create = nouveau_display_dumb_create,
>> .dumb_map_offset = drm_gem_ttm_dumb_map_offset,
>> diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c
>> b/drivers/gpu/drm/panfrost/panfrost_drv.c
>> index 19f8cff52e533..d2916bf435473 100644
>> --- a/drivers/gpu/drm/panfrost/panfrost_drv.c
>> +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c
>> @@ -542,7 +542,6 @@ static const struct drm_driver
>> panfrost_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_sg_table = panfrost_gem_prime_import_sg_table,
>> - .gem_prime_mmap = drm_gem_prime_mmap,
>> };
>> static int panfrost_probe(struct platform_device *pdev)
>> diff --git a/drivers/gpu/drm/pl111/pl111_drv.c
>> b/drivers/gpu/drm/pl111/pl111_drv.c
>> index 43049c8028b21..c4b8357ea9996 100644
>> --- a/drivers/gpu/drm/pl111/pl111_drv.c
>> +++ b/drivers/gpu/drm/pl111/pl111_drv.c
>> @@ -227,7 +227,6 @@ static const struct drm_driver pl111_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_sg_table = pl111_gem_import_sg_table,
>> - .gem_prime_mmap = drm_gem_prime_mmap,
>> #if defined(CONFIG_DEBUG_FS)
>> .debugfs_init = pl111_debugfs_init,
>> diff --git a/drivers/gpu/drm/radeon/radeon_drv.c
>> b/drivers/gpu/drm/radeon/radeon_drv.c
>> index e4374814f0ef6..cf1b960c4200c 100644
>> --- a/drivers/gpu/drm/radeon/radeon_drv.c
>> +++ b/drivers/gpu/drm/radeon/radeon_drv.c
>> @@ -607,7 +607,6 @@ static const struct drm_driver kms_driver = {
>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>> .gem_prime_import_sg_table = radeon_gem_prime_import_sg_table,
>> - .gem_prime_mmap = drm_gem_prime_mmap,
>> .name = DRIVER_NAME,
>> .desc = DRIVER_DESC,
>> diff --git a/drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c
>> b/drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c
>> index ed3ee3d15baec..4280ff5fa91f2 100644
>> --- a/drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c
>> +++ b/drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c
>> @@ -608,7 +608,6 @@ static const 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_sg_table = rcar_du_gem_prime_import_sg_table,
>> - .gem_prime_mmap = drm_gem_prime_mmap,
>> .fops = &rcar_du_fops,
>> .name = "rcar-du",
>> .desc = "Renesas R-Car Display Unit",
>> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
>> b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
>> index c0ebfdf56a711..b8cf89f0cc566 100644
>> --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
>> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
>> @@ -227,7 +227,6 @@ static const 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_sg_table =
>> rockchip_gem_prime_import_sg_table,
>> - .gem_prime_mmap = drm_gem_prime_mmap,
>> .fops = &rockchip_drm_driver_fops,
>> .name = DRIVER_NAME,
>> .desc = DRIVER_DESC,
>> diff --git a/drivers/gpu/drm/v3d/v3d_drv.c
>> b/drivers/gpu/drm/v3d/v3d_drv.c
>> index 71f9fdde24b41..845a36e36450d 100644
>> --- a/drivers/gpu/drm/v3d/v3d_drv.c
>> +++ b/drivers/gpu/drm/v3d/v3d_drv.c
>> @@ -174,7 +174,6 @@ static const struct drm_driver v3d_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_sg_table = v3d_prime_import_sg_table,
>> - .gem_prime_mmap = drm_gem_prime_mmap,
>> .ioctls = v3d_drm_ioctls,
>> .num_ioctls = ARRAY_SIZE(v3d_drm_ioctls),
>> diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.c
>> b/drivers/gpu/drm/virtio/virtgpu_drv.c
>> index add075681e18f..91ace7a44f2a6 100644
>> --- a/drivers/gpu/drm/virtio/virtgpu_drv.c
>> +++ b/drivers/gpu/drm/virtio/virtgpu_drv.c
>> @@ -188,7 +188,6 @@ static const 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_mmap = drm_gem_prime_mmap,
>> .gem_prime_import = virtgpu_gem_prime_import,
>> .gem_prime_import_sg_table = virtgpu_gem_prime_import_sg_table,
>> diff --git a/drivers/gpu/drm/xen/xen_drm_front.c
>> b/drivers/gpu/drm/xen/xen_drm_front.c
>> index 90996c108146d..62c3c13b3a175 100644
>> --- a/drivers/gpu/drm/xen/xen_drm_front.c
>> +++ b/drivers/gpu/drm/xen/xen_drm_front.c
>> @@ -477,7 +477,6 @@ static const struct drm_driver xen_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_sg_table = xen_drm_front_gem_import_sg_table,
>> - .gem_prime_mmap = drm_gem_prime_mmap,
>> .dumb_create = xen_drm_drv_dumb_create,
>> .fops = &xen_drm_dev_fops,
>> .name = "xendrm-du",
>> diff --git a/include/drm/drm_drv.h b/include/drm/drm_drv.h
>> index 89e2706cac561..870278ecd8ba9 100644
>> --- a/include/drm/drm_drv.h
>> +++ b/include/drm/drm_drv.h
>> @@ -343,20 +343,6 @@ struct drm_driver {
>> struct drm_device *dev,
>> struct dma_buf_attachment *attach,
>> struct sg_table *sgt);
>> - /**
>> - * @gem_prime_mmap:
>> - *
>> - * mmap hook for GEM drivers, used to implement dma-buf mmap in the
>> - * PRIME helpers.
>> - *
>> - * This hook only exists for historical reasons. Drivers must use
>> - * drm_gem_prime_mmap() to implement it.
>> - *
>> - * FIXME: Convert all drivers to implement mmap in struct
>> - * &drm_gem_object_funcs and inline drm_gem_prime_mmap() into
>> - * its callers. This hook should be removed afterwards.
>> - */
>> - int (*gem_prime_mmap)(struct drm_gem_object *obj, struct
>> vm_area_struct *vma);
>> /**
>> * @dumb_create:
>> diff --git a/include/drm/drm_gem_dma_helper.h
>> b/include/drm/drm_gem_dma_helper.h
>> index 8a043235dad81..61da596780b64 100644
>> --- a/include/drm/drm_gem_dma_helper.h
>> +++ b/include/drm/drm_gem_dma_helper.h
>> @@ -169,8 +169,7 @@ drm_gem_dma_prime_import_sg_table(struct
>> drm_device *dev,
>> .dumb_create = (dumb_create_func), \
>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd, \
>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle, \
>> - .gem_prime_import_sg_table = drm_gem_dma_prime_import_sg_table, \
>> - .gem_prime_mmap = drm_gem_prime_mmap
>> + .gem_prime_import_sg_table = drm_gem_dma_prime_import_sg_table
>> /**
>> * DRM_GEM_DMA_DRIVER_OPS - DMA GEM driver operations
>> @@ -207,8 +206,7 @@ drm_gem_dma_prime_import_sg_table(struct
>> drm_device *dev,
>> .dumb_create = dumb_create_func, \
>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd, \
>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle, \
>> - .gem_prime_import_sg_table =
>> drm_gem_dma_prime_import_sg_table_vmap, \
>> - .gem_prime_mmap = drm_gem_prime_mmap
>> + .gem_prime_import_sg_table = drm_gem_dma_prime_import_sg_table_vmap
>> /**
>> * DRM_GEM_DMA_DRIVER_OPS_VMAP - DMA GEM driver operations ensuring
>> a virtual
>> diff --git a/include/drm/drm_gem_shmem_helper.h
>> b/include/drm/drm_gem_shmem_helper.h
>> index 5994fed5e3278..46eb46e690630 100644
>> --- a/include/drm/drm_gem_shmem_helper.h
>> +++ b/include/drm/drm_gem_shmem_helper.h
>> @@ -293,7 +293,6 @@ int drm_gem_shmem_dumb_create(struct drm_file
>> *file, struct drm_device *dev,
>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd, \
>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle, \
>> .gem_prime_import_sg_table =
>> drm_gem_shmem_prime_import_sg_table, \
>> - .gem_prime_mmap = drm_gem_prime_mmap, \
>> .dumb_create = drm_gem_shmem_dumb_create
>> #endif /* __DRM_GEM_SHMEM_HELPER_H__ */
>> diff --git a/include/drm/drm_gem_vram_helper.h
>> b/include/drm/drm_gem_vram_helper.h
>> index f4aab64411d82..6b265cb9f45a4 100644
>> --- a/include/drm/drm_gem_vram_helper.h
>> +++ b/include/drm/drm_gem_vram_helper.h
>> @@ -160,7 +160,6 @@ void drm_gem_vram_simple_display_pipe_cleanup_fb(
>> .debugfs_init = drm_vram_mm_debugfs_init, \
>> .dumb_create = drm_gem_vram_driver_dumb_create, \
>> .dumb_map_offset = drm_gem_ttm_dumb_map_offset, \
>> - .gem_prime_mmap = drm_gem_prime_mmap, \
>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd, \
>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle
>
--
Jingfeng
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [2/2] drm: Remove struct drm_driver.gem_prime_mmap
2023-06-14 2:06 ` Sui Jingfeng
@ 2023-06-14 5:34 ` Thomas Zimmermann
2023-06-14 8:26 ` Sui Jingfeng
0 siblings, 1 reply; 9+ messages in thread
From: Thomas Zimmermann @ 2023-06-14 5:34 UTC (permalink / raw)
To: Sui Jingfeng, daniel, airlied, robdclark, quic_abhinavk, sean
Cc: linux-arm-msm, freedreno, dri-devel
[-- Attachment #1.1: Type: text/plain, Size: 24900 bytes --]
Hi
Am 14.06.23 um 04:06 schrieb Sui Jingfeng:
>
> On 2023/6/14 01:27, Sui Jingfeng wrote:
>> Wow, so many drivers get nuked!
>>
>> On 2023/6/13 22:51, Thomas Zimmermann wrote:
>>> All drivers initialize this field with drm_gem_prime_mmap(). Call
>>> the function directly and remove the field. Simplifies the code and
>>> resolves a long-standing TODO item.
>>>
>>> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
>>> Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
>>
>>
>> I have tested this patch briefly with drm/amdgpu(RX560), Running
>> glmark2, the rendered scene looks OK.
>>
>> But single driver is self-sharing. I think I should test this more
>> with multiple video card.
>>
> No need to test; it's equivalent to removing a wrapper.
Yes, only msm hardware might be affected.
>
> But new DRM (un-upstreamed) drivers cannot be compiled anymore with this
> patch applied.
>
> This makes them all out-of-date or going to be outdated; this is
> embarrassing!
What do you mean by embarrassing? Simply rebase your driver onto the
change and that's it. This happens regularly for out-of-tree drivers.
But if such a driver would land before this patchset, I'd have to update
the patchset instead.
Best regards
Thomas
>
>>
>>> ---
>>> Documentation/gpu/todo.rst | 9 ---------
>>> drivers/accel/ivpu/ivpu_drv.c | 1 -
>>> drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 1 -
>>> drivers/gpu/drm/drm_fbdev_dma.c | 6 +-----
>>> drivers/gpu/drm/drm_prime.c | 14 ++------------
>>> drivers/gpu/drm/etnaviv/etnaviv_drv.c | 1 -
>>> drivers/gpu/drm/exynos/exynos_drm_drv.c | 1 -
>>> drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c | 1 -
>>> drivers/gpu/drm/lima/lima_drv.c | 1 -
>>> drivers/gpu/drm/mediatek/mtk_drm_drv.c | 1 -
>>> drivers/gpu/drm/msm/msm_drv.c | 1 -
>>> drivers/gpu/drm/msm/msm_drv.h | 1 -
>>> drivers/gpu/drm/msm/msm_gem_prime.c | 5 -----
>>> drivers/gpu/drm/nouveau/nouveau_drm.c | 1 -
>>> drivers/gpu/drm/panfrost/panfrost_drv.c | 1 -
>>> drivers/gpu/drm/pl111/pl111_drv.c | 1 -
>>> drivers/gpu/drm/radeon/radeon_drv.c | 1 -
>>> drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c | 1 -
>>> drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 1 -
>>> drivers/gpu/drm/v3d/v3d_drv.c | 1 -
>>> drivers/gpu/drm/virtio/virtgpu_drv.c | 1 -
>>> drivers/gpu/drm/xen/xen_drm_front.c | 1 -
>>> include/drm/drm_drv.h | 14 --------------
>>> include/drm/drm_gem_dma_helper.h | 6 ++----
>>> include/drm/drm_gem_shmem_helper.h | 1 -
>>> include/drm/drm_gem_vram_helper.h | 1 -
>>> 26 files changed, 5 insertions(+), 69 deletions(-)
>>>
>>> diff --git a/Documentation/gpu/todo.rst b/Documentation/gpu/todo.rst
>>> index 68bdafa0284f5..ca1efad8c89c3 100644
>>> --- a/Documentation/gpu/todo.rst
>>> +++ b/Documentation/gpu/todo.rst
>>> @@ -319,15 +319,6 @@ Contact: Daniel Vetter, Noralf Tronnes
>>> Level: Advanced
>>> -struct drm_gem_object_funcs
>>> ----------------------------
>>> -
>>> -GEM objects can now have a function table instead of having the
>>> callbacks on the
>>> -DRM driver struct. This is now the preferred way. Callbacks in
>>> drivers have been
>>> -converted, except for struct drm_driver.gem_prime_mmap.
>>> -
>>> -Level: Intermediate
>>> -
>>> connector register/unregister fixes
>>> -----------------------------------
>>> diff --git a/drivers/accel/ivpu/ivpu_drv.c
>>> b/drivers/accel/ivpu/ivpu_drv.c
>>> index 2df7643b843d5..9f2b9fdcc5498 100644
>>> --- a/drivers/accel/ivpu/ivpu_drv.c
>>> +++ b/drivers/accel/ivpu/ivpu_drv.c
>>> @@ -376,7 +376,6 @@ static const struct drm_driver driver = {
>>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>>> .gem_prime_import = ivpu_gem_prime_import,
>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>> .ioctls = ivpu_drm_ioctls,
>>> .num_ioctls = ARRAY_SIZE(ivpu_drm_ioctls),
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>>> index c9a41c997c6c7..7681f79f462eb 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>>> @@ -2809,7 +2809,6 @@ static const struct drm_driver
>>> amdgpu_kms_driver = {
>>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>>> .gem_prime_import = amdgpu_gem_prime_import,
>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>> .name = DRIVER_NAME,
>>> .desc = DRIVER_DESC,
>>> diff --git a/drivers/gpu/drm/drm_fbdev_dma.c
>>> b/drivers/gpu/drm/drm_fbdev_dma.c
>>> index d86773fa8ab00..8217f1ddc0075 100644
>>> --- a/drivers/gpu/drm/drm_fbdev_dma.c
>>> +++ b/drivers/gpu/drm/drm_fbdev_dma.c
>>> @@ -54,12 +54,8 @@ static void drm_fbdev_dma_fb_destroy(struct
>>> fb_info *info)
>>> static int drm_fbdev_dma_fb_mmap(struct fb_info *info, struct
>>> vm_area_struct *vma)
>>> {
>>> struct drm_fb_helper *fb_helper = info->par;
>>> - struct drm_device *dev = fb_helper->dev;
>>> -
>>> - if (drm_WARN_ON_ONCE(dev, !fb_helper->dev->driver->gem_prime_mmap))
>>> - return -ENODEV;
>>> - return
>>> fb_helper->dev->driver->gem_prime_mmap(fb_helper->buffer->gem, vma);
>>> + return drm_gem_prime_mmap(fb_helper->buffer->gem, vma);
>>> }
>>> static const struct fb_ops drm_fbdev_dma_fb_ops = {
>>> diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
>>> index d29dafce9bb0a..6bcf324ef81c9 100644
>>> --- a/drivers/gpu/drm/drm_prime.c
>>> +++ b/drivers/gpu/drm/drm_prime.c
>>> @@ -715,8 +715,6 @@ EXPORT_SYMBOL(drm_gem_dmabuf_vunmap);
>>> * the same codepath that is used for regular GEM buffer mapping on
>>> the DRM fd.
>>> * The fake GEM offset is added to vma->vm_pgoff and
>>> &drm_driver->fops->mmap is
>>> * called to set up the mapping.
>>> - *
>>> - * Drivers can use this as their &drm_driver.gem_prime_mmap callback.
>>> */
>>> int drm_gem_prime_mmap(struct drm_gem_object *obj, struct
>>> vm_area_struct *vma)
>>> {
>>> @@ -772,25 +770,17 @@ EXPORT_SYMBOL(drm_gem_prime_mmap);
>>> * @vma: virtual address range
>>> *
>>> * Provides memory mapping for the buffer. This can be used as the
>>> - * &dma_buf_ops.mmap callback. It just forwards to
>>> &drm_driver.gem_prime_mmap,
>>> - * which should be set to drm_gem_prime_mmap().
>>> - *
>>> - * FIXME: There's really no point to this wrapper, drivers which
>>> need anything
>>> - * else but drm_gem_prime_mmap can roll their own &dma_buf_ops.mmap
>>> callback.
>>> + * &dma_buf_ops.mmap callback. It just forwards to
>>> drm_gem_prime_mmap().
>>> *
>>> * Returns 0 on success or a negative error code on failure.
>>> */
>>> int drm_gem_dmabuf_mmap(struct dma_buf *dma_buf, struct
>>> vm_area_struct *vma)
>>> {
>>> struct drm_gem_object *obj = dma_buf->priv;
>>> - struct drm_device *dev = obj->dev;
>>> dma_resv_assert_held(dma_buf->resv);
>>> - if (!dev->driver->gem_prime_mmap)
>>> - return -ENOSYS;
>>> -
>>> - return dev->driver->gem_prime_mmap(obj, vma);
>>> + return drm_gem_prime_mmap(obj, vma);
>>> }
>>> EXPORT_SYMBOL(drm_gem_dmabuf_mmap);
>>> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c
>>> b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
>>> index 31a7f59ccb49e..00223a8749092 100644
>>> --- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c
>>> +++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
>>> @@ -484,7 +484,6 @@ static const struct drm_driver etnaviv_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_sg_table = etnaviv_gem_prime_import_sg_table,
>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>> #ifdef CONFIG_DEBUG_FS
>>> .debugfs_init = etnaviv_debugfs_init,
>>> #endif
>>> diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c
>>> b/drivers/gpu/drm/exynos/exynos_drm_drv.c
>>> index 6b73fb7a83c3c..c9e3c88fb329c 100644
>>> --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
>>> +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
>>> @@ -113,7 +113,6 @@ static const struct drm_driver exynos_drm_driver = {
>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>>> .gem_prime_import = exynos_drm_gem_prime_import,
>>> .gem_prime_import_sg_table =
>>> exynos_drm_gem_prime_import_sg_table,
>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>> .ioctls = exynos_ioctls,
>>> .num_ioctls = ARRAY_SIZE(exynos_ioctls),
>>> .fops = &exynos_drm_driver_fops,
>>> diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
>>> b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
>>> index 0c4aa4d9b0a77..8a98fa276e8a9 100644
>>> --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
>>> +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
>>> @@ -63,7 +63,6 @@ static const struct drm_driver hibmc_driver = {
>>> .debugfs_init = drm_vram_mm_debugfs_init,
>>> .dumb_create = hibmc_dumb_create,
>>> .dumb_map_offset = drm_gem_ttm_dumb_map_offset,
>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>> };
>>> static int __maybe_unused hibmc_pm_suspend(struct device *dev)
>>> diff --git a/drivers/gpu/drm/lima/lima_drv.c
>>> b/drivers/gpu/drm/lima/lima_drv.c
>>> index e8566211e9fa1..65c31dc38049a 100644
>>> --- a/drivers/gpu/drm/lima/lima_drv.c
>>> +++ b/drivers/gpu/drm/lima/lima_drv.c
>>> @@ -279,7 +279,6 @@ static const struct drm_driver lima_drm_driver = {
>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>>> .gem_prime_import_sg_table = drm_gem_shmem_prime_import_sg_table,
>>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>> };
>>> struct lima_block_reader {
>>> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
>>> b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
>>> index 6dcb4ba2466c0..5693bb8d29ce4 100644
>>> --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
>>> +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
>>> @@ -560,7 +560,6 @@ static const struct drm_driver mtk_drm_driver = {
>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>>> .gem_prime_import = mtk_drm_gem_prime_import,
>>> .gem_prime_import_sg_table = mtk_gem_prime_import_sg_table,
>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>> .fops = &mtk_drm_fops,
>>> .name = DRIVER_NAME,
>>> diff --git a/drivers/gpu/drm/msm/msm_drv.c
>>> b/drivers/gpu/drm/msm/msm_drv.c
>>> index 891eff8433a9c..47efa3c4492c4 100644
>>> --- a/drivers/gpu/drm/msm/msm_drv.c
>>> +++ b/drivers/gpu/drm/msm/msm_drv.c
>>> @@ -1089,7 +1089,6 @@ static const struct drm_driver msm_driver = {
>>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>>> .gem_prime_import_sg_table = msm_gem_prime_import_sg_table,
>>> - .gem_prime_mmap = msm_gem_prime_mmap,
>>> #ifdef CONFIG_DEBUG_FS
>>> .debugfs_init = msm_debugfs_init,
>>> #endif
>>> diff --git a/drivers/gpu/drm/msm/msm_drv.h
>>> b/drivers/gpu/drm/msm/msm_drv.h
>>> index e13a8cbd61c95..44c9e06f2dffa 100644
>>> --- a/drivers/gpu/drm/msm/msm_drv.h
>>> +++ b/drivers/gpu/drm/msm/msm_drv.h
>>> @@ -282,7 +282,6 @@ unsigned long msm_gem_shrinker_shrink(struct
>>> drm_device *dev, unsigned long nr_t
>>> void msm_gem_shrinker_init(struct drm_device *dev);
>>> void msm_gem_shrinker_cleanup(struct drm_device *dev);
>>> -int msm_gem_prime_mmap(struct drm_gem_object *obj, struct
>>> vm_area_struct *vma);
>>> struct sg_table *msm_gem_prime_get_sg_table(struct drm_gem_object
>>> *obj);
>>> int msm_gem_prime_vmap(struct drm_gem_object *obj, struct iosys_map
>>> *map);
>>> void msm_gem_prime_vunmap(struct drm_gem_object *obj, struct
>>> iosys_map *map);
>>> diff --git a/drivers/gpu/drm/msm/msm_gem_prime.c
>>> b/drivers/gpu/drm/msm/msm_gem_prime.c
>>> index 2c846afe049e4..5f68e31a3e4e1 100644
>>> --- a/drivers/gpu/drm/msm/msm_gem_prime.c
>>> +++ b/drivers/gpu/drm/msm/msm_gem_prime.c
>>> @@ -11,11 +11,6 @@
>>> #include "msm_drv.h"
>>> #include "msm_gem.h"
>>> -int msm_gem_prime_mmap(struct drm_gem_object *obj, struct
>>> vm_area_struct *vma)
>>> -{
>>> - return drm_gem_prime_mmap(obj, vma);
>>> -}
>>> -
>>> struct sg_table *msm_gem_prime_get_sg_table(struct drm_gem_object
>>> *obj)
>>> {
>>> struct msm_gem_object *msm_obj = to_msm_bo(obj);
>>> diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c
>>> b/drivers/gpu/drm/nouveau/nouveau_drm.c
>>> index cc7c5b4a05fd8..4199b8294e6e8 100644
>>> --- a/drivers/gpu/drm/nouveau/nouveau_drm.c
>>> +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
>>> @@ -1237,7 +1237,6 @@ driver_stub = {
>>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>>> .gem_prime_import_sg_table = nouveau_gem_prime_import_sg_table,
>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>> .dumb_create = nouveau_display_dumb_create,
>>> .dumb_map_offset = drm_gem_ttm_dumb_map_offset,
>>> diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c
>>> b/drivers/gpu/drm/panfrost/panfrost_drv.c
>>> index 19f8cff52e533..d2916bf435473 100644
>>> --- a/drivers/gpu/drm/panfrost/panfrost_drv.c
>>> +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c
>>> @@ -542,7 +542,6 @@ static const struct drm_driver
>>> panfrost_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_sg_table = panfrost_gem_prime_import_sg_table,
>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>> };
>>> static int panfrost_probe(struct platform_device *pdev)
>>> diff --git a/drivers/gpu/drm/pl111/pl111_drv.c
>>> b/drivers/gpu/drm/pl111/pl111_drv.c
>>> index 43049c8028b21..c4b8357ea9996 100644
>>> --- a/drivers/gpu/drm/pl111/pl111_drv.c
>>> +++ b/drivers/gpu/drm/pl111/pl111_drv.c
>>> @@ -227,7 +227,6 @@ static const struct drm_driver pl111_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_sg_table = pl111_gem_import_sg_table,
>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>> #if defined(CONFIG_DEBUG_FS)
>>> .debugfs_init = pl111_debugfs_init,
>>> diff --git a/drivers/gpu/drm/radeon/radeon_drv.c
>>> b/drivers/gpu/drm/radeon/radeon_drv.c
>>> index e4374814f0ef6..cf1b960c4200c 100644
>>> --- a/drivers/gpu/drm/radeon/radeon_drv.c
>>> +++ b/drivers/gpu/drm/radeon/radeon_drv.c
>>> @@ -607,7 +607,6 @@ static const struct drm_driver kms_driver = {
>>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>>> .gem_prime_import_sg_table = radeon_gem_prime_import_sg_table,
>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>> .name = DRIVER_NAME,
>>> .desc = DRIVER_DESC,
>>> diff --git a/drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c
>>> b/drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c
>>> index ed3ee3d15baec..4280ff5fa91f2 100644
>>> --- a/drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c
>>> +++ b/drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c
>>> @@ -608,7 +608,6 @@ static const 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_sg_table = rcar_du_gem_prime_import_sg_table,
>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>> .fops = &rcar_du_fops,
>>> .name = "rcar-du",
>>> .desc = "Renesas R-Car Display Unit",
>>> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
>>> b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
>>> index c0ebfdf56a711..b8cf89f0cc566 100644
>>> --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
>>> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
>>> @@ -227,7 +227,6 @@ static const 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_sg_table =
>>> rockchip_gem_prime_import_sg_table,
>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>> .fops = &rockchip_drm_driver_fops,
>>> .name = DRIVER_NAME,
>>> .desc = DRIVER_DESC,
>>> diff --git a/drivers/gpu/drm/v3d/v3d_drv.c
>>> b/drivers/gpu/drm/v3d/v3d_drv.c
>>> index 71f9fdde24b41..845a36e36450d 100644
>>> --- a/drivers/gpu/drm/v3d/v3d_drv.c
>>> +++ b/drivers/gpu/drm/v3d/v3d_drv.c
>>> @@ -174,7 +174,6 @@ static const struct drm_driver v3d_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_sg_table = v3d_prime_import_sg_table,
>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>> .ioctls = v3d_drm_ioctls,
>>> .num_ioctls = ARRAY_SIZE(v3d_drm_ioctls),
>>> diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.c
>>> b/drivers/gpu/drm/virtio/virtgpu_drv.c
>>> index add075681e18f..91ace7a44f2a6 100644
>>> --- a/drivers/gpu/drm/virtio/virtgpu_drv.c
>>> +++ b/drivers/gpu/drm/virtio/virtgpu_drv.c
>>> @@ -188,7 +188,6 @@ static const 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_mmap = drm_gem_prime_mmap,
>>> .gem_prime_import = virtgpu_gem_prime_import,
>>> .gem_prime_import_sg_table = virtgpu_gem_prime_import_sg_table,
>>> diff --git a/drivers/gpu/drm/xen/xen_drm_front.c
>>> b/drivers/gpu/drm/xen/xen_drm_front.c
>>> index 90996c108146d..62c3c13b3a175 100644
>>> --- a/drivers/gpu/drm/xen/xen_drm_front.c
>>> +++ b/drivers/gpu/drm/xen/xen_drm_front.c
>>> @@ -477,7 +477,6 @@ static const struct drm_driver xen_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_sg_table = xen_drm_front_gem_import_sg_table,
>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>> .dumb_create = xen_drm_drv_dumb_create,
>>> .fops = &xen_drm_dev_fops,
>>> .name = "xendrm-du",
>>> diff --git a/include/drm/drm_drv.h b/include/drm/drm_drv.h
>>> index 89e2706cac561..870278ecd8ba9 100644
>>> --- a/include/drm/drm_drv.h
>>> +++ b/include/drm/drm_drv.h
>>> @@ -343,20 +343,6 @@ struct drm_driver {
>>> struct drm_device *dev,
>>> struct dma_buf_attachment *attach,
>>> struct sg_table *sgt);
>>> - /**
>>> - * @gem_prime_mmap:
>>> - *
>>> - * mmap hook for GEM drivers, used to implement dma-buf mmap in the
>>> - * PRIME helpers.
>>> - *
>>> - * This hook only exists for historical reasons. Drivers must use
>>> - * drm_gem_prime_mmap() to implement it.
>>> - *
>>> - * FIXME: Convert all drivers to implement mmap in struct
>>> - * &drm_gem_object_funcs and inline drm_gem_prime_mmap() into
>>> - * its callers. This hook should be removed afterwards.
>>> - */
>>> - int (*gem_prime_mmap)(struct drm_gem_object *obj, struct
>>> vm_area_struct *vma);
>>> /**
>>> * @dumb_create:
>>> diff --git a/include/drm/drm_gem_dma_helper.h
>>> b/include/drm/drm_gem_dma_helper.h
>>> index 8a043235dad81..61da596780b64 100644
>>> --- a/include/drm/drm_gem_dma_helper.h
>>> +++ b/include/drm/drm_gem_dma_helper.h
>>> @@ -169,8 +169,7 @@ drm_gem_dma_prime_import_sg_table(struct
>>> drm_device *dev,
>>> .dumb_create = (dumb_create_func), \
>>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd, \
>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle, \
>>> - .gem_prime_import_sg_table = drm_gem_dma_prime_import_sg_table, \
>>> - .gem_prime_mmap = drm_gem_prime_mmap
>>> + .gem_prime_import_sg_table = drm_gem_dma_prime_import_sg_table
>>> /**
>>> * DRM_GEM_DMA_DRIVER_OPS - DMA GEM driver operations
>>> @@ -207,8 +206,7 @@ drm_gem_dma_prime_import_sg_table(struct
>>> drm_device *dev,
>>> .dumb_create = dumb_create_func, \
>>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd, \
>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle, \
>>> - .gem_prime_import_sg_table =
>>> drm_gem_dma_prime_import_sg_table_vmap, \
>>> - .gem_prime_mmap = drm_gem_prime_mmap
>>> + .gem_prime_import_sg_table = drm_gem_dma_prime_import_sg_table_vmap
>>> /**
>>> * DRM_GEM_DMA_DRIVER_OPS_VMAP - DMA GEM driver operations ensuring
>>> a virtual
>>> diff --git a/include/drm/drm_gem_shmem_helper.h
>>> b/include/drm/drm_gem_shmem_helper.h
>>> index 5994fed5e3278..46eb46e690630 100644
>>> --- a/include/drm/drm_gem_shmem_helper.h
>>> +++ b/include/drm/drm_gem_shmem_helper.h
>>> @@ -293,7 +293,6 @@ int drm_gem_shmem_dumb_create(struct drm_file
>>> *file, struct drm_device *dev,
>>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd, \
>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle, \
>>> .gem_prime_import_sg_table =
>>> drm_gem_shmem_prime_import_sg_table, \
>>> - .gem_prime_mmap = drm_gem_prime_mmap, \
>>> .dumb_create = drm_gem_shmem_dumb_create
>>> #endif /* __DRM_GEM_SHMEM_HELPER_H__ */
>>> diff --git a/include/drm/drm_gem_vram_helper.h
>>> b/include/drm/drm_gem_vram_helper.h
>>> index f4aab64411d82..6b265cb9f45a4 100644
>>> --- a/include/drm/drm_gem_vram_helper.h
>>> +++ b/include/drm/drm_gem_vram_helper.h
>>> @@ -160,7 +160,6 @@ void drm_gem_vram_simple_display_pipe_cleanup_fb(
>>> .debugfs_init = drm_vram_mm_debugfs_init, \
>>> .dumb_create = drm_gem_vram_driver_dumb_create, \
>>> .dumb_map_offset = drm_gem_ttm_dumb_map_offset, \
>>> - .gem_prime_mmap = drm_gem_prime_mmap, \
>>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd, \
>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle
>>
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 840 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [2/2] drm: Remove struct drm_driver.gem_prime_mmap
2023-06-14 5:34 ` Thomas Zimmermann
@ 2023-06-14 8:26 ` Sui Jingfeng
2023-06-14 10:39 ` Thomas Zimmermann
0 siblings, 1 reply; 9+ messages in thread
From: Sui Jingfeng @ 2023-06-14 8:26 UTC (permalink / raw)
To: Thomas Zimmermann, daniel, airlied, robdclark, quic_abhinavk, sean
Cc: linux-arm-msm, freedreno, dri-devel
Hi,
On 2023/6/14 13:34, Thomas Zimmermann wrote:
> Hi
>
> Am 14.06.23 um 04:06 schrieb Sui Jingfeng:
>>
>> On 2023/6/14 01:27, Sui Jingfeng wrote:
>>> Wow, so many drivers get nuked!
>>>
>>> On 2023/6/13 22:51, Thomas Zimmermann wrote:
>>>> All drivers initialize this field with drm_gem_prime_mmap(). Call
>>>> the function directly and remove the field. Simplifies the code and
>>>> resolves a long-standing TODO item.
>>>>
>>>> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
>>>> Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
>>>
>>>
>>> I have tested this patch briefly with drm/amdgpu(RX560), Running
>>> glmark2, the rendered scene looks OK.
>>>
>>> But single driver is self-sharing. I think I should test this more
>>> with multiple video card.
>>>
>> No need to test; it's equivalent to removing a wrapper.
>
> Yes, only msm hardware might be affected.
>
>>
>> But new DRM (un-upstreamed) drivers cannot be compiled anymore with
>> this patch applied.
>>
>> This makes them all out-of-date or going to be outdated; this is
>> embarrassing!
>
> What do you mean by embarrassing? Simply rebase your driver onto the
> change and that's it. This happens regularly for out-of-tree drivers.
> But if such a driver would land before this patchset, I'd have to
> update the patchset instead.
>
Thanks for you told me this then.
I worry about what it will happen if two conflict patch got merged together.
If my driver got merged, then one more driver will be nuked together.
Saving a lot of effort.
> Best regards
> Thomas
>
>>
>>>
>>>> ---
>>>> Documentation/gpu/todo.rst | 9 ---------
>>>> drivers/accel/ivpu/ivpu_drv.c | 1 -
>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 1 -
>>>> drivers/gpu/drm/drm_fbdev_dma.c | 6 +-----
>>>> drivers/gpu/drm/drm_prime.c | 14 ++------------
>>>> drivers/gpu/drm/etnaviv/etnaviv_drv.c | 1 -
>>>> drivers/gpu/drm/exynos/exynos_drm_drv.c | 1 -
>>>> drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c | 1 -
>>>> drivers/gpu/drm/lima/lima_drv.c | 1 -
>>>> drivers/gpu/drm/mediatek/mtk_drm_drv.c | 1 -
>>>> drivers/gpu/drm/msm/msm_drv.c | 1 -
>>>> drivers/gpu/drm/msm/msm_drv.h | 1 -
>>>> drivers/gpu/drm/msm/msm_gem_prime.c | 5 -----
>>>> drivers/gpu/drm/nouveau/nouveau_drm.c | 1 -
>>>> drivers/gpu/drm/panfrost/panfrost_drv.c | 1 -
>>>> drivers/gpu/drm/pl111/pl111_drv.c | 1 -
>>>> drivers/gpu/drm/radeon/radeon_drv.c | 1 -
>>>> drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c | 1 -
>>>> drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 1 -
>>>> drivers/gpu/drm/v3d/v3d_drv.c | 1 -
>>>> drivers/gpu/drm/virtio/virtgpu_drv.c | 1 -
>>>> drivers/gpu/drm/xen/xen_drm_front.c | 1 -
>>>> include/drm/drm_drv.h | 14 --------------
>>>> include/drm/drm_gem_dma_helper.h | 6 ++----
>>>> include/drm/drm_gem_shmem_helper.h | 1 -
>>>> include/drm/drm_gem_vram_helper.h | 1 -
>>>> 26 files changed, 5 insertions(+), 69 deletions(-)
>>>>
>>>> diff --git a/Documentation/gpu/todo.rst b/Documentation/gpu/todo.rst
>>>> index 68bdafa0284f5..ca1efad8c89c3 100644
>>>> --- a/Documentation/gpu/todo.rst
>>>> +++ b/Documentation/gpu/todo.rst
>>>> @@ -319,15 +319,6 @@ Contact: Daniel Vetter, Noralf Tronnes
>>>> Level: Advanced
>>>> -struct drm_gem_object_funcs
>>>> ----------------------------
>>>> -
>>>> -GEM objects can now have a function table instead of having the
>>>> callbacks on the
>>>> -DRM driver struct. This is now the preferred way. Callbacks in
>>>> drivers have been
>>>> -converted, except for struct drm_driver.gem_prime_mmap.
>>>> -
>>>> -Level: Intermediate
>>>> -
>>>> connector register/unregister fixes
>>>> -----------------------------------
>>>> diff --git a/drivers/accel/ivpu/ivpu_drv.c
>>>> b/drivers/accel/ivpu/ivpu_drv.c
>>>> index 2df7643b843d5..9f2b9fdcc5498 100644
>>>> --- a/drivers/accel/ivpu/ivpu_drv.c
>>>> +++ b/drivers/accel/ivpu/ivpu_drv.c
>>>> @@ -376,7 +376,6 @@ static const struct drm_driver driver = {
>>>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>>>> .gem_prime_import = ivpu_gem_prime_import,
>>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>>> .ioctls = ivpu_drm_ioctls,
>>>> .num_ioctls = ARRAY_SIZE(ivpu_drm_ioctls),
>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>>>> index c9a41c997c6c7..7681f79f462eb 100644
>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>>>> @@ -2809,7 +2809,6 @@ static const struct drm_driver
>>>> amdgpu_kms_driver = {
>>>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>>>> .gem_prime_import = amdgpu_gem_prime_import,
>>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>>> .name = DRIVER_NAME,
>>>> .desc = DRIVER_DESC,
>>>> diff --git a/drivers/gpu/drm/drm_fbdev_dma.c
>>>> b/drivers/gpu/drm/drm_fbdev_dma.c
>>>> index d86773fa8ab00..8217f1ddc0075 100644
>>>> --- a/drivers/gpu/drm/drm_fbdev_dma.c
>>>> +++ b/drivers/gpu/drm/drm_fbdev_dma.c
>>>> @@ -54,12 +54,8 @@ static void drm_fbdev_dma_fb_destroy(struct
>>>> fb_info *info)
>>>> static int drm_fbdev_dma_fb_mmap(struct fb_info *info, struct
>>>> vm_area_struct *vma)
>>>> {
>>>> struct drm_fb_helper *fb_helper = info->par;
>>>> - struct drm_device *dev = fb_helper->dev;
>>>> -
>>>> - if (drm_WARN_ON_ONCE(dev,
>>>> !fb_helper->dev->driver->gem_prime_mmap))
>>>> - return -ENODEV;
>>>> - return
>>>> fb_helper->dev->driver->gem_prime_mmap(fb_helper->buffer->gem, vma);
>>>> + return drm_gem_prime_mmap(fb_helper->buffer->gem, vma);
>>>> }
>>>> static const struct fb_ops drm_fbdev_dma_fb_ops = {
>>>> diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
>>>> index d29dafce9bb0a..6bcf324ef81c9 100644
>>>> --- a/drivers/gpu/drm/drm_prime.c
>>>> +++ b/drivers/gpu/drm/drm_prime.c
>>>> @@ -715,8 +715,6 @@ EXPORT_SYMBOL(drm_gem_dmabuf_vunmap);
>>>> * the same codepath that is used for regular GEM buffer mapping
>>>> on the DRM fd.
>>>> * The fake GEM offset is added to vma->vm_pgoff and
>>>> &drm_driver->fops->mmap is
>>>> * called to set up the mapping.
>>>> - *
>>>> - * Drivers can use this as their &drm_driver.gem_prime_mmap callback.
>>>> */
>>>> int drm_gem_prime_mmap(struct drm_gem_object *obj, struct
>>>> vm_area_struct *vma)
>>>> {
>>>> @@ -772,25 +770,17 @@ EXPORT_SYMBOL(drm_gem_prime_mmap);
>>>> * @vma: virtual address range
>>>> *
>>>> * Provides memory mapping for the buffer. This can be used as the
>>>> - * &dma_buf_ops.mmap callback. It just forwards to
>>>> &drm_driver.gem_prime_mmap,
>>>> - * which should be set to drm_gem_prime_mmap().
>>>> - *
>>>> - * FIXME: There's really no point to this wrapper, drivers which
>>>> need anything
>>>> - * else but drm_gem_prime_mmap can roll their own
>>>> &dma_buf_ops.mmap callback.
>>>> + * &dma_buf_ops.mmap callback. It just forwards to
>>>> drm_gem_prime_mmap().
>>>> *
>>>> * Returns 0 on success or a negative error code on failure.
>>>> */
>>>> int drm_gem_dmabuf_mmap(struct dma_buf *dma_buf, struct
>>>> vm_area_struct *vma)
>>>> {
>>>> struct drm_gem_object *obj = dma_buf->priv;
>>>> - struct drm_device *dev = obj->dev;
>>>> dma_resv_assert_held(dma_buf->resv);
>>>> - if (!dev->driver->gem_prime_mmap)
>>>> - return -ENOSYS;
>>>> -
>>>> - return dev->driver->gem_prime_mmap(obj, vma);
>>>> + return drm_gem_prime_mmap(obj, vma);
>>>> }
>>>> EXPORT_SYMBOL(drm_gem_dmabuf_mmap);
>>>> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c
>>>> b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
>>>> index 31a7f59ccb49e..00223a8749092 100644
>>>> --- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c
>>>> +++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
>>>> @@ -484,7 +484,6 @@ static const struct drm_driver
>>>> etnaviv_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_sg_table = etnaviv_gem_prime_import_sg_table,
>>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>>> #ifdef CONFIG_DEBUG_FS
>>>> .debugfs_init = etnaviv_debugfs_init,
>>>> #endif
>>>> diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c
>>>> b/drivers/gpu/drm/exynos/exynos_drm_drv.c
>>>> index 6b73fb7a83c3c..c9e3c88fb329c 100644
>>>> --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
>>>> +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
>>>> @@ -113,7 +113,6 @@ static const struct drm_driver
>>>> exynos_drm_driver = {
>>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>>>> .gem_prime_import = exynos_drm_gem_prime_import,
>>>> .gem_prime_import_sg_table =
>>>> exynos_drm_gem_prime_import_sg_table,
>>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>>> .ioctls = exynos_ioctls,
>>>> .num_ioctls = ARRAY_SIZE(exynos_ioctls),
>>>> .fops = &exynos_drm_driver_fops,
>>>> diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
>>>> b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
>>>> index 0c4aa4d9b0a77..8a98fa276e8a9 100644
>>>> --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
>>>> +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
>>>> @@ -63,7 +63,6 @@ static const struct drm_driver hibmc_driver = {
>>>> .debugfs_init = drm_vram_mm_debugfs_init,
>>>> .dumb_create = hibmc_dumb_create,
>>>> .dumb_map_offset = drm_gem_ttm_dumb_map_offset,
>>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>>> };
>>>> static int __maybe_unused hibmc_pm_suspend(struct device *dev)
>>>> diff --git a/drivers/gpu/drm/lima/lima_drv.c
>>>> b/drivers/gpu/drm/lima/lima_drv.c
>>>> index e8566211e9fa1..65c31dc38049a 100644
>>>> --- a/drivers/gpu/drm/lima/lima_drv.c
>>>> +++ b/drivers/gpu/drm/lima/lima_drv.c
>>>> @@ -279,7 +279,6 @@ static const struct drm_driver lima_drm_driver = {
>>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>>>> .gem_prime_import_sg_table =
>>>> drm_gem_shmem_prime_import_sg_table,
>>>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>>> };
>>>> struct lima_block_reader {
>>>> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
>>>> b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
>>>> index 6dcb4ba2466c0..5693bb8d29ce4 100644
>>>> --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
>>>> +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
>>>> @@ -560,7 +560,6 @@ static const struct drm_driver mtk_drm_driver = {
>>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>>>> .gem_prime_import = mtk_drm_gem_prime_import,
>>>> .gem_prime_import_sg_table = mtk_gem_prime_import_sg_table,
>>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>>> .fops = &mtk_drm_fops,
>>>> .name = DRIVER_NAME,
>>>> diff --git a/drivers/gpu/drm/msm/msm_drv.c
>>>> b/drivers/gpu/drm/msm/msm_drv.c
>>>> index 891eff8433a9c..47efa3c4492c4 100644
>>>> --- a/drivers/gpu/drm/msm/msm_drv.c
>>>> +++ b/drivers/gpu/drm/msm/msm_drv.c
>>>> @@ -1089,7 +1089,6 @@ static const struct drm_driver msm_driver = {
>>>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>>>> .gem_prime_import_sg_table = msm_gem_prime_import_sg_table,
>>>> - .gem_prime_mmap = msm_gem_prime_mmap,
>>>> #ifdef CONFIG_DEBUG_FS
>>>> .debugfs_init = msm_debugfs_init,
>>>> #endif
>>>> diff --git a/drivers/gpu/drm/msm/msm_drv.h
>>>> b/drivers/gpu/drm/msm/msm_drv.h
>>>> index e13a8cbd61c95..44c9e06f2dffa 100644
>>>> --- a/drivers/gpu/drm/msm/msm_drv.h
>>>> +++ b/drivers/gpu/drm/msm/msm_drv.h
>>>> @@ -282,7 +282,6 @@ unsigned long msm_gem_shrinker_shrink(struct
>>>> drm_device *dev, unsigned long nr_t
>>>> void msm_gem_shrinker_init(struct drm_device *dev);
>>>> void msm_gem_shrinker_cleanup(struct drm_device *dev);
>>>> -int msm_gem_prime_mmap(struct drm_gem_object *obj, struct
>>>> vm_area_struct *vma);
>>>> struct sg_table *msm_gem_prime_get_sg_table(struct drm_gem_object
>>>> *obj);
>>>> int msm_gem_prime_vmap(struct drm_gem_object *obj, struct
>>>> iosys_map *map);
>>>> void msm_gem_prime_vunmap(struct drm_gem_object *obj, struct
>>>> iosys_map *map);
>>>> diff --git a/drivers/gpu/drm/msm/msm_gem_prime.c
>>>> b/drivers/gpu/drm/msm/msm_gem_prime.c
>>>> index 2c846afe049e4..5f68e31a3e4e1 100644
>>>> --- a/drivers/gpu/drm/msm/msm_gem_prime.c
>>>> +++ b/drivers/gpu/drm/msm/msm_gem_prime.c
>>>> @@ -11,11 +11,6 @@
>>>> #include "msm_drv.h"
>>>> #include "msm_gem.h"
>>>> -int msm_gem_prime_mmap(struct drm_gem_object *obj, struct
>>>> vm_area_struct *vma)
>>>> -{
>>>> - return drm_gem_prime_mmap(obj, vma);
>>>> -}
>>>> -
>>>> struct sg_table *msm_gem_prime_get_sg_table(struct drm_gem_object
>>>> *obj)
>>>> {
>>>> struct msm_gem_object *msm_obj = to_msm_bo(obj);
>>>> diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c
>>>> b/drivers/gpu/drm/nouveau/nouveau_drm.c
>>>> index cc7c5b4a05fd8..4199b8294e6e8 100644
>>>> --- a/drivers/gpu/drm/nouveau/nouveau_drm.c
>>>> +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
>>>> @@ -1237,7 +1237,6 @@ driver_stub = {
>>>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>>>> .gem_prime_import_sg_table = nouveau_gem_prime_import_sg_table,
>>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>>> .dumb_create = nouveau_display_dumb_create,
>>>> .dumb_map_offset = drm_gem_ttm_dumb_map_offset,
>>>> diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c
>>>> b/drivers/gpu/drm/panfrost/panfrost_drv.c
>>>> index 19f8cff52e533..d2916bf435473 100644
>>>> --- a/drivers/gpu/drm/panfrost/panfrost_drv.c
>>>> +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c
>>>> @@ -542,7 +542,6 @@ static const struct drm_driver
>>>> panfrost_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_sg_table = panfrost_gem_prime_import_sg_table,
>>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>>> };
>>>> static int panfrost_probe(struct platform_device *pdev)
>>>> diff --git a/drivers/gpu/drm/pl111/pl111_drv.c
>>>> b/drivers/gpu/drm/pl111/pl111_drv.c
>>>> index 43049c8028b21..c4b8357ea9996 100644
>>>> --- a/drivers/gpu/drm/pl111/pl111_drv.c
>>>> +++ b/drivers/gpu/drm/pl111/pl111_drv.c
>>>> @@ -227,7 +227,6 @@ static const struct drm_driver pl111_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_sg_table = pl111_gem_import_sg_table,
>>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>>> #if defined(CONFIG_DEBUG_FS)
>>>> .debugfs_init = pl111_debugfs_init,
>>>> diff --git a/drivers/gpu/drm/radeon/radeon_drv.c
>>>> b/drivers/gpu/drm/radeon/radeon_drv.c
>>>> index e4374814f0ef6..cf1b960c4200c 100644
>>>> --- a/drivers/gpu/drm/radeon/radeon_drv.c
>>>> +++ b/drivers/gpu/drm/radeon/radeon_drv.c
>>>> @@ -607,7 +607,6 @@ static const struct drm_driver kms_driver = {
>>>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>>>> .gem_prime_import_sg_table = radeon_gem_prime_import_sg_table,
>>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>>> .name = DRIVER_NAME,
>>>> .desc = DRIVER_DESC,
>>>> diff --git a/drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c
>>>> b/drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c
>>>> index ed3ee3d15baec..4280ff5fa91f2 100644
>>>> --- a/drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c
>>>> +++ b/drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c
>>>> @@ -608,7 +608,6 @@ static const 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_sg_table = rcar_du_gem_prime_import_sg_table,
>>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>>> .fops = &rcar_du_fops,
>>>> .name = "rcar-du",
>>>> .desc = "Renesas R-Car Display Unit",
>>>> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
>>>> b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
>>>> index c0ebfdf56a711..b8cf89f0cc566 100644
>>>> --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
>>>> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
>>>> @@ -227,7 +227,6 @@ static const 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_sg_table =
>>>> rockchip_gem_prime_import_sg_table,
>>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>>> .fops = &rockchip_drm_driver_fops,
>>>> .name = DRIVER_NAME,
>>>> .desc = DRIVER_DESC,
>>>> diff --git a/drivers/gpu/drm/v3d/v3d_drv.c
>>>> b/drivers/gpu/drm/v3d/v3d_drv.c
>>>> index 71f9fdde24b41..845a36e36450d 100644
>>>> --- a/drivers/gpu/drm/v3d/v3d_drv.c
>>>> +++ b/drivers/gpu/drm/v3d/v3d_drv.c
>>>> @@ -174,7 +174,6 @@ static const struct drm_driver v3d_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_sg_table = v3d_prime_import_sg_table,
>>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>>> .ioctls = v3d_drm_ioctls,
>>>> .num_ioctls = ARRAY_SIZE(v3d_drm_ioctls),
>>>> diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.c
>>>> b/drivers/gpu/drm/virtio/virtgpu_drv.c
>>>> index add075681e18f..91ace7a44f2a6 100644
>>>> --- a/drivers/gpu/drm/virtio/virtgpu_drv.c
>>>> +++ b/drivers/gpu/drm/virtio/virtgpu_drv.c
>>>> @@ -188,7 +188,6 @@ static const 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_mmap = drm_gem_prime_mmap,
>>>> .gem_prime_import = virtgpu_gem_prime_import,
>>>> .gem_prime_import_sg_table = virtgpu_gem_prime_import_sg_table,
>>>> diff --git a/drivers/gpu/drm/xen/xen_drm_front.c
>>>> b/drivers/gpu/drm/xen/xen_drm_front.c
>>>> index 90996c108146d..62c3c13b3a175 100644
>>>> --- a/drivers/gpu/drm/xen/xen_drm_front.c
>>>> +++ b/drivers/gpu/drm/xen/xen_drm_front.c
>>>> @@ -477,7 +477,6 @@ static const struct drm_driver xen_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_sg_table = xen_drm_front_gem_import_sg_table,
>>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>>> .dumb_create = xen_drm_drv_dumb_create,
>>>> .fops = &xen_drm_dev_fops,
>>>> .name = "xendrm-du",
>>>> diff --git a/include/drm/drm_drv.h b/include/drm/drm_drv.h
>>>> index 89e2706cac561..870278ecd8ba9 100644
>>>> --- a/include/drm/drm_drv.h
>>>> +++ b/include/drm/drm_drv.h
>>>> @@ -343,20 +343,6 @@ struct drm_driver {
>>>> struct drm_device *dev,
>>>> struct dma_buf_attachment *attach,
>>>> struct sg_table *sgt);
>>>> - /**
>>>> - * @gem_prime_mmap:
>>>> - *
>>>> - * mmap hook for GEM drivers, used to implement dma-buf mmap
>>>> in the
>>>> - * PRIME helpers.
>>>> - *
>>>> - * This hook only exists for historical reasons. Drivers must use
>>>> - * drm_gem_prime_mmap() to implement it.
>>>> - *
>>>> - * FIXME: Convert all drivers to implement mmap in struct
>>>> - * &drm_gem_object_funcs and inline drm_gem_prime_mmap() into
>>>> - * its callers. This hook should be removed afterwards.
>>>> - */
>>>> - int (*gem_prime_mmap)(struct drm_gem_object *obj, struct
>>>> vm_area_struct *vma);
>>>> /**
>>>> * @dumb_create:
>>>> diff --git a/include/drm/drm_gem_dma_helper.h
>>>> b/include/drm/drm_gem_dma_helper.h
>>>> index 8a043235dad81..61da596780b64 100644
>>>> --- a/include/drm/drm_gem_dma_helper.h
>>>> +++ b/include/drm/drm_gem_dma_helper.h
>>>> @@ -169,8 +169,7 @@ drm_gem_dma_prime_import_sg_table(struct
>>>> drm_device *dev,
>>>> .dumb_create = (dumb_create_func), \
>>>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd, \
>>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle, \
>>>> - .gem_prime_import_sg_table = drm_gem_dma_prime_import_sg_table, \
>>>> - .gem_prime_mmap = drm_gem_prime_mmap
>>>> + .gem_prime_import_sg_table = drm_gem_dma_prime_import_sg_table
>>>> /**
>>>> * DRM_GEM_DMA_DRIVER_OPS - DMA GEM driver operations
>>>> @@ -207,8 +206,7 @@ drm_gem_dma_prime_import_sg_table(struct
>>>> drm_device *dev,
>>>> .dumb_create = dumb_create_func, \
>>>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd, \
>>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle, \
>>>> - .gem_prime_import_sg_table =
>>>> drm_gem_dma_prime_import_sg_table_vmap, \
>>>> - .gem_prime_mmap = drm_gem_prime_mmap
>>>> + .gem_prime_import_sg_table =
>>>> drm_gem_dma_prime_import_sg_table_vmap
>>>> /**
>>>> * DRM_GEM_DMA_DRIVER_OPS_VMAP - DMA GEM driver operations
>>>> ensuring a virtual
>>>> diff --git a/include/drm/drm_gem_shmem_helper.h
>>>> b/include/drm/drm_gem_shmem_helper.h
>>>> index 5994fed5e3278..46eb46e690630 100644
>>>> --- a/include/drm/drm_gem_shmem_helper.h
>>>> +++ b/include/drm/drm_gem_shmem_helper.h
>>>> @@ -293,7 +293,6 @@ int drm_gem_shmem_dumb_create(struct drm_file
>>>> *file, struct drm_device *dev,
>>>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd, \
>>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle, \
>>>> .gem_prime_import_sg_table =
>>>> drm_gem_shmem_prime_import_sg_table, \
>>>> - .gem_prime_mmap = drm_gem_prime_mmap, \
>>>> .dumb_create = drm_gem_shmem_dumb_create
>>>> #endif /* __DRM_GEM_SHMEM_HELPER_H__ */
>>>> diff --git a/include/drm/drm_gem_vram_helper.h
>>>> b/include/drm/drm_gem_vram_helper.h
>>>> index f4aab64411d82..6b265cb9f45a4 100644
>>>> --- a/include/drm/drm_gem_vram_helper.h
>>>> +++ b/include/drm/drm_gem_vram_helper.h
>>>> @@ -160,7 +160,6 @@ void drm_gem_vram_simple_display_pipe_cleanup_fb(
>>>> .debugfs_init = drm_vram_mm_debugfs_init, \
>>>> .dumb_create = drm_gem_vram_driver_dumb_create, \
>>>> .dumb_map_offset = drm_gem_ttm_dumb_map_offset, \
>>>> - .gem_prime_mmap = drm_gem_prime_mmap, \
>>>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd, \
>>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle
>>>
>
--
Jingfeng
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [2/2] drm: Remove struct drm_driver.gem_prime_mmap
2023-06-14 8:26 ` Sui Jingfeng
@ 2023-06-14 10:39 ` Thomas Zimmermann
0 siblings, 0 replies; 9+ messages in thread
From: Thomas Zimmermann @ 2023-06-14 10:39 UTC (permalink / raw)
To: Sui Jingfeng, daniel, airlied, robdclark, quic_abhinavk, sean
Cc: linux-arm-msm, freedreno, dri-devel
[-- Attachment #1.1: Type: text/plain, Size: 26600 bytes --]
Hi
Am 14.06.23 um 10:26 schrieb Sui Jingfeng:
> Hi,
>
> On 2023/6/14 13:34, Thomas Zimmermann wrote:
>> Hi
>>
>> Am 14.06.23 um 04:06 schrieb Sui Jingfeng:
>>>
>>> On 2023/6/14 01:27, Sui Jingfeng wrote:
>>>> Wow, so many drivers get nuked!
>>>>
>>>> On 2023/6/13 22:51, Thomas Zimmermann wrote:
>>>>> All drivers initialize this field with drm_gem_prime_mmap(). Call
>>>>> the function directly and remove the field. Simplifies the code and
>>>>> resolves a long-standing TODO item.
>>>>>
>>>>> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
>>>>> Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
>>>>
>>>>
>>>> I have tested this patch briefly with drm/amdgpu(RX560), Running
>>>> glmark2, the rendered scene looks OK.
>>>>
>>>> But single driver is self-sharing. I think I should test this more
>>>> with multiple video card.
>>>>
>>> No need to test; it's equivalent to removing a wrapper.
>>
>> Yes, only msm hardware might be affected.
>>
>>>
>>> But new DRM (un-upstreamed) drivers cannot be compiled anymore with
>>> this patch applied.
>>>
>>> This makes them all out-of-date or going to be outdated; this is
>>> embarrassing!
>>
>> What do you mean by embarrassing? Simply rebase your driver onto the
>> change and that's it. This happens regularly for out-of-tree drivers.
>> But if such a driver would land before this patchset, I'd have to
>> update the patchset instead.
>>
> Thanks for you told me this then.
>
> I worry about what it will happen if two conflict patch got merged
> together.
Yes that occasionaly breaks something, but luckily it rarely results in
a significant problem. Drivers that break can be disabled by the
majority of developers. So that's not an issue for most. Core code is a
bit more important. Usually someone provides a patch or workaround quickly.
Best regards
Thomas
>
> If my driver got merged, then one more driver will be nuked together.
> Saving a lot of effort.
>
>
>> Best regards
>> Thomas
>>
>>>
>>>>
>>>>> ---
>>>>> Documentation/gpu/todo.rst | 9 ---------
>>>>> drivers/accel/ivpu/ivpu_drv.c | 1 -
>>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 1 -
>>>>> drivers/gpu/drm/drm_fbdev_dma.c | 6 +-----
>>>>> drivers/gpu/drm/drm_prime.c | 14 ++------------
>>>>> drivers/gpu/drm/etnaviv/etnaviv_drv.c | 1 -
>>>>> drivers/gpu/drm/exynos/exynos_drm_drv.c | 1 -
>>>>> drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c | 1 -
>>>>> drivers/gpu/drm/lima/lima_drv.c | 1 -
>>>>> drivers/gpu/drm/mediatek/mtk_drm_drv.c | 1 -
>>>>> drivers/gpu/drm/msm/msm_drv.c | 1 -
>>>>> drivers/gpu/drm/msm/msm_drv.h | 1 -
>>>>> drivers/gpu/drm/msm/msm_gem_prime.c | 5 -----
>>>>> drivers/gpu/drm/nouveau/nouveau_drm.c | 1 -
>>>>> drivers/gpu/drm/panfrost/panfrost_drv.c | 1 -
>>>>> drivers/gpu/drm/pl111/pl111_drv.c | 1 -
>>>>> drivers/gpu/drm/radeon/radeon_drv.c | 1 -
>>>>> drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c | 1 -
>>>>> drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 1 -
>>>>> drivers/gpu/drm/v3d/v3d_drv.c | 1 -
>>>>> drivers/gpu/drm/virtio/virtgpu_drv.c | 1 -
>>>>> drivers/gpu/drm/xen/xen_drm_front.c | 1 -
>>>>> include/drm/drm_drv.h | 14 --------------
>>>>> include/drm/drm_gem_dma_helper.h | 6 ++----
>>>>> include/drm/drm_gem_shmem_helper.h | 1 -
>>>>> include/drm/drm_gem_vram_helper.h | 1 -
>>>>> 26 files changed, 5 insertions(+), 69 deletions(-)
>>>>>
>>>>> diff --git a/Documentation/gpu/todo.rst b/Documentation/gpu/todo.rst
>>>>> index 68bdafa0284f5..ca1efad8c89c3 100644
>>>>> --- a/Documentation/gpu/todo.rst
>>>>> +++ b/Documentation/gpu/todo.rst
>>>>> @@ -319,15 +319,6 @@ Contact: Daniel Vetter, Noralf Tronnes
>>>>> Level: Advanced
>>>>> -struct drm_gem_object_funcs
>>>>> ----------------------------
>>>>> -
>>>>> -GEM objects can now have a function table instead of having the
>>>>> callbacks on the
>>>>> -DRM driver struct. This is now the preferred way. Callbacks in
>>>>> drivers have been
>>>>> -converted, except for struct drm_driver.gem_prime_mmap.
>>>>> -
>>>>> -Level: Intermediate
>>>>> -
>>>>> connector register/unregister fixes
>>>>> -----------------------------------
>>>>> diff --git a/drivers/accel/ivpu/ivpu_drv.c
>>>>> b/drivers/accel/ivpu/ivpu_drv.c
>>>>> index 2df7643b843d5..9f2b9fdcc5498 100644
>>>>> --- a/drivers/accel/ivpu/ivpu_drv.c
>>>>> +++ b/drivers/accel/ivpu/ivpu_drv.c
>>>>> @@ -376,7 +376,6 @@ static const struct drm_driver driver = {
>>>>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>>>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>>>>> .gem_prime_import = ivpu_gem_prime_import,
>>>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>>>> .ioctls = ivpu_drm_ioctls,
>>>>> .num_ioctls = ARRAY_SIZE(ivpu_drm_ioctls),
>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>>>>> index c9a41c997c6c7..7681f79f462eb 100644
>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>>>>> @@ -2809,7 +2809,6 @@ static const struct drm_driver
>>>>> amdgpu_kms_driver = {
>>>>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>>>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>>>>> .gem_prime_import = amdgpu_gem_prime_import,
>>>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>>>> .name = DRIVER_NAME,
>>>>> .desc = DRIVER_DESC,
>>>>> diff --git a/drivers/gpu/drm/drm_fbdev_dma.c
>>>>> b/drivers/gpu/drm/drm_fbdev_dma.c
>>>>> index d86773fa8ab00..8217f1ddc0075 100644
>>>>> --- a/drivers/gpu/drm/drm_fbdev_dma.c
>>>>> +++ b/drivers/gpu/drm/drm_fbdev_dma.c
>>>>> @@ -54,12 +54,8 @@ static void drm_fbdev_dma_fb_destroy(struct
>>>>> fb_info *info)
>>>>> static int drm_fbdev_dma_fb_mmap(struct fb_info *info, struct
>>>>> vm_area_struct *vma)
>>>>> {
>>>>> struct drm_fb_helper *fb_helper = info->par;
>>>>> - struct drm_device *dev = fb_helper->dev;
>>>>> -
>>>>> - if (drm_WARN_ON_ONCE(dev,
>>>>> !fb_helper->dev->driver->gem_prime_mmap))
>>>>> - return -ENODEV;
>>>>> - return
>>>>> fb_helper->dev->driver->gem_prime_mmap(fb_helper->buffer->gem, vma);
>>>>> + return drm_gem_prime_mmap(fb_helper->buffer->gem, vma);
>>>>> }
>>>>> static const struct fb_ops drm_fbdev_dma_fb_ops = {
>>>>> diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
>>>>> index d29dafce9bb0a..6bcf324ef81c9 100644
>>>>> --- a/drivers/gpu/drm/drm_prime.c
>>>>> +++ b/drivers/gpu/drm/drm_prime.c
>>>>> @@ -715,8 +715,6 @@ EXPORT_SYMBOL(drm_gem_dmabuf_vunmap);
>>>>> * the same codepath that is used for regular GEM buffer mapping
>>>>> on the DRM fd.
>>>>> * The fake GEM offset is added to vma->vm_pgoff and
>>>>> &drm_driver->fops->mmap is
>>>>> * called to set up the mapping.
>>>>> - *
>>>>> - * Drivers can use this as their &drm_driver.gem_prime_mmap callback.
>>>>> */
>>>>> int drm_gem_prime_mmap(struct drm_gem_object *obj, struct
>>>>> vm_area_struct *vma)
>>>>> {
>>>>> @@ -772,25 +770,17 @@ EXPORT_SYMBOL(drm_gem_prime_mmap);
>>>>> * @vma: virtual address range
>>>>> *
>>>>> * Provides memory mapping for the buffer. This can be used as the
>>>>> - * &dma_buf_ops.mmap callback. It just forwards to
>>>>> &drm_driver.gem_prime_mmap,
>>>>> - * which should be set to drm_gem_prime_mmap().
>>>>> - *
>>>>> - * FIXME: There's really no point to this wrapper, drivers which
>>>>> need anything
>>>>> - * else but drm_gem_prime_mmap can roll their own
>>>>> &dma_buf_ops.mmap callback.
>>>>> + * &dma_buf_ops.mmap callback. It just forwards to
>>>>> drm_gem_prime_mmap().
>>>>> *
>>>>> * Returns 0 on success or a negative error code on failure.
>>>>> */
>>>>> int drm_gem_dmabuf_mmap(struct dma_buf *dma_buf, struct
>>>>> vm_area_struct *vma)
>>>>> {
>>>>> struct drm_gem_object *obj = dma_buf->priv;
>>>>> - struct drm_device *dev = obj->dev;
>>>>> dma_resv_assert_held(dma_buf->resv);
>>>>> - if (!dev->driver->gem_prime_mmap)
>>>>> - return -ENOSYS;
>>>>> -
>>>>> - return dev->driver->gem_prime_mmap(obj, vma);
>>>>> + return drm_gem_prime_mmap(obj, vma);
>>>>> }
>>>>> EXPORT_SYMBOL(drm_gem_dmabuf_mmap);
>>>>> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c
>>>>> b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
>>>>> index 31a7f59ccb49e..00223a8749092 100644
>>>>> --- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c
>>>>> +++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
>>>>> @@ -484,7 +484,6 @@ static const struct drm_driver
>>>>> etnaviv_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_sg_table = etnaviv_gem_prime_import_sg_table,
>>>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>>>> #ifdef CONFIG_DEBUG_FS
>>>>> .debugfs_init = etnaviv_debugfs_init,
>>>>> #endif
>>>>> diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c
>>>>> b/drivers/gpu/drm/exynos/exynos_drm_drv.c
>>>>> index 6b73fb7a83c3c..c9e3c88fb329c 100644
>>>>> --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
>>>>> +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
>>>>> @@ -113,7 +113,6 @@ static const struct drm_driver
>>>>> exynos_drm_driver = {
>>>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>>>>> .gem_prime_import = exynos_drm_gem_prime_import,
>>>>> .gem_prime_import_sg_table =
>>>>> exynos_drm_gem_prime_import_sg_table,
>>>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>>>> .ioctls = exynos_ioctls,
>>>>> .num_ioctls = ARRAY_SIZE(exynos_ioctls),
>>>>> .fops = &exynos_drm_driver_fops,
>>>>> diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
>>>>> b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
>>>>> index 0c4aa4d9b0a77..8a98fa276e8a9 100644
>>>>> --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
>>>>> +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
>>>>> @@ -63,7 +63,6 @@ static const struct drm_driver hibmc_driver = {
>>>>> .debugfs_init = drm_vram_mm_debugfs_init,
>>>>> .dumb_create = hibmc_dumb_create,
>>>>> .dumb_map_offset = drm_gem_ttm_dumb_map_offset,
>>>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>>>> };
>>>>> static int __maybe_unused hibmc_pm_suspend(struct device *dev)
>>>>> diff --git a/drivers/gpu/drm/lima/lima_drv.c
>>>>> b/drivers/gpu/drm/lima/lima_drv.c
>>>>> index e8566211e9fa1..65c31dc38049a 100644
>>>>> --- a/drivers/gpu/drm/lima/lima_drv.c
>>>>> +++ b/drivers/gpu/drm/lima/lima_drv.c
>>>>> @@ -279,7 +279,6 @@ static const struct drm_driver lima_drm_driver = {
>>>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>>>>> .gem_prime_import_sg_table =
>>>>> drm_gem_shmem_prime_import_sg_table,
>>>>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>>>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>>>> };
>>>>> struct lima_block_reader {
>>>>> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
>>>>> b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
>>>>> index 6dcb4ba2466c0..5693bb8d29ce4 100644
>>>>> --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
>>>>> +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
>>>>> @@ -560,7 +560,6 @@ static const struct drm_driver mtk_drm_driver = {
>>>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>>>>> .gem_prime_import = mtk_drm_gem_prime_import,
>>>>> .gem_prime_import_sg_table = mtk_gem_prime_import_sg_table,
>>>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>>>> .fops = &mtk_drm_fops,
>>>>> .name = DRIVER_NAME,
>>>>> diff --git a/drivers/gpu/drm/msm/msm_drv.c
>>>>> b/drivers/gpu/drm/msm/msm_drv.c
>>>>> index 891eff8433a9c..47efa3c4492c4 100644
>>>>> --- a/drivers/gpu/drm/msm/msm_drv.c
>>>>> +++ b/drivers/gpu/drm/msm/msm_drv.c
>>>>> @@ -1089,7 +1089,6 @@ static const struct drm_driver msm_driver = {
>>>>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>>>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>>>>> .gem_prime_import_sg_table = msm_gem_prime_import_sg_table,
>>>>> - .gem_prime_mmap = msm_gem_prime_mmap,
>>>>> #ifdef CONFIG_DEBUG_FS
>>>>> .debugfs_init = msm_debugfs_init,
>>>>> #endif
>>>>> diff --git a/drivers/gpu/drm/msm/msm_drv.h
>>>>> b/drivers/gpu/drm/msm/msm_drv.h
>>>>> index e13a8cbd61c95..44c9e06f2dffa 100644
>>>>> --- a/drivers/gpu/drm/msm/msm_drv.h
>>>>> +++ b/drivers/gpu/drm/msm/msm_drv.h
>>>>> @@ -282,7 +282,6 @@ unsigned long msm_gem_shrinker_shrink(struct
>>>>> drm_device *dev, unsigned long nr_t
>>>>> void msm_gem_shrinker_init(struct drm_device *dev);
>>>>> void msm_gem_shrinker_cleanup(struct drm_device *dev);
>>>>> -int msm_gem_prime_mmap(struct drm_gem_object *obj, struct
>>>>> vm_area_struct *vma);
>>>>> struct sg_table *msm_gem_prime_get_sg_table(struct drm_gem_object
>>>>> *obj);
>>>>> int msm_gem_prime_vmap(struct drm_gem_object *obj, struct
>>>>> iosys_map *map);
>>>>> void msm_gem_prime_vunmap(struct drm_gem_object *obj, struct
>>>>> iosys_map *map);
>>>>> diff --git a/drivers/gpu/drm/msm/msm_gem_prime.c
>>>>> b/drivers/gpu/drm/msm/msm_gem_prime.c
>>>>> index 2c846afe049e4..5f68e31a3e4e1 100644
>>>>> --- a/drivers/gpu/drm/msm/msm_gem_prime.c
>>>>> +++ b/drivers/gpu/drm/msm/msm_gem_prime.c
>>>>> @@ -11,11 +11,6 @@
>>>>> #include "msm_drv.h"
>>>>> #include "msm_gem.h"
>>>>> -int msm_gem_prime_mmap(struct drm_gem_object *obj, struct
>>>>> vm_area_struct *vma)
>>>>> -{
>>>>> - return drm_gem_prime_mmap(obj, vma);
>>>>> -}
>>>>> -
>>>>> struct sg_table *msm_gem_prime_get_sg_table(struct drm_gem_object
>>>>> *obj)
>>>>> {
>>>>> struct msm_gem_object *msm_obj = to_msm_bo(obj);
>>>>> diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c
>>>>> b/drivers/gpu/drm/nouveau/nouveau_drm.c
>>>>> index cc7c5b4a05fd8..4199b8294e6e8 100644
>>>>> --- a/drivers/gpu/drm/nouveau/nouveau_drm.c
>>>>> +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
>>>>> @@ -1237,7 +1237,6 @@ driver_stub = {
>>>>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>>>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>>>>> .gem_prime_import_sg_table = nouveau_gem_prime_import_sg_table,
>>>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>>>> .dumb_create = nouveau_display_dumb_create,
>>>>> .dumb_map_offset = drm_gem_ttm_dumb_map_offset,
>>>>> diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c
>>>>> b/drivers/gpu/drm/panfrost/panfrost_drv.c
>>>>> index 19f8cff52e533..d2916bf435473 100644
>>>>> --- a/drivers/gpu/drm/panfrost/panfrost_drv.c
>>>>> +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c
>>>>> @@ -542,7 +542,6 @@ static const struct drm_driver
>>>>> panfrost_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_sg_table = panfrost_gem_prime_import_sg_table,
>>>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>>>> };
>>>>> static int panfrost_probe(struct platform_device *pdev)
>>>>> diff --git a/drivers/gpu/drm/pl111/pl111_drv.c
>>>>> b/drivers/gpu/drm/pl111/pl111_drv.c
>>>>> index 43049c8028b21..c4b8357ea9996 100644
>>>>> --- a/drivers/gpu/drm/pl111/pl111_drv.c
>>>>> +++ b/drivers/gpu/drm/pl111/pl111_drv.c
>>>>> @@ -227,7 +227,6 @@ static const struct drm_driver pl111_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_sg_table = pl111_gem_import_sg_table,
>>>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>>>> #if defined(CONFIG_DEBUG_FS)
>>>>> .debugfs_init = pl111_debugfs_init,
>>>>> diff --git a/drivers/gpu/drm/radeon/radeon_drv.c
>>>>> b/drivers/gpu/drm/radeon/radeon_drv.c
>>>>> index e4374814f0ef6..cf1b960c4200c 100644
>>>>> --- a/drivers/gpu/drm/radeon/radeon_drv.c
>>>>> +++ b/drivers/gpu/drm/radeon/radeon_drv.c
>>>>> @@ -607,7 +607,6 @@ static const struct drm_driver kms_driver = {
>>>>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
>>>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>>>>> .gem_prime_import_sg_table = radeon_gem_prime_import_sg_table,
>>>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>>>> .name = DRIVER_NAME,
>>>>> .desc = DRIVER_DESC,
>>>>> diff --git a/drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c
>>>>> b/drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c
>>>>> index ed3ee3d15baec..4280ff5fa91f2 100644
>>>>> --- a/drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c
>>>>> +++ b/drivers/gpu/drm/renesas/rcar-du/rcar_du_drv.c
>>>>> @@ -608,7 +608,6 @@ static const 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_sg_table = rcar_du_gem_prime_import_sg_table,
>>>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>>>> .fops = &rcar_du_fops,
>>>>> .name = "rcar-du",
>>>>> .desc = "Renesas R-Car Display Unit",
>>>>> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
>>>>> b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
>>>>> index c0ebfdf56a711..b8cf89f0cc566 100644
>>>>> --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
>>>>> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
>>>>> @@ -227,7 +227,6 @@ static const 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_sg_table =
>>>>> rockchip_gem_prime_import_sg_table,
>>>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>>>> .fops = &rockchip_drm_driver_fops,
>>>>> .name = DRIVER_NAME,
>>>>> .desc = DRIVER_DESC,
>>>>> diff --git a/drivers/gpu/drm/v3d/v3d_drv.c
>>>>> b/drivers/gpu/drm/v3d/v3d_drv.c
>>>>> index 71f9fdde24b41..845a36e36450d 100644
>>>>> --- a/drivers/gpu/drm/v3d/v3d_drv.c
>>>>> +++ b/drivers/gpu/drm/v3d/v3d_drv.c
>>>>> @@ -174,7 +174,6 @@ static const struct drm_driver v3d_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_sg_table = v3d_prime_import_sg_table,
>>>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>>>> .ioctls = v3d_drm_ioctls,
>>>>> .num_ioctls = ARRAY_SIZE(v3d_drm_ioctls),
>>>>> diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.c
>>>>> b/drivers/gpu/drm/virtio/virtgpu_drv.c
>>>>> index add075681e18f..91ace7a44f2a6 100644
>>>>> --- a/drivers/gpu/drm/virtio/virtgpu_drv.c
>>>>> +++ b/drivers/gpu/drm/virtio/virtgpu_drv.c
>>>>> @@ -188,7 +188,6 @@ static const 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_mmap = drm_gem_prime_mmap,
>>>>> .gem_prime_import = virtgpu_gem_prime_import,
>>>>> .gem_prime_import_sg_table = virtgpu_gem_prime_import_sg_table,
>>>>> diff --git a/drivers/gpu/drm/xen/xen_drm_front.c
>>>>> b/drivers/gpu/drm/xen/xen_drm_front.c
>>>>> index 90996c108146d..62c3c13b3a175 100644
>>>>> --- a/drivers/gpu/drm/xen/xen_drm_front.c
>>>>> +++ b/drivers/gpu/drm/xen/xen_drm_front.c
>>>>> @@ -477,7 +477,6 @@ static const struct drm_driver xen_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_sg_table = xen_drm_front_gem_import_sg_table,
>>>>> - .gem_prime_mmap = drm_gem_prime_mmap,
>>>>> .dumb_create = xen_drm_drv_dumb_create,
>>>>> .fops = &xen_drm_dev_fops,
>>>>> .name = "xendrm-du",
>>>>> diff --git a/include/drm/drm_drv.h b/include/drm/drm_drv.h
>>>>> index 89e2706cac561..870278ecd8ba9 100644
>>>>> --- a/include/drm/drm_drv.h
>>>>> +++ b/include/drm/drm_drv.h
>>>>> @@ -343,20 +343,6 @@ struct drm_driver {
>>>>> struct drm_device *dev,
>>>>> struct dma_buf_attachment *attach,
>>>>> struct sg_table *sgt);
>>>>> - /**
>>>>> - * @gem_prime_mmap:
>>>>> - *
>>>>> - * mmap hook for GEM drivers, used to implement dma-buf mmap
>>>>> in the
>>>>> - * PRIME helpers.
>>>>> - *
>>>>> - * This hook only exists for historical reasons. Drivers must use
>>>>> - * drm_gem_prime_mmap() to implement it.
>>>>> - *
>>>>> - * FIXME: Convert all drivers to implement mmap in struct
>>>>> - * &drm_gem_object_funcs and inline drm_gem_prime_mmap() into
>>>>> - * its callers. This hook should be removed afterwards.
>>>>> - */
>>>>> - int (*gem_prime_mmap)(struct drm_gem_object *obj, struct
>>>>> vm_area_struct *vma);
>>>>> /**
>>>>> * @dumb_create:
>>>>> diff --git a/include/drm/drm_gem_dma_helper.h
>>>>> b/include/drm/drm_gem_dma_helper.h
>>>>> index 8a043235dad81..61da596780b64 100644
>>>>> --- a/include/drm/drm_gem_dma_helper.h
>>>>> +++ b/include/drm/drm_gem_dma_helper.h
>>>>> @@ -169,8 +169,7 @@ drm_gem_dma_prime_import_sg_table(struct
>>>>> drm_device *dev,
>>>>> .dumb_create = (dumb_create_func), \
>>>>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd, \
>>>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle, \
>>>>> - .gem_prime_import_sg_table = drm_gem_dma_prime_import_sg_table, \
>>>>> - .gem_prime_mmap = drm_gem_prime_mmap
>>>>> + .gem_prime_import_sg_table = drm_gem_dma_prime_import_sg_table
>>>>> /**
>>>>> * DRM_GEM_DMA_DRIVER_OPS - DMA GEM driver operations
>>>>> @@ -207,8 +206,7 @@ drm_gem_dma_prime_import_sg_table(struct
>>>>> drm_device *dev,
>>>>> .dumb_create = dumb_create_func, \
>>>>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd, \
>>>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle, \
>>>>> - .gem_prime_import_sg_table =
>>>>> drm_gem_dma_prime_import_sg_table_vmap, \
>>>>> - .gem_prime_mmap = drm_gem_prime_mmap
>>>>> + .gem_prime_import_sg_table =
>>>>> drm_gem_dma_prime_import_sg_table_vmap
>>>>> /**
>>>>> * DRM_GEM_DMA_DRIVER_OPS_VMAP - DMA GEM driver operations
>>>>> ensuring a virtual
>>>>> diff --git a/include/drm/drm_gem_shmem_helper.h
>>>>> b/include/drm/drm_gem_shmem_helper.h
>>>>> index 5994fed5e3278..46eb46e690630 100644
>>>>> --- a/include/drm/drm_gem_shmem_helper.h
>>>>> +++ b/include/drm/drm_gem_shmem_helper.h
>>>>> @@ -293,7 +293,6 @@ int drm_gem_shmem_dumb_create(struct drm_file
>>>>> *file, struct drm_device *dev,
>>>>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd, \
>>>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle, \
>>>>> .gem_prime_import_sg_table =
>>>>> drm_gem_shmem_prime_import_sg_table, \
>>>>> - .gem_prime_mmap = drm_gem_prime_mmap, \
>>>>> .dumb_create = drm_gem_shmem_dumb_create
>>>>> #endif /* __DRM_GEM_SHMEM_HELPER_H__ */
>>>>> diff --git a/include/drm/drm_gem_vram_helper.h
>>>>> b/include/drm/drm_gem_vram_helper.h
>>>>> index f4aab64411d82..6b265cb9f45a4 100644
>>>>> --- a/include/drm/drm_gem_vram_helper.h
>>>>> +++ b/include/drm/drm_gem_vram_helper.h
>>>>> @@ -160,7 +160,6 @@ void drm_gem_vram_simple_display_pipe_cleanup_fb(
>>>>> .debugfs_init = drm_vram_mm_debugfs_init, \
>>>>> .dumb_create = drm_gem_vram_driver_dumb_create, \
>>>>> .dumb_map_offset = drm_gem_ttm_dumb_map_offset, \
>>>>> - .gem_prime_mmap = drm_gem_prime_mmap, \
>>>>> .prime_handle_to_fd = drm_gem_prime_handle_to_fd, \
>>>>> .prime_fd_to_handle = drm_gem_prime_fd_to_handle
>>>>
>>
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 840 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2023-06-14 10:40 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-06-13 14:51 [PATCH 0/2] drm: Remove gem_prime_mmap callback Thomas Zimmermann
2023-06-13 14:51 ` [PATCH 1/2] drm/msm: Initialize mmap offset after constructing the buffer object Thomas Zimmermann
2023-06-13 14:51 ` [PATCH 2/2] drm: Remove struct drm_driver.gem_prime_mmap Thomas Zimmermann
2023-06-13 15:32 ` Alex Deucher
2023-06-13 17:27 ` [2/2] " Sui Jingfeng
2023-06-14 2:06 ` Sui Jingfeng
2023-06-14 5:34 ` Thomas Zimmermann
2023-06-14 8:26 ` Sui Jingfeng
2023-06-14 10:39 ` Thomas Zimmermann
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).