rcu: Simplify rcu_read_unlock_special() deferred wakeups
authorPaul E. McKenney <paulmck@linux.ibm.com>
Sat, 22 Jun 2019 19:05:54 +0000 (12:05 -0700)
committerPaul E. McKenney <paulmck@linux.ibm.com>
Thu, 1 Aug 2019 21:04:20 +0000 (14:04 -0700)
commitd143b3d1cd89f6bcab67dc88160914aa3536c663
treeb5f68d190eba121ef77013137bda20ca959d2bfd
parent609488bc979f99f805f34e9a32c1e3b71179d10b
rcu: Simplify rcu_read_unlock_special() deferred wakeups

In !use_softirq runs, we clearly cannot rely on raise_softirq() and
its lightweight bit setting, so we must instead do some form of wakeup.
In the absence of a self-IPI when interrupts are disabled, these wakeups
can be delayed until the next interrupt occurs.  This means that calling
invoke_rcu_core() doesn't actually do any expediting.

In this case, it is better to take the "else" clause, which sets the
current CPU's resched bits and, if there is an expedited grace period
in flight, uses IRQ-work to force the needed self-IPI.  This commit
therefore removes the "else if" clause that calls invoke_rcu_core().

Reported-by: Scott Wood <swood@redhat.com>
Signed-off-by: Paul E. McKenney <paulmck@linux.ibm.com>
kernel/rcu/tree_plugin.h