rcu: Make nocb leader kthreads process pending callbacks after spawning
authorPranith Kumar <bobby.prani@gmail.com>
Wed, 27 Aug 2014 20:43:40 +0000 (16:43 -0400)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Thu, 28 Aug 2014 12:59:59 +0000 (05:59 -0700)
commit11ed7f934cb807f26da09547b5946c2e534d1dac
treeb67d674bbc9a0d97547c31b3735c99667a7184c1
parent52addcf9d6669fa439387610bc65c92fa0980cef
rcu: Make nocb leader kthreads process pending callbacks after spawning

The nocb callbacks generated before the nocb kthreads are spawned are
enqueued in the nocb queue for later processing. Commit fbce7497ee5af ("rcu:
Parallelize and economize NOCB kthread wakeups") introduced nocb leader kthreads
which checked the nocb_leader_wake flag to see if there were any such pending
callbacks. A case was reported in which newly spawned leader kthreads were not
processing the pending callbacks as this flag was not set, which led to a boot
hang.

The following commit ensures that the newly spawned nocb kthreads process the
pending callbacks by allowing the kthreads to run immediately after spawning
instead of waiting. This is done by inverting the logic of nocb_leader_wake
tests to nocb_leader_sleep which allows us to use the default initialization of
this flag to 0 to let the kthreads run.

Reported-by: Amit Shah <amit.shah@redhat.com>
Signed-off-by: Pranith Kumar <bobby.prani@gmail.com>
Link: http://www.spinics.net/lists/kernel/msg1802899.html
[ paulmck: Backported to v3.17-rc2. ]
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Tested-by: Amit Shah <amit.shah@redhat.com>
kernel/rcu/tree.h
kernel/rcu/tree_plugin.h