From: Scott Wood <swood@xxxxxxxxxx> Using rcuc threads for processing callbacks over softirq has the advantage that the callbacks can be processed independently. On PREEMPT_RT the softirq can be preempted. Relying on softirq for callback processing would mean to complete the current stage of softirq for the sake of running callbacks. The softirq is processed on PREEMPT_RT in the context of the task that is raising a softirq. If it is raised in-IRQ context then the softirq processing is deferred to the `ksoftirqd' thread. Processing RCU callbacks in thread context was always the only option for PREEMPT_RT and there have been no complains. Disable softirq usage for RCU and disable its commandline parameter. Signed-off-by: Scott Wood <swood@xxxxxxxxxx> [bigeasy: Reword commit message] Signed-off-by: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx> --- kernel/rcu/tree.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index 80ceee55f379a..57eff3b82104c 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c @@ -100,8 +100,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.29.2