Move ACCESS_ONCE() to <linux/compiler.h>
It actually makes much more sense there, and we do tend to need it for non-RCU usage too. Moving it to <linux/compiler.h> will allow some other cases that have open-coded the same logic to use the same helper function that RCU has used. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
3ed43c745d
commit
9c3cdc1f83
@ -182,4 +182,16 @@ extern void __chk_io_ptr(const volatile void __iomem *);
|
|||||||
# define __section(S) __attribute__ ((__section__(#S)))
|
# define __section(S) __attribute__ ((__section__(#S)))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Prevent the compiler from merging or refetching accesses. The compiler
|
||||||
|
* is also forbidden from reordering successive instances of ACCESS_ONCE(),
|
||||||
|
* but only when the compiler is aware of some particular ordering. One way
|
||||||
|
* to make the compiler aware of ordering is to put the two invocations of
|
||||||
|
* ACCESS_ONCE() in different C statements.
|
||||||
|
*
|
||||||
|
* This macro does absolutely -nothing- to prevent the CPU from reordering,
|
||||||
|
* merging, or refetching absolutely anything at any time.
|
||||||
|
*/
|
||||||
|
#define ACCESS_ONCE(x) (*(volatile typeof(x) *)&(x))
|
||||||
|
|
||||||
#endif /* __LINUX_COMPILER_H */
|
#endif /* __LINUX_COMPILER_H */
|
||||||
|
@ -131,18 +131,6 @@ struct rcu_head {
|
|||||||
*/
|
*/
|
||||||
#define rcu_read_unlock_bh() __rcu_read_unlock_bh()
|
#define rcu_read_unlock_bh() __rcu_read_unlock_bh()
|
||||||
|
|
||||||
/*
|
|
||||||
* Prevent the compiler from merging or refetching accesses. The compiler
|
|
||||||
* is also forbidden from reordering successive instances of ACCESS_ONCE(),
|
|
||||||
* but only when the compiler is aware of some particular ordering. One way
|
|
||||||
* to make the compiler aware of ordering is to put the two invocations of
|
|
||||||
* ACCESS_ONCE() in different C statements.
|
|
||||||
*
|
|
||||||
* This macro does absolutely -nothing- to prevent the CPU from reordering,
|
|
||||||
* merging, or refetching absolutely anything at any time.
|
|
||||||
*/
|
|
||||||
#define ACCESS_ONCE(x) (*(volatile typeof(x) *)&(x))
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* rcu_dereference - fetch an RCU-protected pointer in an
|
* rcu_dereference - fetch an RCU-protected pointer in an
|
||||||
* RCU read-side critical section. This pointer may later
|
* RCU read-side critical section. This pointer may later
|
||||||
|
Loading…
Reference in New Issue
Block a user