drm/amd/display: retain/release stream pointer in link enc table
authorSung Joon Kim <sungkim@amd.com>
Thu, 4 Nov 2021 20:52:05 +0000 (16:52 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 17 Nov 2021 21:58:08 +0000 (16:58 -0500)
[why]
At every reference to stream pointer, we need to increment/decrement the
kref_count.  Not doing so will result in invalid stream pointer still
alive after hibernate cycle.

[how]
Call stream retain/release whenever the link encoder assignment is set
to true/false since it indicates if we want to reference the stream
pointer or not.

Reviewed-by: Jun Lei <Jun.Lei@amd.com>
Acked-by: Anson Jacob <Anson.Jacob@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Sung Joon Kim <sungkim@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/core/dc_link_enc_cfg.c

index 13a9d55..b96e301 100644 (file)
@@ -122,6 +122,7 @@ static void remove_link_enc_assignment(
                                stream->link_enc = NULL;
                                state->res_ctx.link_enc_cfg_ctx.link_enc_assignments[i].eng_id = ENGINE_ID_UNKNOWN;
                                state->res_ctx.link_enc_cfg_ctx.link_enc_assignments[i].stream = NULL;
+                               dc_stream_release(stream);
                                break;
                        }
                }
@@ -144,6 +145,7 @@ static void add_link_enc_assignment(
                 */
                for (i = 0; i < state->stream_count; i++) {
                        if (stream == state->streams[i]) {
+                               dc_stream_retain(stream);
                                state->res_ctx.link_enc_cfg_ctx.link_enc_assignments[i] = (struct link_enc_assignment){
                                        .valid = true,
                                        .ep_id = (struct display_endpoint_id) {