[PATCH 09/15] drm/panthor: Test for imported buffers with drm_gem_is_imported()

Steven Price steven.price at arm.com
Fri Apr 25 14:57:00 UTC 2025


On 25/04/2025 15:30, Boris Brezillon wrote:
> On Fri, 25 Apr 2025 14:34:53 +0100
> Steven Price <steven.price at 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 <tzimmermann at suse.de>
>>> Cc: Boris Brezillon <boris.brezillon at collabora.com>
>>> Cc: Steven Price <steven.price at arm.com>
>>> Cc: Liviu Dudau <liviu.dudau at 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.

Ah, yes that's exactly the bug I'm seeing - I missed the patch being
posted. Thanks for the link!

Steve

> [1]https://patches.linaro.org/project/linux-media/patch/20250416065820.26076-1-tzimmermann@suse.de/



More information about the dri-devel mailing list