Re: 2.6.25.2 - Jiffies/Time jumping back and forth (Regereesion from 2.6.24)

Martin Knoblauch
2008-05-09T13:01:22Z

> From: Thomas Gleixner <tglx@linutronix.de>
> To: Martin Knoblauch <spamtrap@knobisoft.de>
> Cc: Gabriel C <nix.or.die@googlemail.com>; Bart Van Assche <bart.vanassche@gmail.com>; linux-kernel@vger.kernel.org; hmh@hmh.eng.br
> Sent: Thursday, May 8, 2008 4:13:55 PM
> Subject: Re: 2.6.25.2 - Jiffies/Time jumping back and forth (Regereesion from 2.6.24)
>
> On Thu, 8 May 2008, Martin Knoblauch wrote:
> > on two different systems running 2.6.25.2:
> >
> > ibm x3650(2xDualCore)
> > -------------------------------------
> > [root@lpsdm60 ~]# cat
> /sys/devices/system/clocksource/clocksource0/available_clocksource
> > tsc hpet acpi_pm jiffies
> > [root@lpsdm60 ~]# cat
> /sys/devices/system/clocksource/clocksource0/current_clocksource
> > tsc
> >
> > HP Proliant DL-380G4 (2xSingleCore)
> > ------------------------------------------------------------
> > [root@lpsdm52 ~]# cat
> /sys/devices/system/clocksource/clocksource0/available_clocksource
> > tsc hpet acpi_pm jiffies
> > [root@lpsdm52 ~]# cat
> /sys/devices/system/clocksource/clocksource0/current_clocksource
> > tsc
> >
> > and on the DL380G4 running 2.6.24:
> > ---------------------------------------------------------
> > [root@lpsdm52 ~]# cat
> /sys/devices/system/clocksource/clocksource0/available_clocksource
> > hpet acpi_pm jiffies tsc
> > [root@lpsdm52 ~]# cat
> /sys/devices/system/clocksource/clocksource0/current_clocksource
> > hpet
>
> So on 2.6.24 the TSC is declared unstable at some point and 2.6.25
> thinks it works fine. Is this the same kernel config (aside of the 24/25 fuzz) ?
>
> Thanks,
> tglx

hah. I love open source :-)

Between 2.6.24 and 2.6.25 there was some patching in "kernel/printk.c". Especially this is interesting:

@@ -680,7 +742,7 @@
loglev_char = default_message_loglevel
+ '0';
}
- t = printk_clock();
+ t = cpu_clock(printk_cpu);
nanosec_rem = do_div(t, 1000000000);
tlen = sprintf(tbuf,
"<%c>[%5lu.%06lu] ",

Where "prink_clock()" basically translates into "sched_clock()" in 2.6.24. If I change the 2.6.25 version to directly call "sched_clock()", the timestamps are back to the expected values and are no longer jumping back and forth. So, something in "cpu_clock()" is fishy.

Cheers
Martin