[PATCH 9/9] drm/ttm: make ttm_bo_get internal

Christian König ckoenig.leichtzumerken at gmail.com
Tue Jul 23 08:53:12 UTC 2024


Am 16.07.24 um 23:37 schrieb Matthew Brost:
> On Tue, Jul 16, 2024 at 02:35:19PM +0200, Christian König wrote:
>> Prevent drivers from using this directly.
>>
> This is a good change. Early on in Xe, our reference counting for BOs
> was flawed (and incorrect) due to confusion between GEM ref count and
> TTM ref count.
>
> Is there any way we can just eliminate this and use GEM ref count? I'm
> still confused about why we seemingly have two reference counts for the
> same object.

I don't want to give your nightmares but initially we had *four* 
reference counts for the same object!

I've already removed one of it quite a while ago because I ran into 
similar issues, but currently we have three:
1. The GEM kref
2. The GEM handle count
3. The TTM kref

The handle count and GEM kref make sense since the handle count controls 
when to release DMA-buf and the GEM kref controls when to release the 
structure and backing store.

The TTM kref is another structure reference created because historically 
TTM BOs were not based on GEM objects. Since this is no longer the case 
we can probably nuke that one.

Regards,
Christian.

>
> Matt
>
>> Signed-off-by: Christian König <christian.koenig at amd.com>
>> ---
>>   drivers/gpu/drm/ttm/ttm_bo_internal.h | 10 ++++++++++
>>   include/drm/ttm/ttm_bo.h              | 10 ----------
>>   2 files changed, 10 insertions(+), 10 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/ttm/ttm_bo_internal.h b/drivers/gpu/drm/ttm/ttm_bo_internal.h
>> index 6a7305efd778..9d8b747a34db 100644
>> --- a/drivers/gpu/drm/ttm/ttm_bo_internal.h
>> +++ b/drivers/gpu/drm/ttm/ttm_bo_internal.h
>> @@ -27,6 +27,16 @@
>>   
>>   #include <drm/ttm/ttm_bo.h>
>>   
>> +/**
>> + * ttm_bo_get - reference a struct ttm_buffer_object
>> + *
>> + * @bo: The buffer object.
>> + */
>> +static inline void ttm_bo_get(struct ttm_buffer_object *bo)
>> +{
>> +	kref_get(&bo->kref);
>> +}
>> +
>>   /**
>>    * ttm_bo_get_unless_zero - reference a struct ttm_buffer_object unless
>>    * its refcount has already reached zero.
>> diff --git a/include/drm/ttm/ttm_bo.h b/include/drm/ttm/ttm_bo.h
>> index 31ec7fd34eeb..8c1577d8793c 100644
>> --- a/include/drm/ttm/ttm_bo.h
>> +++ b/include/drm/ttm/ttm_bo.h
>> @@ -229,16 +229,6 @@ struct ttm_lru_walk {
>>   s64 ttm_lru_walk_for_evict(struct ttm_lru_walk *walk, struct ttm_device *bdev,
>>   			   struct ttm_resource_manager *man, s64 target);
>>   
>> -/**
>> - * ttm_bo_get - reference a struct ttm_buffer_object
>> - *
>> - * @bo: The buffer object.
>> - */
>> -static inline void ttm_bo_get(struct ttm_buffer_object *bo)
>> -{
>> -	kref_get(&bo->kref);
>> -}
>> -
>>   /**
>>    * ttm_bo_reserve:
>>    *
>> -- 
>> 2.34.1
>>



More information about the dri-devel mailing list