On Fri, 25 Apr 2025 14:34:53 +0100 Steven Price <steven.pr...@arm.com> wrote:
> On 17/03/2025 13:06, Thomas Zimmermann wrote: > > Instead of testing import_attach for imported GEM buffers, invoke > > drm_gem_is_imported() to do the test. The helper tests the dma_buf > > itself while import_attach is just an artifact of the import. Prepares > > to make import_attach optional. > > > > Signed-off-by: Thomas Zimmermann <tzimmerm...@suse.de> > > Cc: Boris Brezillon <boris.brezil...@collabora.com> > > Cc: Steven Price <steven.pr...@arm.com> > > Cc: Liviu Dudau <liviu.du...@arm.com> > > --- > > drivers/gpu/drm/panthor/panthor_gem.c | 2 +- > > drivers/gpu/drm/panthor/panthor_mmu.c | 10 +++++----- > > 2 files changed, 6 insertions(+), 6 deletions(-) > > > > diff --git a/drivers/gpu/drm/panthor/panthor_gem.c > > b/drivers/gpu/drm/panthor/panthor_gem.c > > index 8244a4e6c2a2..fd014ccc3bfc 100644 > > --- a/drivers/gpu/drm/panthor/panthor_gem.c > > +++ b/drivers/gpu/drm/panthor/panthor_gem.c > > @@ -155,7 +155,7 @@ static enum drm_gem_object_status > > panthor_gem_status(struct drm_gem_object *obj) > > struct panthor_gem_object *bo = to_panthor_bo(obj); > > enum drm_gem_object_status res = 0; > > > > - if (bo->base.base.import_attach || bo->base.pages) > > + if (drm_gem_is_imported(&bo->base.base) || bo->base.pages) > > res |= DRM_GEM_OBJECT_RESIDENT; > > > > return res; > > diff --git a/drivers/gpu/drm/panthor/panthor_mmu.c > > b/drivers/gpu/drm/panthor/panthor_mmu.c > > index 12a02e28f50f..3e123159ac10 100644 > > --- a/drivers/gpu/drm/panthor/panthor_mmu.c > > +++ b/drivers/gpu/drm/panthor/panthor_mmu.c > > @@ -1103,7 +1103,7 @@ static void panthor_vm_bo_put(struct drm_gpuvm_bo > > *vm_bo) > > /* If the vm_bo object was destroyed, release the pin reference that > > * was hold by this object. > > */ > > - if (unpin && !bo->base.base.import_attach) > > + if (unpin && !drm_gem_is_imported(&bo->base.base)) > > drm_gem_shmem_unpin(&bo->base); > > I'm seeing issues on cleanup where drm_gem_is_imported() doesn't return > the same as !!import_attach in the above code. Specifically this appears > to be caused by drm_gem_object_exported_dma_buf_free() setting ->dma_buf > to NULL which makes the BO look like it isn't imported. > > Stashing the imported state in the BO fixes the problem (see below > hack), but it would be nice to fix this more generally in case there are > other drivers that need to know the imported state during cleanup. > > Any suggestions for how drm_gem_is_imported() can more accurately report > the state during cleanup? This should be fixed by [1], but I wonder why it's not been merged in drm-misc-next yet. [1]https://patches.linaro.org/project/linux-media/patch/20250416065820.26076-1-tzimmerm...@suse.de/