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 >
