All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Zqiang" <qiang.zhang@linux.dev>
To: "Joel Fernandes" <joelagnelf@nvidia.com>
Cc: paulmck@kernel.org, frederic@kernel.org,
	neeraj.upadhyay@kernel.org, urezki@gmail.com, boqun@kernel.org,
	rcu@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2] rcutorture: Avoid create fwd_prog_tasks for tasks-rude and srcu-atomic
Date: Mon, 02 Nov 2026 13:50:17 +0000	[thread overview]
Message-ID: <2b7d3fd6bc409170cb5207d74eb9ded4a5874b53@linux.dev> (raw)
In-Reply-To: <ACA82057-9E74-41CD-8EEE-1D59E98D2D41@nvidia.com>

> 
> > 
> > On Oct 30, 2026, at 8:14 AM, Zqiang <qiang.zhang@linux.dev> wrote:
> >  
> >  
> > 
> > > 
> > > 
> > > 
> >  On Fri, Oct 23, 2026 at 05:37:16PM +0800, Zqiang wrote:
> >  
> >  
> >  When running the tasks-rude and srcu-atomic tests, the fwd_prog_tasks
> >  kthread is created because the default value of fwd_progress is 1.
> >  however, the two RCU flavors not support ->call():
> >  
> >  1. tasks-rude: commit b428a9de9bba ("rcutorture: Stop testing RCU Tasks
> >  Rude asynchronous APIs") removed .call and .cb_barrier from tasks-rude,
> >  but left the .cbflood_max = 50000.
> >  
> >  2. srcu-atomic: srcu_torture_init_forbidden_apis() sets ->call to NULL
> >  for SRCU_READ_FLAVOR_ATOMIC runs, but leaves ->cbflood_max untouched.
> >  
> >  In both cases, the non-zero ->cbflood_max fools the check above into
> >  creating the fwd_prog_tasks kthreads, even though those kthreads cannot
> >  possibly carry out any forward-progress test:
> >  
> >  1. The rcu_torture_fwd_prog_cr() returns immediately due to cur_ops->call
> >  is NULL:
> >  
> >  [ 68.022674] rcu_torture_fwd_prog_cr: No ->call(), so no forward-progress test 0
> >  [ 129.462046] rcu_torture_fwd_prog_cr: No ->call(), so no forward-progress test 0
> >  [ 190.902123] rcu_torture_fwd_prog_cr: No ->call(), so no forward-progress test 0
> >  [ 252.343809] rcu_torture_fwd_prog_cr: No ->call(), so no forward-progress test 0
> >  
> >  2. The rcu_torture_fwd_prog_nr() is never even invoked, because its caller
> >  requires cur_ops->stall_dur, and neither tasks-rude nor srcu-atomic
> >  provide ->stall_dur (only rcu_ops does).
> >  
> >  Therefore, creating fwd_prog_tasks kthreads is pointless, this commit adds
> >  ->call and ->cb_barrier to the forward-progress check, rejecting flavors
> >  that lack the cbflood_max set and a positive ->stall_dur.
> >  
> >  simple verification output:
> >  
> >  [ 3.062959][ T1] srcu-torture: rcu_torture_fwd_prog_init: Disabled, unsupported by RCU flavor under test
> >  [ 2.922323][ T1] tasks-rude-torture: rcu_torture_fwd_prog_init: Disabled, unsupported by RCU flavor under test
> >  
> >  Suggested-by: Joel Fernandes <joelagnelf@nvidia.com>
> >  Signed-off-by: Zqiang <qiang.zhang@linux.dev>
> >  
> > 
> > > 
> > > Reviewed-by: Paul E. McKenney <paulmck@kernel.org>
> > >  
> > >  It would nevertheless be good to run tests demonstrating that
> > >  forward-progress testing happens and does not happen on the same
> > >  rcu_torture_ops structures as before. Just in case I lost my
> > >  way through that boolean expression. ;-)
> > > 
> >  
> >  Ok, I see. thanks Paul ;-) .
> > 
> So let me know Zqiang once you are confident on the testing from and I will apply it for 7.5.


Hello, Joel

I have make simple testing for all rcu flavor:

rcu:

[    3.871868][  T158] rcu-torture: rcu_torture_fwd_progress task started
[    3.874347][    T1] tasks-torture: rcu_torture_fwd_prog_init: Disabled, unsupported by RCU flavor under test
[    3.862128][    T1] tasks-tracing-torture: Creating rcu_torture_fwd_prog task
[    3.857800][    T1] tasks-rude-torture: rcu_torture_fwd_prog_init: Disabled, unsupported by RCU flavor under test
[    3.435733][    T1] busted-torture: rcu_torture_fwd_prog_init: Disabled, unsupported by RCU flavor under test

srcu:

[    3.676067][    T1] srcu-torture: srcu_torture_init normal SRCU
[    3.691425][    T1] srcu-torture: Creating rcu_torture_fwd_prog task

[    3.467289][    T1] srcu-torture: srcu_torture_init NMI-safe SRCU
[    3.482983][    T1] srcu-torture: Creating rcu_torture_fwd_prog task

[    3.457597][    T1] srcu-torture: srcu_torture_init fast SRCU
[    3.475676][    T1] srcu-torture: Creating rcu_torture_fwd_prog task

[    3.381378][    T1] srcu-torture: srcu_torture_init fast-up/down SRCU
[    3.397417][    T1] srcu-torture: Creating rcu_torture_fwd_prog task

[    3.479642][    T1] srcu-torture: srcu_torture_init atomic SRCU
[    3.488532][    T1] srcu-torture: rcu_torture_fwd_prog_init: Disabled, unsupported by RCU flavor under test

srcud:

[    3.898271][    T1] srcud-torture: srcud_torture_init normal SRCU
[    3.915141][    T1] srcud-torture: Creating rcu_torture_fwd_prog task

[    3.586829][    T1] srcud-torture: srcud_torture_init NMI-safe SRCU
[    3.604943][  T146] srcud-torture: rcu_torture_fwd_progress task started

[    3.617095][    T1] srcud-torture: srcud_torture_init fast SRCU
[    3.635608][    T1] srcud-torture: Creating rcu_torture_fwd_prog task

[    3.915194][    T1] srcud-torture: srcud_torture_init fast-up/down SRCU
[    3.933086][    T1] srcud-torture: Creating rcu_torture_fwd_prog task

[    3.866575][    T1] srcud-torture: srcud_torture_init atomic SRCU
[    3.883949][    T1] srcud-torture: rcu_torture_fwd_prog_init: Disabled, unsupported by RCU flavor under test

srcud-busted:

[    3.382474][    T1] busted_srcud-torture: srcu_torture_init normal SRCU
[    3.389525][    T1] busted_srcud-torture: rcu_torture_fwd_prog_init: Disabled, unsupported by RCU flavor under test

[    3.423111][    T1] busted_srcud-torture: srcu_torture_init NMI-safe SRCU
[    3.432941][    T1] busted_srcud-torture: rcu_torture_fwd_prog_init: Disabled, unsupported by RCU flavor under test

[    3.364002][    T1] busted_srcud-torture: srcu_torture_init fast SRCU
[    3.372654][    T1] busted_srcud-torture: rcu_torture_fwd_prog_init: Disabled, unsupported by RCU flavor under test

[    3.860358][    T1] busted_srcud-torture: srcu_torture_init fast-up/down SRCU
[    3.870796][    T1] busted_srcud-torture: rcu_torture_fwd_prog_init: Disabled, unsupported by RCU flavor under test

[    3.364909][    T1] busted_srcud-torture: srcu_torture_init atomic SRCU
[    3.372280][    T1] busted_srcud-torture: rcu_torture_fwd_prog_init: Disabled, unsupported by RCU flavor under test

trivial:

[    3.858080][    T1] trivial-torture: rcu_torture_fwd_prog_init: Disabled, unsupported by RCU flavor under test
[    3.689060][    T1] trivial-preempt-torture: rcu_torture_fwd_prog_init: Disabled, unsupported by RCU flavor under test



Thanks
Zqiang

> 
> thanks,
> 
> Joel Fernandes
> 
> > 
> > > 
> > > 
> > > 
> >  
> >  ---
> >  kernel/rcu/rcutorture.c | 5 ++---
> >  1 file changed, 2 insertions(+), 3 deletions(-)
> >  
> >  diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
> >  index 968343be4e0d..92ff197f4789 100644
> >  --- a/kernel/rcu/rcutorture.c
> >  +++ b/kernel/rcu/rcutorture.c
> >  @@ -4007,9 +4007,8 @@ static int __init rcu_torture_fwd_prog_init(void)
> >  } else if (fwd_progress < 0) {
> >  fwd_progress = nr_cpu_ids;
> >  }
> >  - if ((!cur_ops->sync && !cur_ops->call) ||
> >  - (!cur_ops->cbflood_max && (!cur_ops->stall_dur || cur_ops->stall_dur() <= 0)) ||
> >  - cur_ops == &rcu_busted_ops) {
> >  + if (!cur_ops->sync || ((!cur_ops->call || !cur_ops->cb_barrier || !cur_ops->cbflood_max) &&
> >  + (!cur_ops->stall_dur || cur_ops->stall_dur() <= 0))) {
> >  VERBOSE_TOROUT_STRING("rcu_torture_fwd_prog_init: Disabled, unsupported by RCU flavor under test");
> >  fwd_progress = 0;
> >  return 0;
> >  --
> >  2.17.1
> >  
> > 
> > > 
> > > 
> > >
> >
>

  reply	other threads:[~2026-11-02 13:50 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-30 12:46 [PATCH v2] rcutorture: Avoid create fwd_prog_tasks for tasks-rude and srcu-atomic Joel Fernandes
2026-11-02 13:50 ` Zqiang [this message]
  -- strict thread matches above, loose matches on Subject: below --
2026-10-23  9:37 Zqiang
2026-10-23 19:23 ` Paul E. McKenney
2026-10-30 12:14   ` Zqiang

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=2b7d3fd6bc409170cb5207d74eb9ded4a5874b53@linux.dev \
    --to=qiang.zhang@linux.dev \
    --cc=boqun@kernel.org \
    --cc=frederic@kernel.org \
    --cc=joelagnelf@nvidia.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=neeraj.upadhyay@kernel.org \
    --cc=paulmck@kernel.org \
    --cc=rcu@vger.kernel.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.