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