Panthor duplicates the PRIME export and self-import logic only because the core helpers hardcoded drm_gem_prime_dmabuf_ops. Use the new drm_gem_prime_export_with_ops() and gem_prime_is_exporter() functions instead.
Signed-off-by: Maíra Canal <[email protected]> --- drivers/gpu/drm/panthor/panthor_drv.c | 2 +- drivers/gpu/drm/panthor/panthor_gem.c | 28 ++++------------------------ drivers/gpu/drm/panthor/panthor_gem.h | 5 ++--- 3 files changed, 7 insertions(+), 28 deletions(-) diff --git a/drivers/gpu/drm/panthor/panthor_drv.c b/drivers/gpu/drm/panthor/panthor_drv.c index dc8d0191aef4..37048030afcb 100644 --- a/drivers/gpu/drm/panthor/panthor_drv.c +++ b/drivers/gpu/drm/panthor/panthor_drv.c @@ -1801,7 +1801,7 @@ static const struct drm_driver panthor_drm_driver = { .minor = 9, .gem_prime_import_sg_table = panthor_gem_prime_import_sg_table, - .gem_prime_import = panthor_gem_prime_import, + .gem_prime_is_exporter = panthor_gem_prime_is_exporter, #ifdef CONFIG_DEBUG_FS .debugfs_init = panthor_debugfs_init, #endif diff --git a/drivers/gpu/drm/panthor/panthor_gem.c b/drivers/gpu/drm/panthor/panthor_gem.c index 22b57ab6f929..2b7e4d5f5f5c 100644 --- a/drivers/gpu/drm/panthor/panthor_gem.c +++ b/drivers/gpu/drm/panthor/panthor_gem.c @@ -562,39 +562,19 @@ static const struct dma_buf_ops panthor_dma_buf_ops = { static struct dma_buf * panthor_gem_prime_export(struct drm_gem_object *obj, int flags) { - struct drm_device *dev = obj->dev; - struct dma_buf_export_info exp_info = { - .exp_name = KBUILD_MODNAME, - .owner = THIS_MODULE, - .ops = &panthor_dma_buf_ops, - .size = obj->size, - .flags = flags, - .priv = obj, - .resv = obj->resv, - }; - /* We can't export GEMs that have an exclusive VM. */ if (to_panthor_bo(obj)->exclusive_vm_root_gem) return ERR_PTR(-EINVAL); - return drm_gem_dmabuf_export(dev, &exp_info); + return drm_gem_prime_export_with_ops(obj, &panthor_dma_buf_ops, flags); } -struct drm_gem_object * -panthor_gem_prime_import(struct drm_device *dev, - struct dma_buf *dma_buf) +bool panthor_gem_prime_is_exporter(struct drm_device *dev, + struct dma_buf *dma_buf) { struct drm_gem_object *obj = dma_buf->priv; - if (dma_buf->ops == &panthor_dma_buf_ops && obj->dev == dev) { - /* Importing dmabuf exported from our own gem increases - * refcount on gem itself instead of f_count of dmabuf. - */ - drm_gem_object_get(obj); - return obj; - } - - return drm_gem_prime_import(dev, dma_buf); + return dma_buf->ops == &panthor_dma_buf_ops && obj->dev == dev; } static void panthor_gem_print_info(struct drm_printer *p, unsigned int indent, diff --git a/drivers/gpu/drm/panthor/panthor_gem.h b/drivers/gpu/drm/panthor/panthor_gem.h index 5ae37d0d3646..a68cd3c280ed 100644 --- a/drivers/gpu/drm/panthor/panthor_gem.h +++ b/drivers/gpu/drm/panthor/panthor_gem.h @@ -274,9 +274,8 @@ void panthor_gem_kernel_bo_set_label(struct panthor_kernel_bo *bo, const char *l int panthor_gem_sync(struct drm_gem_object *obj, u32 type, u64 offset, u64 size); -struct drm_gem_object * -panthor_gem_prime_import(struct drm_device *dev, - struct dma_buf *dma_buf); +bool panthor_gem_prime_is_exporter(struct drm_device *dev, + struct dma_buf *dma_buf); static inline u64 panthor_kernel_bo_gpuva(struct panthor_kernel_bo *bo) -- 2.56.0
