[PATCH] drm/amd/display: Move drm_dp_mst_atomic_check() to the front of dc_validate_global_state()
Mikita Lipski
mlipski at amd.com
Tue Jan 28 21:47:57 UTC 2020
Reviewed-by: Mikita Lipski <mikita.lipski at amd.com>
Thanks!
Mikita
On 1/28/20 4:44 PM, Zhan Liu wrote:
> [Why]
> Need to do atomic check first, then validate global state.
> If not, when connecting both MST and HDMI displays and
> set a bad mode via xrandr, system will hang.
>
> [How]
> Move drm_dp_mst_atomic_check() to the front of
> dc_validate_global_state().
>
> Signed-off-by: Zhan Liu <zhan.liu at amd.com>
> ---
> drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 14 ++++++++++----
> 1 file changed, 10 insertions(+), 4 deletions(-)
>
> 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 eed3ed7180fd..805d8d84ebb8 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> @@ -8256,6 +8256,16 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,
> goto fail;
> #endif
>
> + /*
> + * Perform validation of MST topology in the state:
> + * We need to perform MST atomic check before calling
> + * dc_validate_global_state(), or there is a chance
> + * to get stuck in an infinite loop and hang eventually.
> + */
> + ret = drm_dp_mst_atomic_check(state);
> + if (ret)
> + goto fail;
> +
> if (dc_validate_global_state(dc, dm_state->context, false) != DC_OK) {
> ret = -EINVAL;
> goto fail;
> @@ -8284,10 +8294,6 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,
> dc_retain_state(old_dm_state->context);
> }
> }
> - /* Perform validation of MST topology in the state*/
> - ret = drm_dp_mst_atomic_check(state);
> - if (ret)
> - goto fail;
>
> /* Store the overall update type for use later in atomic check. */
> for_each_new_crtc_in_state (state, crtc, new_crtc_state, i) {
>
--
Thanks,
Mikita Lipski
Software Engineer 2, AMD
mikita.lipski at amd.com
More information about the amd-gfx
mailing list