KFD suspend and resume routines have been disabled since commit
5d3a2d95224da ("drm/amdgpu: skip kfd suspend/resume for S0ix") which
made sense at that time. However there is a problem that if there is
any compute work running there may still be active fences. Running
suspend without draining them can cause the system to hang.
So run KFD suspend/resume routines even in s0ix.
Signed-off-by: Mario Limonciello <[email protected]>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 0fdfde3dcb9f..59688f8ae919 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -5220,10 +5220,9 @@ int amdgpu_device_suspend(struct drm_device *dev, bool
notify_clients)
amdgpu_device_ip_suspend_phase1(adev);
- if (!adev->in_s0ix) {
- amdgpu_amdkfd_suspend(adev, !amdgpu_sriov_vf(adev) &&
!adev->in_runpm);
+ amdgpu_amdkfd_suspend(adev, !amdgpu_sriov_vf(adev) && !adev->in_runpm);
+ if (!adev->in_s0ix)
amdgpu_userq_suspend(adev);
- }
r = amdgpu_device_evict_resources(adev);
if (r)
@@ -5318,11 +5317,11 @@ int amdgpu_device_resume(struct drm_device *dev, bool
notify_clients)
goto exit;
}
- if (!adev->in_s0ix) {
- r = amdgpu_amdkfd_resume(adev, !amdgpu_sriov_vf(adev) &&
!adev->in_runpm);
- if (r)
- goto exit;
+ r = amdgpu_amdkfd_resume(adev, !amdgpu_sriov_vf(adev) &&
!adev->in_runpm);
+ if (r)
+ goto exit;
+ if (!adev->in_s0ix) {
r = amdgpu_userq_resume(adev);
if (r)
goto exit;
--
2.50.1