On 15-05-2026 08:00 am, Liang, Prike wrote:
As per my understanding, we arent done for the queue and all the resources of the should remain intact. A queue ideally should only need " mapping/add new queue" when the queue is created and once that is done only the light process or suspend/resume should be good enough. We dont want to tear it down or rebuild again for anything transient.AMD General Will resent a new version for updating the commit log. Regards, Prike-----Original Message----- From: Liang, Prike <[email protected]> Sent: Thursday, May 14, 2026 8:43 PM To: [email protected] Cc: Deucher, Alexander <[email protected]>; Koenig, Christian <[email protected]>; Liang, Prike <[email protected]> Subject: [PATCH 2/2] drm/amdgpu: unmap userq for evicting user queue If the driver only preempts queues, there can still be inflight waves, pending dispatch state, or resume/redispatch possibility tied to the same queue. Then the VM/TTM side may proceed to move/unmap queue related BOs during evicting the queue while shader TCP clients still need to access them. So for eviction, unmap is safer because it makes the queue nonrunnable before memory backing is invalidated. Meanwhile, for a idle queue it's more sutiable for unmapping it rather preempt and unmapping also safe more processing time than preempt. Signed-off-by: Prike Liang <[email protected]> --- drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c index 2e3edb6dd506..a63dfdfa4195 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c @@ -1048,7 +1048,7 @@ amdgpu_userq_restore_all(struct amdgpu_userq_mgr *uq_mgr) continue; } - r = amdgpu_userq_restore_helper(queue); + r = amdgpu_userq_map_helper(queue);
Restore/evict in most of the cases is a transient stage and only a tear down should be unmapping it or during a GPU reset which reset all the hw states. So the way it is seems logical to me but i leave that to Christian to confirm.
Regards Sunil Khatri
if (r) ret = r; @@ -1285,7 +1285,7 @@ amdgpu_userq_evict_all(struct amdgpu_userq_mgr *uq_mgr) /* Try to unmap all the queues in this process ctx */ xa_for_each(&uq_mgr->userq_xa, queue_id, queue) { - r = amdgpu_userq_preempt_helper(queue); + r = amdgpu_userq_unmap_helper(queue); if (r) ret = r; } -- 2.34.1
