Thomas Gleixner fb02fbc14d NOHZ: restart tick device from irq_enter()
We did not restart the tick device from irq_enter() to avoid double
reprogramming and extra events in the return immediate to idle case.

But long lasting softirqs can lead to a situation where jiffies become
stale:

idle()
  tick stopped (reprogrammed to next pending timer)
  halt()
   interrupt
     jiffies updated from irq_enter()
     interrupt handler
     softirq function 1 runs 20ms
     softirq function 2 arms a 10ms timer with a stale jiffies value
     jiffies updated from irq_exit()
     timer wheel has now an already expired timer
     (the one added in function 2)
     timer fires and timer softirq runs

This was discovered when debugging a timer problem which happend only
when the ath5k driver is active. The debugging proved that there is a
softirq function running for more than 20ms, which is a bug by itself.

To solve this we restart the tick timer right from irq_enter(), but do
not go through the other functions which are necessary to return from
idle when need_resched() is set.

Reported-by: Elias Oltmanns <eo@nebensachen.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Elias Oltmanns <eo@nebensachen.de>
2008-10-17 18:13:38 +02:00
..
2008-08-14 14:58:01 +02:00
2008-10-16 11:21:30 -07:00
2008-07-26 20:53:20 -04:00
2008-10-13 09:51:40 -07:00
2008-07-28 14:37:38 +02:00
2008-07-26 12:00:09 -07:00
2008-08-13 12:55:10 +02:00
2008-10-16 11:21:32 -07:00
2008-09-02 19:21:40 -07:00
2008-08-19 20:37:07 -07:00
2008-10-16 11:21:31 -07:00
2008-10-16 11:21:51 -07:00
2008-10-16 11:21:31 -07:00
2008-07-25 10:53:45 -07:00
2008-10-16 11:21:51 -07:00
2008-08-11 13:46:53 +02:00
2008-10-16 11:21:47 -07:00
2008-10-16 11:21:31 -07:00