blob: 3767a7dcae712d95765f7abad0b9828b9070af9d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
From b16aa9724e42f2a9d6f581ab5940f649fe44eea9 Mon Sep 17 00:00:00 2001
From: Mykola Lysenko <Mykola.Lysenko@amd.com>
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 <harry.wentland@amd.com>
Acked-by: Harry Wentland<harry.wentland@amd.com>
---
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
|