diff options
Diffstat (limited to '0107-drm-display-dp_mst-Correct_the_kref_of_port.patch')
-rw-r--r-- | 0107-drm-display-dp_mst-Correct_the_kref_of_port.patch | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/0107-drm-display-dp_mst-Correct_the_kref_of_port.patch b/0107-drm-display-dp_mst-Correct_the_kref_of_port.patch new file mode 100644 index 000000000000..8513b0d1029d --- /dev/null +++ b/0107-drm-display-dp_mst-Correct_the_kref_of_port.patch @@ -0,0 +1,41 @@ +From cb872cf86fe3ade981c51530cf0422472a1c55fe Mon Sep 17 00:00:00 2001 +From: Wayne Lin <Wayne.Lin@amd.com> +Date: Wed, 28 Dec 2022 14:50:43 +0800 +Subject: [PATCH] drm/display/dp_mst: Correct the kref of port. + +[why & how] +We still need to refer to port while removing payload at commit_tail. +we should keep the kref till then to release. + +Bug: https://gitlab.freedesktop.org/drm/amd/-/issues/2171 +Signed-off-by: Wayne Lin <Wayne.Lin@amd.com> +Signed-off-by: Harry Wentland <harry.wentland@amd.com> +Fixes: 4d07b0bc4034 ("drm/display/dp_mst: Move all payload info into the atomic state") +Cc: stable@vger.kernel.org # 6.1 +Acked-by: Harry Wentland <harry.wentland@amd.com> +--- + drivers/gpu/drm/display/drm_dp_mst_topology.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/display/drm_dp_mst_topology.c b/drivers/gpu/drm/display/drm_dp_mst_topology.c +index 51a46689cda70f..4ca37261584a94 100644 +--- a/drivers/gpu/drm/display/drm_dp_mst_topology.c ++++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c +@@ -3372,6 +3372,9 @@ void drm_dp_remove_payload(struct drm_dp_mst_topology_mgr *mgr, + + mgr->payload_count--; + mgr->next_start_slot -= payload->time_slots; ++ ++ if (payload->delete) ++ drm_dp_mst_put_port_malloc(payload->port); + } + EXPORT_SYMBOL(drm_dp_remove_payload); + +@@ -4327,7 +4330,6 @@ int drm_dp_atomic_release_time_slots(struct drm_atomic_state *state, + + drm_dbg_atomic(mgr->dev, "[MST PORT:%p] TU %d -> 0\n", port, payload->time_slots); + if (!payload->delete) { +- drm_dp_mst_put_port_malloc(port); + payload->pbn = 0; + payload->delete = true; + topology_state->payload_mask &= ~BIT(payload->vcpi - 1); |