summaryrefslogtreecommitdiffstats
path: root/ipc
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2008-10-17 10:01:23 +0200
committerThomas Gleixner <tglx@apollo.(none)>2008-10-17 18:13:38 +0200
commitfb02fbc14d17837b4b7b02dbb36142c16a7bf208 (patch)
tree9df1d069c5612047c38a9f6d6dc801ee0369ae3c /ipc
parentNOHZ: split tick_nohz_restart_sched_tick() (diff)
downloadlinux-fb02fbc14d17837b4b7b02dbb36142c16a7bf208.tar.xz
linux-fb02fbc14d17837b4b7b02dbb36142c16a7bf208.zip
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>
Diffstat (limited to 'ipc')
0 files changed, 0 insertions, 0 deletions