Skip to content

Commit 9d1335c

Browse files
melverpaulmckrcu
authored andcommitted
kcsan: Add missing CONFIG_KCSAN_IGNORE_ATOMICS checks
Add missing CONFIG_KCSAN_IGNORE_ATOMICS checks for the builtin atomics instrumentation. Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> Signed-off-by: Marco Elver <elver@google.com> Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
1 parent 106a307 commit 9d1335c

1 file changed

Lines changed: 22 additions & 8 deletions

File tree

kernel/kcsan/core.c

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -914,14 +914,19 @@ EXPORT_SYMBOL(__tsan_init);
914914
u##bits __tsan_atomic##bits##_load(const u##bits *ptr, int memorder); \
915915
u##bits __tsan_atomic##bits##_load(const u##bits *ptr, int memorder) \
916916
{ \
917-
check_access(ptr, bits / BITS_PER_BYTE, KCSAN_ACCESS_ATOMIC); \
917+
if (!IS_ENABLED(CONFIG_KCSAN_IGNORE_ATOMICS)) { \
918+
check_access(ptr, bits / BITS_PER_BYTE, KCSAN_ACCESS_ATOMIC); \
919+
} \
918920
return __atomic_load_n(ptr, memorder); \
919921
} \
920922
EXPORT_SYMBOL(__tsan_atomic##bits##_load); \
921923
void __tsan_atomic##bits##_store(u##bits *ptr, u##bits v, int memorder); \
922924
void __tsan_atomic##bits##_store(u##bits *ptr, u##bits v, int memorder) \
923925
{ \
924-
check_access(ptr, bits / BITS_PER_BYTE, KCSAN_ACCESS_WRITE | KCSAN_ACCESS_ATOMIC); \
926+
if (!IS_ENABLED(CONFIG_KCSAN_IGNORE_ATOMICS)) { \
927+
check_access(ptr, bits / BITS_PER_BYTE, \
928+
KCSAN_ACCESS_WRITE | KCSAN_ACCESS_ATOMIC); \
929+
} \
925930
__atomic_store_n(ptr, v, memorder); \
926931
} \
927932
EXPORT_SYMBOL(__tsan_atomic##bits##_store)
@@ -930,8 +935,11 @@ EXPORT_SYMBOL(__tsan_init);
930935
u##bits __tsan_atomic##bits##_##op(u##bits *ptr, u##bits v, int memorder); \
931936
u##bits __tsan_atomic##bits##_##op(u##bits *ptr, u##bits v, int memorder) \
932937
{ \
933-
check_access(ptr, bits / BITS_PER_BYTE, \
934-
KCSAN_ACCESS_COMPOUND | KCSAN_ACCESS_WRITE | KCSAN_ACCESS_ATOMIC); \
938+
if (!IS_ENABLED(CONFIG_KCSAN_IGNORE_ATOMICS)) { \
939+
check_access(ptr, bits / BITS_PER_BYTE, \
940+
KCSAN_ACCESS_COMPOUND | KCSAN_ACCESS_WRITE | \
941+
KCSAN_ACCESS_ATOMIC); \
942+
} \
935943
return __atomic_##op##suffix(ptr, v, memorder); \
936944
} \
937945
EXPORT_SYMBOL(__tsan_atomic##bits##_##op)
@@ -959,8 +967,11 @@ EXPORT_SYMBOL(__tsan_init);
959967
int __tsan_atomic##bits##_compare_exchange_##strength(u##bits *ptr, u##bits *exp, \
960968
u##bits val, int mo, int fail_mo) \
961969
{ \
962-
check_access(ptr, bits / BITS_PER_BYTE, \
963-
KCSAN_ACCESS_COMPOUND | KCSAN_ACCESS_WRITE | KCSAN_ACCESS_ATOMIC); \
970+
if (!IS_ENABLED(CONFIG_KCSAN_IGNORE_ATOMICS)) { \
971+
check_access(ptr, bits / BITS_PER_BYTE, \
972+
KCSAN_ACCESS_COMPOUND | KCSAN_ACCESS_WRITE | \
973+
KCSAN_ACCESS_ATOMIC); \
974+
} \
964975
return __atomic_compare_exchange_n(ptr, exp, val, weak, mo, fail_mo); \
965976
} \
966977
EXPORT_SYMBOL(__tsan_atomic##bits##_compare_exchange_##strength)
@@ -971,8 +982,11 @@ EXPORT_SYMBOL(__tsan_init);
971982
u##bits __tsan_atomic##bits##_compare_exchange_val(u##bits *ptr, u##bits exp, u##bits val, \
972983
int mo, int fail_mo) \
973984
{ \
974-
check_access(ptr, bits / BITS_PER_BYTE, \
975-
KCSAN_ACCESS_COMPOUND | KCSAN_ACCESS_WRITE | KCSAN_ACCESS_ATOMIC); \
985+
if (!IS_ENABLED(CONFIG_KCSAN_IGNORE_ATOMICS)) { \
986+
check_access(ptr, bits / BITS_PER_BYTE, \
987+
KCSAN_ACCESS_COMPOUND | KCSAN_ACCESS_WRITE | \
988+
KCSAN_ACCESS_ATOMIC); \
989+
} \
976990
__atomic_compare_exchange_n(ptr, &exp, val, 0, mo, fail_mo); \
977991
return exp; \
978992
} \

0 commit comments

Comments
 (0)