Commit 36221e10 authored by Julia Cartwright's avatar Julia Cartwright Committed by Paul E. McKenney
Browse files

rcu: Enable rcu_normal_after_boot unconditionally for RT



Expedited RCU grace periods send IPIs to all non-idle CPUs, and thus can
disrupt time-critical code in real-time applications.  However, there
is a portion of boot-time processing (presumably before any real-time
applications have started) where expedited RCU grace periods are the only
option.  And so it is that experience with the -rt patchset indicates that
PREEMPT_RT systems should always set the rcupdate.rcu_normal_after_boot
kernel boot parameter.

This commit therefore makes the post-boot application environment safe
for real-time applications by making PREEMPT_RT systems disable the
rcupdate.rcu_normal_after_boot kernel boot parameter and acting as
if this parameter had been set.  This means that post-boot calls to
synchronize_rcu_expedited() will be treated as if they were instead
calls to synchronize_rcu(), thus preventing the IPIs, and thus avoiding
disrupting real-time applications.

Suggested-by: default avatarLuiz Capitulino <lcapitulino@redhat.com>
Acked-by: default avatarPaul E. McKenney <paulmck@linux.ibm.com>
Signed-off-by: default avatarJulia Cartwright <julia@ni.com>
Signed-off-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
[ paulmck: Update kernel-parameters.txt accordingly. ]
Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
parent 8b9a0ecc
Loading
Loading
Loading
Loading
+7 −0
Original line number Original line Diff line number Diff line
@@ -4474,6 +4474,13 @@
			only normal grace-period primitives.  No effect
			only normal grace-period primitives.  No effect
			on CONFIG_TINY_RCU kernels.
			on CONFIG_TINY_RCU kernels.


			But note that CONFIG_PREEMPT_RT=y kernels enables
			this kernel boot parameter, forcibly setting
			it to the value one, that is, converting any
			post-boot attempt at an expedited RCU grace
			period to instead use normal non-expedited
			grace-period processing.

	rcupdate.rcu_task_ipi_delay= [KNL]
	rcupdate.rcu_task_ipi_delay= [KNL]
			Set time in jiffies during which RCU tasks will
			Set time in jiffies during which RCU tasks will
			avoid sending IPIs, starting with the beginning
			avoid sending IPIs, starting with the beginning
+3 −1
Original line number Original line Diff line number Diff line
@@ -56,8 +56,10 @@
#ifndef CONFIG_TINY_RCU
#ifndef CONFIG_TINY_RCU
module_param(rcu_expedited, int, 0);
module_param(rcu_expedited, int, 0);
module_param(rcu_normal, int, 0);
module_param(rcu_normal, int, 0);
static int rcu_normal_after_boot;
static int rcu_normal_after_boot = IS_ENABLED(CONFIG_PREEMPT_RT);
#ifndef CONFIG_PREEMPT_RT
module_param(rcu_normal_after_boot, int, 0);
module_param(rcu_normal_after_boot, int, 0);
#endif
#endif /* #ifndef CONFIG_TINY_RCU */
#endif /* #ifndef CONFIG_TINY_RCU */


#ifdef CONFIG_DEBUG_LOCK_ALLOC
#ifdef CONFIG_DEBUG_LOCK_ALLOC