From b16aa9724e42f2a9d6f581ab5940f649fe44eea9 Mon Sep 17 00:00:00 2001 From: Mykola Lysenko Date: Wed, 9 Dec 2015 19:20:12 +0800 Subject: [PATCH 0592/1110] drm/amd/dal: fix issue when removing sinks where array index is incorrect Signed-off-by: Harry Wentland Acked-by: Harry Wentland --- drivers/gpu/drm/amd/dal/dc/core/dc_link.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc_link.c b/drivers/gpu/drm/amd/dal/dc/core/dc_link.c index e7a12e0..fe36786 100644 --- a/drivers/gpu/drm/amd/dal/dc/core/dc_link.c +++ b/drivers/gpu/drm/amd/dal/dc/core/dc_link.c @@ -357,10 +357,13 @@ static bool is_dp_active_dongle(enum display_dongle_type dongle_type) static void link_disconnect_all_sinks(struct core_link *link) { - int i; - - for (i = 0; i < link->public.sink_count; i++) - dc_link_remove_sink(&link->public, link->public.sink[i]); + /* + * as sink_count changed inside dc_link_remove_sink, we should not + * use it for range check for loop, because half of sinks will not + * be removed + */ + while (link->public.sink_count) + dc_link_remove_sink(&link->public, link->public.sink[0]); link->dpcd_sink_count = 0; } @@ -516,7 +519,9 @@ void dc_link_detect(const struct dc_link *dc_link) * ->sink = NULL * TODO: s3 resume check*/ - if (dc_helpers_dp_mst_start_top_mgr(link->ctx, &link->public)) { + if (dc_helpers_dp_mst_start_top_mgr( + link->ctx, + &link->public)) { return; } else { /* MST not supported */ -- 2.7.4