doc: CPU-hotplug notifiers cannot invoke synchronize_srcu() or srcu_barrier()
authorPaul E. McKenney <paulmck@linux.ibm.com>
Tue, 11 Dec 2018 16:28:56 +0000 (08:28 -0800)
committerPaul E. McKenney <paulmck@linux.ibm.com>
Fri, 25 Jan 2019 23:34:18 +0000 (15:34 -0800)
commit6efebf84997b26a6264eaeacf05eb6f5de2772b7
tree1484962d6a1f5063add41bff2cdb46e67da960d9
parent1a4762b9272f513aa4c7d8abe7a7529540f95e2d
doc: CPU-hotplug notifiers cannot invoke synchronize_srcu() or srcu_barrier()

SRCU's synchronize_srcu() may not be invoked from CPU-hotplug notifiers,
due to the fact that SRCU grace periods make use of timers and the
possibility of timers being temporarily stranded on the outgoing CPU.
This stranding of timers means that timers posted to the outgoing CPU
will not fire until late in the CPU-hotplug process.  The problem is
that if a notifier is waiting on an SRCU grace period, that grace period
is waiting on a timer, and that timer is stranded on the outgoing CPU,
then the notifier will never be awakened, in other words, deadlock has
occurred.  This same situation of course also prohibits srcu_barrier()
from being invoked from CPU-hotplug notifiers.

This commit therefore updates the requirements to include this restriction.

Signed-off-by: Paul E. McKenney <paulmck@linux.ibm.com>
Documentation/RCU/Design/Requirements/Requirements.html