From: "Zqiang" <qiang.zhang@linux.dev>
To: paulmck@kernel.org
Cc: frederic@kernel.org, neeraj.upadhyay@kernel.org,
joelagnelf@nvidia.com, urezki@gmail.com, boqun@kernel.org,
rcu@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] rcu-tasks: Remove unused struct rcu_tasks's->n_ipis_fails variables
Date: Tue, 07 Jul 2026 13:09:21 +0000 [thread overview]
Message-ID: <7b56bf2752621d6b845fb0d3086300e057e95aa2@linux.dev> (raw)
In-Reply-To: <cb922347-ff9c-407e-a774-054e0117ac52@paulmck-laptop>
>
> On Mon, Jul 06, 2026 at 06:03:09PM +0800, Zqiang wrote:
>
> >
> > The RCU tasks trace has been reimplemented by 'commit c27cea4416a3
> > ("rcu: Re-implement RCU Tasks Trace in terms of SRCU-fast")', the
> > rcu_tasks structure's->n_ipis_fails is no longer used, this commit
> > therefore remove it.
> >
> > Signed-off-by: Zqiang <qiang.zhang@linux.dev>
> >
> I have queued both for review and testing, thank you!
>
> This patch produced the expected result in my initial tests. However,
> for the second patch, I used this command to force a stall:
>
> tools/testing/selftests/rcutorture/bin/kvm.sh --allcpus --duration 15 --configs "TASKS01 TASKS02 TASKS03 RUDE01" --bootargs "rcutorture.stall_cpu=660" --trust-make
>
> Except I got vanilla RCU CPU stall warnings, but not RCU Tasks nor
> RCU Tasks Rude stall warnings. And not even the "grace period number"
> pre-stall message. Probably because I am forgetting something. But what
> did you do to test your change?
Hello, Paul
The rcutorture module use module_init() to load, however the
rcu_tasks_initiate_self_tests() is called in core_initcall(),
the core_initcall() have a higher priority than module_init().
This is possible, the RCU tasks test may have already completed,
but the rcutorture may have only just started.
so I use the following modifications to verify:
diff --git a/kernel/rcu/tasks.h b/kernel/rcu/tasks.h
index d9e1e53f4ccf..7e5ff5108cdd 100644
--- a/kernel/rcu/tasks.h
+++ b/kernel/rcu/tasks.h
@@ -1489,7 +1489,6 @@ static void rcu_tasks_initiate_self_tests(void)
pr_info("Running RCU Tasks wait API self tests\n");
tests[0].runstart = jiffies;
synchronize_rcu_tasks();
- call_rcu_tasks(&tests[0].rh, test_rcu_tasks_callback);
#endif
#ifdef CONFIG_TASKS_RUDE_RCU
@@ -1555,6 +1554,7 @@ static void rcu_tasks_verify_work_fn(struct work_struct *work __maybe_unused)
static int rcu_tasks_verify_schedule_work(void)
{
INIT_DELAYED_WORK(&rcu_tasks_verify_work, rcu_tasks_verify_work_fn);
+ call_rcu_tasks(&tests[0].rh, test_rcu_tasks_callback);
rcu_tasks_verify_work_fn(NULL);
return 0;
}
Run qemu with bootparams="rcutorture.torture_type=srcu
rcutorture.stall_cpu=800 rcutorture.stall_cpu_block=1
rcutorture.stall_no_softlockup=1 rcupdate.rcu_tasks_lazy_ms=120000"
[ 30.826022] call_rcu_tasks() has failed boot-time tests.
[ 30.826790] rcu_tasks: RTGS_WAIT_CBS(11) since 7596 g:4 i:0 kCuU l:30000
[ 30.827424] ------------[ cut here ]------------
[ 30.827862] WARNING: kernel/rcu/tasks.h:1533 at rcu_tasks_verify_self_tests+0xa7/0xc0, CPU#1: kworker/1:1/79
[ 30.828717] Modules linked in:
[ 30.829144] CPU: 1 UID: 0 PID: 79 Comm: kworker/1:1 Tainted: G W 7.1.0-rc4+ #25 PREEMPT(lazy) e641c8af833b714510f82b4c2bc5dbbb1ef1e911
[ 30.830176] Tainted: [W]=WARN
[ 30.830468] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.16.3-0-ga6ed6b701f0a-prebuilt.qemu.org 04/01/2014
[ 30.831326] Workqueue: events rcu_tasks_verify_work_fn
....
[ 722.218096] INFO: rcu_tasks detected stalls on tasks:
[ 722.218689] 0000000095041800: .. nvcsw: 2/2 holdout: 1 idle_cpu: -1/7
[ 722.219308] task:rcu_torture_sta state:R running task stack:0 pid:122 tgid:122 ppid:2 task_flags:0x208040 flags:0x00080000
[ 722.220442] Call Trace:
[ 722.220744] <TASK>
[ 722.221035] __schedule+0x2e9/0x1460
[ 722.221449] ? preempt_schedule+0x30/0x40
[ 722.221895] preempt_schedule_common+0x24/0x90
[ 722.222432] preempt_schedule+0x30/0x40
[ 722.222842] rcu_torture_stall+0x266/0x430
[ 722.223286] ? __kthread_parkme+0x8f/0xe0
[ 722.223735] ? __pfx_rcu_torture_stall+0x10/0x10
[ 722.224226] kthread+0x13d/0x180
[ 722.224600] ? __pfx_kthread+0x10/0x10
[ 722.224996] ret_from_fork+0x29d/0x3b0
[ 722.225669] ? __pfx_kthread+0x10/0x10
[ 722.226131] ret_from_fork_asm+0x1a/0x30
[ 722.226668] </TASK>
Thanks
Zqiang
>
> Thanx, Paul
>
> >
> > ---
> > kernel/rcu/tasks.h | 6 ++----
> > 1 file changed, 2 insertions(+), 4 deletions(-)
> >
> > diff --git a/kernel/rcu/tasks.h b/kernel/rcu/tasks.h
> > index f4da5fad70f5..7f7d1e636217 100644
> > --- a/kernel/rcu/tasks.h
> > +++ b/kernel/rcu/tasks.h
> > @@ -67,7 +67,6 @@ struct rcu_tasks_percpu {
> > * @gp_start: Most recent grace-period start in jiffies.
> > * @tasks_gp_seq: Number of grace periods completed since boot in upper bits.
> > * @n_ipis: Number of IPIs sent to encourage grace periods to end.
> > - * @n_ipis_fails: Number of IPI-send failures.
> > * @kthread_ptr: This flavor's grace-period/callback-invocation kthread.
> > * @lazy_jiffies: Number of jiffies to allow callbacks to be lazy.
> > * @pregp_func: This flavor's pre-grace-period function (optional).
> > @@ -102,7 +101,6 @@ struct rcu_tasks {
> > unsigned long gp_start;
> > unsigned long tasks_gp_seq;
> > unsigned long n_ipis;
> > - unsigned long n_ipis_fails;
> > struct task_struct *kthread_ptr;
> > unsigned long lazy_jiffies;
> > rcu_tasks_gp_func_t gp_func;
> > @@ -735,12 +733,12 @@ static void show_rcu_tasks_generic_gp_kthread(struct rcu_tasks *rtp, char *s)
> > if (havecbs && haveurgent && haveurgentcbs)
> > break;
> > }
> > - pr_info("%s: %s(%d) since %lu g:%lu i:%lu/%lu %c%c%c%c l:%lu %s\n",
> > + pr_info("%s: %s(%d) since %lu g:%lu i:%lu %c%c%c%c l:%lu %s\n",
> > rtp->kname,
> > tasks_gp_state_getname(rtp), data_race(rtp->gp_state),
> > jiffies - data_race(rtp->gp_jiffies),
> > data_race(rcu_seq_current(&rtp->tasks_gp_seq)),
> > - data_race(rtp->n_ipis_fails), data_race(rtp->n_ipis),
> > + data_race(rtp->n_ipis),
> > ".k"[!!data_race(rtp->kthread_ptr)],
> > ".C"[havecbs],
> > ".u"[haveurgent],
> > --
> > 2.17.1
> >
>
next prev parent reply other threads:[~2026-07-07 13:09 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-06 10:03 [PATCH] rcu-tasks: Remove unused struct rcu_tasks's->n_ipis_fails variables Zqiang
2026-07-06 10:03 ` [PATCH] rcu-tasks: Dump rcu tasks status when the boot-test failed Zqiang
2026-07-06 18:44 ` [PATCH] rcu-tasks: Remove unused struct rcu_tasks's->n_ipis_fails variables Paul E. McKenney
2026-07-07 13:09 ` Zqiang [this message]
2026-07-08 17:44 ` Paul E. McKenney
2026-07-09 12:04 ` 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=7b56bf2752621d6b845fb0d3086300e057e95aa2@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.