@@ -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