• Z
    [PATCH] Fix a NO_IDLE_HZ timer bug · 0662b713
    Zachary Amsden 提交于
    Under certain timing conditions, a race during boot occurs where timer
    ticks are being processed on remote CPUs.  The remote timer ticks can
    increment jiffies, and if this happens during a window when a timeout is
    very close to expiring but a local tick has not yet been delivered, you can
    end up with
    
    1) No softirq pending
    2) A local timer wheel which is not synced to jiffies
    3) No high resolution timer active
    4) A local timer which is supposed to fire before the current jiffies value.
    
    In this circumstance, the comparison in next_timer_interrupt overflows,
    because the base of the comparison for high resolution timers is jiffies,
    but for the softirq timer wheel, it is relative the the current base of the
    wheel (jiffies_base).
    Signed-off-by: NZachary Amsden <zach@vmware.com>
    Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
    Cc: Oleg Nesterov <oleg@tv-sign.ru>
    Signed-off-by: NAndrew Morton <akpm@osdl.org>
    Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
    0662b713
timer.c 41.3 KB