|
Lines 300-305
static __always_inline void __write_once_size(volatile void *p, void *res, int s
Link Here
|
| 300 |
* required ordering. |
300 |
* required ordering. |
| 301 |
*/ |
301 |
*/ |
| 302 |
|
302 |
|
|
|
303 |
#ifndef __cplusplus |
| 303 |
#define __READ_ONCE(x, check) \ |
304 |
#define __READ_ONCE(x, check) \ |
| 304 |
({ \ |
305 |
({ \ |
| 305 |
union { typeof(x) __val; char __c[1]; } __u; \ |
306 |
union { typeof(x) __val; char __c[1]; } __u; \ |
|
Lines 309-314
static __always_inline void __write_once_size(volatile void *p, void *res, int s
Link Here
|
| 309 |
__read_once_size_nocheck(&(x), __u.__c, sizeof(x)); \ |
310 |
__read_once_size_nocheck(&(x), __u.__c, sizeof(x)); \ |
| 310 |
__u.__val; \ |
311 |
__u.__val; \ |
| 311 |
}) |
312 |
}) |
|
|
313 |
#else |
| 314 |
#define __READ_ONCE(x, check) \ |
| 315 |
({ \ |
| 316 |
union { void _u(){}; typeof(x) __val; char __c[1]; } __u={0}; \ |
| 317 |
if (check) \ |
| 318 |
__read_once_size(&(x), __u.__c, sizeof(x)); \ |
| 319 |
else \ |
| 320 |
__read_once_size_nocheck(&(x), __u.__c, sizeof(x)); \ |
| 321 |
__u.__val; \ |
| 322 |
}) |
| 323 |
#endif |
| 312 |
#define READ_ONCE(x) __READ_ONCE(x, 1) |
324 |
#define READ_ONCE(x) __READ_ONCE(x, 1) |
| 313 |
|
325 |
|
| 314 |
/* |
326 |
/* |
| 315 |
- |
|
|