Am 27.03.25 um 10:27 schrieb Prike Liang:
> Before locking and traversing the user queue invalidated BO list,
> it requires ensuring the VM done list is available.

No it doesn't. This patch here is just a no-op.

list_for_each_entry() works perfectly fine on empty lists.

Regards,
Christian.

>
> Signed-off-by: Prike Liang <prike.li...@amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_userqueue.c | 20 ++++++++++---------
>  1 file changed, 11 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userqueue.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_userqueue.c
> index ecd49cf15b2a..cb6b89da73c4 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userqueue.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userqueue.c
> @@ -479,15 +479,17 @@ amdgpu_userqueue_validate_bos(struct amdgpu_userq_mgr 
> *uq_mgr)
>               }
>  
>               /* Lock the done list */
> -             list_for_each_entry(bo_va, &vm->done, base.vm_status) {
> -                     bo = bo_va->base.bo;
> -                     if (!bo)
> -                             continue;
> -
> -                     ret = drm_exec_lock_obj(&exec, &bo->tbo.base);
> -                     drm_exec_retry_on_contention(&exec);
> -                     if (unlikely(ret))
> -                             goto unlock_all;
> +             if (!list_empty(&vm->done)) {
> +                     list_for_each_entry(bo_va, &vm->done, base.vm_status) {
> +                             bo = bo_va->base.bo;
> +                             if (!bo)
> +                                     continue;
> +
> +                             ret = drm_exec_lock_obj(&exec, &bo->tbo.base);
> +                             drm_exec_retry_on_contention(&exec);
> +                             if (unlikely(ret))
> +                                     goto unlock_all;
> +                     }
>               }
>       }
>  

Reply via email to