On 01/22/14 at 10:08pm, Peter Zijlstra wrote: > > > > I think its the right region to look through. My current suspect is the > > linear continuity fit with the initial 'random' multiplier. > > > > That initial 'random' multiplier can get us quite high, and we'll fit > > the function to match that but continue at a sane rate. > > > > I'll try and prod a little more later this evening as time permits. > > Does this cure things?
Peter, the odd timstamp still happens with this patch for me. > > --- > arch/x86/kernel/tsc.c | 11 +++++++---- > 1 file changed, 7 insertions(+), 4 deletions(-) > > diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c > index a3acbac2ee72..bb04148c5fe0 100644 > --- a/arch/x86/kernel/tsc.c > +++ b/arch/x86/kernel/tsc.c > @@ -237,7 +237,7 @@ static inline unsigned long long cycles_2_ns(unsigned > long long cyc) > /* XXX surely we already have this someplace in the kernel?! */ > #define DIV_ROUND(n, d) (((n) + ((d) / 2)) / (d)) > > -static void set_cyc2ns_scale(unsigned long cpu_khz, int cpu) > +static void set_cyc2ns_scale(unsigned long cpu_khz, int cpu, bool origin) > { > unsigned long long tsc_now, ns_now; > struct cyc2ns_data *data; > @@ -252,7 +252,10 @@ static void set_cyc2ns_scale(unsigned long cpu_khz, int > cpu) > data = cyc2ns_write_begin(cpu); > > rdtscll(tsc_now); > - ns_now = cycles_2_ns(tsc_now); > + if (origin) > + ns_now = 0; > + else > + ns_now = cycles_2_ns(tsc_now); > > /* > * Compute a new multiplier as per the above comment and ensure our > @@ -926,7 +929,7 @@ static int time_cpufreq_notifier(struct notifier_block > *nb, unsigned long val, > mark_tsc_unstable("cpufreq changes"); > } > > - set_cyc2ns_scale(tsc_khz, freq->cpu); > + set_cyc2ns_scale(tsc_khz, freq->cpu, false); > > return 0; > } > @@ -1199,7 +1202,7 @@ void __init tsc_init(void) > */ > for_each_possible_cpu(cpu) { > cyc2ns_init(cpu); > - set_cyc2ns_scale(cpu_khz, cpu); > + set_cyc2ns_scale(cpu_khz, cpu, true); > } > > if (tsc_disabled > 0) -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/