The following commit has been merged into the locking/kcsan branch of tip: Commit-ID: 88f1be32068d4323aa31236452352d6019a03ccc Gitweb: https://git.kernel.org/tip/88f1be32068d4323aa31236452352d6019a03ccc Author: Will Deacon <will@xxxxxxxxxx> AuthorDate: Mon, 11 May 2020 21:41:48 +01:00 Committer: Thomas Gleixner <tglx@xxxxxxxxxxxxx> CommitterDate: Tue, 12 May 2020 11:04:17 +02:00 kcsan: Rework data_race() so that it can be used by READ_ONCE() Rework the data_race() macro so that it: - Accepts expressions which evaluate to a 'const' type - Attempts to discard volatile qualifiers from scalar types, avoiding pointless stack spills - Uses __kcsan_{disable,enable}_current(), allowing its use from code that is built independently from the kernel, such as the vDSO This will allow for its use by {READ,WRITE}_ONCE() in a subsequent patch. At the same time, fix-up some weird whitespace issues. Signed-off-by: Will Deacon <will@xxxxxxxxxx> Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx> Acked-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx> Cc: Marco Elver <elver@xxxxxxxxxx> Link: https://lkml.kernel.org/r/20200511204150.27858-17-will@xxxxxxxxxx --- include/linux/compiler.h | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/include/linux/compiler.h b/include/linux/compiler.h index 548294e..cb2e3b3 100644 --- a/include/linux/compiler.h +++ b/include/linux/compiler.h @@ -314,14 +314,15 @@ unsigned long read_word_at_a_time(const void *addr) * This macro *does not* affect normal code generation, but is a hint * to tooling that data races here are to be ignored. */ -#define data_race(expr) \ - ({ \ - typeof(({ expr; })) __val; \ - kcsan_disable_current(); \ - __val = ({ expr; }); \ - kcsan_enable_current(); \ - __val; \ - }) +#define data_race(expr) \ +({ \ + __kcsan_disable_current(); \ + ({ \ + __unqual_scalar_typeof(({ expr; })) __v = ({ expr; }); \ + __kcsan_enable_current(); \ + __v; \ + }); \ +}) #endif /* __KERNEL__ */
![]() |