On 5/2/25 02:24, Vivek Kasireddy wrote: > There is a chance that obj->dma_buf would be NULL by the time > virtgpu_dma_buf_free_obj() is called. This can happen for imported > prime objects, when drm_gem_object_exported_dma_buf_free() gets > called on them before drm_gem_object_free(). This is because > drm_gem_object_exported_dma_buf_free() explicitly sets > obj->dma_buf to NULL. > > Therefore, fix this issue by storing the dma_buf pointer in the > virtio_gpu_object instance and using it in virtgpu_dma_buf_free_obj. > This stored pointer is guaranteed to be valid until the object is > freed as we took a reference on it in virtgpu_gem_prime_import(). > > Fixes: 415cb45895f4 ("drm/virtio: Use dma_buf from GEM object instance") > Cc: Dmitry Osipenko <dmitry.osipe...@collabora.com> > Cc: Thomas Zimmermann <tzimmerm...@suse.de> > Signed-off-by: Vivek Kasireddy <vivek.kasire...@intel.com> > --- > drivers/gpu/drm/virtio/virtgpu_drv.h | 1 + > drivers/gpu/drm/virtio/virtgpu_prime.c | 3 ++- > 2 files changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h > b/drivers/gpu/drm/virtio/virtgpu_drv.h > index f17660a71a3e..f7def8b42068 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_drv.h > +++ b/drivers/gpu/drm/virtio/virtgpu_drv.h > @@ -88,6 +88,7 @@ struct virtio_gpu_object_params { > > struct virtio_gpu_object { > struct drm_gem_shmem_object base; > + struct dma_buf *dma_buf; > struct sg_table *sgt; > uint32_t hw_res_handle; > bool dumb; > diff --git a/drivers/gpu/drm/virtio/virtgpu_prime.c > b/drivers/gpu/drm/virtio/virtgpu_prime.c > index 1118a0250279..722cde5e2d86 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_prime.c > +++ b/drivers/gpu/drm/virtio/virtgpu_prime.c > @@ -206,7 +206,7 @@ static void virtgpu_dma_buf_free_obj(struct > drm_gem_object *obj) > struct virtio_gpu_device *vgdev = obj->dev->dev_private; > > if (drm_gem_is_imported(obj)) { > - struct dma_buf *dmabuf = obj->dma_buf; > + struct dma_buf *dmabuf = bo->dma_buf;
drm_gem_is_imported() checks whether obj->dma_buf is NULL, hence drm_gem_is_imported() can't be used here too? -- Best regards, Dmitry