All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] rcu: Use task_state_to_char() in stall-warning prints
@ 2026-06-11  7:32 Kunwu Chan
  2026-06-11 19:58 ` Paul E. McKenney
  0 siblings, 1 reply; 3+ messages in thread
From: Kunwu Chan @ 2026-06-11  7:32 UTC (permalink / raw)
  To: paulmck, frederic, neeraj.upadhyay, joelagnelf, josh, boqun,
	urezki, rostedt, mathieu.desnoyers, jiangshanlai, qiang.zhang,
	dave
  Cc: rcu, linux-kernel, Kunwu Chan, Wang Lian

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>

---
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


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] rcu: Use task_state_to_char() in stall-warning prints
  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
  0 siblings, 1 reply; 3+ messages in thread
From: Paul E. McKenney @ 2026-06-11 19:58 UTC (permalink / raw)
  To: Kunwu Chan
  Cc: frederic, neeraj.upadhyay, joelagnelf, josh, boqun, urezki,
	rostedt, mathieu.desnoyers, jiangshanlai, qiang.zhang, dave, rcu,
	linux-kernel, Kunwu Chan, Wang Lian

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

> ---
> 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
> 
> 

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] rcu: Use task_state_to_char() in stall-warning prints
  2026-06-11 19:58 ` Paul E. McKenney
@ 2026-06-12  1:23   ` Kunwu Chan
  0 siblings, 0 replies; 3+ messages in thread
From: Kunwu Chan @ 2026-06-12  1:23 UTC (permalink / raw)
  To: paulmck
  Cc: frederic, neeraj.upadhyay, joelagnelf, josh, boqun, urezki,
	rostedt, mathieu.desnoyers, jiangshanlai, qiang.zhang, dave, rcu,
	linux-kernel, Kunwu Chan, Wang Lian

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
> >
>

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-06-12  1:23 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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 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.