43 lines
1.8 KiB
Diff
43 lines
1.8 KiB
Diff
From 6b89403370ff0c33e2491dd700b601c438c7f9b2 Mon Sep 17 00:00:00 2001
|
|
From: Dhananjay Ugwekar <dhananjay.ugwekar@amd.com>
|
|
Date: Mon, 7 Apr 2025 08:19:26 +0000
|
|
Subject: cpufreq/amd-pstate: Fix min_limit perf and freq updation for
|
|
performance governor
|
|
|
|
The min_limit perf and freq values can get disconnected with performance
|
|
governor, as we only modify the perf value in the special case. Fix that
|
|
by modifying the perf and freq values together
|
|
|
|
Fixes: 009d1c29a451 ("cpufreq/amd-pstate: Move perf values into a union")
|
|
Signed-off-by: Dhananjay Ugwekar <dhananjay.ugwekar@amd.com>
|
|
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
|
|
Link: https://lore.kernel.org/r/20250407081925.850473-1-dhananjay.ugwekar@amd.com
|
|
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
|
|
---
|
|
drivers/cpufreq/amd-pstate.c | 11 +++++++----
|
|
1 file changed, 7 insertions(+), 4 deletions(-)
|
|
|
|
--- a/drivers/cpufreq/amd-pstate.c
|
|
+++ b/drivers/cpufreq/amd-pstate.c
|
|
@@ -607,13 +607,16 @@ static void amd_pstate_update_min_max_li
|
|
union perf_cached perf = READ_ONCE(cpudata->perf);
|
|
|
|
perf.max_limit_perf = freq_to_perf(perf, cpudata->nominal_freq, policy->max);
|
|
- perf.min_limit_perf = freq_to_perf(perf, cpudata->nominal_freq, policy->min);
|
|
+ WRITE_ONCE(cpudata->max_limit_freq, policy->max);
|
|
|
|
- if (cpudata->policy == CPUFREQ_POLICY_PERFORMANCE)
|
|
+ if (cpudata->policy == CPUFREQ_POLICY_PERFORMANCE) {
|
|
perf.min_limit_perf = min(perf.nominal_perf, perf.max_limit_perf);
|
|
+ WRITE_ONCE(cpudata->min_limit_freq, min(cpudata->nominal_freq, cpudata->max_limit_freq));
|
|
+ } else {
|
|
+ perf.min_limit_perf = freq_to_perf(perf, cpudata->nominal_freq, policy->min);
|
|
+ WRITE_ONCE(cpudata->min_limit_freq, policy->min);
|
|
+ }
|
|
|
|
- WRITE_ONCE(cpudata->max_limit_freq, policy->max);
|
|
- WRITE_ONCE(cpudata->min_limit_freq, policy->min);
|
|
WRITE_ONCE(cpudata->perf, perf);
|
|
}
|
|
|