jrcu: use xchg to toggle rcu_which
PATCH 11/24 jrcu: use xchg to toggle rcu_which
Use xchg rather than wmb()s to change the value
of rcu_which.
This may be better than wmb()s as xchg will not
let the insn counter advance past the xchg until
the exchanged result is visible to other cpus.
Signed-off-by Joe Korty <[email protected]>
kernel/jrcu.c +7 -5
@@ -371,14 +371,16 @@ static void __rcu_delimit_batches(structelse rd->wait =0 ; } +smp_wmb ();/* just paranoia, the below xchg should do this on all archs */ /* -* Swap current and previous lists. The other cpus must not see this -* out-of-order w.r.t. the above emptying of each cpu's previous list, -* hence the smp_wmb. +* Swap current and previous lists. The other cpus must not +* see this out-of-order w.r.t. the above emptying of each cpu's +* previous list. The xchg accomplishes that and, as a side (but +* seemingly unneeded) bonus, keeps this cpu from advancing its insn +* counter until the results of that xchg are visible on other cpus. */ -smp_wmb (); - rcu_which = prev; +xchg (&rcu_which, prev);/* only place where rcu_which is written to */ rcu_stats.nbatches++; }