diff options
Diffstat (limited to 'tools/include/linux/compiler.h')
| -rw-r--r-- | tools/include/linux/compiler.h | 20 | 
1 files changed, 15 insertions, 5 deletions
diff --git a/tools/include/linux/compiler.h b/tools/include/linux/compiler.h index 04e32f965ad7..1827c2f973f9 100644 --- a/tools/include/linux/compiler.h +++ b/tools/include/linux/compiler.h @@ -151,11 +151,21 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s   * required ordering.   */ -#define READ_ONCE(x) \ -	({ 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; }) +#define READ_ONCE(x)					\ +({							\ +	union { typeof(x) __val; char __c[1]; } __u =	\ +		{ .__c = { 0 } };			\ +	__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;					\ +})  #ifndef __fallthrough  | 
