diff options
author | Josh Triplett <josh@joshtriplett.org> | 2013-09-01 16:42:52 -0700 |
---|---|---|
committer | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2013-12-12 12:19:22 -0800 |
commit | 9d162cd06349dfee6b4f254b3abf1355cf0aee43 (patch) | |
tree | 307513abf19d6dffb78929c1c60f4a68f59d903a | |
parent | 36708b89e00951b004b4dd6c14181301e2e98354 (diff) | |
download | blackbird-op-linux-9d162cd06349dfee6b4f254b3abf1355cf0aee43.tar.gz blackbird-op-linux-9d162cd06349dfee6b4f254b3abf1355cf0aee43.zip |
rcu: Make rcu_assign_pointer's assignment volatile and type-safe
The rcu_assign_pointer() primitive needs to use ACCESS_ONCE to make
the assignment to the destination pointer volatile, to protect against
compilers too clever for their own good.
Signed-off-by: Josh Triplett <josh@joshtriplett.org>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-rw-r--r-- | include/linux/rcupdate.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index 00ad28168ef0..97853cd2d7b4 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h @@ -551,7 +551,7 @@ static inline void rcu_preempt_sleep_check(void) #define __rcu_assign_pointer(p, v, space) \ do { \ smp_wmb(); \ - (p) = (typeof(*v) __force space *)(v); \ + ACCESS_ONCE(p) = (typeof(*(v)) __force space *)(v); \ } while (0) |