From: "Kunwu Chan" <kunwu.chan@linux.dev>
To: paulmck@kernel.org
Cc: frederic@kernel.org, neeraj.upadhyay@kernel.org,
joelagnelf@nvidia.com, josh@joshtriplett.org, boqun@kernel.org,
urezki@gmail.com, rostedt@goodmis.org,
mathieu.desnoyers@efficios.com, jiangshanlai@gmail.com,
qiang.zhang@linux.dev, dave@stgolabs.net, rcu@vger.kernel.org,
linux-kernel@vger.kernel.org, "Kunwu Chan" <kunwu.chan@gmail.com>,
"Wang Lian" <lianux.mm@gmail.com>
Subject: Re: [PATCH] rcu: Use task_state_to_char() in stall-warning prints
Date: Fri, 12 Jun 2026 01:23:40 +0000 [thread overview]
Message-ID: <96599e5fe18341789306574cf0cc346a9cc2a36a@linux.dev> (raw)
In-Reply-To: <442e80e0-4f91-421c-ab68-d26e0a031472@paulmck-laptop>
June 12, 2026 at 3:58 AM, "Paul E. McKenney" <paulmck@kernel.org mailto:paulmck@kernel.org?to=%22Paul%20E.%20McKenney%22%20%3Cpaulmck%40kernel.org%3E > wrote:
>
> On Thu, Jun 11, 2026 at 03:32:01PM +0800, Kunwu Chan wrote:
>
> >
> > From: Kunwu Chan <kunwu.chan@gmail.com>
> >
> > RCU stall warnings currently print task states as raw hexadecimal
> > values (e.g., ->state=0x402), forcing developers to manually decode
> > them from memory.
> >
> > Replace these raw hex values with the compact, single-letter symbols
> > already established by sched_show_task():
> >
> > ->state=0x402 becomes ->state=I (TASK_IDLE)
> > ->state=0x0 becomes ->state=R (TASK_RUNNING)
> > ->state=0x2 becomes ->state=D (TASK_UNINTERRUPTIBLE)
> >
> > Convert five print sites across tree_stall.h, rcutorture.c, and
> > hazptrtorture.c to use task_state_to_char() instead of the raw
> > ->__state value.
> >
> > Suggested-by: Zqiang <qiang.zhang@linux.dev>
> > Co-developed-by: Wang Lian <lianux.mm@gmail.com>
> > Signed-off-by: Wang Lian <lianux.mm@gmail.com>
> > Signed-off-by: Kunwu Chan <kunwu.chan@gmail.com>
> >
> Nice!
>
> But could you please split this into three commits, one for each file?
> That makes it easier to create branches to send to Linus. Especially
> since hazptrtorture.c will likely be in a different pull request. ;-)
>
> Thanx, Paul
>
Sure, I'll split it into one commit per file.
Makes sense, especially for the hazptr one. ;-)
Thanks!
> >
> > ---
> > Based on: linux-rcu repo (dev branch)
> > URL: https://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git
> > base-commit: 85bf11e84 ("smp: Make CSD lock acquisition atomic for debug mode")
> > ---
> > kernel/rcu/hazptrtorture.c | 4 ++--
> > kernel/rcu/rcutorture.c | 4 ++--
> > kernel/rcu/tree_stall.h | 12 ++++++------
> > 3 files changed, 10 insertions(+), 10 deletions(-)
> >
> > diff --git a/kernel/rcu/hazptrtorture.c b/kernel/rcu/hazptrtorture.c
> > index 0da0a4606..19ea479c9 100644
> > --- a/kernel/rcu/hazptrtorture.c
> > +++ b/kernel/rcu/hazptrtorture.c
> > @@ -497,10 +497,10 @@ hazptr_torture_stats_print(void)
> > unsigned long __maybe_unused gp_seq = 0;
> >
> > wtp = READ_ONCE(writer_task);
> > - pr_alert("??? Writer stall state %s(%d) g%lu f%#x ->state %#x cpu %d\n",
> > + pr_alert("??? Writer stall state %s(%d) g%lu f%#x ->state %c cpu %d\n",
> > hazptr_torture_writer_state_getname(),
> > hazptr_torture_writer_state, gp_seq, flags,
> > - wtp == NULL ? ~0U : wtp->__state,
> > + wtp == NULL ? '?' : task_state_to_char(wtp),
> > wtp == NULL ? -1 : (int)task_cpu(wtp));
> > if (!splatted && wtp) {
> > sched_show_task(wtp);
> > diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
> > index fcb421ced..4d4ebeeea 100644
> > --- a/kernel/rcu/rcutorture.c
> > +++ b/kernel/rcu/rcutorture.c
> > @@ -3074,10 +3074,10 @@ rcu_torture_stats_print(void)
> > if (cur_ops->get_gp_data)
> > cur_ops->get_gp_data(&flags, &gp_seq);
> > wtp = READ_ONCE(writer_task);
> > - pr_alert("??? Writer stall state %s(%d) g%lu f%#x ->state %#x cpu %d\n",
> > + pr_alert("??? Writer stall state %s(%d) g%lu f%#x ->state %c cpu %d\n",
> > rcu_torture_writer_state_getname(),
> > rcu_torture_writer_state, gp_seq, flags,
> > - wtp == NULL ? ~0U : wtp->__state,
> > + wtp == NULL ? '?' : task_state_to_char(wtp),
> > wtp == NULL ? -1 : (int)task_cpu(wtp));
> > if (!splatted && wtp) {
> > sched_show_task(wtp);
> > diff --git a/kernel/rcu/tree_stall.h b/kernel/rcu/tree_stall.h
> > index 317ef91b1..7ca434b08 100644
> > --- a/kernel/rcu/tree_stall.h
> > +++ b/kernel/rcu/tree_stall.h
> > @@ -596,13 +596,13 @@ static void rcu_check_gp_kthread_starvation(void)
> >
> > if (rcu_is_gp_kthread_starving(&j)) {
> > cpu = gpk ? task_cpu(gpk) : -1;
> > - pr_err("%s kthread starved for %ld jiffies! g%ld f%#x %s(%d) ->state=%#x ->cpu=%d\n",
> > + pr_err("%s kthread starved for %ld jiffies! g%ld f%#x %s(%d) ->state=%c ->cpu=%d\n",
> > rcu_state.name, j,
> > (long)rcu_seq_current(&rcu_state.gp_seq),
> > data_race(READ_ONCE(rcu_state.gp_flags)),
> > gp_state_getname(rcu_state.gp_state),
> > data_race(READ_ONCE(rcu_state.gp_state)),
> > - gpk ? data_race(READ_ONCE(gpk->__state)) : ~0, cpu);
> > + gpk ? task_state_to_char(gpk) : '?', cpu);
> > if (gpk) {
> > struct rcu_data *rdp = per_cpu_ptr(&rcu_data, cpu);
> >
> > @@ -639,12 +639,12 @@ static void rcu_check_gp_kthread_expired_fqs_timer(void)
> > time_after(jiffies, jiffies_fqs + RCU_STALL_MIGHT_MIN) &&
> > gpk && !READ_ONCE(gpk->on_rq)) {
> > cpu = task_cpu(gpk);
> > - pr_err("%s kthread timer wakeup didn't happen for %ld jiffies! g%ld f%#x %s(%d) ->state=%#x\n",
> > + pr_err("%s kthread timer wakeup didn't happen for %ld jiffies! g%ld f%#x %s(%d) ->state=%c\n",
> > rcu_state.name, (jiffies - jiffies_fqs),
> > (long)rcu_seq_current(&rcu_state.gp_seq),
> > data_race(READ_ONCE(rcu_state.gp_flags)), // Diagnostic read
> > gp_state_getname(RCU_GP_WAIT_FQS), RCU_GP_WAIT_FQS,
> > - data_race(READ_ONCE(gpk->__state)));
> > + task_state_to_char(gpk));
> > pr_err("\tPossible timer handling issue on cpu=%d timer-softirq=%u\n",
> > cpu, kstat_softirqs_cpu(TIMER_SOFTIRQ, cpu));
> > }
> > @@ -971,10 +971,10 @@ void show_rcu_gp_kthreads(void)
> > jr = j - data_race(READ_ONCE(rcu_state.gp_req_activity));
> > js = j - data_race(READ_ONCE(rcu_state.gp_start));
> > jw = j - data_race(READ_ONCE(rcu_state.gp_wake_time));
> > - pr_info("%s: wait state: %s(%d) ->state: %#x ->rt_priority %u delta ->gp_start %lu ->gp_activity %lu ->gp_req_activity %lu ->gp_wake_time %lu ->gp_wake_seq %ld ->gp_seq %ld ->gp_seq_needed %ld ->gp_max %lu ->gp_flags %#x\n",
> > + pr_info("%s: wait state: %s(%d) ->state: %c ->rt_priority %u delta ->gp_start %lu ->gp_activity %lu ->gp_req_activity %lu ->gp_wake_time %lu ->gp_wake_seq %ld ->gp_seq %ld ->gp_seq_needed %ld ->gp_max %lu ->gp_flags %#x\n",
> > rcu_state.name, gp_state_getname(rcu_state.gp_state),
> > data_race(READ_ONCE(rcu_state.gp_state)),
> > - t ? data_race(READ_ONCE(t->__state)) : 0x1ffff, t ? t->rt_priority : 0xffU,
> > + t ? task_state_to_char(t) : '?', t ? t->rt_priority : 0xffU,
> > js, ja, jr, jw, (long)data_race(READ_ONCE(rcu_state.gp_wake_seq)),
> > (long)data_race(READ_ONCE(rcu_state.gp_seq)),
> > (long)data_race(READ_ONCE(rcu_get_root()->gp_seq_needed)),
> > --
> > 2.43.0
> >
>
prev parent reply other threads:[~2026-06-12 1:24 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-11 7:32 [PATCH] rcu: Use task_state_to_char() in stall-warning prints Kunwu Chan
2026-06-11 19:58 ` Paul E. McKenney
2026-06-12 1:23 ` Kunwu Chan [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=96599e5fe18341789306574cf0cc346a9cc2a36a@linux.dev \
--to=kunwu.chan@linux.dev \
--cc=boqun@kernel.org \
--cc=dave@stgolabs.net \
--cc=frederic@kernel.org \
--cc=jiangshanlai@gmail.com \
--cc=joelagnelf@nvidia.com \
--cc=josh@joshtriplett.org \
--cc=kunwu.chan@gmail.com \
--cc=lianux.mm@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=neeraj.upadhyay@kernel.org \
--cc=paulmck@kernel.org \
--cc=qiang.zhang@linux.dev \
--cc=rcu@vger.kernel.org \
--cc=rostedt@goodmis.org \
--cc=urezki@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox