On Fri, 12 Sep 2014, Paul E. McKenney wrote:
So, I am not seeing this failure in my testing, but my best guess is
that the problem is due to the fact that force_quiescent_state() is
sometimes invoked with preemption enabled, which breaks __this_cpu_read()
though perhaps with very low probability. The common-case call (from
__call_rcu_core()) -does- have preemption disabled, in fact, it has
interrupts disabled.
How could __this_cpu_read() break in a way that would make a difference to
the code? There was no disabling/enabling of preemption before the patch
and there is nothing like that after the patch. If there was a race then
it still exists. The modification certainly cannot create a race.