All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] drm/amdgpu/userq: remove unnecessary NULL check
@ 2025-04-30  8:05 Dan Carpenter
  2025-04-30  9:28 ` Sharma, Shashank
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ 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 related	[flat|nested] 8+ 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
@ 2025-04-30  9:28 ` Sharma, Shashank
  2025-04-30  9:49   ` Dan Carpenter
  2025-04-30 12:35   ` Christian König
  2025-04-30 12:28 ` Christian König
  2025-04-30 14:20 ` Alex Deucher
  2 siblings, 2 replies; 8+ messages in thread
From: Sharma, Shashank @ 2025-04-30  9:28 UTC (permalink / raw)
  To: Dan Carpenter, Deucher, Alexander
  Cc: Koenig, Christian, David Airlie, Simona Vetter, 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

[-- Attachment #1: Type: text/plain, Size: 1881 bytes --]

[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,

Regards,
Shashank


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


[-- Attachment #2: Type: text/html, Size: 5206 bytes --]

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

* Re: [PATCH] drm/amdgpu/userq: remove unnecessary NULL check
  2025-04-30  9:28 ` Sharma, Shashank
@ 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; 8+ 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@lists.freedesktop.org,
	dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
	kernel-janitors@vger.kernel.org

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] 8+ 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
  2025-04-30  9:28 ` Sharma, Shashank
@ 2025-04-30 12:28 ` Christian König
  2025-04-30 14:20 ` Alex Deucher
  2 siblings, 0 replies; 8+ 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] 8+ messages in thread

* Re: [PATCH] drm/amdgpu/userq: remove unnecessary NULL check
  2025-04-30  9:28 ` Sharma, Shashank
  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; 8+ 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@lists.freedesktop.org,
	dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
	kernel-janitors@vger.kernel.org

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] 8+ 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; 8+ 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@lists.freedesktop.org,
	dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
	kernel-janitors@vger.kernel.org


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] 8+ 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; 8+ 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@lists.freedesktop.org,
	dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
	kernel-janitors@vger.kernel.org


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] 8+ 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
  2025-04-30  9:28 ` Sharma, Shashank
  2025-04-30 12:28 ` Christian König
@ 2025-04-30 14:20 ` Alex Deucher
  2 siblings, 0 replies; 8+ 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] 8+ messages in thread

end of thread, other threads:[~2025-05-01 13:05 UTC | newest]

Thread overview: 8+ 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
2025-04-30  9:28 ` Sharma, Shashank
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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.