diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/time/tick-sched.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c index 0581c11fe6c6..727c1ae0517a 100644 --- a/kernel/time/tick-sched.c +++ b/kernel/time/tick-sched.c | |||
@@ -567,11 +567,21 @@ static void tick_nohz_switch_to_nohz(void) | |||
567 | static void tick_nohz_kick_tick(int cpu) | 567 | static void tick_nohz_kick_tick(int cpu) |
568 | { | 568 | { |
569 | struct tick_sched *ts = &per_cpu(tick_cpu_sched, cpu); | 569 | struct tick_sched *ts = &per_cpu(tick_cpu_sched, cpu); |
570 | ktime_t delta, now; | ||
570 | 571 | ||
571 | if (!ts->tick_stopped) | 572 | if (!ts->tick_stopped) |
572 | return; | 573 | return; |
573 | 574 | ||
574 | tick_nohz_restart(ts, ktime_get()); | 575 | /* |
576 | * Do not touch the tick device, when the next expiry is either | ||
577 | * already reached or less/equal than the tick period. | ||
578 | */ | ||
579 | now = ktime_get(); | ||
580 | delta = ktime_sub(ts->sched_timer.expires, now); | ||
581 | if (delta.tv64 <= tick_period.tv64) | ||
582 | return; | ||
583 | |||
584 | tick_nohz_restart(ts, now); | ||
575 | } | 585 | } |
576 | 586 | ||
577 | #else | 587 | #else |