Skip to contentSkip to conversation

cpufreq: intel_pstate: Simplify intel_pstate_update_perf_limits()

PATCH In review Rafael J. Wysocki 2 participants 2 messages Apr 7, 2021 – Apr 9, 2021

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

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
Index: linux-pm/drivers/cpufreq/intel_pstate.c
===================================================================
@@ -2195,9 +2195,8 @@ static void intel_pstate_update_perf_lim
 					    unsigned 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_lim
 	if (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. */
Tested-by on v1 1/1
#1 lore raw
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_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.

Quoted 6 lines

While at it, move the definition and initialization of the turbo_max local variable to the code branch using it.

No intentional functional impact.