Panfrost 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/panfrost/panfrost_drv.c | 2 +- drivers/gpu/drm/panfrost/panfrost_gem.c | 28 ++++------------------------ drivers/gpu/drm/panfrost/panfrost_gem.h | 5 ++--- 3 files changed, 7 insertions(+), 28 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c index 7c348a0bf1ee..d26f8ca52906 100644 --- a/drivers/gpu/drm/panfrost/panfrost_drv.c +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c @@ -824,7 +824,7 @@ static const struct drm_driver panfrost_drm_driver = { .minor = 7, .gem_create_object = panfrost_gem_create_object, - .gem_prime_import = panfrost_gem_prime_import, + .gem_prime_is_exporter = panfrost_gem_prime_is_exporter, .gem_prime_import_sg_table = panfrost_gem_prime_import_sg_table, #ifdef CONFIG_DEBUG_FS .debugfs_init = panfrost_device_debugfs_init, diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.c b/drivers/gpu/drm/panfrost/panfrost_gem.c index 518f24549b9d..207110f33700 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gem.c +++ b/drivers/gpu/drm/panfrost/panfrost_gem.c @@ -380,35 +380,15 @@ static const struct dma_buf_ops panfrost_dma_buf_ops = { static struct dma_buf * panfrost_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 = &panfrost_dma_buf_ops, - .size = obj->size, - .flags = flags, - .priv = obj, - .resv = obj->resv, - }; - - return drm_gem_dmabuf_export(dev, &exp_info); + return drm_gem_prime_export_with_ops(obj, &panfrost_dma_buf_ops, flags); } -struct drm_gem_object * -panfrost_gem_prime_import(struct drm_device *dev, - struct dma_buf *dma_buf) +bool panfrost_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 == &panfrost_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 == &panfrost_dma_buf_ops && obj->dev == dev; } static const struct drm_gem_object_funcs panfrost_gem_funcs = { diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.h b/drivers/gpu/drm/panfrost/panfrost_gem.h index 3008afcf4bff..9d30c2b768d7 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gem.h +++ b/drivers/gpu/drm/panfrost/panfrost_gem.h @@ -138,9 +138,8 @@ struct drm_gem_object * panfrost_gem_prime_import_sg_table(struct drm_device *dev, struct dma_buf_attachment *attach, struct sg_table *sgt); -struct drm_gem_object * -panfrost_gem_prime_import(struct drm_device *dev, - struct dma_buf *dma_buf); +bool panfrost_gem_prime_is_exporter(struct drm_device *dev, + struct dma_buf *dma_buf); struct panfrost_gem_object * panfrost_gem_create(struct drm_device *dev, size_t size, u32 flags); -- 2.56.0
