]> asedeno.scripts.mit.edu Git - linux.git/commit
rcu: Avoid losing ->need_future_gp[] values due to GP start/end races
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Sat, 14 Apr 2018 17:40:57 +0000 (10:40 -0700)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Tue, 15 May 2018 17:29:33 +0000 (10:29 -0700)
commit51af970d19f395fc57b82514022126de6c5420cd
tree20637fb321eddd24f16483bb1ac44b9f8eb5eb57
parentfb31340f8a43a6f2e871164822ef4979b36232ae
rcu: Avoid losing ->need_future_gp[] values due to GP start/end races

The rcu_cbs_completed() function provides the value of ->completed
at which new callbacks can safely be invoked.  This is recorded in
two-element ->need_future_gp[] arrays in the rcu_node structure, and
the elements of these arrays corresponding to the just-completed grace
period are zeroed at the end of that grace period.  However, the
rcu_cbs_completed() function can return the current ->completed value
plus either one or two, so it is possible for the corresponding
->need_future_gp[] entry to be cleared just after it was set, thus
losing a request for a future grace period.

This commit avoids this race by expanding ->need_future_gp[] to four
elements.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Tested-by: Nicholas Piggin <npiggin@gmail.com>
kernel/rcu/tree.h