From: Meenakshikumar Somasundaram <[email protected]>

[Why]
On a mst branch with multi display setup, dc context is obselete
after updating the first stream. Referencing the same dc context
for the next stream update to fetch dc pointer leads to NULL
pointer dereference.

[How]
Get the dc pointer from the link rather than context.

Reviewed-by: Charlene Liu <[email protected]>
Signed-off-by: Meenakshikumar Somasundaram <[email protected]>
Signed-off-by: Aurabindo Pillai <[email protected]>
---
 drivers/gpu/drm/amd/display/dc/link/accessories/link_dp_cts.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/display/dc/link/accessories/link_dp_cts.c 
b/drivers/gpu/drm/amd/display/dc/link/accessories/link_dp_cts.c
index 1593412354cf..1045c268672e 100644
--- a/drivers/gpu/drm/amd/display/dc/link/accessories/link_dp_cts.c
+++ b/drivers/gpu/drm/amd/display/dc/link/accessories/link_dp_cts.c
@@ -78,6 +78,7 @@ static void dp_retrain_link_dp_test(struct dc_link *link,
        struct audio_output audio_output[MAX_PIPES];
        struct dc_stream_state *streams_on_link[MAX_PIPES];
        int num_streams_on_link = 0;
+       struct dc *dc = (struct dc *)link->dc;
 
        needs_divider_update = 
(link->dc->link_srv->dp_get_encoding_format(link_setting) !=
        link->dc->link_srv->dp_get_encoding_format((const struct 
dc_link_settings *) &link->cur_link_settings));
@@ -150,7 +151,7 @@ static void dp_retrain_link_dp_test(struct dc_link *link,
                if (streams_on_link[i] && streams_on_link[i]->link && 
streams_on_link[i]->link == link) {
                        stream_update.stream = streams_on_link[i];
                        stream_update.dpms_off = &dpms_off;
-                       dc_update_planes_and_stream(state->clk_mgr->ctx->dc, 
NULL, 0, streams_on_link[i], &stream_update);
+                       dc_update_planes_and_stream(dc, NULL, 0, 
streams_on_link[i], &stream_update);
                }
        }
 }
-- 
2.51.0

Reply via email to