aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/rcutree_plugin.h
diff options
context:
space:
mode:
authorPaul E. McKenney <paul.mckenney@linaro.org>2011-08-01 09:22:11 -0400
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>2011-09-29 00:38:35 -0400
commit6206ab9bab620fc0fbbed30ce20d145b0b3d1840 (patch)
treeb57912ba9fff6f2deba89c0178d3122bbd1fda6e /kernel/rcutree_plugin.h
parent6846c0c54074d47927c90eab4a805115e1ae3292 (diff)
rcu: Move __rcu_read_unlock()'s barrier() within if-statement
We only need to constrain the compiler if we are actually exiting the top-level RCU read-side critical section. This commit therefore moves the first barrier() cal in __rcu_read_unlock() to inside the "if" statement, thus avoiding needless register flushes for inner rcu_read_unlock() calls. Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'kernel/rcutree_plugin.h')
-rw-r--r--kernel/rcutree_plugin.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/kernel/rcutree_plugin.h b/kernel/rcutree_plugin.h
index 4bac5a29fb69..ed70f6bf4c31 100644
--- a/kernel/rcutree_plugin.h
+++ b/kernel/rcutree_plugin.h
@@ -415,10 +415,10 @@ void __rcu_read_unlock(void)
415{ 415{
416 struct task_struct *t = current; 416 struct task_struct *t = current;
417 417
418 barrier(); /* needed if we ever invoke rcu_read_unlock in rcutree.c */
419 if (t->rcu_read_lock_nesting != 1) 418 if (t->rcu_read_lock_nesting != 1)
420 --t->rcu_read_lock_nesting; 419 --t->rcu_read_lock_nesting;
421 else { 420 else {
421 barrier(); /* critical section before exit code. */
422 t->rcu_read_lock_nesting = INT_MIN; 422 t->rcu_read_lock_nesting = INT_MIN;
423 barrier(); /* assign before ->rcu_read_unlock_special load */ 423 barrier(); /* assign before ->rcu_read_unlock_special load */
424 if (unlikely(ACCESS_ONCE(t->rcu_read_unlock_special))) 424 if (unlikely(ACCESS_ONCE(t->rcu_read_unlock_special)))