Messages in this thread | | | Subject | Re: [PATCH] clocksource: Avoid selecting mult values that might overflow when adjusted | From | John Stultz <> | Date | Fri, 04 Nov 2011 09:11:52 -0400 |
| |
On Thu, 2011-11-03 at 22:10 +0100, Ingo Molnar wrote: > * John Stultz <john.stultz@linaro.org> wrote: > > > For some frequqencies, the clocks_calc_mult_shift() function will > > unfortunately select mult values very close to 0xffffffff. This > > has the potential to overflow when NTP adjusts the clock, adding > > to the mult value. > > > > This patch adds a clocksource.maxadj value, which provides > > an approximation of an 11% adjustment(NTP limits adjustments to > > 500ppm and the tick adjustment is limited to 10%), which could > > be made to the clocksource.mult value. This is then used to both > > check that the current mult value won't overflow/underflow, as > > well as warning us if the timekeeping_adjust() code pushes over > > that 11% boundary. > > > > CC: Yong Zhang <yong.zhang0@gmail.com> > > CC: David Daney <ddaney.cavm@gmail.com> > > CC: Thomas Gleixner <tglx@linutronix.de> > > Reported-by: Chen Jie <chenj@lemote.com> > > Reported-by: zhangfx <zhangfx@lemote.com> > > Signed-off-by: John Stultz <john.stultz@linaro.org> > > --- > > include/linux/clocksource.h | 3 +- > > kernel/time/clocksource.c | 53 ++++++++++++++++++++++++++++++++++-------- > > kernel/time/timekeeping.c | 3 ++ > > 3 files changed, 48 insertions(+), 11 deletions(-) > > This patch (included in tip:timers/urgent) causes the following boot > warning x86: > > [ 0.000000] Fast TSC calibration using PIT > [ 0.000000] ------------[ cut here ]------------ > [ 0.000000] WARNING: at kernel/time/timekeeping.c:855 do_timer+0x47f/0x4c0() > [ 0.000000] Hardware name: System Product Name > [ 0.000000] Adjusting more then 11% > [ 0.000000] Modules linked in: > [ 0.000000] Pid: 0, comm: swapper Not tainted 3.1.0-tip+ #161792 > [ 0.000000] Call Trace: > [ 0.000000] <IRQ> [<ffffffff81042d0a>] warn_slowpath_common+0x7a/0xb0 > [ 0.000000] [<ffffffff81042de1>] warn_slowpath_fmt+0x41/0x50 > [ 0.000000] [<ffffffff8106e78f>] do_timer+0x47f/0x4c0 > [ 0.000000] [<ffffffff81073953>] tick_periodic+0x63/0x80 > [ 0.000000] [<ffffffff810739f1>] tick_handle_periodic+0x21/0x70 > [ 0.000000] [<ffffffff810046d8>] timer_interrupt+0x18/0x20 > [ 0.000000] [<ffffffff8109ff9e>] handle_irq_event_percpu+0x5e/0x220 > [ 0.000000] [<ffffffff810a019b>] handle_irq_event+0x3b/0x60 > [ 0.000000] [<ffffffff810a295c>] handle_level_irq+0x6c/0xd0 > [ 0.000000] [<ffffffff81003f34>] handle_irq+0x44/0xa0 > > Full bootlog and config attached. > > i've excluded it from tip:master for now.
Sounds good. Thanks for the heads up. Do you have a dmesg for this system as well, so I can narrow down what I should try to reproduce this on?
Just FYI: I'm traveling, but will try to nail this down early next week. thanks -john
| |