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:23 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 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.