From: Kayra Cizmeci <kayracizmeci@gmail.com>
To: Christian Loehle <christian.loehle@arm.com>
Cc: Ingo Molnar <mingo@redhat.com>,
Peter Zijlstra <peterz@infradead.org>,
Juri Lelli <juri.lelli@redhat.com>,
Vincent Guittot <vincent.guittot@linaro.org>,
Dietmar Eggemann <dietmar.eggemann@arm.com>,
Steven Rostedt <rostedt@goodmis.org>,
Ben Segall <bsegall@google.com>, Mel Gorman <mgorman@suse.de>,
Valentin Schneider <vschneid@redhat.com>,
K Prateek Nayak <kprateek.nayak@amd.com>,
Heiko Carstens <hca@linux.ibm.com>,
Vasily Gorbik <gor@linux.ibm.com>,
Alexander Gordeev <agordeev@linux.ibm.com>,
Christian Borntraeger <borntraeger@linux.ibm.com>,
Sven Schnelle <svens@linux.ibm.com>,
linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org,
cocci@inria.fr
Subject: Re: [cocci] [PATCHv2] sched: Replace nr_iowait_cpu() with a bool accessor
Date: Fri, 16 Oct 2026 09:01:09 +0300 [thread overview]
Message-ID: <atG48yxevmlNFT7D@scheduler.schedules> (raw)
In-Reply-To: <20261015083317.3733733-1-christian.loehle@arm.com>
On Thu, Oct 15, 2026 at 09:33:17AM +0100, Christian Loehle wrote:
> The menu governor was the last consumer of the per-CPU I/O-wait count
> that needed its magnitude, apart from nr_iowait() summing it globally.
> Commit 38f83090f515 ("cpuidle: menu: Remove iowait influence") removed
> that use. All remaining per-CPU consumers only test for zero/nonzero.
>
> Replace nr_iowait_cpu() with bool cpu_has_iowait() and update the generic
> and s390 idle accounting callers. Have nr_iowait() read the counters
> directly so that the global total and existing accounting are preserved.
> Replace the stale menu comment with a description of the predicate.
So, this is a cleanup patch? OK.
>
> The conversion was done with coccinelle:
>
> @ predicate depends on patch @
> expression cpu;
> @@
>
> - nr_iowait_cpu(cpu) > 0
> + cpu_has_iowait(cpu)
>
> @ callers depends on patch @
> expression cpu;
> @@
>
> - nr_iowait_cpu(cpu)
> + cpu_has_iowait(cpu)
I had to figure out what coccinelle was first.
Well, I still don't know fully what it is but I think
it's an automatic replacement tool.
I also checked Prateek's findings, I couldn't find more than he finds.
With his changes, all of the places would be covered I think.
>
> Signed-off-by: Christian Loehle <christian.loehle@arm.com>
> ---
> v2: Move the cocci excerpt to the commit message (Peter)
>
>
> arch/s390/kernel/idle.c | 4 ++--
> include/linux/sched/stat.h | 2 +-
> kernel/sched/core.c | 13 +++++--------
> kernel/sched/cputime.c | 10 +++++-----
> 4 files changed, 13 insertions(+), 16 deletions(-)
>
> diff --git a/arch/s390/kernel/idle.c b/arch/s390/kernel/idle.c
> index dd12efb58201..ff9732ef494c 100644
> --- a/arch/s390/kernel/idle.c
> +++ b/arch/s390/kernel/idle.c
> @@ -82,13 +82,13 @@ static u64 arch_cpu_idle_time(int cpu, enum cpu_usage_stat idx, bool compute_del
>
> u64 arch_kcpustat_field_idle(int cpu)
> {
> - return arch_cpu_idle_time(cpu, CPUTIME_IDLE, !nr_iowait_cpu(cpu));
> + return arch_cpu_idle_time(cpu, CPUTIME_IDLE, !cpu_has_iowait(cpu));
> }
> EXPORT_SYMBOL_GPL(arch_kcpustat_field_idle);
>
> u64 arch_kcpustat_field_iowait(int cpu)
> {
> - return arch_cpu_idle_time(cpu, CPUTIME_IOWAIT, nr_iowait_cpu(cpu));
> + return arch_cpu_idle_time(cpu, CPUTIME_IOWAIT, cpu_has_iowait(cpu));
> }
> EXPORT_SYMBOL_GPL(arch_kcpustat_field_iowait);
>
> diff --git a/include/linux/sched/stat.h b/include/linux/sched/stat.h
> index 0108a38bb64d..4810b14d0372 100644
> --- a/include/linux/sched/stat.h
> +++ b/include/linux/sched/stat.h
> @@ -20,7 +20,7 @@ extern int nr_processes(void);
> extern unsigned int nr_running(void);
> extern bool single_task_running(void);
> extern unsigned int nr_iowait(void);
> -extern unsigned int nr_iowait_cpu(int cpu);
> +extern bool cpu_has_iowait(int cpu);
>
> static inline int sched_info_on(void)
> {
> diff --git a/kernel/sched/core.c b/kernel/sched/core.c
> index 1fe40de6ebe3..1bde5187dafd 100644
> --- a/kernel/sched/core.c
> +++ b/kernel/sched/core.c
> @@ -5588,15 +5588,12 @@ unsigned long long nr_context_switches(void)
> }
>
> /*
> - * Consumers of these two interfaces, like for example the cpuidle menu
> - * governor, are using nonsensical data. Preferring shallow idle state selection
> - * for a CPU that has IO-wait which might not even end up running the task when
> - * it does become runnable.
> + * Return whether any tasks are accounted as I/O waiters on this CPU.
> + * They may wake up on a different CPU.
> */
> -
> -unsigned int nr_iowait_cpu(int cpu)
> +bool cpu_has_iowait(int cpu)
> {
> - return atomic_read(&cpu_rq(cpu)->nr_iowait);
> + return atomic_read(&cpu_rq(cpu)->nr_iowait) != 0;
> }
>
> /*
> @@ -5634,7 +5631,7 @@ unsigned int nr_iowait(void)
> unsigned int i, sum = 0;
>
> for_each_possible_cpu(i)
> - sum += nr_iowait_cpu(i);
> + sum += atomic_read(&cpu_rq(i)->nr_iowait);
>
> return sum;
> }
> diff --git a/kernel/sched/cputime.c b/kernel/sched/cputime.c
> index 06bddaa738e5..1f84a950abed 100644
> --- a/kernel/sched/cputime.c
> +++ b/kernel/sched/cputime.c
> @@ -431,7 +431,7 @@ static void kcpustat_idle_stop(struct kernel_cpustat *kc, u64 now)
> if (!kc->idle_elapse)
> return;
>
> - iowait = nr_iowait_cpu(smp_processor_id()) > 0;
> + iowait = cpu_has_iowait(smp_processor_id());
> delta = now - kc->idle_entrytime;
> steal = steal_account_process_time(delta);
Yeah, these look way more cleaner to me.
>
> @@ -544,14 +544,14 @@ static u64 kcpustat_field_dyntick(int cpu, enum cpu_usage_stat idx,
> u64 kcpustat_field_idle(int cpu)
> {
> return kcpustat_field_dyntick(cpu, CPUTIME_IDLE,
> - !nr_iowait_cpu(cpu), ktime_get());
> + !cpu_has_iowait(cpu), ktime_get());
> }
> EXPORT_SYMBOL_GPL(kcpustat_field_idle);
>
> u64 kcpustat_field_iowait(int cpu)
> {
> return kcpustat_field_dyntick(cpu, CPUTIME_IOWAIT,
> - nr_iowait_cpu(cpu), ktime_get());
> + cpu_has_iowait(cpu), ktime_get());
> }
> EXPORT_SYMBOL_GPL(kcpustat_field_iowait);
> #else
> @@ -601,7 +601,7 @@ static u64 get_cpu_sleep_time_us(int cpu, enum cpu_usage_stat idx,
> u64 get_cpu_idle_time_us(int cpu, u64 *last_update_time)
> {
> return get_cpu_sleep_time_us(cpu, CPUTIME_IDLE,
> - !nr_iowait_cpu(cpu), last_update_time);
> + !cpu_has_iowait(cpu), last_update_time);
> }
> EXPORT_SYMBOL_GPL(get_cpu_idle_time_us);
>
> @@ -625,7 +625,7 @@ EXPORT_SYMBOL_GPL(get_cpu_idle_time_us);
> u64 get_cpu_iowait_time_us(int cpu, u64 *last_update_time)
> {
> return get_cpu_sleep_time_us(cpu, CPUTIME_IOWAIT,
> - nr_iowait_cpu(cpu), last_update_time);
> + cpu_has_iowait(cpu), last_update_time);
> }
> EXPORT_SYMBOL_GPL(get_cpu_iowait_time_us);
>
BTW, this is tied to counter being correct, if its not...
Well we have problems. I think your other patch was covering that?
But I have a bad memory, so IDK.
Reviewed-by: Kayra Cizmeci <kayracizmeci@gmail.com>
Thanks!
Kayra
> --
> 2.34.1
>
prev parent reply other threads:[~2026-10-16 6:01 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-15 8:33 [PATCHv2] sched: Replace nr_iowait_cpu() with a bool accessor Christian Loehle
2026-10-15 8:33 ` [cocci] " Christian Loehle
2026-10-15 8:39 ` sashiko-bot
2026-10-16 5:13 ` K Prateek Nayak
2026-10-16 5:13 ` [cocci] " K Prateek Nayak
2026-10-16 6:01 ` Kayra Cizmeci [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=atG48yxevmlNFT7D@scheduler.schedules \
--to=kayracizmeci@gmail.com \
--cc=agordeev@linux.ibm.com \
--cc=borntraeger@linux.ibm.com \
--cc=bsegall@google.com \
--cc=christian.loehle@arm.com \
--cc=cocci@inria.fr \
--cc=dietmar.eggemann@arm.com \
--cc=gor@linux.ibm.com \
--cc=hca@linux.ibm.com \
--cc=juri.lelli@redhat.com \
--cc=kprateek.nayak@amd.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=mgorman@suse.de \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=svens@linux.ibm.com \
--cc=vincent.guittot@linaro.org \
--cc=vschneid@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.