cpufreq: intel_pstate: Simplify intel_pstate_update_perf_limits()
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 7 Apr 2021 14:21:55 +0000 (16:21 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Fri, 9 Apr 2021 15:16:12 +0000 (17:16 +0200)
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.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Tested-by: Chen Yu <yu.c.chen@intel.com>
drivers/cpufreq/intel_pstate.c

index 2ef9584..f040106 100644 (file)
@@ -2195,9 +2195,8 @@ static void intel_pstate_update_perf_limits(struct cpudata *cpu,
                                            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_limits(struct cpudata *cpu,
        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. */