]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
rcu: Allow short-circuiting of synchronize_rcu_tasks_rude()
authorPaul E. McKenney <paulmck@kernel.org>
Wed, 9 Oct 2024 18:00:41 +0000 (11:00 -0700)
committerFrederic Weisbecker <frederic@kernel.org>
Tue, 12 Nov 2024 20:44:24 +0000 (21:44 +0100)
There are now architectures for which all deep-idle and entry-exit
functions are properly inlined or marked noinstr.  Such architectures do
not need synchronize_rcu_tasks_rude(), or will not once RCU Tasks has
been modified to pay attention to idle tasks.  This commit therefore
allows a CONFIG_ARCH_HAS_NOINSTR_MARKINGS Kconfig option to turn
synchronize_rcu_tasks_rude() into a no-op.

To facilitate testing, kernels built by rcutorture scripting will enable
RCU Tasks Trace even on systems that do not need it.

[ paulmck: Apply Peter Zijlstra feedback. ]

Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: Neeraj Upadhyay <neeraj.upadhyay@kernel.org>
Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
kernel/rcu/tasks.h

index 6333f4ccf024be2cb5f8dfffc82f3ca679161415..dd9730fd44fbe89d2fac31f3005c7979e3d8e60a 100644 (file)
@@ -1398,7 +1398,8 @@ static void call_rcu_tasks_rude(struct rcu_head *rhp, rcu_callback_t func)
  */
 void synchronize_rcu_tasks_rude(void)
 {
-       synchronize_rcu_tasks_generic(&rcu_tasks_rude);
+       if (!IS_ENABLED(CONFIG_ARCH_WANTS_NO_INSTR) || IS_ENABLED(CONFIG_FORCE_TASKS_RUDE_RCU))
+               synchronize_rcu_tasks_generic(&rcu_tasks_rude);
 }
 EXPORT_SYMBOL_GPL(synchronize_rcu_tasks_rude);