Re: [PATCH V2] perf: x86: Improve accuracy of perf/sched clock

From: Thomas Gleixner
Date: Thu Aug 20 2015 - 15:32:14 EST


On Wed, 29 Jul 2015, Adrian Hunter wrote:
> @@ -239,6 +239,8 @@ static void set_cyc2ns_scale(unsigned long cpu_khz, int cpu)
> unsigned long long tsc_now, ns_now;
> struct cyc2ns_data *data;
> unsigned long flags;
> + u64 mult;
> + u32 shft = 32;
>
> local_irq_save(flags);
> sched_clock_idle_sleep_event();
> @@ -256,12 +258,17 @@ static void set_cyc2ns_scale(unsigned long cpu_khz, int cpu)
> * time function is continuous; see the comment near struct
> * cyc2ns_data.
> */
> - data->cyc2ns_mul =
> - DIV_ROUND_CLOSEST(NSEC_PER_MSEC << CYC2NS_SCALE_FACTOR,
> - cpu_khz);
> - data->cyc2ns_shift = CYC2NS_SCALE_FACTOR;
> + mult = (u64)NSEC_PER_MSEC << 32;
> + mult += cpu_khz / 2;
> + do_div(mult, cpu_khz);
> + while (mult > U32_MAX) {
> + mult >>= 1;
> + shft -= 1;
> + }

This is an open coded variant of clocks_calc_mult_shift(). Can we
please use that one?

Thanks,

tglx
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/