X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;ds=sidebyside;f=include%2Fwrapper%2Fcompiler.h;h=4efe0cfa671fab25b6b283543512b25903668425;hb=585e5dcc4bf017c03b86dc84371f9c6170e12785;hp=38974c062e0cc9428ee9541c7b8ac2fca736210c;hpb=20e546d0894624fd82af092414d9a4927c7d6ea5;p=lttng-modules.git diff --git a/include/wrapper/compiler.h b/include/wrapper/compiler.h index 38974c06..4efe0cfa 100644 --- a/include/wrapper/compiler.h +++ b/include/wrapper/compiler.h @@ -9,6 +9,7 @@ #define _LTTNG_WRAPPER_COMPILER_H #include +#include /* * Don't allow compiling with buggy compiler. @@ -39,6 +40,23 @@ # define WRITE_ONCE(x, val) ({ ACCESS_ONCE(x) = val; }) #endif +/* + * In v4.15 a smp read barrier was added to READ_ONCE to replace + * lockless_dereference(), replicate this behavior on prior kernels + * and remove calls to smp_read_barrier_depends which was dropped + * in v5.9. + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,15,0)) +#define LTTNG_READ_ONCE(x) READ_ONCE(x) +#else +#define LTTNG_READ_ONCE(x) \ +({ \ + typeof(x) __val = READ_ONCE(x); \ + smp_read_barrier_depends(); \ + __val; \ +}) +#endif + #define __LTTNG_COMPOUND_LITERAL(type, ...) (type[]) { __VA_ARGS__ } #endif /* _LTTNG_WRAPPER_COMPILER_H */