On Mon, Oct 12, 2026 at 11:05:43AM -0700, Niranjana Vishwanathapura wrote: > From: Farah Kassabri <[email protected]> > > Instead of driver-specific code, use the new drm helper > drm_gem_prime_self_import() to detect self-import of a dma-buf in Xe. > > Expose the helper within Xe as xe_dma_buf_to_gem() for future use. > > Signed-off-by: Farah Kassabri <[email protected]> > Signed-off-by: Niranjana Vishwanathapura <[email protected]>
Reviewed-by: Matthew Brost <[email protected]> > --- > drivers/gpu/drm/xe/xe_dma_buf.c | 23 +++++++++++++---------- > drivers/gpu/drm/xe/xe_dma_buf.h | 2 ++ > 2 files changed, 15 insertions(+), 10 deletions(-) > > diff --git a/drivers/gpu/drm/xe/xe_dma_buf.c b/drivers/gpu/drm/xe/xe_dma_buf.c > index 6a85b292dee7..4e1b447f4235 100644 > --- a/drivers/gpu/drm/xe/xe_dma_buf.c > +++ b/drivers/gpu/drm/xe/xe_dma_buf.c > @@ -239,6 +239,12 @@ static const struct dma_buf_ops xe_dmabuf_ops = { > .vunmap = drm_gem_dmabuf_vunmap, > }; > > +struct drm_gem_object *xe_dma_buf_to_gem(struct drm_device *dev, > + struct dma_buf *dma_buf) > +{ > + return drm_gem_prime_self_import(dev, dma_buf, &xe_dmabuf_ops); > +} > + > struct dma_buf *xe_gem_prime_export(struct drm_gem_object *obj, int flags) > { > struct xe_bo *bo = gem_to_xe_bo(obj); > @@ -372,17 +378,14 @@ struct drm_gem_object *xe_gem_prime_import(struct > drm_device *dev, > struct dma_buf_attachment *attach; > struct drm_gem_object *obj; > > - if (dma_buf->ops == &xe_dmabuf_ops) { > - obj = dma_buf->priv; > - if (obj->dev == dev && > - !XE_TEST_ONLY(test && test->force_different_devices)) { > - /* > - * Importing dmabuf exported from out own gem increases > - * refcount on gem itself instead of f_count of dmabuf. > - */ > - drm_gem_object_get(obj); > + obj = xe_dma_buf_to_gem(dev, dma_buf); > + if (obj) { > + if (!XE_TEST_ONLY(test && test->force_different_devices)) > return obj; > - } > + > + /* Test only: force different devices */ > + drm_gem_object_put(obj); > + obj = NULL; > } > > /* > diff --git a/drivers/gpu/drm/xe/xe_dma_buf.h b/drivers/gpu/drm/xe/xe_dma_buf.h > index 861dd28a862c..d0c7893a5a6f 100644 > --- a/drivers/gpu/drm/xe/xe_dma_buf.h > +++ b/drivers/gpu/drm/xe/xe_dma_buf.h > @@ -8,6 +8,8 @@ > > #include <drm/drm_gem.h> > > +struct drm_gem_object *xe_dma_buf_to_gem(struct drm_device *dev, > + struct dma_buf *dma_buf); > struct dma_buf *xe_gem_prime_export(struct drm_gem_object *obj, int flags); > struct drm_gem_object *xe_gem_prime_import(struct drm_device *dev, > struct dma_buf *dma_buf); > -- > 2.43.0 >
