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

Reply via email to