Merge branch 'timers/urgent' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip

* 'timers/urgent' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
clockevents: prevent endless loop in tick_handle_periodic()

+11 -1
+11 -1
kernel/time/tick-common.c
··· 93 for (;;) { 94 if (!clockevents_program_event(dev, next, ktime_get())) 95 return; 96 - tick_periodic(cpu); 97 next = ktime_add(next, tick_period); 98 } 99 }
··· 93 for (;;) { 94 if (!clockevents_program_event(dev, next, ktime_get())) 95 return; 96 + /* 97 + * Have to be careful here. If we're in oneshot mode, 98 + * before we call tick_periodic() in a loop, we need 99 + * to be sure we're using a real hardware clocksource. 100 + * Otherwise we could get trapped in an infinite 101 + * loop, as the tick_periodic() increments jiffies, 102 + * when then will increment time, posibly causing 103 + * the loop to trigger again and again. 104 + */ 105 + if (timekeeping_valid_for_hres()) 106 + tick_periodic(cpu); 107 next = ktime_add(next, tick_period); 108 } 109 }