From 81680dd71b958e2a7674e031a67d8df6c708b8e6 Mon Sep 17 00:00:00 2001 From: Mykola Lysenko Date: Thu, 17 Dec 2015 19:19:08 +0800 Subject: [PATCH 1194/1565] 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 Change-Id: I0a039230cbd645956d163cf9e369257486977516 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 39bf960..85fd17f 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; } @@ -333,7 +334,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(); } -- 1.9.1