37 lines
1.1 KiB
Diff
37 lines
1.1 KiB
Diff
From a9b210306e861b7c2d3b8532c85e8cd54c3b322a Mon Sep 17 00:00:00 2001
|
|
From: Mario Limonciello <mario.limonciello@amd.com>
|
|
Date: Thu, 5 Dec 2024 16:28:39 -0600
|
|
Subject: cpufreq/amd-pstate: Only update the cached value in msr_set_epp() on
|
|
success
|
|
|
|
If writing the MSR MSR_AMD_CPPC_REQ fails then the cached value in the
|
|
amd_cpudata structure should not be updated.
|
|
|
|
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
|
|
Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
|
|
---
|
|
drivers/cpufreq/amd-pstate.c | 10 +++++++---
|
|
1 file changed, 7 insertions(+), 3 deletions(-)
|
|
|
|
--- a/drivers/cpufreq/amd-pstate.c
|
|
+++ b/drivers/cpufreq/amd-pstate.c
|
|
@@ -308,11 +308,15 @@ static int msr_set_epp(struct amd_cpudat
|
|
|
|
value &= ~AMD_PSTATE_EPP_PERF_MASK;
|
|
value |= FIELD_PREP(AMD_PSTATE_EPP_PERF_MASK, epp);
|
|
- WRITE_ONCE(cpudata->cppc_req_cached, value);
|
|
|
|
ret = wrmsrl_on_cpu(cpudata->cpu, MSR_AMD_CPPC_REQ, value);
|
|
- if (!ret)
|
|
- cpudata->epp_cached = epp;
|
|
+ if (ret) {
|
|
+ pr_err("failed to set energy perf value (%d)\n", ret);
|
|
+ return ret;
|
|
+ }
|
|
+
|
|
+ cpudata->epp_cached = epp;
|
|
+ WRITE_ONCE(cpudata->cppc_req_cached, value);
|
|
|
|
return ret;
|
|
}
|