summaryrefslogtreecommitdiff
path: root/include/asm-generic/bitops/instrumented-atomic.h
diff options
context:
space:
mode:
authorMarco Elver <elver@google.com>2021-11-30 12:44:25 +0100
committerPaul E. McKenney <paulmck@kernel.org>2021-12-09 16:42:28 -0800
commit04def1b9b4a3d27ef80e7fbf1b17f1897beb1ce4 (patch)
treef91fa47fab222fda8aee8476b7c7f5f0e47b299e /include/asm-generic/bitops/instrumented-atomic.h
parente87c4f6642f49627c3430cb3ee78c73fb51b48e4 (diff)
downloadlwn-04def1b9b4a3d27ef80e7fbf1b17f1897beb1ce4.tar.gz
lwn-04def1b9b4a3d27ef80e7fbf1b17f1897beb1ce4.zip
asm-generic/bitops, kcsan: Add instrumentation for barriers
Adds the required KCSAN instrumentation for barriers of atomic bitops. Signed-off-by: Marco Elver <elver@google.com> Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Diffstat (limited to 'include/asm-generic/bitops/instrumented-atomic.h')
-rw-r--r--include/asm-generic/bitops/instrumented-atomic.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/include/asm-generic/bitops/instrumented-atomic.h b/include/asm-generic/bitops/instrumented-atomic.h
index 81915dcd4b4e..c90192b1c755 100644
--- a/include/asm-generic/bitops/instrumented-atomic.h
+++ b/include/asm-generic/bitops/instrumented-atomic.h
@@ -67,6 +67,7 @@ static inline void change_bit(long nr, volatile unsigned long *addr)
*/
static inline bool test_and_set_bit(long nr, volatile unsigned long *addr)
{
+ kcsan_mb();
instrument_atomic_read_write(addr + BIT_WORD(nr), sizeof(long));
return arch_test_and_set_bit(nr, addr);
}
@@ -80,6 +81,7 @@ static inline bool test_and_set_bit(long nr, volatile unsigned long *addr)
*/
static inline bool test_and_clear_bit(long nr, volatile unsigned long *addr)
{
+ kcsan_mb();
instrument_atomic_read_write(addr + BIT_WORD(nr), sizeof(long));
return arch_test_and_clear_bit(nr, addr);
}
@@ -93,6 +95,7 @@ static inline bool test_and_clear_bit(long nr, volatile unsigned long *addr)
*/
static inline bool test_and_change_bit(long nr, volatile unsigned long *addr)
{
+ kcsan_mb();
instrument_atomic_read_write(addr + BIT_WORD(nr), sizeof(long));
return arch_test_and_change_bit(nr, addr);
}