rcu: Make offline-CPU checking allow for indefinite delays
authorPaul E. McKenney <paul.mckenney@linaro.org>
Wed, 1 Aug 2012 21:29:20 +0000 (14:29 -0700)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Sun, 23 Sep 2012 14:42:50 +0000 (07:42 -0700)
commita82dcc76021e22c174ba85d90b7a8c750b7362d0
treef65ef1af700610b9e3e59545d2bf13e4cac33876
parent5cc900cf55fe58aaad93767c5a526e2a69cbcbc6
rcu: Make offline-CPU checking allow for indefinite delays

The rcu_implicit_offline_qs() function implicitly assumed that execution
would progress predictably when interrupts are disabled, which is of course
not guaranteed when running on a hypervisor.  Furthermore, this function
is short, and is called from one place only in a short function.

This commit therefore ensures that the timing is checked before
checking the condition, which guarantees correct behavior even given
indefinite delays.  It also inlines rcu_implicit_offline_qs() into
rcu_implicit_dynticks_qs().

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