summaryrefslogtreecommitdiffstats
path: root/sys/compat
diff options
context:
space:
mode:
authorhselasky <hselasky@FreeBSD.org>2015-12-21 10:56:38 +0000
committerhselasky <hselasky@FreeBSD.org>2015-12-21 10:56:38 +0000
commit7368070b1a376f6fadca1f4b55be43e2362101d8 (patch)
tree48d73869a51fc4496a6cccaaa393c7f49c248fd0 /sys/compat
parenta47b28eb5e9ee442660b8ad3a0e4fa0405515be0 (diff)
downloadFreeBSD-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.h16
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_ */
OpenPOWER on IntegriCloud