|
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 |
|