1. 17 Oct, 2008 3 commits
    • Thomas Gleixner's avatar
      NOHZ: restart tick device from irq_enter() · fb02fbc1
      Thomas Gleixner authored
      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: default avatarElias Oltmanns <eo@nebensachen.de>
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Tested-by: default avatarElias Oltmanns <eo@nebensachen.de>
      fb02fbc1
    • Thomas Gleixner's avatar
      NOHZ: split tick_nohz_restart_sched_tick() · c34bec5a
      Thomas Gleixner authored
      Split out the clock event device reprogramming. Preparatory
      patch.
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      c34bec5a
    • Thomas Gleixner's avatar
      NOHZ: unify the nohz function calls in irq_enter() · 719254fa
      Thomas Gleixner authored
      We have two separate nohz function calls in irq_enter() for no good
      reason. Just call a single NOHZ function from irq_enter() and call
      the bits in the tick code.
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      719254fa
  2. 16 Oct, 2008 37 commits