diff mbox series

[1/9] drm/amdgpu: use GEM references instead of TTMs

Message ID 20240716123519.1884-2-christian.koenig@amd.com (mailing list archive)
State New, archived
Headers show
Series [1/9] drm/amdgpu: use GEM references instead of TTMs | expand

Commit Message

Christian König July 16, 2024, 12:35 p.m. UTC
Instead of a TTM reference grab a GEM reference whenever necessary.

Signed-off-by: Christian König <christian.koenig@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c    | 8 ++++----
 drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 7 ++-----
 2 files changed, 6 insertions(+), 9 deletions(-)

Comments

Matthew Brost July 16, 2024, 9:53 p.m. UTC | #1
On Tue, Jul 16, 2024 at 02:35:11PM +0200, Christian König wrote:
> Instead of a TTM reference grab a GEM reference whenever necessary.
> 
> Signed-off-by: Christian König <christian.koenig@amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c    | 8 ++++----
>  drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 7 ++-----
>  2 files changed, 6 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> index 67c234bcf89f..6be3d7cd1c51 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> @@ -87,11 +87,11 @@ static const struct vm_operations_struct amdgpu_gem_vm_ops = {
>  
>  static void amdgpu_gem_object_free(struct drm_gem_object *gobj)
>  {
> -	struct amdgpu_bo *robj = gem_to_amdgpu_bo(gobj);
> +	struct amdgpu_bo *aobj = gem_to_amdgpu_bo(gobj);
>  
> -	if (robj) {
> -		amdgpu_hmm_unregister(robj);
> -		amdgpu_bo_unref(&robj);
> +	if (aobj) {
> +		amdgpu_hmm_unregister(aobj);
> +		ttm_bo_put(&aobj->tbo);

So, this relates to my comment in patch number #9 about dropping the TTM
ref count. If TTM only uses the GEM ref count, could we convert this
ttm_bo_put to something like ttm_bo_fini here (also in Xe and any other
drivers with code like this)?

I think that might be cleaner.

Matt

>  	}
>  }
>  
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> index 8d8c39be6129..6c187e310034 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> @@ -853,7 +853,7 @@ struct amdgpu_bo *amdgpu_bo_ref(struct amdgpu_bo *bo)
>  	if (bo == NULL)
>  		return NULL;
>  
> -	ttm_bo_get(&bo->tbo);
> +	drm_gem_object_get(&bo->tbo.base);
>  	return bo;
>  }
>  
> @@ -865,13 +865,10 @@ struct amdgpu_bo *amdgpu_bo_ref(struct amdgpu_bo *bo)
>   */
>  void amdgpu_bo_unref(struct amdgpu_bo **bo)
>  {
> -	struct ttm_buffer_object *tbo;
> -
>  	if ((*bo) == NULL)
>  		return;
>  
> -	tbo = &((*bo)->tbo);
> -	ttm_bo_put(tbo);
> +	drm_gem_object_get(&(*bo)->tbo.base);
>  	*bo = NULL;
>  }
>  
> -- 
> 2.34.1
>
Christian König July 17, 2024, 2:53 p.m. UTC | #2
Am 16.07.24 um 23:53 schrieb Matthew Brost:
> On Tue, Jul 16, 2024 at 02:35:11PM +0200, Christian König wrote:
>> Instead of a TTM reference grab a GEM reference whenever necessary.
>>
>> Signed-off-by: Christian König <christian.koenig@amd.com>
>> ---
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c    | 8 ++++----
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 7 ++-----
>>   2 files changed, 6 insertions(+), 9 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
>> index 67c234bcf89f..6be3d7cd1c51 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
>> @@ -87,11 +87,11 @@ static const struct vm_operations_struct amdgpu_gem_vm_ops = {
>>   
>>   static void amdgpu_gem_object_free(struct drm_gem_object *gobj)
>>   {
>> -	struct amdgpu_bo *robj = gem_to_amdgpu_bo(gobj);
>> +	struct amdgpu_bo *aobj = gem_to_amdgpu_bo(gobj);
>>   
>> -	if (robj) {
>> -		amdgpu_hmm_unregister(robj);
>> -		amdgpu_bo_unref(&robj);
>> +	if (aobj) {
>> +		amdgpu_hmm_unregister(aobj);
>> +		ttm_bo_put(&aobj->tbo);
> So, this relates to my comment in patch number #9 about dropping the TTM
> ref count. If TTM only uses the GEM ref count, could we convert this
> ttm_bo_put to something like ttm_bo_fini here (also in Xe and any other
> drivers with code like this)?

That's exactly what I was planning to do as a follow up.

Regards,
Christian.

>
> I think that might be cleaner.
>
> Matt
>
>>   	}
>>   }
>>   
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
>> index 8d8c39be6129..6c187e310034 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
>> @@ -853,7 +853,7 @@ struct amdgpu_bo *amdgpu_bo_ref(struct amdgpu_bo *bo)
>>   	if (bo == NULL)
>>   		return NULL;
>>   
>> -	ttm_bo_get(&bo->tbo);
>> +	drm_gem_object_get(&bo->tbo.base);
>>   	return bo;
>>   }
>>   
>> @@ -865,13 +865,10 @@ struct amdgpu_bo *amdgpu_bo_ref(struct amdgpu_bo *bo)
>>    */
>>   void amdgpu_bo_unref(struct amdgpu_bo **bo)
>>   {
>> -	struct ttm_buffer_object *tbo;
>> -
>>   	if ((*bo) == NULL)
>>   		return;
>>   
>> -	tbo = &((*bo)->tbo);
>> -	ttm_bo_put(tbo);
>> +	drm_gem_object_get(&(*bo)->tbo.base);
>>   	*bo = NULL;
>>   }
>>   
>> -- 
>> 2.34.1
>>
Matthew Brost July 17, 2024, 6:40 p.m. UTC | #3
On Wed, Jul 17, 2024 at 04:53:16PM +0200, Christian König wrote:
> Am 16.07.24 um 23:53 schrieb Matthew Brost:
> > On Tue, Jul 16, 2024 at 02:35:11PM +0200, Christian König wrote:
> > > Instead of a TTM reference grab a GEM reference whenever necessary.
> > > 
> > > Signed-off-by: Christian König <christian.koenig@amd.com>
> > > ---
> > >   drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c    | 8 ++++----
> > >   drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 7 ++-----
> > >   2 files changed, 6 insertions(+), 9 deletions(-)
> > > 
> > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> > > index 67c234bcf89f..6be3d7cd1c51 100644
> > > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> > > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> > > @@ -87,11 +87,11 @@ static const struct vm_operations_struct amdgpu_gem_vm_ops = {
> > >   static void amdgpu_gem_object_free(struct drm_gem_object *gobj)
> > >   {
> > > -	struct amdgpu_bo *robj = gem_to_amdgpu_bo(gobj);
> > > +	struct amdgpu_bo *aobj = gem_to_amdgpu_bo(gobj);
> > > -	if (robj) {
> > > -		amdgpu_hmm_unregister(robj);
> > > -		amdgpu_bo_unref(&robj);
> > > +	if (aobj) {
> > > +		amdgpu_hmm_unregister(aobj);
> > > +		ttm_bo_put(&aobj->tbo);
> > So, this relates to my comment in patch number #9 about dropping the TTM
> > ref count. If TTM only uses the GEM ref count, could we convert this
> > ttm_bo_put to something like ttm_bo_fini here (also in Xe and any other
> > drivers with code like this)?
> 
> That's exactly what I was planning to do as a follow up.
> 

Cool, glad we are aligned.

Matt

> Regards,
> Christian.
> 
> > 
> > I think that might be cleaner.
> > 
> > Matt
> > 
> > >   	}
> > >   }
> > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> > > index 8d8c39be6129..6c187e310034 100644
> > > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> > > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> > > @@ -853,7 +853,7 @@ struct amdgpu_bo *amdgpu_bo_ref(struct amdgpu_bo *bo)
> > >   	if (bo == NULL)
> > >   		return NULL;
> > > -	ttm_bo_get(&bo->tbo);
> > > +	drm_gem_object_get(&bo->tbo.base);
> > >   	return bo;
> > >   }
> > > @@ -865,13 +865,10 @@ struct amdgpu_bo *amdgpu_bo_ref(struct amdgpu_bo *bo)
> > >    */
> > >   void amdgpu_bo_unref(struct amdgpu_bo **bo)
> > >   {
> > > -	struct ttm_buffer_object *tbo;
> > > -
> > >   	if ((*bo) == NULL)
> > >   		return;
> > > -	tbo = &((*bo)->tbo);
> > > -	ttm_bo_put(tbo);
> > > +	drm_gem_object_get(&(*bo)->tbo.base);
> > >   	*bo = NULL;
> > >   }
> > > -- 
> > > 2.34.1
> > > 
>
diff mbox series

Patch

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
index 67c234bcf89f..6be3d7cd1c51 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
@@ -87,11 +87,11 @@  static const struct vm_operations_struct amdgpu_gem_vm_ops = {
 
 static void amdgpu_gem_object_free(struct drm_gem_object *gobj)
 {
-	struct amdgpu_bo *robj = gem_to_amdgpu_bo(gobj);
+	struct amdgpu_bo *aobj = gem_to_amdgpu_bo(gobj);
 
-	if (robj) {
-		amdgpu_hmm_unregister(robj);
-		amdgpu_bo_unref(&robj);
+	if (aobj) {
+		amdgpu_hmm_unregister(aobj);
+		ttm_bo_put(&aobj->tbo);
 	}
 }
 
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
index 8d8c39be6129..6c187e310034 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
@@ -853,7 +853,7 @@  struct amdgpu_bo *amdgpu_bo_ref(struct amdgpu_bo *bo)
 	if (bo == NULL)
 		return NULL;
 
-	ttm_bo_get(&bo->tbo);
+	drm_gem_object_get(&bo->tbo.base);
 	return bo;
 }
 
@@ -865,13 +865,10 @@  struct amdgpu_bo *amdgpu_bo_ref(struct amdgpu_bo *bo)
  */
 void amdgpu_bo_unref(struct amdgpu_bo **bo)
 {
-	struct ttm_buffer_object *tbo;
-
 	if ((*bo) == NULL)
 		return;
 
-	tbo = &((*bo)->tbo);
-	ttm_bo_put(tbo);
+	drm_gem_object_get(&(*bo)->tbo.base);
 	*bo = NULL;
 }