FAILED: patch "[PATCH] drm/amdgpu: finish GPU recovery callbacks before restarting schedulers" failed to apply to 6.6-stable tree
Subsystems (3)
Sasha Levin
maintainerThe patch below does not apply to the 6.6-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.6.y
git checkout FETCH_HEAD
git cherry-pick -x 733389cb31e2c55e355410759fdc68afe74a4582
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '[email protected]' --subject-prefix 'PATCH 6.6.y' 'HEAD^..'
Thanks,
Sasha
------------------ original commit in Linus's tree ------------------
From 733389cb31e2c55e355410759fdc68afe74a4582 Mon Sep 17 00:00:00 2001
From: Prike Liang <[email protected]>
Date: Thu, 20 Aug 2026 15:27:56 +0800
Subject: [PATCH] drm/amdgpu: finish GPU recovery callbacks before restarting
schedulers
Run GPU post-reset callbacks, including KFD and display-audio resume, before restarting DRM scheduler workqueues. IP hardware initialization already happens inside ASIC recovery; this change orders the remaining callbacks before new scheduler submissions. Preserve the emergency-stop and guity job completition path's callbacks without starting schedulers,
--- drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-)
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +7 -6
@@ -5859,8 +5859,10 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev,amdgpu_device_halt_activities (adev, job, reset_context, &device_list, hive, need_emergency_restart); -if (need_emergency_restart) - goto skip_sched_resume; +if (need_emergency_restart) { +amdgpu_device_gpu_resume (adev, &device_list, need_emergency_restart); + goto reset_unlock; + }/* * Must check guilty signal here since after this point all old * HW fences are force signaled.
@@ -5870,18 +5872,17 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev,if (job && (dma_fence_get_status (&job->hw_fence->base) >0 )) { job_signaled = true;dev_info (adev->dev,"Guilty job already signaled, skipping HW reset" ); - goto skip_hw_reset; + goto post_resume; } r =amdgpu_device_asic_reset (adev, &device_list, reset_context);if (r) goto reset_unlock; -skip_hw_reset: +post_resume: +amdgpu_device_gpu_resume (adev, &device_list, need_emergency_restart); r =amdgpu_device_sched_resume (&device_list, reset_context, job_signaled);if (r) goto reset_unlock; -skip_sched_resume: -amdgpu_device_gpu_resume (adev, &device_list, need_emergency_restart); reset_unlock:amdgpu_device_recovery_put_reset_lock (adev, &device_list);amdgpu_ras_post_reset (adev, &device_list);
Signature · 1 line
2.53.0
Sasha Levin
maintainerPATCH 1/1 drm/amdgpu: finish GPU recovery callbacks before restarting schedulers
From: Prike Liang <[email protected]>
[ Upstream commit 733389cb31e2c55e355410759fdc68afe74a4582 ]
Run GPU post-reset callbacks, including KFD and display-audio resume, before restarting DRM scheduler workqueues. IP hardware initialization already happens inside ASIC recovery; this change orders the remaining callbacks before new scheduler submissions. Preserve the emergency-stop and guity job completition path's callbacks without starting schedulers,
--- drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 47 +++++++++++----------- 1 file changed, 24 insertions(+), 23 deletions(-)
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +24 -23
@@ -5511,7 +5511,7 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev, }if (need_emergency_restart) - goto skip_sched_resume; + goto post_resume;/* * Must check guilty signal here since after this point all old
@@ -5522,7 +5522,7 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev,if (job &&dma_fence_is_signaled (&job->hw_fence.base)) { job_signaled = true;dev_info (adev->dev,"Guilty job already signaled, skipping HW reset" ); - goto skip_hw_reset; + goto post_resume; } retry:/* Rest of adevs pre asic reset from XGMI hive. */
@@ -5567,7 +5567,28 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev, goto recover_end; } -skip_hw_reset: +post_resume: +list_for_each_entry (tmp_adev, device_list_handle, reset_list) { +/* unlock kfd: SRIOV would do it separately */ +if (!need_emergency_restart && !amdgpu_sriov_vf (tmp_adev)) +amdgpu_amdkfd_post_reset (tmp_adev); + +/* kfd_post_reset will do nothing if kfd device is not initialized, +* need to bring up kfd here if it's not be initialized before +*/ +if (!adev->kfd.init_complete) +amdgpu_amdkfd_device_init (adev); + +if (audio_suspended) +amdgpu_device_resume_display_audio (tmp_adev); + +amdgpu_device_unset_mp1_state (tmp_adev); + +amdgpu_ras_set_error_query_ready (tmp_adev, true); + } + +if (need_emergency_restart) + goto recover_end;/* Post ASIC reset for all devs .*/ list_for_each_entry (tmp_adev, device_list_handle, reset_list) {
@@ -5603,26 +5624,6 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev, } } -skip_sched_resume: -list_for_each_entry (tmp_adev, device_list_handle, reset_list) { -/* unlock kfd: SRIOV would do it separately */ -if (!need_emergency_restart && !amdgpu_sriov_vf (tmp_adev)) -amdgpu_amdkfd_post_reset (tmp_adev); - -/* kfd_post_reset will do nothing if kfd device is not initialized, -* need to bring up kfd here if it's not be initialized before -*/ -if (!adev->kfd.init_complete) -amdgpu_amdkfd_device_init (adev); - -if (audio_suspended) -amdgpu_device_resume_display_audio (tmp_adev); - -amdgpu_device_unset_mp1_state (tmp_adev); - -amdgpu_ras_set_error_query_ready (tmp_adev, true); - } - recover_end: tmp_adev = list_first_entry(device_list_handle, struct amdgpu_device, reset_list);
Signature · 1 line
2.53.0