[AMD Public Use] Reviewed-by: Guchun Chen <guchun.chen@xxxxxxx> Regards, Guchun -----Original Message----- From: Kazlauskas, Nicholas <Nicholas.Kazlauskas@xxxxxxx> Sent: Wednesday, January 13, 2021 12:21 AM To: Lakha, Bhawanpreet <Bhawanpreet.Lakha@xxxxxxx>; Chen, Guchun <Guchun.Chen@xxxxxxx>; Deucher, Alexander <Alexander.Deucher@xxxxxxx> Cc: amd-gfx@xxxxxxxxxxxxxxxxxxxxx Subject: Re: [PATCH] drm/amd/display: Fix deadlock during gpu reset v3 On 2021-01-12 11:13 a.m., Bhawanpreet Lakha wrote: > [Why] > during idle optimizations we acquire the dc_lock, this lock is also > acquired during gpu_reset so we end up hanging the system due to a > deadlock > > [How] > If we are in gpu reset: > - disable idle optimizations and skip calls to the dc function > > v2: skip idle optimizations calls > v3: add guard for DCN > > Fixes: 06d5652541c3 ("drm/amd/display: enable idle optimizations for > linux (MALL stutter)") > Signed-off-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@xxxxxxx> Reviewed-by: Nicholas Kazlauskas <nicholas.kazlauskas@xxxxxxx> Regards, Nicholas Kazlauskas > --- > drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > index de71b6c21590..82ceb0a8ba29 100644 > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > @@ -1816,6 +1816,11 @@ static int dm_suspend(void *handle) > > if (amdgpu_in_reset(adev)) { > mutex_lock(&dm->dc_lock); > + > +#if defined(CONFIG_DRM_AMD_DC_DCN) > + dc_allow_idle_optimizations(adev->dm.dc, false); #endif > + > dm->cached_dc_state = dc_copy_state(dm->dc->current_state); > > dm_gpureset_toggle_interrupts(adev, dm->cached_dc_state, false); > @@ -5556,6 +5561,10 @@ static inline int dm_set_vblank(struct drm_crtc *crtc, bool enable) > if (!dc_interrupt_set(adev->dm.dc, irq_source, enable)) > return -EBUSY; > > +#if defined(CONFIG_DRM_AMD_DC_DCN) > + if (amdgpu_in_reset(adev)) > + return 0; > + > mutex_lock(&dm->dc_lock); > > if (enable) > @@ -5572,6 +5581,7 @@ static inline int dm_set_vblank(struct drm_crtc > *crtc, bool enable) > > mutex_unlock(&dm->dc_lock); > > +#endif > return 0; > } > > _______________________________________________ amd-gfx mailing list amd-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/amd-gfx