···93 for (;;) {94 if (!clockevents_program_event(dev, next, ktime_get()))95 return;96- tick_periodic(cpu);000000000097 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 need99+ * to be sure we're using a real hardware clocksource.100+ * Otherwise we could get trapped in an infinite101+ * loop, as the tick_periodic() increments jiffies,102+ * when then will increment time, posibly causing103+ * 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}