Jiri Slaby e810a1
From: Stylon Wang <stylon.wang@amd.com>
Jiri Slaby e810a1
Date: Tue, 10 Jan 2023 14:38:33 +0800
Jiri Slaby e810a1
Subject: [PATCH] drm/amd/display: Properly reuse completion structure
Jiri Slaby e810a1
References: bsc#1012628
Jiri Slaby e810a1
Patch-mainline: 6.2.2
Jiri Slaby e810a1
Git-commit: 0cf8307adbc6beb5ff3b8a76afedc6e4e0b536a9
Jiri Slaby e810a1
Jiri Slaby e810a1
commit 0cf8307adbc6beb5ff3b8a76afedc6e4e0b536a9 upstream.
Jiri Slaby e810a1
Jiri Slaby e810a1
[Why]
Jiri Slaby e810a1
Connecting displays to TBT3 docks often produces invalid
Jiri Slaby e810a1
replies for DPIA AUX requests. It turns out the completion
Jiri Slaby e810a1
structure was not re-initialized before reusing it, resulting
Jiri Slaby e810a1
in immature wake up to completion.
Jiri Slaby e810a1
Jiri Slaby e810a1
[How]
Jiri Slaby e810a1
Properly call reinit_completion() on reused completion structure.
Jiri Slaby e810a1
Jiri Slaby e810a1
Cc: stable@vger.kernel.org
Jiri Slaby e810a1
Reviewed-by: Solomon Chiu <solomon.chiu@amd.com>
Jiri Slaby e810a1
Acked-by: Alan Liu <HaoPing.Liu@amd.com>
Jiri Slaby e810a1
Signed-off-by: Stylon Wang <stylon.wang@amd.com>
Jiri Slaby e810a1
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Jiri Slaby e810a1
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Jiri Slaby e810a1
Cc: "Limonciello, Mario" <mario.limonciello@amd.com>
Jiri Slaby e810a1
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Jiri Slaby e810a1
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Jiri Slaby e810a1
---
Jiri Slaby e810a1
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 3 +++
Jiri Slaby e810a1
 1 file changed, 3 insertions(+)
Jiri Slaby e810a1
Jiri Slaby e810a1
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
Jiri Slaby e810a1
index 9c7b69d3..af16d6bb 100644
Jiri Slaby e810a1
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
Jiri Slaby e810a1
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
Jiri Slaby e810a1
@@ -10359,6 +10359,7 @@ int amdgpu_dm_process_dmub_aux_transfer_sync(
Jiri Slaby e810a1
 	ret = p_notify->aux_reply.length;
Jiri Slaby e810a1
 	*operation_result = p_notify->result;
Jiri Slaby e810a1
 out:
Jiri Slaby e810a1
+	reinit_completion(&adev->dm.dmub_aux_transfer_done);
Jiri Slaby e810a1
 	mutex_unlock(&adev->dm.dpia_aux_lock);
Jiri Slaby e810a1
 	return ret;
Jiri Slaby e810a1
 }
Jiri Slaby e810a1
@@ -10386,6 +10387,8 @@ int amdgpu_dm_process_dmub_set_config_sync(
Jiri Slaby e810a1
 		*operation_result = SET_CONFIG_UNKNOWN_ERROR;
Jiri Slaby e810a1
 	}
Jiri Slaby e810a1
 
Jiri Slaby e810a1
+	if (!is_cmd_complete)
Jiri Slaby e810a1
+		reinit_completion(&adev->dm.dmub_aux_transfer_done);
Jiri Slaby e810a1
 	mutex_unlock(&adev->dm.dpia_aux_lock);
Jiri Slaby e810a1
 	return ret;
Jiri Slaby e810a1
 }
Jiri Slaby e810a1
-- 
Jiri Slaby e810a1
2.35.3
Jiri Slaby e810a1