Messages in this thread | | | From | "Doug Smythies" <> | Subject | RE: [PATCH] cpufreq: intel_pstate: Fix rounding of core_pct | Date | Wed, 11 Jun 2014 06:41:20 -0700 |
| |
On 2014.06.11 05:34 Stratos Karafotis wrote:
> Local variable core_pct holds fixed point values. > When we round it we add "1" to core_pct. This has almost > no effect. > > So, add int_toftp(1) to core_pct when rounding. > > For example, in a given sample point (values taken from > tracepoint) with: > aperf = 5024 > mperf = 10619 > > the core_pct is (before rounding): > core_pct = 12111 > fp_toint(core_pct) = 47 > > After rounding: > core_pct = 12112 > fp_toint(core_pct) = 47 > > After rounding with int_toftp(1): > core_pct = 12367 > fp_toint(core_pct) = 48 > > Signed-off-by: Stratos Karafotis <stratosk@semaphore.gr> > --- > > Hi Rafael, > > I'm sorry for submitting again in merge window, but > I thought that maybe we need this fix for 3.16. > > > drivers/cpufreq/intel_pstate.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c > index 4e7f492..dd80aa2 100644 > --- a/drivers/cpufreq/intel_pstate.c > +++ b/drivers/cpufreq/intel_pstate.c > @@ -564,7 +564,7 @@ static inline void intel_pstate_calc_busy(struct cpudata *cpu) > core_pct = div_u64_rem(core_pct, int_tofp(sample->mperf), &rem); > > if ((rem << 1) >= int_tofp(sample->mperf)) > - core_pct += 1; > + core_pct += int_tofp(1); > > sample->freq = fp_toint( > mul_fp(int_tofp(cpu->pstate.max_pstate * 1000), core_pct)); > -- > 1.9.3
No.
The intent was only ever to round properly the pseudo floating point result of the divide. It was much more important (ugh, well 4 times more) when FRACBITS was still 6, which also got changed to 8 in a recent patch.
... Doug
| |