[PATCH] drm/amd/powerplay: add smu message mutex
Xiao, Jack
Jack.Xiao at amd.com
Mon Jun 3 07:04:24 UTC 2019
Drop it due to a modification was missing.
A new patch was sent out.
-----Original Message-----
From: Xiao, Jack <Jack.Xiao at amd.com>
Sent: Monday, June 03, 2019 2:12 PM
To: amd-gfx at lists.freedesktop.org; Deucher, Alexander <Alexander.Deucher at amd.com>; Zhang, Hawking <Hawking.Zhang at amd.com>
Cc: Xiao, Jack <Jack.Xiao at amd.com>
Subject: [PATCH] drm/amd/powerplay: add smu message mutex
Add smu message mutex preventing against race condition issue.
Signed-off-by: Jack Xiao <Jack.Xiao at amd.com>
---
drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h | 1 +
drivers/gpu/drm/amd/powerplay/smu_v11_0.c | 7 ++++++-
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
index 3eb1de9..735233e 100644
--- a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
+++ b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
@@ -374,6 +374,7 @@ struct smu_context
const struct smu_funcs *funcs;
const struct pptable_funcs *ppt_funcs;
struct mutex mutex;
+ struct mutex msg_mutex;
uint64_t pool_size;
struct smu_table_context smu_table;
diff --git a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
index d2eeb62..de737a0 100644
--- a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
+++ b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
@@ -104,6 +104,8 @@ static int smu_v11_0_send_msg(struct smu_context *smu, uint16_t msg)
if (index < 0)
return index;
+ mutex_lock(&smu->msg_mutex);
+
smu_v11_0_wait_for_response(smu);
WREG32_SOC15(MP1, 0, mmMP1_SMN_C2PMSG_90, 0); @@ -111,11 +113,11 @@ static int smu_v11_0_send_msg(struct smu_context *smu, uint16_t msg)
smu_v11_0_send_msg_without_waiting(smu, (uint16_t)index);
ret = smu_v11_0_wait_for_response(smu);
-
if (ret)
pr_err("Failed to send message 0x%x, response 0x%x\n", index,
ret);
+ mutex_unlock(&smu->msg_mutex);
return ret;
}
@@ -132,6 +134,8 @@ static int smu_v11_0_send_msg(struct smu_context *smu, uint16_t msg)
if (index < 0)
return index;
+ mutex_lock(&smu->msg_mutex);
+
ret = smu_v11_0_wait_for_response(smu);
if (ret)
pr_err("Failed to send message 0x%x, response 0x%x, param 0x%x\n", @@ -148,6 +152,7 @@ static int smu_v11_0_send_msg(struct smu_context *smu, uint16_t msg)
pr_err("Failed to send message 0x%x, response 0x%x param 0x%x\n",
index, ret, param);
+ mutex_unlock(&smu->msg_mutex);
return ret;
}
--
1.9.1
More information about the amd-gfx
mailing list