[PATCH 04/14] powerpc/time: Prepare to stop elapsing in dynticks-idle
Christophe Leroy (CS GROUP)
chleroy at kernel.org
Mon Apr 13 21:00:07 AEST 2026
Le 31/03/2026 à 15:16, Frederic Weisbecker a écrit :
> Currently the tick subsystem stores the idle cputime accounting in
> private fields, allowing cohabitation with architecture idle vtime
> accounting. The former is fetched on online CPUs, the latter on offline
> CPUs.
>
> For consolidation purpose, architecture vtime accounting will continue
> to account the cputime but will make a break when the idle tick is
> stopped. The dyntick cputime accounting will then be relayed by the tick
> subsystem so that the idle cputime is still seen advancing coherently
> even when the tick isn't there to flush the idle vtime.
>
> Prepare for that and introduce three new APIs which will be used in
> subsequent patches:
>
> _ vtime_dynticks_start() is deemed to be called when idle enters in
> dyntick mode. The idle cputime that elapsed so far is accumulated.
>
> - vtime_dynticks_stop() is deemed to be called when idle exits from
> dyntick mode. The vtime entry clocks are fast-forward to current time
> so that idle accounting restarts elapsing from now.
>
> - vtime_reset() is deemed to be called from dynticks idle IRQ entry to
> fast-forward the clock to current time so that the IRQ time is still
> accounted by vtime while nohz cputime is paused.
>
> Also accumulated vtime won't be flushed from dyntick-idle ticks to avoid
> accounting twice the idle cputime, along with nohz accounting.
>
> Signed-off-by: Frederic Weisbecker <frederic at kernel.org>
> Reviewed-by: Shrikanth Hegde <sshegde at linux.ibm.com>
> Tested-by: Shrikanth Hegde <sshegde at linux.ibm.com>
> ---
> arch/powerpc/kernel/time.c | 41 ++++++++++++++++++++++++++++++++++++++
> include/linux/vtime.h | 6 ++++++
> 2 files changed, 47 insertions(+)
>
...
> diff --git a/include/linux/vtime.h b/include/linux/vtime.h
> index 336875bea767..61b94c12d7dd 100644
> --- a/include/linux/vtime.h
> +++ b/include/linux/vtime.h
> @@ -37,11 +37,17 @@ extern void vtime_account_irq(struct task_struct *tsk, unsigned int offset);
> extern void vtime_account_softirq(struct task_struct *tsk);
> extern void vtime_account_hardirq(struct task_struct *tsk);
> extern void vtime_flush(struct task_struct *tsk);
> +extern void vtime_reset(void);
> +extern void vtime_dyntick_start(void);
> +extern void vtime_dyntick_stop(void);
> #else /* !CONFIG_VIRT_CPU_ACCOUNTING_NATIVE */
> static inline void vtime_account_irq(struct task_struct *tsk, unsigned int offset) { }
> static inline void vtime_account_softirq(struct task_struct *tsk) { }
> static inline void vtime_account_hardirq(struct task_struct *tsk) { }
> static inline void vtime_flush(struct task_struct *tsk) { }
> +static inline void vtime_reset(void) { }
> +static inline void vtime_dyntick_start(void) { }
> +extern inline void vtime_dyntick_stop(void) { }
You mean 'static' inline, not 'extern' ?
Christophe
> #endif
>
> /*
More information about the Linuxppc-dev
mailing list