summaryrefslogtreecommitdiffstats
path: root/kernel/rcu
diff options
context:
space:
mode:
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>2014-10-29 15:39:39 -0700
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>2015-01-06 11:02:39 -0800
commitb08ea27d95bcaee6d9cf4edd64f373006661424a (patch)
tree0c2dd68df7898cc28804d0dc422961b0441e315f /kernel/rcu
parent734d16801349fbe951d2f780191d32c5b8a892d1 (diff)
downloadlinux-stable-b08ea27d95bcaee6d9cf4edd64f373006661424a.tar.gz
linux-stable-b08ea27d95bcaee6d9cf4edd64f373006661424a.tar.bz2
linux-stable-b08ea27d95bcaee6d9cf4edd64f373006661424a.zip
rcu: Protect rcu_boost() lockless accesses with ACCESS_ONCE()
This commit prevents random compiler optimizations by applying ACCESS_ONCE() to lockless accesses. Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'kernel/rcu')
-rw-r--r--kernel/rcu/tree_plugin.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
index 3ec85cb5d544..d59913ef8360 100644
--- a/kernel/rcu/tree_plugin.h
+++ b/kernel/rcu/tree_plugin.h
@@ -1127,7 +1127,8 @@ static int rcu_boost(struct rcu_node *rnp)
struct task_struct *t;
struct list_head *tb;
- if (rnp->exp_tasks == NULL && rnp->boost_tasks == NULL)
+ if (ACCESS_ONCE(rnp->exp_tasks) == NULL &&
+ ACCESS_ONCE(rnp->boost_tasks) == NULL)
return 0; /* Nothing left to boost. */
raw_spin_lock_irqsave(&rnp->lock, flags);