diff --git a/kernel/sched/cputime.c b/kernel/sched/cputime.c index 9e0fb8633d82..17f3cbd5d403 100644 --- a/kernel/sched/cputime.c +++ b/kernel/sched/cputime.c @@ -478,7 +478,12 @@ void kcpustat_dyntick_stop(u64 now, u64 tick_start) kc->idle_tick_overlap = 0; } tick_start = max(tick_start, kc->idle_dyntick_entry); - if (!WARN_ON_ONCE(now < tick_start)) + /* + * After a switch from the jiffies clocksource the tick can be + * armed more than a tick ahead, so the period may not have + * started yet. + */ + if (now > tick_start) kc->idle_tick_overlap += now - tick_start; kcpustat_idle_stop(kc, now); kc->idle_dyntick = false;