From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754125AbcEJBZW (ORCPT ); Mon, 9 May 2016 21:25:22 -0400 Received: from mga04.intel.com ([192.55.52.120]:32139 "EHLO mga04.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751745AbcEJBZV (ORCPT ); Mon, 9 May 2016 21:25:21 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.24,602,1455004800"; d="scan'208";a="949638151" Message-ID: <1462843489.4224.17.camel@linux.intel.com> Subject: Re: [PATCH 3/3] intel_pstate: Clean up get_target_pstate_use_performance() From: Srinivas Pandruvada To: "Rafael J. Wysocki" , Linux PM list Cc: Linux Kernel Mailing List Date: Mon, 09 May 2016 18:24:49 -0700 In-Reply-To: <6021838.4PBIxTzBzu@vostro.rjw.lan> References: <2638272.Bq3MnQEe4U@vostro.rjw.lan> <6021838.4PBIxTzBzu@vostro.rjw.lan> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.18.3 (3.18.3-1.fc23) Mime-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sat, 2016-05-07 at 01:47 +0200, Rafael J. Wysocki wrote: > From: Rafael J. Wysocki > > The way the code in get_target_pstate_use_performance() is arranged > and the comments in there are totally confusing, so modify them to > reflect what's going on. > > The results of the computations should be the same as before. > > Signed-off-by: Rafael J. Wysocki Acked-by: Srinivas Pandruvada > --- >  drivers/cpufreq/intel_pstate.c |   32 +++++++++++++----------------- > -- >  1 file changed, 13 insertions(+), 19 deletions(-) > > Index: linux-pm/drivers/cpufreq/intel_pstate.c > =================================================================== > --- linux-pm.orig/drivers/cpufreq/intel_pstate.c > +++ linux-pm/drivers/cpufreq/intel_pstate.c > @@ -1241,43 +1241,37 @@ static inline int32_t get_target_pstate_ >   >  static inline int32_t get_target_pstate_use_performance(struct > cpudata *cpu) >  { > - int32_t core_busy, max_pstate, current_pstate, sample_ratio; > + int32_t perf_scaled, sample_ratio; >   u64 duration_ns; >   >   /* > -  * core_busy is the ratio of actual performance to max > -  * max_pstate is the max non turbo pstate available > -  * current_pstate was the pstate that was requested during > -  *  the last sample period. > -  * > -  * We normalize core_busy, which was our actual percent > -  * performance to what we requested during the last sample > -  * period. The result will be a percentage of busy at a > -  * specified pstate. > +  * perf_scaled is the average performance during the last > sampling > +  * period (in percent) scaled by the ratio of the P-state > requested > +  * last time to the maximum P-state.  That measures the > system's > +  * response to the previous P-state selection. >    */ > - core_busy = 100 * cpu->sample.core_avg_perf; > - max_pstate = cpu->pstate.max_pstate_physical; > - current_pstate = cpu->pstate.current_pstate; > - core_busy = mul_fp(core_busy, div_fp(max_pstate, > current_pstate)); > + perf_scaled = div_fp(cpu->pstate.max_pstate_physical, > +      cpu->pstate.current_pstate); > + perf_scaled = mul_fp(perf_scaled, 100 * cpu- > >sample.core_avg_perf); >   >   /* >    * Since our utilization update callback will not run unless > we are >    * in C0, check if the actual elapsed time is significantly > greater (3x) >    * than our sample interval.  If it is, then we were idle > for a long > -  * enough period of time to adjust our busyness. > +  * enough period of time to adjust our performance metric. >    */ >   duration_ns = cpu->sample.time - cpu->last_sample_time; >   if ((s64)duration_ns > pid_params.sample_rate_ns * 3) { >   sample_ratio = div_fp(pid_params.sample_rate_ns, > duration_ns); > - core_busy = mul_fp(core_busy, sample_ratio); > + perf_scaled = mul_fp(perf_scaled, sample_ratio); >   } else { >   sample_ratio = div_fp(100 * cpu->sample.mperf, cpu- > >sample.tsc); >   if (sample_ratio < int_tofp(1)) > - core_busy = 0; > + perf_scaled = 0; >   } >   > - cpu->sample.busy_scaled = core_busy; > - return cpu->pstate.current_pstate - pid_calc(&cpu->pid, > core_busy); > + cpu->sample.busy_scaled = perf_scaled; > + return cpu->pstate.current_pstate - pid_calc(&cpu->pid, > perf_scaled); >  } >   >  static inline void intel_pstate_update_pstate(struct cpudata *cpu, > int pstate) >