This is a note to let you know that I've just added the patch titled drm/amd/display: Fix deadlock when falling back to v2 from v3 to the 5.14-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: drm-amd-display-fix-deadlock-when-falling-back-to-v2-from-v3.patch and it can be found in the queue-5.14 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@xxxxxxxxxxxxxxx> know about it. >From ad76744b041d8c87ef1c9adbb04fb7eaa20a179e Mon Sep 17 00:00:00 2001 From: Nicholas Kazlauskas <nicholas.kazlauskas@xxxxxxx> Date: Fri, 22 Oct 2021 16:14:24 -0400 Subject: drm/amd/display: Fix deadlock when falling back to v2 from v3 From: Nicholas Kazlauskas <nicholas.kazlauskas@xxxxxxx> commit ad76744b041d8c87ef1c9adbb04fb7eaa20a179e upstream. [Why] A deadlock in the kernel occurs when we fallback from the V3 to V2 add_topology_to_display or remove_topology_to_display because they both try to acquire the dtm_mutex but recursive locking isn't supported on mutex_lock(). [How] Make the mutex_lock/unlock more fine grained and move them up such that they're only required for the psp invocation itself. Fixes: bf62221e9d0e ("drm/amd/display: Add DCN3.1 HDCP support") Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@xxxxxxx> Reviewed-by: Aric Cyr <aric.cyr@xxxxxxx> Signed-off-by: Alex Deucher <alexander.deucher@xxxxxxx> Cc: stable@xxxxxxxxxxxxxxx Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- drivers/gpu/drm/amd/display/modules/hdcp/hdcp_psp.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) --- a/drivers/gpu/drm/amd/display/modules/hdcp/hdcp_psp.c +++ b/drivers/gpu/drm/amd/display/modules/hdcp/hdcp_psp.c @@ -105,6 +105,7 @@ static enum mod_hdcp_status mod_hdcp_rem dtm_cmd->dtm_status = TA_DTM_STATUS__GENERIC_FAILURE; psp_dtm_invoke(psp, dtm_cmd->cmd_id); + mutex_unlock(&psp->dtm_context.mutex); if (dtm_cmd->dtm_status != TA_DTM_STATUS__SUCCESS) { status = mod_hdcp_remove_display_from_topology_v2(hdcp, index); @@ -115,8 +116,6 @@ static enum mod_hdcp_status mod_hdcp_rem HDCP_TOP_REMOVE_DISPLAY_TRACE(hdcp, display->index); } - mutex_unlock(&psp->dtm_context.mutex); - return status; } @@ -218,6 +217,7 @@ static enum mod_hdcp_status mod_hdcp_add dtm_cmd->dtm_in_message.topology_update_v3.link_hdcp_cap = link->hdcp_supported_informational; psp_dtm_invoke(psp, dtm_cmd->cmd_id); + mutex_unlock(&psp->dtm_context.mutex); if (dtm_cmd->dtm_status != TA_DTM_STATUS__SUCCESS) { status = mod_hdcp_add_display_to_topology_v2(hdcp, display); @@ -227,8 +227,6 @@ static enum mod_hdcp_status mod_hdcp_add HDCP_TOP_ADD_DISPLAY_TRACE(hdcp, display->index); } - mutex_unlock(&psp->dtm_context.mutex); - return status; } Patches currently in stable-queue which might be from nicholas.kazlauskas@xxxxxxx are queue-5.14/drm-amd-display-require-immediate-flip-support-for-dcn3.1-planes.patch queue-5.14/drm-amd-display-fallback-to-clocks-which-meet-requested-voltage-on-dcn31.patch queue-5.14/drm-amd-display-fix-prefetch-bandwidth-calculation-for-dcn3.1.patch queue-5.14/drm-amd-display-fix-deadlock-when-falling-back-to-v2-from-v3.patch