kcsan: Change data_race() to no longer require marking racing accesses
Thus far, accesses marked with data_race() would still require the racing access to be marked in some way (be it with READ_ONCE(), WRITE_ONCE(), or data_race() itself), as otherwise KCSAN would still report a data race. This requirement, however, seems to be unintuitive, and some valid use-cases demand *not* marking other accesses, as it might hide more serious bugs (e.g. diagnostic reads). Therefore, this commit changes data_race() to no longer require marking racing accesses (although it's still recommended if possible). The alternative would have been introducing another variant of data_race(), however, since usage of data_race() already needs to be carefully reasoned about, distinguishing between these cases likely adds more complexity in the wrong place. Link: https://lkml.kernel.org/r/20200331131002.GA30975@willie-the-truck Cc: Paul E. McKenney <paulmck@kernel.org> Cc: Will Deacon <will@kernel.org> Cc: Qian Cai <cai@lca.pw> Acked-by: Will Deacon <will@kernel.org> Signed-off-by: Marco Elver <elver@google.com> Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
This commit is contained in:
parent
01b4ff58f7
commit
d071e91361
|
@ -326,9 +326,9 @@ unsigned long read_word_at_a_time(const void *addr)
|
|||
#define data_race(expr) \
|
||||
({ \
|
||||
typeof(({ expr; })) __val; \
|
||||
kcsan_nestable_atomic_begin(); \
|
||||
kcsan_disable_current(); \
|
||||
__val = ({ expr; }); \
|
||||
kcsan_nestable_atomic_end(); \
|
||||
kcsan_enable_current(); \
|
||||
__val; \
|
||||
})
|
||||
#else
|
||||
|
|
Loading…
Reference in a new issue