]> git.baikalelectronics.ru Git - kernel.git/commit
[PATCH] dynticks: fix hrtimer rounding error in next_timer_interrupt
authorThomas Gleixner <tglx@linutronix.de>
Sun, 25 Mar 2007 12:31:17 +0000 (14:31 +0200)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Sun, 25 Mar 2007 21:57:34 +0000 (14:57 -0700)
commit0bdb052da908bdce54936b4db545bca55bbd98fa
tree7983c4cc3c82e465cfe88a7fd67e39dbed72e1e0
parent7d835f5249296b0d6cb3072aa2de5b5659608ac0
[PATCH] dynticks: fix hrtimer rounding error in next_timer_interrupt

The rework of next_timer_interrupt() fixed the timer wheel bugs, but
invented a rounding error versus the next hrtimer event. This is caused
by the conversion of the hrtimer internal representation to relative
jiffies.

This causes bug #8100:
http://bugzilla.kernel.org/show_bug.cgi?id=8100

next_timer_interrupt() returns "now" in such a case and causes the code
in tick_nohz_stop_sched_tick() to trigger the timer softirq, which is
bogus as no timer is due for expiry. This results in an endless context
switching between idle and ksoftirqd until a timer is due for expiry.

Modify the hrtimer evaluation so that, it returns now + 1, when the
conversion results in a delta < 1 jiffie.

It's confirmed to resolve bug #8100

Reported-by: Emil Karlson <jkarlson@cc.hut.fi>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
kernel/timer.c