diff options
Diffstat (limited to 'debian/patches-rt/0072-rcu-Unconditionally-use-rcuc-threads-on-PREEMPT_RT.patch')
-rw-r--r-- | debian/patches-rt/0072-rcu-Unconditionally-use-rcuc-threads-on-PREEMPT_RT.patch | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/debian/patches-rt/0072-rcu-Unconditionally-use-rcuc-threads-on-PREEMPT_RT.patch b/debian/patches-rt/0072-rcu-Unconditionally-use-rcuc-threads-on-PREEMPT_RT.patch new file mode 100644 index 000000000..2c85d9dd0 --- /dev/null +++ b/debian/patches-rt/0072-rcu-Unconditionally-use-rcuc-threads-on-PREEMPT_RT.patch @@ -0,0 +1,66 @@ +From 8cc685c333f0deef6d724211a7f0ff37648d24c7 Mon Sep 17 00:00:00 2001 +From: Scott Wood <swood@redhat.com> +Date: Tue, 15 Dec 2020 15:16:46 +0100 +Subject: [PATCH 072/323] rcu: Unconditionally use rcuc threads on PREEMPT_RT +Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/5.10/older/patches-5.10.204-rt100.tar.xz + +PREEMPT_RT systems have long used the rcutree.use_softirq kernel +boot parameter to avoid use of RCU_SOFTIRQ handlers, which can disrupt +real-time applications by invoking callbacks during return from interrupts +that arrived while executing time-critical code. This kernel boot +parameter instead runs RCU core processing in an 'rcuc' kthread, thus +allowing the scheduler to do its job of avoiding disrupting time-critical +code. + +This commit therefore disables the rcutree.use_softirq kernel boot +parameter on PREEMPT_RT systems, thus forcing such systems to do RCU +core processing in 'rcuc' kthreads. This approach has long been in +use by users of the -rt patchset, and there have been no complaints. +There is therefore no way for the system administrator to override this +choice, at least without modifying and rebuilding the kernel. + +Signed-off-by: Scott Wood <swood@redhat.com> +[bigeasy: Reword commit message] +Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> +[ paulmck: Update kernel-parameters.txt accordingly. ] +Signed-off-by: Paul E. McKenney <paulmck@kernel.org> +Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> +--- + Documentation/admin-guide/kernel-parameters.txt | 4 ++++ + kernel/rcu/tree.c | 4 +++- + 2 files changed, 7 insertions(+), 1 deletion(-) + +diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt +index f1f7c068cf65..c2afb3304825 100644 +--- a/Documentation/admin-guide/kernel-parameters.txt ++++ b/Documentation/admin-guide/kernel-parameters.txt +@@ -4191,6 +4191,10 @@ + value, meaning that RCU_SOFTIRQ is used by default. + Specify rcutree.use_softirq=0 to use rcuc kthreads. + ++ But note that CONFIG_PREEMPT_RT=y kernels disable ++ this kernel boot parameter, forcibly setting it ++ to zero. ++ + rcutree.rcu_fanout_exact= [KNL] + Disable autobalancing of the rcu_node combining + tree. This is used by rcutorture, and might +diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c +index 06bfe61d3cd3..39b3b56ad92d 100644 +--- a/kernel/rcu/tree.c ++++ b/kernel/rcu/tree.c +@@ -101,8 +101,10 @@ static struct rcu_state rcu_state = { + static bool dump_tree; + module_param(dump_tree, bool, 0444); + /* By default, use RCU_SOFTIRQ instead of rcuc kthreads. */ +-static bool use_softirq = true; ++static bool use_softirq = !IS_ENABLED(CONFIG_PREEMPT_RT); ++#ifndef CONFIG_PREEMPT_RT + module_param(use_softirq, bool, 0444); ++#endif + /* Control rcu_node-tree auto-balancing at boot time. */ + static bool rcu_fanout_exact; + module_param(rcu_fanout_exact, bool, 0444); +-- +2.43.0 + |