From 135156ce80dfeb517b3f0bb197c94be978267f6a Mon Sep 17 00:00:00 2001 From: Mykola Lysenko Date: Thu, 17 Dec 2015 19:19:08 +0800 Subject: [PATCH 0629/1110] drm/amd/dal: remove sink from MST link When we remove MST display downstream, we should remove sink during connector destruction. Also do not report error if sink already removed from link. This can happen in case of physical disconnect of mst branch. Links will be removed in dc_link_detect. But fake removal in MST connector destruction is not of harm, as sink not in array already Signed-off-by: Mykola Lysenko Acked-by: Jordan Lazare --- drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_mst_types.c | 7 +++++-- drivers/gpu/drm/amd/dal/dc/core/dc.c | 2 -- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_mst_types.c b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_mst_types.c index 56ca101..164d80a 100644 --- a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_mst_types.c +++ b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_mst_types.c @@ -74,7 +74,8 @@ dm_dp_mst_detect(struct drm_connector *connector, bool force) &master->mst_mgr, aconnector->port); - if (status == connector_status_disconnected && aconnector->dc_sink) { + if (status == connector_status_disconnected && aconnector->edid) { + kfree(aconnector->edid); aconnector->edid = NULL; } @@ -334,7 +335,9 @@ static void dm_dp_destroy_mst_connector( drm_connector_cleanup(connector); drm_modeset_unlock_all(dev); - kfree(connector); + dc_link_remove_sink(aconnector->dc_link, aconnector->dc_sink); + + kfree(aconnector); DRM_DEBUG_KMS("\n"); } diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc.c b/drivers/gpu/drm/amd/dal/dc/core/dc.c index a37cd87..4a75cb9 100644 --- a/drivers/gpu/drm/amd/dal/dc/core/dc.c +++ b/drivers/gpu/drm/amd/dal/dc/core/dc.c @@ -992,6 +992,4 @@ void dc_link_remove_sink(const struct dc_link *link, const struct dc_sink *sink) return; } } - - BREAK_TO_DEBUGGER(); } -- 2.7.4