diff options
Diffstat (limited to 'kernel/time/tick-sched.c')
-rw-r--r-- | kernel/time/tick-sched.c | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c index 7656642e4b8e..3526038f2836 100644 --- a/kernel/time/tick-sched.c +++ b/kernel/time/tick-sched.c | |||
@@ -182,11 +182,7 @@ static void tick_nohz_stop_idle(int cpu, ktime_t now) | |||
182 | 182 | ||
183 | static ktime_t tick_nohz_start_idle(int cpu, struct tick_sched *ts) | 183 | static ktime_t tick_nohz_start_idle(int cpu, struct tick_sched *ts) |
184 | { | 184 | { |
185 | ktime_t now; | 185 | ktime_t now = ktime_get(); |
186 | |||
187 | now = ktime_get(); | ||
188 | |||
189 | update_ts_time_stats(cpu, ts, now, NULL); | ||
190 | 186 | ||
191 | ts->idle_entrytime = now; | 187 | ts->idle_entrytime = now; |
192 | ts->idle_active = 1; | 188 | ts->idle_active = 1; |
@@ -562,20 +558,21 @@ void tick_nohz_idle_exit(void) | |||
562 | 558 | ||
563 | local_irq_disable(); | 559 | local_irq_disable(); |
564 | 560 | ||
565 | if (ts->idle_active || (ts->inidle && ts->tick_stopped)) | 561 | WARN_ON_ONCE(!ts->inidle); |
562 | |||
563 | ts->inidle = 0; | ||
564 | |||
565 | if (ts->idle_active || ts->tick_stopped) | ||
566 | now = ktime_get(); | 566 | now = ktime_get(); |
567 | 567 | ||
568 | if (ts->idle_active) | 568 | if (ts->idle_active) |
569 | tick_nohz_stop_idle(cpu, now); | 569 | tick_nohz_stop_idle(cpu, now); |
570 | 570 | ||
571 | if (!ts->inidle || !ts->tick_stopped) { | 571 | if (!ts->tick_stopped) { |
572 | ts->inidle = 0; | ||
573 | local_irq_enable(); | 572 | local_irq_enable(); |
574 | return; | 573 | return; |
575 | } | 574 | } |
576 | 575 | ||
577 | ts->inidle = 0; | ||
578 | |||
579 | /* Update jiffies first */ | 576 | /* Update jiffies first */ |
580 | select_nohz_load_balancer(0); | 577 | select_nohz_load_balancer(0); |
581 | tick_do_update_jiffies64(now); | 578 | tick_do_update_jiffies64(now); |