]> git.baikalelectronics.ru Git - kernel.git/commit
hrtimer: fix migration of CB_IRQSAFE_NO_SOFTIRQ hrtimers
authorThomas Gleixner <tglx@linutronix.de>
Mon, 29 Sep 2008 12:09:39 +0000 (14:09 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Mon, 29 Sep 2008 15:09:14 +0000 (17:09 +0200)
commit577e6288ee8ef03aab5650d1ce54593aeffd3fe8
tree97f8a258adcaa0123f143c1f5c53f178d96d76e8
parente3edf560f80fa20e23a97c3ee9c64b02b2dafa7a
hrtimer: fix migration of CB_IRQSAFE_NO_SOFTIRQ hrtimers

Impact: Stale timers after a CPU went offline.

commit 7ef1caf2be0ee171416e3a7922ef66c96e4f7bee
       hrtimer: unlock hrtimer_wakeup

changed the hrtimer sleeper callback mode to CB_IRQSAFE_NO_SOFTIRQ due
to locking problems. A result of this change is that when enqueue is
called for an already expired hrtimer the callback function is not
longer called directly from the enqueue code. The normal callers have
been fixed in the code, but the migration code which moves hrtimers
from a dead CPU to a live CPU was not made aware of this.

This can be fixed by checking the timer state after the call to
enqueue in the migration code.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
kernel/hrtimer.c