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. Add support for userqueues too.

Fixes: ae05e3f3d02b812c ("drm/amdgpu: move amdgpu_vm_bo_update() call into 
correct location")
Signed-off-by: Sunil Khatri <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
index 4dca1ab48410a..44cf25946a21c 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
@@ -720,6 +720,27 @@ amdgpu_userq_create(struct drm_file *filp, union 
drm_amdgpu_userq *args)
        if (r)
                goto free_fence_drv;
 
+       /* Update the seq64 BO mapping in VM for User Queues */
+       if (fpriv->seq64_va) {
+               struct amdgpu_bo *seq64_bo = fpriv->seq64_va->base.bo;
+
+               r = amdgpu_bo_reserve(seq64_bo, false);
+               if (r) {
+                       amdgpu_bo_unreserve(fpriv->vm.root.bo);
+                       goto free_fence_drv;
+               }
+
+               r = amdgpu_vm_bo_update(adev, fpriv->seq64_va, false);
+               if (r) {
+                       amdgpu_bo_unreserve(seq64_bo);
+                       amdgpu_bo_unreserve(fpriv->vm.root.bo);
+                       goto free_fence_drv;
+               }
+
+               dma_fence_wait(fpriv->seq64_va->last_pt_update, false);
+               amdgpu_bo_unreserve(seq64_bo);
+       }
+
        if (amdgpu_userq_input_va_validate(adev, queue, args->in.queue_va,
                                           args->in.queue_size,
                                           &queue->userq_vas.va.queue_rb) ||
-- 
2.34.1

Reply via email to