From cee21041cf5b514eb1a6f17082d36da29e5dba34 Mon Sep 17 00:00:00 2001 From: Hans Petter Selasky Date: Mon, 21 Dec 2015 10:56:38 +0000 Subject: [PATCH] Implement ACCESS_ONCE(), WRITE_ONCE() and READ_ONCE(). MFC after: 1 week Sponsored by: Mellanox Technologies --- .../linuxkpi/common/include/linux/compiler.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/sys/compat/linuxkpi/common/include/linux/compiler.h b/sys/compat/linuxkpi/common/include/linux/compiler.h index 638135845b7..b6ea98f1875 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_ */ -- 2.45.2