On 10/13/26 17:47, Benjamin Cheng wrote:
> This was supposed to loop over the individual evicted list, as the
> kernel and always_valid evicted lists were already handled in
> amdgpu_vm_validate.
> 
> Without this, BOs that were created and evicted before a userq was made
> would never end up in an eviction fence rearm.
> 
> Also add the missing ref to the BO before drm_exec locks and refs it.
> 
> Fixes: 4cdbba5a16aa ("drm/amdgpu: restructure VM state machine v4")
> Signed-off-by: Benjamin Cheng <[email protected]>

Reviewed-by: Christian König <[email protected]>

> ---
> v2:
> - ref the BO before drm_exec locks it
> - updated commit message (s/invalidate/validate/)
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c | 10 ++++++----
>  1 file changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> index e29823ae8672..4dca1ab48410 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> @@ -998,19 +998,21 @@ amdgpu_userq_bo_validate(struct amdgpu_device *adev, 
> struct drm_exec *exec,
>  {
>       struct ttm_operation_ctx ctx = { false, false };
>       struct amdgpu_bo_va *bo_va;
> -     struct amdgpu_bo *bo;
> +     struct amdgpu_bo *bo, *tmp;
>       int ret;
>  
>       spin_lock(&vm->individual_lock);
> -     while (!list_empty(&vm->always_valid.evicted)) {
> -             bo_va = list_first_entry(&vm->always_valid.evicted,
> +     while (!list_empty(&vm->individual.evicted)) {
> +             bo_va = list_first_entry(&vm->individual.evicted,
>                                        struct amdgpu_bo_va,
>                                        base.vm_status);
> +             bo = bo_va->base.bo;
> +             tmp = amdgpu_bo_ref(bo);
>               spin_unlock(&vm->individual_lock);
>  
> -             bo = bo_va->base.bo;
>               ret = drm_exec_prepare_obj(exec, &bo->tbo.base,
>                                          TTM_NUM_MOVE_FENCES + 1);
> +             amdgpu_bo_unref(&tmp);
>               if (unlikely(ret))
>                       return ret;
>  

Reply via email to