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  	({ union { typeof(x) __val; char __c[1]; } __u; __read_once_size(&(x), __u.__c, sizeof(x)); __u.__val; })  #define WRITE_ONCE(x, val) \ -	({ union { typeof(x) __val; char __c[1]; } __u = { .__val = (val) }; __write_once_size(&(x), __u.__c, sizeof(x)); __u.__val; }) +({							\ +	union { typeof(x) __val; char __c[1]; } __u =	\ +		{ .__val = (__force typeof(x)) (val) }; \ +	__write_once_size(&(x), __u.__c, sizeof(x));	\ +	__u.__val;					\ +})  /**   * READ_ONCE_CTRL - Read a value heading a control dependency | 
