Jessica Yu 3c1500
From e0e384c398d4638e54b6d2098f0ceaafdab870ee Mon Sep 17 00:00:00 2001
Jessica Yu 3c1500
From: Alex Deucher <alexander.deucher@amd.com>
Jessica Yu 3c1500
Date: Tue, 17 Dec 2019 09:50:42 -0500
Jessica Yu 3c1500
Subject: drm/amdgpu/smu: add metrics table lock for navi (v2)
Jessica Yu 3c1500
Git-commit: e0e384c398d4638e54b6d2098f0ceaafdab870ee
Jessica Yu 3c1500
Patch-mainline: v5.5-rc5
Jessica Yu 3c1500
References: bsc#1152472
Jessica Yu 3c1500
Jessica Yu 3c1500
To protect access to the metrics table.
Jessica Yu 3c1500
Jessica Yu 3c1500
v2: unlock on error
Jessica Yu 3c1500
Jessica Yu 3c1500
Bug: https://gitlab.freedesktop.org/drm/amd/issues/900
Jessica Yu 3c1500
Reviewed-by: Kevin Wang <kevin1.wang@amd.com>
Jessica Yu 3c1500
Reviewed-by: Evan Quan <evan.quan@amd.com>
Jessica Yu 3c1500
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Jessica Yu 3c1500
Cc: stable@vger.kernel.org
Jessica Yu 3c1500
Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
Jessica Yu 3c1500
---
Jessica Yu 3c1500
 drivers/gpu/drm/amd/powerplay/navi10_ppt.c | 3 +++
Jessica Yu 3c1500
 1 file changed, 3 insertions(+)
Jessica Yu 3c1500
Jessica Yu 3c1500
diff --git a/drivers/gpu/drm/amd/powerplay/navi10_ppt.c b/drivers/gpu/drm/amd/powerplay/navi10_ppt.c
Jessica Yu 3c1500
index 4a14fd1f9fd5..ca62e92e5a4f 100644
Jessica Yu 3c1500
--- a/drivers/gpu/drm/amd/powerplay/navi10_ppt.c
Jessica Yu 3c1500
+++ b/drivers/gpu/drm/amd/powerplay/navi10_ppt.c
Jessica Yu 3c1500
@@ -562,17 +562,20 @@ static int navi10_get_metrics_table(struct smu_context *smu,
Jessica Yu 3c1500
 	struct smu_table_context *smu_table= &smu->smu_table;
Jessica Yu 3c1500
 	int ret = 0;
Jessica Yu 3c1500
 
Jessica Yu 3c1500
+	mutex_lock(&smu->metrics_lock);
Jessica Yu 3c1500
 	if (!smu_table->metrics_time || time_after(jiffies, smu_table->metrics_time + msecs_to_jiffies(100))) {
Jessica Yu 3c1500
 		ret = smu_update_table(smu, SMU_TABLE_SMU_METRICS, 0,
Jessica Yu 3c1500
 				(void *)smu_table->metrics_table, false);
Jessica Yu 3c1500
 		if (ret) {
Jessica Yu 3c1500
 			pr_info("Failed to export SMU metrics table!\n");
Jessica Yu 3c1500
+			mutex_unlock(&smu->metrics_lock);
Jessica Yu 3c1500
 			return ret;
Jessica Yu 3c1500
 		}
Jessica Yu 3c1500
 		smu_table->metrics_time = jiffies;
Jessica Yu 3c1500
 	}
Jessica Yu 3c1500
 
Jessica Yu 3c1500
 	memcpy(metrics_table, smu_table->metrics_table, sizeof(SmuMetrics_t));
Jessica Yu 3c1500
+	mutex_unlock(&smu->metrics_lock);
Jessica Yu 3c1500
 
Jessica Yu 3c1500
 	return ret;
Jessica Yu 3c1500
 }
Jessica Yu 3c1500
-- 
Jessica Yu 3c1500
2.28.0
Jessica Yu 3c1500