Re: [PATCH 09/15] tick/sched: Move dyntick-idle cputime accounting to cputime code
From: Peter Zijlstra <peterz@infradead.org>
Date: 2026-01-19 14:36:06
Also in:
linux-s390, linuxppc-dev, lkml
From: Peter Zijlstra <peterz@infradead.org>
Date: 2026-01-19 14:36:06
Also in:
linux-s390, linuxppc-dev, lkml
On Fri, Jan 16, 2026 at 03:52:02PM +0100, Frederic Weisbecker wrote:
+static void kcpustat_idle_stop(struct kernel_cpustat *kc, ktime_t now)
{
+ u64 *cpustat = kc->cpustat;
+ ktime_t delta;
+
+ if (!kc->idle_elapse)
+ return;
+
+ delta = ktime_sub(now, kc->idle_entrytime);
+
+ write_seqcount_begin(&kc->idle_sleeptime_seq);
+ if (nr_iowait_cpu(smp_processor_id()) > 0)
+ cpustat[CPUTIME_IOWAIT] = ktime_add(cpustat[CPUTIME_IOWAIT], delta);
+ else
+ cpustat[CPUTIME_IDLE] = ktime_add(cpustat[CPUTIME_IDLE], delta);
+
+ kc->idle_entrytime = now;
+ kc->idle_elapse = false;
+ write_seqcount_end(&kc->idle_sleeptime_seq);
}
I realize this is mostly code movement; but do we really want to
preserve ktime_{sub,add}() and all that?
I mean, we killed that 32bit ktime nonsense ages ago.
-static void tick_nohz_stop_idle(struct tick_sched *ts, ktime_t now)
-{
- u64 *cpustat = kcpustat_this_cpu->cpustat;
- ktime_t delta;
-
- if (vtime_generic_enabled_this_cpu())
- return;
-
- if (WARN_ON_ONCE(!tick_sched_flag_test(ts, TS_FLAG_IDLE_ACTIVE)))
- return;
-
- delta = ktime_sub(now, ts->idle_entrytime);
-
- write_seqcount_begin(&ts->idle_sleeptime_seq);
- if (nr_iowait_cpu(smp_processor_id()) > 0)
- cpustat[CPUTIME_IOWAIT] = ktime_add(cpustat[CPUTIME_IOWAIT], delta);
- else
- cpustat[CPUTIME_IDLE] = ktime_add(cpustat[CPUTIME_IDLE], delta);
-
- ts->idle_entrytime = now;
- tick_sched_flag_clear(ts, TS_FLAG_IDLE_ACTIVE);
- write_seqcount_end(&ts->idle_sleeptime_seq);
-
- sched_clock_idle_wakeup_event();
-}