Messages in this thread Patch in this message | | | Date | Fri, 22 Nov 2019 10:48:07 -0000 | From | "tip-bot2 for Marco Elver" <> | Subject | [tip: locking/kcsan] include/linux/compiler.h: Introduce data_race(expr) macro |
| |
The following commit has been merged into the locking/kcsan branch of tip:
Commit-ID: c48981eeb0d56e107691df590007d6699441a689 Gitweb: https://git.kernel.org/tip/c48981eeb0d56e107691df590007d6699441a689 Author: Marco Elver <elver@google.com> AuthorDate: Thu, 14 Nov 2019 19:02:55 +01:00 Committer: Paul E. McKenney <paulmck@kernel.org> CommitterDate: Sat, 16 Nov 2019 07:23:13 -08:00
include/linux/compiler.h: Introduce data_race(expr) macro
This introduces the data_race(expr) macro, which can be used to annotate expressions for purposes of (1) documenting, and (2) giving tooling such as KCSAN information about which data races are deemed "safe".
More context: http://lkml.kernel.org/r/CAHk-=wg5CkOEF8DTez1Qu0XTEFw_oHhxN98bDnFqbY7HL5AB2g@mail.gmail.com
Signed-off-by: Marco Elver <elver@google.com> Cc: Alan Stern <stern@rowland.harvard.edu> Cc: Eric Dumazet <edumazet@google.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Paul E. McKenney <paulmck@kernel.org> Signed-off-by: Paul E. McKenney <paulmck@kernel.org> --- include/linux/compiler.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+)
diff --git a/include/linux/compiler.h b/include/linux/compiler.h index c42fa83..7d3e777 100644 --- a/include/linux/compiler.h +++ b/include/linux/compiler.h @@ -310,6 +310,26 @@ unsigned long read_word_at_a_time(const void *addr) __u.__val; \ }) +#include <linux/kcsan.h> + +/* + * data_race: macro to document that accesses in an expression may conflict with + * other concurrent accesses resulting in data races, but the resulting + * behaviour is deemed safe regardless. + * + * This macro *does not* affect normal code generation, but is a hint to tooling + * that data races here should be ignored. + */ +#define data_race(expr) \ + ({ \ + typeof(({ expr; })) __val; \ + kcsan_nestable_atomic_begin(); \ + __val = ({ expr; }); \ + kcsan_nestable_atomic_end(); \ + __val; \ + }) +#else + #endif /* __KERNEL__ */ /*
| |