Patch "cpufreq: intel_pstate: Set P-state upfront in performance mode" has been added to the 4.8-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
cpufreq: intel_pstate: Set P-state upfront in performance mode
to the 4.8-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
cpufreq-intel_pstate-set-p-state-upfront-in-performance-mode.patch
and it can be found in the queue-4.8 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
a6c6ead14183ea4ec8ce7551e1f3451024b9c4dbMon Sep 17 00:00:00 2001
From: "Rafael J. Wysocki" <[email protected]>
Date: Wed, 19 Oct 2016 02:57:22 +0200
Subject: cpufreq: intel_pstate: Set P-state upfront in performance mode
From: Rafael J. Wysocki <[email protected]>
commit a6c6ead14183ea4ec8ce7551e1f3451024b9c4db upstream.
After commit a4675fbc4a7a (cpufreq: intel_pstate: Replace timers with utilization update callbacks) the cpufreq governor callbacks may not be invoked on NOHZ_FULL CPUs and, in particular, switching to the "performance" policy via sysfs may not have any effect on them. That is a problem, because it usually is desirable to squeeze the last bit of performance out of those CPUs, so work around it by setting the maximum P-state (within the limits) in intel_pstate_set_policy() upfront when the policy is CPUFREQ_POLICY_PERFORMANCE.
--- drivers/cpufreq/intel_pstate.c | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-)
drivers/cpufreq/intel_pstate.c +25 -4
@@ -1133,10 +1133,8 @@ static void intel_pstate_get_min_max(str *min =clamp_t (int, min_perf, cpu->pstate.min_pstate, max_perf); } -static void intel_pstate_set_min_pstate (struct cpudata *cpu) +static void intel_pstate_set_pstate (struct cpudata *cpu,int pstate) { -int pstate = cpu->pstate.min_pstate; -trace_cpu_frequency (pstate * cpu->pstate.scaling, cpu->cpu); cpu->pstate.current_pstate = pstate;/*
@@ -1148,6 +1146,20 @@ static void intel_pstate_set_min_pstate( pstate_funcs.get_val(cpu, pstate)); } +static void intel_pstate_set_min_pstate (struct cpudata *cpu) +{ +intel_pstate_set_pstate (cpu, cpu->pstate.min_pstate); +} + +static void intel_pstate_max_within_limits (struct cpudata *cpu) +{ +int min_pstate, max_pstate; + +update_turbo_state (); +intel_pstate_get_min_max (cpu, &min_pstate, &max_pstate); +intel_pstate_set_pstate (cpu, max_pstate); +} +static void intel_pstate_get_cpu_pstates (struct cpudata *cpu) { cpu->pstate.min_pstate = pstate_funcs.get_min ();
@@ -1465,7 +1477,7 @@ static int intel_pstate_set_policy(strucpr_debug ("set_policy cpuinfo.max %u policy->max %u\n" , policy->cpuinfo.max_freq, policy->max); - cpu = all_cpu_data[0 ]; + cpu = all_cpu_data[policy->cpu];if (cpu->pstate.max_pstate_physical > cpu->pstate.max_pstate && policy->max < policy->cpuinfo.max_freq && policy->max > cpu->pstate.max_pstate * cpu->pstate.scaling) {
@@ -1509,6 +1521,15 @@ static int intel_pstate_set_policy(struc limits->max_perf =round_up (limits->max_perf,FRAC_BITS ); out: +if (policy->policy ==CPUFREQ_POLICY_PERFORMANCE ) { +/* +* NOHZ_FULL CPUs need this as the governor callback may not +* be invoked on them. +*/ +intel_pstate_clear_update_util_hook (policy->cpu); +intel_pstate_max_within_limits (cpu); + } +intel_pstate_set_update_util_hook (policy->cpu);intel_pstate_hwp_set_policy (policy);
Patches currently in stable-queue which might be from [email protected] are
queue-4.8/cpufreq-intel_pstate-set-p-state-upfront-in-performance-mode.patch