]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/amdgpu: unmap userq for evicting user queue
authorPrike Liang <Prike.Liang@amd.com>
Thu, 14 May 2026 09:21:09 +0000 (17:21 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 3 Jun 2026 18:48:49 +0000 (14:48 -0400)
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 userq objects 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 can
save more processing time than preempt.

Signed-off-by: Prike Liang <Prike.Liang@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit d87c9d86727a0bcc95c3009a213a1b27a11b691e)

drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c

index cf192500800f8086b042c4afacfe1303819fcf67..e937099de3e7058c82f5252f2b4a50a2bb6088ed 100644 (file)
@@ -887,7 +887,7 @@ amdgpu_userq_restore_all(struct amdgpu_userq_mgr *uq_mgr)
                        continue;
                }
 
-               r = amdgpu_userq_restore_helper(queue);
+               r = amdgpu_userq_map_helper(queue);
                if (r)
                        ret = r;
 
@@ -1124,7 +1124,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;
        }