]> www.infradead.org Git - users/hch/misc.git/commitdiff
drm/amdgpu/userq: Optimize S0ix handling
authorAlex Deucher <alexander.deucher@amd.com>
Wed, 17 Sep 2025 16:42:10 +0000 (12:42 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 18 Sep 2025 13:43:23 +0000 (09:43 -0400)
In S0i3, GFX state is retained, so it's preferrable to
preempt queues rather than unmapping them as the overhead
is lower.

Reviewed-by: Mario Limonciello (AMD) <superm1@kernel.org>
Tested-by: David Perry <david.perry@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c

index 3dfe7f5f154b39d4719ee10bbf311beecf773b01..22a5827b07722df76d1077ba8910745db23af993 100644 (file)
@@ -977,7 +977,10 @@ int amdgpu_userq_suspend(struct amdgpu_device *adev)
                cancel_delayed_work_sync(&uqm->resume_work);
                mutex_lock(&uqm->userq_mutex);
                idr_for_each_entry(&uqm->userq_idr, queue, queue_id) {
-                       r = amdgpu_userq_unmap_helper(uqm, queue);
+                       if (adev->in_s0ix)
+                               r = amdgpu_userq_preempt_helper(uqm, queue);
+                       else
+                               r = amdgpu_userq_unmap_helper(uqm, queue);
                        if (r)
                                ret = r;
                }
@@ -1002,7 +1005,10 @@ int amdgpu_userq_resume(struct amdgpu_device *adev)
        list_for_each_entry_safe(uqm, tmp, &adev->userq_mgr_list, list) {
                mutex_lock(&uqm->userq_mutex);
                idr_for_each_entry(&uqm->userq_idr, queue, queue_id) {
-                       r = amdgpu_userq_map_helper(uqm, queue);
+                       if (adev->in_s0ix)
+                               r = amdgpu_userq_restore_helper(uqm, queue);
+                       else
+                               r = amdgpu_userq_map_helper(uqm, queue);
                        if (r)
                                ret = r;
                }