From: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
To: "Rafael J. Wysocki" <rjw@rjwysocki.net>,
Linux PM list <linux-pm@vger.kernel.org>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] cpufreq: intel_pstate: Set P-state upfront in performance mode
Date: Fri, 21 Oct 2016 08:08:39 -0700 [thread overview]
Message-ID: <1477062519.31557.2.camel@linux.intel.com> (raw)
In-Reply-To: <1724762.8Kf4o5e5cm@vostro.rjw.lan>
On Wed, 2016-10-19 at 02:57 +0200, Rafael J. Wysocki wrote:
> From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
>
> 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.
>
> Fixes: a4675fbc4a7a (cpufreq: intel_pstate: Replace timers with
> utilization update callbacks)
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
> ---
> drivers/cpufreq/intel_pstate.c | 29 +++++++++++++++++++++++++----
> 1 file changed, 25 insertions(+), 4 deletions(-)
>
> Index: linux-pm/drivers/cpufreq/intel_pstate.c
> ===================================================================
> --- linux-pm.orig/drivers/cpufreq/intel_pstate.c
> +++ linux-pm/drivers/cpufreq/intel_pstate.c
> @@ -1137,10 +1137,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;
> /*
> @@ -1152,6 +1150,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();
> @@ -1485,7 +1497,7 @@ static int intel_pstate_set_policy(struc
> pr_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) {
> @@ -1529,6 +1541,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);
>
prev parent reply other threads:[~2016-10-21 15:11 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-10-19 0:57 [PATCH] cpufreq: intel_pstate: Set P-state upfront in performance mode Rafael J. Wysocki
2016-10-20 18:22 ` Srinivas Pandruvada
2016-10-20 21:19 ` Rafael J. Wysocki
2016-10-21 15:08 ` Srinivas Pandruvada [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1477062519.31557.2.camel@linux.intel.com \
--to=srinivas.pandruvada@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=rjw@rjwysocki.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.