On Thu, Oct 15, 2026 at 11:07 PM Sunil Khatri <[email protected]> wrote:
>
> The seq64 sync BO's PTE update only ran from the legacy CS path, so
> userqueue-only clients never got it mapped and their fence_drv could
> never signal completion. Commit it in
> amdgpu_userq_vm_validate_and_restore_queue() too, the same way prt_va
> is already handled there, so it covers both queue creation and
> post-eviction restore.
>
> Fixes: ae05e3f3d02b812c ("drm/amdgpu: move amdgpu_vm_bo_update() call into 
> correct location")
> Signed-off-by: Sunil Khatri <[email protected]>

Reviewed-by: Alex Deucher <[email protected]>

> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c | 18 ++++++++++++++++++
>  1 file changed, 18 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> index 4dca1ab48410a..0c92534131b9f 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> @@ -1083,6 +1083,14 @@ amdgpu_userq_vm_validate_and_restore_queue(struct 
> amdgpu_userq_mgr *uq_mgr)
>                 if (unlikely(ret))
>                         goto unlock_all;
>
> +               if (fpriv->seq64_va) {
> +                       ret = drm_exec_prepare_obj(&exec, 
> &fpriv->seq64_va->base.bo->tbo.base,
> +                                                  TTM_NUM_MOVE_FENCES + 1);
> +                       drm_exec_retry_on_contention(&exec);
> +                       if (unlikely(ret))
> +                               goto unlock_all;
> +               }
> +
>                 /*
>                  * WPTR BOs are VM-mapped, but each BO has its own reservation
>                  * object. Lock them into this drm_exec ww context so the 
> later
> @@ -1140,6 +1148,12 @@ amdgpu_userq_vm_validate_and_restore_queue(struct 
> amdgpu_userq_mgr *uq_mgr)
>         if (ret)
>                 goto unlock_all;
>
> +       if (fpriv->seq64_va) {
> +               ret = amdgpu_vm_bo_update(adev, fpriv->seq64_va, false);
> +               if (ret)
> +                       goto unlock_all;
> +       }
> +
>         key = 0;
>         /* Validate User Ptr BOs */
>         list_for_each_entry(bo_va, &vm->always_valid.idle, base.vm_status) {
> @@ -1203,6 +1217,10 @@ amdgpu_userq_vm_validate_and_restore_queue(struct 
> amdgpu_userq_mgr *uq_mgr)
>          * it explicitly (as the CS path syncs it) before restarting queues.
>          */
>         dma_fence_wait(fpriv->prt_va->last_pt_update, false);
> +
> +       if (fpriv->seq64_va)
> +               dma_fence_wait(fpriv->seq64_va->last_pt_update, false);
> +
>         dma_fence_wait(vm->last_update, false);
>
>         xa_for_each(&uq_mgr->userq_xa, tmp_key, queue) {
> --
> 2.34.1
>

Reply via email to