rcu-tasks: Make ksoftirqd provide RCU Tasks quiescent states
authorPaul E. McKenney <paulmck@kernel.org>
Thu, 25 Mar 2021 00:08:48 +0000 (17:08 -0700)
committerPaul E. McKenney <paulmck@kernel.org>
Tue, 18 May 2021 17:54:51 +0000 (10:54 -0700)
commitcf868c2af244417ed276ba7f716b980841a71340
treeac16600d876132494cca5ce51396f31275569894
parent9fc98e3143de7b7e8d766aef41b46ec0bc0ae4ca
rcu-tasks: Make ksoftirqd provide RCU Tasks quiescent states

Heavy networking load can cause a CPU to execute continuously and
indefinitely within ksoftirqd, in which case there will be no voluntary
task switches and thus no RCU-tasks quiescent states.  This commit
therefore causes the exiting rcu_softirq_qs() to provide an RCU-tasks
quiescent state.

This of course means that __do_softirq() and its callers cannot be
invoked from within a tracing trampoline.

Reported-by: Toke Høiland-Jørgensen <toke@redhat.com>
Tested-by: Toke Høiland-Jørgensen <toke@redhat.com>
Reviewed-by: Masami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
kernel/rcu/tree.c