cpufreq: intel_pstate: Simplify intel_pstate_update_perf_limits()
Subsystems (2)
PATCH 1/1 cpufreq: intel_pstate: Simplify intel_pstate_update_perf_limits()
From: Rafael J. Wysocki <[email protected]>
Because pstate.max_freq is always equal to the product of pstate.max_pstate and pstate.scaling and, analogously, pstate.turbo_freq is always equal to the product of pstate.turbo_pstate and pstate.scaling, the result of the max_policy_perf computation in intel_pstate_update_perf_limits() is always equal to the quotient of policy_max and pstate.scaling, regardless of whether or not turbo is disabled. Analogously, the result of min_policy_perf in intel_pstate_update_perf_limits() is always equal to the quotient of policy_min and pstate.scaling.
Accordingly, intel_pstate_update_perf_limits() need not check whether or not turbo is enabled at all and in order to compute max_policy_perf and min_policy_perf it can always divide policy_max and policy_min, respectively, by pstate.scaling. Make it do so.
While at it, move the definition and initialization of the turbo_max local variable to the code branch using it.
No intentional functional impact.
---
On top of linux-next.
--- drivers/cpufreq/intel_pstate.c | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-)
drivers/cpufreq/intel_pstate.c +6 -16
@@ -2195,9 +2195,8 @@ static void intel_pstate_update_perf_limunsigned int policy_min, unsigned int policy_max) { + int scaling = cpu->pstate.scaling;int32_t max_policy_perf, min_policy_perf; -int max_state, turbo_max; -int max_freq;/* * HWP needs some special consideration, because HWP_REQUEST uses
@@ -2206,33 +2205,24 @@ static void intel_pstate_update_perf_limif (hwp_active)intel_pstate_get_hwp_cap (cpu); -if (global.no_turbo || global.turbo_disabled) { - max_state = cpu->pstate.max_pstate; - max_freq = cpu->pstate.max_freq; - }else { - max_state = cpu->pstate.turbo_pstate; - max_freq = cpu->pstate.turbo_freq; - } - - turbo_max = cpu->pstate.turbo_pstate; - - max_policy_perf = max_state * policy_max / max_freq; + max_policy_perf = policy_max / scaling;if (policy_max == policy_min) { min_policy_perf = max_policy_perf; }else { - min_policy_perf = max_state * policy_min / max_freq; + min_policy_perf = policy_min / scaling; min_policy_perf =clamp_t (int32_t, min_policy_perf,0 , max_policy_perf); } -pr_debug ("cpu:%d max_state %d min_policy_perf:%d max_policy_perf:%d\n" , - cpu->cpu, max_state, min_policy_perf, max_policy_perf); +pr_debug ("cpu:%d min_policy_perf:%d max_policy_perf:%d\n" , + cpu->cpu, min_policy_perf, max_policy_perf);/* Normalize user input to [min_perf, max_perf] */ if (per_cpu_limits) { cpu->min_perf_ratio = min_policy_perf; cpu->max_perf_ratio = max_policy_perf; }else { +int turbo_max = cpu->pstate.turbo_pstate;int32_t global_min, global_max;/* Global limits are in percent of the maximum turbo P-state. */
Quoted 17 lines · Rafael J. Wysocki
From: Rafael J. Wysocki <[email protected]>
Because pstate.max_freq is always equal to the product of pstate.max_pstate and pstate.scaling and, analogously, pstate.turbo_freq is always equal to the product of pstate.turbo_pstate and pstate.scaling, the result of the
max_policy_perfcomputation inintel_pstate_update_perf_limits()is always equal to the quotient ofpolicy_maxand pstate.scaling, regardless of whether or not turbo is disabled. Analogously, the result ofmin_policy_perfinintel_pstate_update_perf_limits()is always equal to the quotient ofpolicy_minand pstate.scaling.Accordingly,
intel_pstate_update_perf_limits()need not check whether or not turbo is enabled at all and in order to computemax_policy_perfandmin_policy_perfit can always dividepolicy_maxandpolicy_min, respectively, by pstate.scaling. Make it do so.
Quoted 6 lines
While at it, move the definition and initialization of the
turbo_maxlocal variable to the code branch using it.No intentional functional impact.
Signed-off-by Rafael J. Wysocki <[email protected]>