Skip to content

Commit 846de13

Browse files
committed
drm/amdgpu/userq: Optimize S0ix handling
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>
1 parent f05c03f commit 846de13

1 file changed

Lines changed: 8 additions & 2 deletions

File tree

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -977,7 +977,10 @@ int amdgpu_userq_suspend(struct amdgpu_device *adev)
977977
cancel_delayed_work_sync(&uqm->resume_work);
978978
mutex_lock(&uqm->userq_mutex);
979979
idr_for_each_entry(&uqm->userq_idr, queue, queue_id) {
980-
r = amdgpu_userq_unmap_helper(uqm, queue);
980+
if (adev->in_s0ix)
981+
r = amdgpu_userq_preempt_helper(uqm, queue);
982+
else
983+
r = amdgpu_userq_unmap_helper(uqm, queue);
981984
if (r)
982985
ret = r;
983986
}
@@ -1002,7 +1005,10 @@ int amdgpu_userq_resume(struct amdgpu_device *adev)
10021005
list_for_each_entry_safe(uqm, tmp, &adev->userq_mgr_list, list) {
10031006
mutex_lock(&uqm->userq_mutex);
10041007
idr_for_each_entry(&uqm->userq_idr, queue, queue_id) {
1005-
r = amdgpu_userq_map_helper(uqm, queue);
1008+
if (adev->in_s0ix)
1009+
r = amdgpu_userq_restore_helper(uqm, queue);
1010+
else
1011+
r = amdgpu_userq_map_helper(uqm, queue);
10061012
if (r)
10071013
ret = r;
10081014
}

0 commit comments

Comments
 (0)