On 2018-05-17 11:50 AM, Andrey Grodzovsky wrote: > First of all it's already being called from the display code from amd_ip_funcs.suspend/resume hooks. > Second of all, the place in amdgpu_device_gpu_recover it's being called is wrong for GPU stalls since > it is called BEFORE we cancel and force completion of all jobs which were not yet processed. > So, as Bas pointed in the ticket we will try to wait for fence in amdgpu_pm_compute_clocks but the pipe > is hanged so we end up in deadlock. > > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=106500 > Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky at amd.com> Reviewed-by: Harry Wentland <harry.wentland at amd.com> Harry > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 9 +-------- > 1 file changed, 1 insertion(+), 8 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > index fcd4bb2..f5c0a2d 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > @@ -3200,10 +3200,6 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev, > /* block TTM */ > resched = ttm_bo_lock_delayed_workqueue(&adev->mman.bdev); > > - /* store modesetting */ > - if (amdgpu_device_has_dc_support(adev)) > - state = drm_atomic_helper_suspend(adev->ddev); > - > /* block all schedulers and reset given job's ring */ > for (i = 0; i < AMDGPU_MAX_RINGS; ++i) { > struct amdgpu_ring *ring = adev->rings[i]; > @@ -3243,10 +3239,7 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev, > kthread_unpark(ring->sched.thread); > } > > - if (amdgpu_device_has_dc_support(adev)) { > - if (drm_atomic_helper_resume(adev->ddev, state)) > - dev_info(adev->dev, "drm resume failed:%d\n", r); > - } else { > + if (!amdgpu_device_has_dc_support(adev)) { > drm_helper_resume_force_mode(adev->ddev); > } > >