diff options
| -rw-r--r-- | kernel/time/tick-sched.c | 12 | 
1 files changed, 12 insertions, 0 deletions
diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c index b416995b975..8c3fef1db09 100644 --- a/kernel/time/tick-sched.c +++ b/kernel/time/tick-sched.c @@ -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;  |