aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/timer.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/timer.c')
-rw-r--r--kernel/timer.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/kernel/timer.c b/kernel/timer.c
index 7fada698bd1a..a61c09374eba 100644
--- a/kernel/timer.c
+++ b/kernel/timer.c
@@ -1326,18 +1326,21 @@ static unsigned long cmp_next_hrtimer_event(unsigned long now,
1326unsigned long get_next_timer_interrupt(unsigned long now) 1326unsigned long get_next_timer_interrupt(unsigned long now)
1327{ 1327{
1328 struct tvec_base *base = __this_cpu_read(tvec_bases); 1328 struct tvec_base *base = __this_cpu_read(tvec_bases);
1329 unsigned long expires; 1329 unsigned long expires = now + NEXT_TIMER_MAX_DELTA;
1330 1330
1331 /* 1331 /*
1332 * Pretend that there is no timer pending if the cpu is offline. 1332 * Pretend that there is no timer pending if the cpu is offline.
1333 * Possible pending timers will be migrated later to an active cpu. 1333 * Possible pending timers will be migrated later to an active cpu.
1334 */ 1334 */
1335 if (cpu_is_offline(smp_processor_id())) 1335 if (cpu_is_offline(smp_processor_id()))
1336 return now + NEXT_TIMER_MAX_DELTA; 1336 return expires;
1337
1337 spin_lock(&base->lock); 1338 spin_lock(&base->lock);
1338 if (time_before_eq(base->next_timer, base->timer_jiffies)) 1339 if (base->active_timers) {
1339 base->next_timer = __next_timer_interrupt(base); 1340 if (time_before_eq(base->next_timer, base->timer_jiffies))
1340 expires = base->next_timer; 1341 base->next_timer = __next_timer_interrupt(base);
1342 expires = base->next_timer;
1343 }
1341 spin_unlock(&base->lock); 1344 spin_unlock(&base->lock);
1342 1345
1343 if (time_before_eq(expires, now)) 1346 if (time_before_eq(expires, now))