From: Boqun Feng <boqun.feng@gmail.com>
To: rcu@vger.kernel.org
Cc: "Petr Mladek" <pmladek@suse.com>,
"Steven Rostedt" <rostedt@goodmis.org>,
"John Ogness" <john.ogness@linutronix.de>,
"Sergey Senozhatsky" <senozhatsky@chromium.org>,
"Paul E. McKenney" <paulmck@kernel.org>,
"Frederic Weisbecker" <frederic@kernel.org>,
"Neeraj Upadhyay" <neeraj.upadhyay@kernel.org>,
"Joel Fernandes" <joel@joelfernandes.org>,
"Josh Triplett" <josh@joshtriplett.org>,
"Boqun Feng" <boqun.feng@gmail.com>,
"Uladzislau Rezki" <urezki@gmail.com>,
"Mathieu Desnoyers" <mathieu.desnoyers@efficios.com>,
"Lai Jiangshan" <jiangshanlai@gmail.com>,
Zqiang <qiang.zhang1211@gmail.com>,
"Davidlohr Bueso" <dave@stgolabs.net>,
"Shuah Khan" <shuah@kernel.org>,
"Sebastian Andrzej Siewior" <bigeasy@linutronix.de>,
"Clark Williams" <clrkwllms@kernel.org>,
"Masami Hiramatsu" <mhiramat@kernel.org>,
"Yuntao Wang" <ytcoode@gmail.com>,
"Andrew Morton" <akpm@linux-foundation.org>,
"Rasmus Villemoes" <linux@rasmusvillemoes.dk>,
"Guo Weikang" <guoweikang.kernel@gmail.com>,
"KP Singh" <kpsingh@kernel.org>,
"Huang Shijie" <shijie@os.amperecomputing.com>,
"Raul E Rangel" <rrangel@chromium.org>,
"Joel Granados" <joel.granados@kernel.org>,
"Anna Schumaker" <anna.schumaker@oracle.com>,
"Martin K. Petersen" <martin.petersen@oracle.com>,
"Thomas Weißschuh" <linux@weissschuh.net>,
zhangguopeng <zhangguopeng@kylinos.cn>,
"Thomas Gleixner" <tglx@linutronix.de>,
"Neeraj Upadhyay (AMD)" <neeraj.iitr10@gmail.com>,
linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org,
linux-rt-devel@lists.linux.dev,
"Alexei Starovoitov" <ast@kernel.org>,
"Andrii Nakryiko" <andrii@kernel.org>,
linux-trace-kernel@vger.kernel.org
Subject: [PATCH rcu 04/10] rcu-tasks: Move RCU Tasks self-tests to core_initcall()
Date: Tue, 4 Mar 2025 19:04:59 -0800 [thread overview]
Message-ID: <20250305030505.94059-5-boqun.feng@gmail.com> (raw)
In-Reply-To: <20250305030505.94059-1-boqun.feng@gmail.com>
From: "Paul E. McKenney" <paulmck@kernel.org>
The timer and hrtimer softirq processing has moved to dedicated threads
for kernels built with CONFIG_IRQ_FORCED_THREADING=y. This results in
timers not expiring until later in early boot, which in turn causes the
RCU Tasks self-tests to hang in kernels built with CONFIG_PROVE_RCU=y,
which further causes the entire kernel to hang. One fix would be to
make timers work during this time, but there are no known users of RCU
Tasks grace periods during that time, so no justification for the added
complexity. Not yet, anyway.
This commit therefore moves the call to rcu_init_tasks_generic() from
kernel_init_freeable() to a core_initcall(). This works because the
timer and hrtimer kthreads are created at early_initcall() time.
Fixes: 49a17639508c3 ("softirq: Use a dedicated thread for timer wakeups on PREEMPT_RT.")
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Cc: Frederic Weisbecker <frederic@kernel.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Andrii Nakryiko <andrii@kernel.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: <linux-trace-kernel@vger.kernel.org>
Tested-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Reviewed-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
---
include/linux/rcupdate.h | 6 ------
init/main.c | 1 -
kernel/rcu/tasks.h | 5 ++++-
3 files changed, 4 insertions(+), 8 deletions(-)
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h
index 48e5c03df1dd..36849a4ea141 100644
--- a/include/linux/rcupdate.h
+++ b/include/linux/rcupdate.h
@@ -121,12 +121,6 @@ void rcu_init(void);
extern int rcu_scheduler_active;
void rcu_sched_clock_irq(int user);
-#ifdef CONFIG_TASKS_RCU_GENERIC
-void rcu_init_tasks_generic(void);
-#else
-static inline void rcu_init_tasks_generic(void) { }
-#endif
-
#ifdef CONFIG_RCU_STALL_COMMON
void rcu_sysrq_start(void);
void rcu_sysrq_end(void);
diff --git a/init/main.c b/init/main.c
index 2a1757826397..7f0a2a3dbd29 100644
--- a/init/main.c
+++ b/init/main.c
@@ -1553,7 +1553,6 @@ static noinline void __init kernel_init_freeable(void)
init_mm_internals();
- rcu_init_tasks_generic();
do_pre_smp_initcalls();
lockup_detector_init();
diff --git a/kernel/rcu/tasks.h b/kernel/rcu/tasks.h
index 59314da5eb60..466668eb4fad 100644
--- a/kernel/rcu/tasks.h
+++ b/kernel/rcu/tasks.h
@@ -2256,7 +2256,7 @@ void __init tasks_cblist_init_generic(void)
#endif
}
-void __init rcu_init_tasks_generic(void)
+static int __init rcu_init_tasks_generic(void)
{
#ifdef CONFIG_TASKS_RCU
rcu_spawn_tasks_kthread();
@@ -2272,7 +2272,10 @@ void __init rcu_init_tasks_generic(void)
// Run the self-tests.
rcu_tasks_initiate_self_tests();
+
+ return 0;
}
+core_initcall(rcu_init_tasks_generic);
#else /* #ifdef CONFIG_TASKS_RCU_GENERIC */
static inline void rcu_tasks_bootup_oddness(void) {}
--
2.48.1
next prev parent reply other threads:[~2025-03-05 3:05 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-05 3:04 [PATCH rcu 00/10] Miscellaneous RCU changes for v6.15 Boqun Feng
2025-03-05 3:04 ` [PATCH rcu 01/10] rcu: Split rcu_report_exp_cpu_mult() mask parameter and use for tracing Boqun Feng
2025-03-05 3:04 ` [PATCH rcu 02/10] rcu: Remove READ_ONCE() for rdp->gpwrap access in __note_gp_changes() Boqun Feng
2025-03-05 3:04 ` [PATCH rcu 03/10] rcu: Fix get_state_synchronize_rcu_full() GP-start detection Boqun Feng
2025-03-05 3:04 ` Boqun Feng [this message]
2025-03-05 3:05 ` [PATCH rcu 05/10] rcu/nocb: Print segment lengths in show_rcu_nocb_gp_state() Boqun Feng
2025-03-05 3:05 ` [PATCH rcu 06/10] context_tracking: Make RCU watch ct_kernel_exit_state() warning Boqun Feng
2025-03-05 3:05 ` [PATCH rcu 07/10] Flush console log from kernel_power_off() Boqun Feng
2025-03-05 3:05 ` [PATCH rcu 08/10] rcutorture: Allow a negative value for nfakewriters Boqun Feng
2025-03-05 3:05 ` [PATCH rcu 09/10] rcu: Update TREE05.boot to test normal synchronize_rcu() Boqun Feng
2025-03-05 3:05 ` [PATCH rcu 10/10] rcu: Use _full() API to debug synchronize_rcu() Boqun Feng
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=20250305030505.94059-5-boqun.feng@gmail.com \
--to=boqun.feng@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=andrii@kernel.org \
--cc=anna.schumaker@oracle.com \
--cc=ast@kernel.org \
--cc=bigeasy@linutronix.de \
--cc=clrkwllms@kernel.org \
--cc=dave@stgolabs.net \
--cc=frederic@kernel.org \
--cc=guoweikang.kernel@gmail.com \
--cc=jiangshanlai@gmail.com \
--cc=joel.granados@kernel.org \
--cc=joel@joelfernandes.org \
--cc=john.ogness@linutronix.de \
--cc=josh@joshtriplett.org \
--cc=kpsingh@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-rt-devel@lists.linux.dev \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=linux@rasmusvillemoes.dk \
--cc=linux@weissschuh.net \
--cc=martin.petersen@oracle.com \
--cc=mathieu.desnoyers@efficios.com \
--cc=mhiramat@kernel.org \
--cc=neeraj.iitr10@gmail.com \
--cc=neeraj.upadhyay@kernel.org \
--cc=paulmck@kernel.org \
--cc=pmladek@suse.com \
--cc=qiang.zhang1211@gmail.com \
--cc=rcu@vger.kernel.org \
--cc=rostedt@goodmis.org \
--cc=rrangel@chromium.org \
--cc=senozhatsky@chromium.org \
--cc=shijie@os.amperecomputing.com \
--cc=shuah@kernel.org \
--cc=tglx@linutronix.de \
--cc=urezki@gmail.com \
--cc=ytcoode@gmail.com \
--cc=zhangguopeng@kylinos.cn \
/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