diff options
author | hselasky <hselasky@FreeBSD.org> | 2015-12-21 10:56:38 +0000 |
---|---|---|
committer | hselasky <hselasky@FreeBSD.org> | 2015-12-21 10:56:38 +0000 |
commit | 7368070b1a376f6fadca1f4b55be43e2362101d8 (patch) | |
tree | 48d73869a51fc4496a6cccaaa393c7f49c248fd0 /sys/compat | |
parent | a47b28eb5e9ee442660b8ad3a0e4fa0405515be0 (diff) | |
download | FreeBSD-src-7368070b1a376f6fadca1f4b55be43e2362101d8.zip FreeBSD-src-7368070b1a376f6fadca1f4b55be43e2362101d8.tar.gz |
Implement ACCESS_ONCE(), WRITE_ONCE() and READ_ONCE().
MFC after: 1 week
Sponsored by: Mellanox Technologies
Diffstat (limited to 'sys/compat')
-rw-r--r-- | sys/compat/linuxkpi/common/include/linux/compiler.h | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/sys/compat/linuxkpi/common/include/linux/compiler.h b/sys/compat/linuxkpi/common/include/linux/compiler.h index 6381358..b6ea98f 100644 --- a/sys/compat/linuxkpi/common/include/linux/compiler.h +++ b/sys/compat/linuxkpi/common/include/linux/compiler.h @@ -72,4 +72,20 @@ #define barrier() __asm__ __volatile__("": : :"memory") +#define ACCESS_ONCE(x) (*(volatile __typeof(x) *)&(x)) + +#define WRITE_ONCE(x,v) do { \ + barrier(); \ + ACCESS_ONCE(x) = (v); \ + barrier(); \ +} while (0) + +#define READ_ONCE(x) ({ \ + __typeof(x) __var; \ + barrier(); \ + __var = ACCESS_ONCE(x); \ + barrier(); \ + __var; \ +}) + #endif /* _LINUX_COMPILER_H_ */ |