diff --git a/kernel/time/tick-broadcast.c b/kernel/time/tick-broadcast.c index f113755..3adaff35 100644 --- a/kernel/time/tick-broadcast.c +++ b/kernel/time/tick-broadcast.c @@ -346,8 +346,12 @@ int tick_resume_broadcast(void) tick_get_broadcast_mask()); break; case TICKDEV_MODE_ONESHOT: - if (!cpumask_empty(tick_get_broadcast_mask())) + if (!cpumask_empty(tick_get_broadcast_mask())) { broadcast = tick_resume_broadcast_oneshot(bc); + clockevents_program_event(bc, + ktime_add_ns(ktime_get(), 5 * NSEC_PER_SEC), + 1); + break; } } @@ -439,6 +443,14 @@ again: * in the event mask */ if (next_event.tv64 != KTIME_MAX) { + s64 delta; + + delta = next_event.tv64 - now.tv64; + if (delta >= 10000000000) { + printk("%s(): The delta is big: %lld\n", __func__, delta); + next_event.tv64 = now.tv64 + 3000000000; + } + /* * Rearm the broadcast device. If event expired, * repeat the above