On Mon, Oct 12, 2026 at 06:06:15PM -0700, Niranjana Vishwanathapura wrote: > drm_gem_is_prime_exported_dma_buf() is a bool predicate that open-codes > the core PRIME self-import check. Its only caller, the shmem importer, > then repeats the dma_buf->priv lookup and the reference get. > > Replace it with drm_gem_prime_dma_buf_to_gem(), a thin wrapper around > drm_gem_prime_self_import() that returns the backing GEM object -- with > a reference taken -- for a core-PRIME self-export, or NULL otherwise. > This consolidates self-import handling onto drm_gem_prime_self_import() > and lets drm_gem_shmem_prime_import_no_map() reuse the object directly. > > Unlike the removed predicate, the helper takes a reference on the > returned object; the sole caller already wanted the referenced object. > > Assisted-by: GitHub-Copilot:claude-opus-4.8
Assisted-by: LLM I was going to suggest this last rev too as I noticed drm_gem_shmem_prime_import_no_map called drm_gem_is_prime_exported_dma_buf which should prefer the new helper but shmem couldn't look at drm_gem_prime_dmabuf_ops. This is a good cleanup: Reviewed-by: Matthew Brost <[email protected]> > Signed-off-by: Niranjana Vishwanathapura <[email protected]> > --- > drivers/gpu/drm/drm_gem_shmem_helper.c | 14 ++++++-------- > drivers/gpu/drm/drm_prime.c | 26 +++++++++++++++----------- > include/drm/drm_prime.h | 4 ++-- > 3 files changed, 23 insertions(+), 21 deletions(-) > > diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c > b/drivers/gpu/drm/drm_gem_shmem_helper.c > index d654a22a30de..a0e161f2333e 100644 > --- a/drivers/gpu/drm/drm_gem_shmem_helper.c > +++ b/drivers/gpu/drm/drm_gem_shmem_helper.c > @@ -954,15 +954,13 @@ struct drm_gem_object > *drm_gem_shmem_prime_import_no_map(struct drm_device *dev, > size_t size; > int ret; > > - if (drm_gem_is_prime_exported_dma_buf(dev, dma_buf)) { > - /* > - * Importing dmabuf exported from our own gem increases > - * refcount on gem itself instead of f_count of dmabuf. > - */ > - obj = dma_buf->priv; > - drm_gem_object_get(obj); > + /* > + * Importing a dmabuf exported from our own gem increases the refcount > + * on the gem itself instead of the f_count of the dmabuf. > + */ > + obj = drm_gem_prime_dma_buf_to_gem(dev, dma_buf); > + if (obj) > return obj; > - } > > attach = dma_buf_attach(dma_buf, dev->dev); > if (IS_ERR(attach)) > diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c > index 588910c250b8..275c5661528d 100644 > --- a/drivers/gpu/drm/drm_prime.c > +++ b/drivers/gpu/drm/drm_prime.c > @@ -933,23 +933,27 @@ EXPORT_SYMBOL(drm_gem_prime_export); > > > /** > - * drm_gem_is_prime_exported_dma_buf - > - * checks if the DMA-BUF was exported from a GEM object belonging to @dev. > + * drm_gem_prime_dma_buf_to_gem - GEM object backing a self-exported PRIME > dma-buf > * @dev: drm_device to check against > * @dma_buf: dma-buf object to import > * > - * Return: true if the DMA-BUF was exported from a GEM object belonging > - * to @dev, false otherwise. > + * If @dma_buf is a PRIME export of a GEM object that belongs to @dev and > uses > + * the core PRIME dma-buf ops, return that GEM object with an extra reference > + * taken, so a self-import reuses the GEM object instead of referencing the > + * dma-buf file. Returns NULL for a foreign dma-buf or one using > driver-private > + * ops; such drivers call drm_gem_prime_self_import() with their own ops. > + * > + * The returned object carries a reference the caller must drop with > + * drm_gem_object_put(). > + * > + * Return: the referenced GEM object on self-import, or NULL otherwise. > */ > - > -bool drm_gem_is_prime_exported_dma_buf(struct drm_device *dev, > - struct dma_buf *dma_buf) > +struct drm_gem_object *drm_gem_prime_dma_buf_to_gem(struct drm_device *dev, > + struct dma_buf *dma_buf) > { > - struct drm_gem_object *obj = dma_buf->priv; > - > - return (dma_buf->ops == &drm_gem_prime_dmabuf_ops) && (obj->dev == dev); > + return drm_gem_prime_self_import(dev, dma_buf, > &drm_gem_prime_dmabuf_ops); > } > -EXPORT_SYMBOL(drm_gem_is_prime_exported_dma_buf); > +EXPORT_SYMBOL(drm_gem_prime_dma_buf_to_gem); > > /** > * drm_gem_prime_import_dev - core implementation of the import callback > diff --git a/include/drm/drm_prime.h b/include/drm/drm_prime.h > index d378404f8ab4..02665205aed1 100644 > --- a/include/drm/drm_prime.h > +++ b/include/drm/drm_prime.h > @@ -101,8 +101,8 @@ struct dma_buf *drm_gem_prime_export(struct > drm_gem_object *obj, > unsigned long drm_prime_get_contiguous_size(struct sg_table *sgt); > > /* helper functions for importing */ > -bool drm_gem_is_prime_exported_dma_buf(struct drm_device *dev, > - struct dma_buf *dma_buf); > +struct drm_gem_object *drm_gem_prime_dma_buf_to_gem(struct drm_device *dev, > + struct dma_buf *dma_buf); > > struct drm_gem_object *drm_gem_prime_import_dev(struct drm_device *dev, > struct dma_buf *dma_buf, > -- > 2.43.0 >
