From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932783AbcCJWz1 (ORCPT ); Thu, 10 Mar 2016 17:55:27 -0500 Received: from mga14.intel.com ([192.55.52.115]:44111 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932089AbcCJWzY (ORCPT ); Thu, 10 Mar 2016 17:55:24 -0500 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.24,317,1455004800"; d="scan'208";a="907431966" Message-ID: <1457650426.19209.16.camel@linux.intel.com> Subject: Re: [PATCH] intel_pstate: Do not skip samples partially From: Srinivas Pandruvada To: "Rafael J. Wysocki" , Linux PM list Cc: Linux Kernel Mailing List , Philippe Longepe Date: Thu, 10 Mar 2016 14:53:46 -0800 In-Reply-To: <1608361.vYXCevKAEf@vostro.rjw.lan> References: <1608361.vYXCevKAEf@vostro.rjw.lan> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.18.4 (3.18.4-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 Thu, 2016-03-10 at 23:45 +0100, Rafael J. Wysocki wrote: > From: Rafael J. Wysocki > > If the current value of MPERF or the current value of TSC is the > same as the previous one, respectively, intel_pstate_sample() bails > out early and skips the sample. > > However, intel_pstate_adjust_busy_pstate() is still called in that > case which is not correct, so modify intel_pstate_sample() to > return a bool value indicating whether or not the sample has been > taken and use it to decide whether or not to call > intel_pstate_adjust_busy_pstate(). > > While at it, remove redundant parentheses from the MPERF/TSC > check in intel_pstate_sample(). > > Signed-off-by: Rafael J. Wysocki Acked-by: Srinivas Pandruvada > --- > > On top of my linux-next branch. > > --- >  drivers/cpufreq/intel_pstate.c |   12 +++++++----- >  1 file changed, 7 insertions(+), 5 deletions(-) > > Index: linux-pm/drivers/cpufreq/intel_pstate.c > =================================================================== > --- linux-pm.orig/drivers/cpufreq/intel_pstate.c > +++ linux-pm/drivers/cpufreq/intel_pstate.c > @@ -890,7 +890,7 @@ static inline void intel_pstate_calc_bus >   sample->core_pct_busy = (int32_t)core_pct; >  } >   > -static inline void intel_pstate_sample(struct cpudata *cpu, u64 > time) > +static inline bool intel_pstate_sample(struct cpudata *cpu, u64 > time) >  { >   u64 aperf, mperf; >   unsigned long flags; > @@ -900,9 +900,9 @@ static inline void intel_pstate_sample(s >   rdmsrl(MSR_IA32_APERF, aperf); >   rdmsrl(MSR_IA32_MPERF, mperf); >   tsc = rdtsc(); > - if ((cpu->prev_mperf == mperf) || (cpu->prev_tsc == tsc)) { > + if (cpu->prev_mperf == mperf || cpu->prev_tsc == tsc) { >   local_irq_restore(flags); > - return; > + return false; >   } >   local_irq_restore(flags); >   > @@ -920,6 +920,7 @@ static inline void intel_pstate_sample(s >   cpu->prev_aperf = aperf; >   cpu->prev_mperf = mperf; >   cpu->prev_tsc = tsc; > + return true; >  } >   >  static inline int32_t get_target_pstate_use_cpu_load(struct cpudata > *cpu) > @@ -1026,8 +1027,9 @@ static void intel_pstate_update_util(str >   u64 delta_ns = time - cpu->sample.time; >   >   if ((s64)delta_ns >= pid_params.sample_rate_ns) { > - intel_pstate_sample(cpu, time); > - if (!hwp_active) > + bool sample_taken = intel_pstate_sample(cpu, time); > + > + if (sample_taken && !hwp_active) >   intel_pstate_adjust_busy_pstate(cpu); >   } >  } > > -- > To unsubscribe from this list: send the line "unsubscribe linux-pm" > in > the body of a message to majordomo@vger.kernel.org > More majordomo info at  http://vger.kernel.org/majordomo-info.html