summarylogtreecommitdiffstats
path: root/0107-drm-display-dp_mst-Correct_the_kref_of_port.patch
diff options
context:
space:
mode:
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.patch41
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);