diff options
Diffstat (limited to 'kernel/time/tick-sched.c')
| -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 b416995b9757..8c3fef1db09c 100644 --- a/kernel/time/tick-sched.c +++ b/kernel/time/tick-sched.c | |||
| @@ -160,6 +160,18 @@ void tick_nohz_stop_sched_tick(void) | |||
| 160 | cpu = smp_processor_id(); | 160 | cpu = smp_processor_id(); |
| 161 | ts = &per_cpu(tick_cpu_sched, cpu); | 161 | ts = &per_cpu(tick_cpu_sched, cpu); |
| 162 | 162 | ||
| 163 | /* | ||
| 164 | * If this cpu is offline and it is the one which updates | ||
| 165 | * jiffies, then give up the assignment and let it be taken by | ||
| 166 | * the cpu which runs the tick timer next. If we don't drop | ||
| 167 | * this here the jiffies might be stale and do_timer() never | ||
| 168 | * invoked. | ||
| 169 | */ | ||
| 170 | if (unlikely(!cpu_online(cpu))) { | ||
| 171 | if (cpu == tick_do_timer_cpu) | ||
| 172 | tick_do_timer_cpu = -1; | ||
| 173 | } | ||
| 174 | |||
| 163 | if (unlikely(ts->nohz_mode == NOHZ_MODE_INACTIVE)) | 175 | if (unlikely(ts->nohz_mode == NOHZ_MODE_INACTIVE)) |
| 164 | goto end; | 176 | goto end; |
| 165 | 177 | ||
