rcu: Disallow callback registry on offline CPUs
authorPaul E. McKenney <paul.mckenney@linaro.org>
Fri, 3 Aug 2012 20:16:15 +0000 (13:16 -0700)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Sun, 23 Sep 2012 14:43:55 +0000 (07:43 -0700)
commit0d8ee37e2fcb7b77b9c5dee784beca5a215cad4c
tree6e7661bf5231b4c48a6681a9fa8e8ede7915d0a7
parent1331e7a1bbe1f11b19c4327ba0853bee2a606543
rcu: Disallow callback registry on offline CPUs

Posting a callback after the CPU_DEAD notifier effectively leaks
that callback unless/until that CPU comes back online.  Silence is
unhelpful when attempting to track down such leaks, so this commit emits
a WARN_ON_ONCE() and unconditionally leaks the callback when an offline
CPU attempts to register a callback.  The rdp->nxttail[RCU_NEXT_TAIL] is
set to NULL in the CPU_DEAD notifier and restored in the CPU_UP_PREPARE
notifier, allowing _call_rcu() to determine exactly when posting callbacks
is illegal.

Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Reviewed-by: Josh Triplett <josh@joshtriplett.org>
kernel/rcutree.c