mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH] drm/amdgpu/userq: remove unnecessary NULL check
@ 2025-04-30  8:05 Dan Carpenter
       [not found] ` <MW4PR12MB566769E097E394ED607DBD9CF2832@MW4PR12MB5667.namprd12.prod.outlook.com>
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Dan Carpenter @ 2025-04-30  8:05 UTC (permalink / raw)
  To: Alex Deucher
  Cc: Christian König, David Airlie, Simona Vetter,
	Shashank Sharma, Sunil Khatri, Arvind Yadav,
	Arunpravin Paneer Selvam, amd-gfx, dri-devel, linux-kernel,
	kernel-janitors

The "ticket" pointer points to in the middle of the &exec struct so it
can't be NULL.  Remove the check.

Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
index b0e8098a3988..7505d920fb3d 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
@@ -631,7 +631,7 @@ amdgpu_userq_validate_bos(struct amdgpu_userq_mgr *uq_mgr)
 			clear = false;
 			unlock = true;
 		/* The caller is already holding the reservation lock */
-		} else if (ticket && dma_resv_locking_ctx(resv) == ticket) {
+		} else if (dma_resv_locking_ctx(resv) == ticket) {
 			clear = false;
 			unlock = false;
 		/* Somebody else is using the BO right now */
-- 
2.47.2


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] drm/amdgpu/userq: remove unnecessary NULL check
       [not found] ` <MW4PR12MB566769E097E394ED607DBD9CF2832@MW4PR12MB5667.namprd12.prod.outlook.com>
@ 2025-04-30  9:49   ` Dan Carpenter
  2025-04-30 12:50     ` Sharma, Shashank
  2025-04-30 12:35   ` Christian König
  1 sibling, 1 reply; 7+ messages in thread
From: Dan Carpenter @ 2025-04-30  9:49 UTC (permalink / raw)
  To: Sharma, Shashank
  Cc: Deucher, Alexander, Koenig, Christian, David Airlie,
	Simona Vetter, Khatri, Sunil, Yadav, Arvind, Paneer Selvam,
	Arunpravin, amd-gfx, dri-devel, linux-kernel, kernel-janitors

On Wed, Apr 30, 2025 at 09:28:59AM +0000, Sharma, Shashank wrote:
> [AMD Official Use Only - AMD Internal Distribution Only]
> 
> Hello Dan,
> 
> ________________________________
> From: Dan Carpenter
> Sent: Wednesday, April 30, 2025 10:05 AM
> To: Deucher, Alexander
> Cc: Koenig, Christian; David Airlie; Simona Vetter; Sharma, Shashank; Khatri, Sunil; Yadav, Arvind; Paneer Selvam, Arunpravin; amd-gfx@lists.freedesktop.org; dri-devel@lists.freedesktop.org; linux-kernel@vger.kernel.org; kernel-janitors@vger.kernel.org
> Subject: [PATCH] drm/amdgpu/userq: remove unnecessary NULL check
> 
> The "ticket" pointer points to in the middle of the &exec struct so it
> can't be NULL.  Remove the check.
> 
> Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> index b0e8098a3988..7505d920fb3d 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> @@ -631,7 +631,7 @@ amdgpu_userq_validate_bos(struct amdgpu_userq_mgr *uq_mgr)
>                          clear = false;
>                          unlock = true;
>                  /* The caller is already holding the reservation lock */
> -               } else if (ticket && dma_resv_locking_ctx(resv) == ticket) {
> +               } else if (dma_resv_locking_ctx(resv) == ticket) {
> 
> Its a Nack for me, There are a few situations (particularly during the
> first launch of the desktop, and also when eviction fence and new queue
> creation are working in parallel) where this ticket can be NULL, we
> observed it during the stress validation and hence added this check,
> 

It shouldn't be NULL.  It sounds like you are experiencing stack
corruption and this is just a bandaid.

drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
   566  static int
   567  amdgpu_userq_validate_bos(struct amdgpu_userq_mgr *uq_mgr)
   568  {
   569          struct amdgpu_fpriv *fpriv = uq_mgr_to_fpriv(uq_mgr);
   570          struct amdgpu_vm *vm = &fpriv->vm;
   571          struct amdgpu_device *adev = uq_mgr->adev;
   572          struct amdgpu_bo_va *bo_va;
   573          struct ww_acquire_ctx *ticket;
   574          struct drm_exec exec;
                ^^^^^^^^^^^^^^^^^^^^^
The "exec" struct is declared on the stack.

   575          struct amdgpu_bo *bo;
   576          struct dma_resv *resv;
   577          bool clear, unlock;
   578          int ret = 0;
   579  
   580          drm_exec_init(&exec, DRM_EXEC_IGNORE_DUPLICATES, 0);
   581          drm_exec_until_all_locked(&exec) {
   582                  ret = amdgpu_vm_lock_pd(vm, &exec, 2);
   583                  drm_exec_retry_on_contention(&exec);
   584                  if (unlikely(ret)) {
   585                          DRM_ERROR("Failed to lock PD\n");
   586                          goto unlock_all;
   587                  }
   588  
   589                  /* Lock the done list */
   590                  list_for_each_entry(bo_va, &vm->done, base.vm_status) {
   591                          bo = bo_va->base.bo;
   592                          if (!bo)
   593                                  continue;
   594  
   595                          ret = drm_exec_lock_obj(&exec, &bo->tbo.base);
   596                          drm_exec_retry_on_contention(&exec);
   597                          if (unlikely(ret))
   598                                  goto unlock_all;
   599                  }
   600          }
   601  
   602          spin_lock(&vm->status_lock);
   603          while (!list_empty(&vm->moved)) {
   604                  bo_va = list_first_entry(&vm->moved, struct amdgpu_bo_va,
   605                                           base.vm_status);
   606                  spin_unlock(&vm->status_lock);
   607  
   608                  /* Per VM BOs never need to bo cleared in the page tables */
   609                  ret = amdgpu_vm_bo_update(adev, bo_va, false);
   610                  if (ret)
   611                          goto unlock_all;
   612                  spin_lock(&vm->status_lock);
   613          }
   614  
   615          ticket = &exec.ticket;
                ^^^^^^^^^^^^^^^^^^^^^
ticket is only set here.  We know that &exec is non-NULL because it's
declared on the stack.  ticket is 4 bytes into the middle of a non-NULL
struct.  It is impossible for ticket to be NULL here.

   616          while (!list_empty(&vm->invalidated)) {
   617                  bo_va = list_first_entry(&vm->invalidated, struct amdgpu_bo_va,
   618                                           base.vm_status);
   619                  resv = bo_va->base.bo->tbo.base.resv;
   620                  spin_unlock(&vm->status_lock);
   621  
   622                  bo = bo_va->base.bo;
   623                  ret = amdgpu_userq_validate_vm_bo(NULL, bo);
   624                  if (ret) {
   625                          DRM_ERROR("Failed to validate BO\n");
   626                          goto unlock_all;
   627                  }
   628  
   629                  /* Try to reserve the BO to avoid clearing its ptes */
   630                  if (!adev->debug_vm && dma_resv_trylock(resv)) {
   631                          clear = false;
   632                          unlock = true;
   633                  /* The caller is already holding the reservation lock */
   634                  } else if (ticket && dma_resv_locking_ctx(resv) == ticket) {

I've included the whole rest of the function so that we can see it is not
set a second time.

regards,
dan carpenter

   635                          clear = false;
   636                          unlock = false;
   637                  /* Somebody else is using the BO right now */
   638                  } else {
   639                          clear = true;
   640                          unlock = false;
   641                  }
   642  
   643                  ret = amdgpu_vm_bo_update(adev, bo_va, clear);
   644  
   645                  if (unlock)
   646                          dma_resv_unlock(resv);
   647                  if (ret)
   648                          goto unlock_all;
   649  
   650                  spin_lock(&vm->status_lock);
   651          }
   652          spin_unlock(&vm->status_lock);
   653  
   654          ret = amdgpu_eviction_fence_replace_fence(&fpriv->evf_mgr, &exec);
   655          if (ret)
   656                  DRM_ERROR("Failed to replace eviction fence\n");
   657  
   658  unlock_all:
   659          drm_exec_fini(&exec);
   660          return ret;
   661  }



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] drm/amdgpu/userq: remove unnecessary NULL check
  2025-04-30  8:05 [PATCH] drm/amdgpu/userq: remove unnecessary NULL check Dan Carpenter
       [not found] ` <MW4PR12MB566769E097E394ED607DBD9CF2832@MW4PR12MB5667.namprd12.prod.outlook.com>
@ 2025-04-30 12:28 ` Christian König
  2025-04-30 14:20 ` Alex Deucher
  2 siblings, 0 replies; 7+ messages in thread
From: Christian König @ 2025-04-30 12:28 UTC (permalink / raw)
  To: Dan Carpenter, Alex Deucher
  Cc: David Airlie, Simona Vetter, Shashank Sharma, Sunil Khatri,
	Arvind Yadav, Arunpravin Paneer Selvam, amd-gfx, dri-devel,
	linux-kernel, kernel-janitors

On 4/30/25 10:05, Dan Carpenter wrote:
> The "ticket" pointer points to in the middle of the &exec struct so it
> can't be NULL.  Remove the check.
> 
> Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>


Reviewed-by: Christian König <christian.koenig@amd.com>

> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> index b0e8098a3988..7505d920fb3d 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> @@ -631,7 +631,7 @@ amdgpu_userq_validate_bos(struct amdgpu_userq_mgr *uq_mgr)
>  			clear = false;
>  			unlock = true;
>  		/* The caller is already holding the reservation lock */
> -		} else if (ticket && dma_resv_locking_ctx(resv) == ticket) {
> +		} else if (dma_resv_locking_ctx(resv) == ticket) {
>  			clear = false;
>  			unlock = false;
>  		/* Somebody else is using the BO right now */


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] drm/amdgpu/userq: remove unnecessary NULL check
       [not found] ` <MW4PR12MB566769E097E394ED607DBD9CF2832@MW4PR12MB5667.namprd12.prod.outlook.com>
  2025-04-30  9:49   ` Dan Carpenter
@ 2025-04-30 12:35   ` Christian König
  2025-04-30 12:52     ` Sharma, Shashank
  1 sibling, 1 reply; 7+ messages in thread
From: Christian König @ 2025-04-30 12:35 UTC (permalink / raw)
  To: Sharma, Shashank, Dan Carpenter, Deucher, Alexander
  Cc: David Airlie, Simona Vetter, Khatri, Sunil, Yadav, Arvind,
	Paneer Selvam, Arunpravin, amd-gfx, dri-devel, linux-kernel,
	kernel-janitors

On 4/30/25 11:28, Sharma, Shashank wrote:
> [AMD Official Use Only - AMD Internal Distribution Only]
> 
> 
> Hello Dan,
> 
> --------------------------------------------------------------------------------
> *From:* Dan Carpenter
> *Sent:* Wednesday, April 30, 2025 10:05 AM
> *To:* Deucher, Alexander
> *Cc:* Koenig, Christian; David Airlie; Simona Vetter; Sharma, Shashank; Khatri, 
> Sunil; Yadav, Arvind; Paneer Selvam, Arunpravin; amd-gfx@lists.freedesktop.org; 
> dri-devel@lists.freedesktop.org; linux-kernel@vger.kernel.org; kernel- 
> janitors@vger.kernel.org
> *Subject:* [PATCH] drm/amdgpu/userq: remove unnecessary NULL check
> 
> The "ticket" pointer points to in the middle of the &exec struct so it
> can't be NULL.  Remove the check.
> 
> Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c b/drivers/gpu/drm/amd/ 
> amdgpu/amdgpu_userq.c
> index b0e8098a3988..7505d920fb3d 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> @@ -631,7 +631,7 @@ amdgpu_userq_validate_bos(struct amdgpu_userq_mgr *uq_mgr)
>                           clear = false;
>                           unlock = true;
>                   /* The caller is already holding the reservation lock */
> -               } else if (ticket && dma_resv_locking_ctx(resv) == ticket) {
> +               } else if (dma_resv_locking_ctx(resv) == ticket) {
> 
> Its a Nack for me, There are a few situations (particularly during the first 
> launch of the desktop, and also when eviction fence and new queue creation are 
> working in parallel) where this ticket can be NULL, we observed it during the 
> stress validation and hence added this check,

What that maybe before the code was moved around?

As far as I can see the ticket can't be NULL any more.

Regards,
Christian.


> 
> Regards,
> Shashank
> 
> 
>                           clear = false;
>                           unlock = false;
>                   /* Somebody else is using the BO right now */
> --
> 2.47.2
> 


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] drm/amdgpu/userq: remove unnecessary NULL check
  2025-04-30  9:49   ` Dan Carpenter
@ 2025-04-30 12:50     ` Sharma, Shashank
  0 siblings, 0 replies; 7+ messages in thread
From: Sharma, Shashank @ 2025-04-30 12:50 UTC (permalink / raw)
  To: Dan Carpenter
  Cc: Deucher, Alexander, Koenig, Christian, David Airlie,
	Simona Vetter, Khatri, Sunil, Yadav, Arvind, Paneer Selvam,
	Arunpravin, amd-gfx, dri-devel, linux-kernel, kernel-janitors


On 30/04/2025 11:49, Dan Carpenter wrote:
> On Wed, Apr 30, 2025 at 09:28:59AM +0000, Sharma, Shashank wrote:
>> [AMD Official Use Only - AMD Internal Distribution Only]
>>
>> Hello Dan,
>>
>> ________________________________
>> From: Dan Carpenter
>> Sent: Wednesday, April 30, 2025 10:05 AM
>> To: Deucher, Alexander
>> Cc: Koenig, Christian; David Airlie; Simona Vetter; Sharma, Shashank; Khatri, Sunil; Yadav, Arvind; Paneer Selvam, Arunpravin; amd-gfx@lists.freedesktop.org; dri-devel@lists.freedesktop.org; linux-kernel@vger.kernel.org; kernel-janitors@vger.kernel.org
>> Subject: [PATCH] drm/amdgpu/userq: remove unnecessary NULL check
>>
>> The "ticket" pointer points to in the middle of the &exec struct so it
>> can't be NULL.  Remove the check.
>>
>> Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
>> ---
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c | 2 +-
>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
>> index b0e8098a3988..7505d920fb3d 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
>> @@ -631,7 +631,7 @@ amdgpu_userq_validate_bos(struct amdgpu_userq_mgr *uq_mgr)
>>                           clear = false;
>>                           unlock = true;
>>                   /* The caller is already holding the reservation lock */
>> -               } else if (ticket && dma_resv_locking_ctx(resv) == ticket) {
>> +               } else if (dma_resv_locking_ctx(resv) == ticket) {
>>
>> Its a Nack for me, There are a few situations (particularly during the
>> first launch of the desktop, and also when eviction fence and new queue
>> creation are working in parallel) where this ticket can be NULL, we
>> observed it during the stress validation and hence added this check,
>>
> It shouldn't be NULL.  It sounds like you are experiencing stack
> corruption and this is just a bandaid.
>
> drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
>     566  static int
>     567  amdgpu_userq_validate_bos(struct amdgpu_userq_mgr *uq_mgr)
>     568  {
>     569          struct amdgpu_fpriv *fpriv = uq_mgr_to_fpriv(uq_mgr);
>     570          struct amdgpu_vm *vm = &fpriv->vm;
>     571          struct amdgpu_device *adev = uq_mgr->adev;
>     572          struct amdgpu_bo_va *bo_va;
>     573          struct ww_acquire_ctx *ticket;
>     574          struct drm_exec exec;
>                  ^^^^^^^^^^^^^^^^^^^^^
> The "exec" struct is declared on the stack.
>
>     575          struct amdgpu_bo *bo;
>     576          struct dma_resv *resv;
>     577          bool clear, unlock;
>     578          int ret = 0;
>     579
>     580          drm_exec_init(&exec, DRM_EXEC_IGNORE_DUPLICATES, 0);
>     581          drm_exec_until_all_locked(&exec) {
>     582                  ret = amdgpu_vm_lock_pd(vm, &exec, 2);
>     583                  drm_exec_retry_on_contention(&exec);
>     584                  if (unlikely(ret)) {
>     585                          DRM_ERROR("Failed to lock PD\n");
>     586                          goto unlock_all;
>     587                  }
>     588
>     589                  /* Lock the done list */
>     590                  list_for_each_entry(bo_va, &vm->done, base.vm_status) {
>     591                          bo = bo_va->base.bo;
>     592                          if (!bo)
>     593                                  continue;
>     594
>     595                          ret = drm_exec_lock_obj(&exec, &bo->tbo.base);
>     596                          drm_exec_retry_on_contention(&exec);
>     597                          if (unlikely(ret))
>     598                                  goto unlock_all;
>     599                  }
>     600          }
>     601
>     602          spin_lock(&vm->status_lock);
>     603          while (!list_empty(&vm->moved)) {
>     604                  bo_va = list_first_entry(&vm->moved, struct amdgpu_bo_va,
>     605                                           base.vm_status);
>     606                  spin_unlock(&vm->status_lock);
>     607
>     608                  /* Per VM BOs never need to bo cleared in the page tables */
>     609                  ret = amdgpu_vm_bo_update(adev, bo_va, false);
>     610                  if (ret)
>     611                          goto unlock_all;
>     612                  spin_lock(&vm->status_lock);
>     613          }
>     614
>     615          ticket = &exec.ticket;
>                  ^^^^^^^^^^^^^^^^^^^^^
> ticket is only set here.  We know that &exec is non-NULL because it's
> declared on the stack.  ticket is 4 bytes into the middle of a non-NULL
> struct.  It is impossible for ticket to be NULL here.

Yep, you are right. I just did a code review, and probably we added that 
NULL check before we had the right locks in place, and there was a race 
between eviction thread and the UQ create thread, causing corruption. 
Please feel free to use Acked-by: Shashank Sharma <shashank.sharma@amd.com>

- Shashank

>
>     616          while (!list_empty(&vm->invalidated)) {
>     617                  bo_va = list_first_entry(&vm->invalidated, struct amdgpu_bo_va,
>     618                                           base.vm_status);
>     619                  resv = bo_va->base.bo->tbo.base.resv;
>     620                  spin_unlock(&vm->status_lock);
>     621
>     622                  bo = bo_va->base.bo;
>     623                  ret = amdgpu_userq_validate_vm_bo(NULL, bo);
>     624                  if (ret) {
>     625                          DRM_ERROR("Failed to validate BO\n");
>     626                          goto unlock_all;
>     627                  }
>     628
>     629                  /* Try to reserve the BO to avoid clearing its ptes */
>     630                  if (!adev->debug_vm && dma_resv_trylock(resv)) {
>     631                          clear = false;
>     632                          unlock = true;
>     633                  /* The caller is already holding the reservation lock */
>     634                  } else if (ticket && dma_resv_locking_ctx(resv) == ticket) {
>
> I've included the whole rest of the function so that we can see it is not
> set a second time.
>
> regards,
> dan carpenter
>
>     635                          clear = false;
>     636                          unlock = false;
>     637                  /* Somebody else is using the BO right now */
>     638                  } else {
>     639                          clear = true;
>     640                          unlock = false;
>     641                  }
>     642
>     643                  ret = amdgpu_vm_bo_update(adev, bo_va, clear);
>     644
>     645                  if (unlock)
>     646                          dma_resv_unlock(resv);
>     647                  if (ret)
>     648                          goto unlock_all;
>     649
>     650                  spin_lock(&vm->status_lock);
>     651          }
>     652          spin_unlock(&vm->status_lock);
>     653
>     654          ret = amdgpu_eviction_fence_replace_fence(&fpriv->evf_mgr, &exec);
>     655          if (ret)
>     656                  DRM_ERROR("Failed to replace eviction fence\n");
>     657
>     658  unlock_all:
>     659          drm_exec_fini(&exec);
>     660          return ret;
>     661  }
>
>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] drm/amdgpu/userq: remove unnecessary NULL check
  2025-04-30 12:35   ` Christian König
@ 2025-04-30 12:52     ` Sharma, Shashank
  0 siblings, 0 replies; 7+ messages in thread
From: Sharma, Shashank @ 2025-04-30 12:52 UTC (permalink / raw)
  To: Christian König, Dan Carpenter, Deucher, Alexander
  Cc: David Airlie, Simona Vetter, Khatri, Sunil, Yadav, Arvind,
	Paneer Selvam, Arunpravin, amd-gfx, dri-devel, linux-kernel,
	kernel-janitors


On 30/04/2025 14:35, Christian König wrote:
> On 4/30/25 11:28, Sharma, Shashank wrote:
>> [AMD Official Use Only - AMD Internal Distribution Only]
>>
>>
>> Hello Dan,
>>
>> --------------------------------------------------------------------------------
>> *From:* Dan Carpenter
>> *Sent:* Wednesday, April 30, 2025 10:05 AM
>> *To:* Deucher, Alexander
>> *Cc:* Koenig, Christian; David Airlie; Simona Vetter; Sharma, Shashank; Khatri,
>> Sunil; Yadav, Arvind; Paneer Selvam, Arunpravin; amd-gfx@lists.freedesktop.org;
>> dri-devel@lists.freedesktop.org; linux-kernel@vger.kernel.org; kernel-
>> janitors@vger.kernel.org
>> *Subject:* [PATCH] drm/amdgpu/userq: remove unnecessary NULL check
>>
>> The "ticket" pointer points to in the middle of the &exec struct so it
>> can't be NULL.  Remove the check.
>>
>> Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
>> ---
>>    drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c | 2 +-
>>    1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c b/drivers/gpu/drm/amd/
>> amdgpu/amdgpu_userq.c
>> index b0e8098a3988..7505d920fb3d 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
>> @@ -631,7 +631,7 @@ amdgpu_userq_validate_bos(struct amdgpu_userq_mgr *uq_mgr)
>>                            clear = false;
>>                            unlock = true;
>>                    /* The caller is already holding the reservation lock */
>> -               } else if (ticket && dma_resv_locking_ctx(resv) == ticket) {
>> +               } else if (dma_resv_locking_ctx(resv) == ticket) {
>>
>> Its a Nack for me, There are a few situations (particularly during the first
>> launch of the desktop, and also when eviction fence and new queue creation are
>> working in parallel) where this ticket can be NULL, we observed it during the
>> stress validation and hence added this check,
> What that maybe before the code was moved around?
>
> As far as I can see the ticket can't be NULL any more.

Yes, that was before we sync'ed the locks between the two threads and 
moved the code. The NULL check was probably a leftover from the code 
carried forward.

- Shashank

> Regards,
> Christian.
>
>
>> Regards,
>> Shashank
>>
>>
>>                            clear = false;
>>                            unlock = false;
>>                    /* Somebody else is using the BO right now */
>> --
>> 2.47.2
>>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] drm/amdgpu/userq: remove unnecessary NULL check
  2025-04-30  8:05 [PATCH] drm/amdgpu/userq: remove unnecessary NULL check Dan Carpenter
       [not found] ` <MW4PR12MB566769E097E394ED607DBD9CF2832@MW4PR12MB5667.namprd12.prod.outlook.com>
  2025-04-30 12:28 ` Christian König
@ 2025-04-30 14:20 ` Alex Deucher
  2 siblings, 0 replies; 7+ messages in thread
From: Alex Deucher @ 2025-04-30 14:20 UTC (permalink / raw)
  To: Dan Carpenter
  Cc: Alex Deucher, Christian König, David Airlie, Simona Vetter,
	Shashank Sharma, Sunil Khatri, Arvind Yadav,
	Arunpravin Paneer Selvam, amd-gfx, dri-devel, linux-kernel,
	kernel-janitors

On Wed, Apr 30, 2025 at 4:13 AM Dan Carpenter <dan.carpenter@linaro.org> wrote:
>
> The "ticket" pointer points to in the middle of the &exec struct so it
> can't be NULL.  Remove the check.
>
> Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>

Applied.  Thanks!

> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> index b0e8098a3988..7505d920fb3d 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> @@ -631,7 +631,7 @@ amdgpu_userq_validate_bos(struct amdgpu_userq_mgr *uq_mgr)
>                         clear = false;
>                         unlock = true;
>                 /* The caller is already holding the reservation lock */
> -               } else if (ticket && dma_resv_locking_ctx(resv) == ticket) {
> +               } else if (dma_resv_locking_ctx(resv) == ticket) {
>                         clear = false;
>                         unlock = false;
>                 /* Somebody else is using the BO right now */
> --
> 2.47.2
>

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2025-04-30 14:21 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-04-30  8:05 [PATCH] drm/amdgpu/userq: remove unnecessary NULL check Dan Carpenter
     [not found] ` <MW4PR12MB566769E097E394ED607DBD9CF2832@MW4PR12MB5667.namprd12.prod.outlook.com>
2025-04-30  9:49   ` Dan Carpenter
2025-04-30 12:50     ` Sharma, Shashank
2025-04-30 12:35   ` Christian König
2025-04-30 12:52     ` Sharma, Shashank
2025-04-30 12:28 ` Christian König
2025-04-30 14:20 ` Alex Deucher

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®