diff options
author | Paul E. McKenney <paulmck@kernel.org> | 2021-03-24 17:08:48 -0700 |
---|---|---|
committer | Paul E. McKenney <paulmck@kernel.org> | 2021-05-18 10:54:51 -0700 |
commit | cf868c2af244417ed276ba7f716b980841a71340 (patch) | |
tree | ac16600d876132494cca5ce51396f31275569894 /kernel/rcu | |
parent | 9fc98e3143de7b7e8d766aef41b46ec0bc0ae4ca (diff) | |
download | linux-cf868c2af244417ed276ba7f716b980841a71340.tar.gz linux-cf868c2af244417ed276ba7f716b980841a71340.tar.bz2 linux-cf868c2af244417ed276ba7f716b980841a71340.zip |
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>
Diffstat (limited to 'kernel/rcu')
-rw-r--r-- | kernel/rcu/tree.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index 8e78b2430c16..f4daa4e60b14 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c @@ -242,6 +242,7 @@ void rcu_softirq_qs(void) { rcu_qs(); rcu_preempt_deferred_qs(current); + rcu_tasks_qs(current, false); } /* |