diff options
Diffstat (limited to 'include/linux/compiler.h')
| -rw-r--r-- | include/linux/compiler.h | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/include/linux/compiler.h b/include/linux/compiler.h index e08a6ae7c0a4..c836eb2dc44d 100644 --- a/include/linux/compiler.h +++ b/include/linux/compiler.h | |||
| @@ -252,7 +252,12 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s | |||
| 252 | ({ union { typeof(x) __val; char __c[1]; } __u; __read_once_size(&(x), __u.__c, sizeof(x)); __u.__val; }) | 252 | ({ union { typeof(x) __val; char __c[1]; } __u; __read_once_size(&(x), __u.__c, sizeof(x)); __u.__val; }) |
| 253 | 253 | ||
| 254 | #define WRITE_ONCE(x, val) \ | 254 | #define WRITE_ONCE(x, val) \ |
| 255 | ({ union { typeof(x) __val; char __c[1]; } __u = { .__val = (val) }; __write_once_size(&(x), __u.__c, sizeof(x)); __u.__val; }) | 255 | ({ \ |
| 256 | union { typeof(x) __val; char __c[1]; } __u = \ | ||
| 257 | { .__val = (__force typeof(x)) (val) }; \ | ||
| 258 | __write_once_size(&(x), __u.__c, sizeof(x)); \ | ||
| 259 | __u.__val; \ | ||
| 260 | }) | ||
| 256 | 261 | ||
| 257 | /** | 262 | /** |
| 258 | * READ_ONCE_CTRL - Read a value heading a control dependency | 263 | * READ_ONCE_CTRL - Read a value heading a control dependency |
