|
@@ -160,6 +160,18 @@ void tick_nohz_stop_sched_tick(void)
|
|
|
cpu = smp_processor_id();
|
|
|
ts = &per_cpu(tick_cpu_sched, cpu);
|
|
|
|
|
|
+ /*
|
|
|
+ * If this cpu is offline and it is the one which updates
|
|
|
+ * jiffies, then give up the assignment and let it be taken by
|
|
|
+ * the cpu which runs the tick timer next. If we don't drop
|
|
|
+ * this here the jiffies might be stale and do_timer() never
|
|
|
+ * invoked.
|
|
|
+ */
|
|
|
+ if (unlikely(!cpu_online(cpu))) {
|
|
|
+ if (cpu == tick_do_timer_cpu)
|
|
|
+ tick_do_timer_cpu = -1;
|
|
|
+ }
|
|
|
+
|
|
|
if (unlikely(ts->nohz_mode == NOHZ_MODE_INACTIVE))
|
|
|
goto end;
|
|
|
|