perf test: Fix bpf test sample mismatch reporting
[linux-2.6-microblaze.git] / lib / Kconfig.kcsan
index 0440f37..e0a93ff 100644 (file)
@@ -40,10 +40,14 @@ menuconfig KCSAN
 
 if KCSAN
 
-# Compiler capabilities that should not fail the test if they are unavailable.
 config CC_HAS_TSAN_COMPOUND_READ_BEFORE_WRITE
        def_bool (CC_IS_CLANG && $(cc-option,-fsanitize=thread -mllvm -tsan-compound-read-before-write=1)) || \
                 (CC_IS_GCC && $(cc-option,-fsanitize=thread --param tsan-compound-read-before-write=1))
+       help
+         The compiler instruments plain compound read-write operations
+         differently (++, --, +=, -=, |=, &=, etc.), which allows KCSAN to
+         distinguish them from other plain accesses. This is currently
+         supported by Clang 12 or later.
 
 config KCSAN_VERBOSE
        bool "Show verbose reports with more information about system state"
@@ -58,9 +62,6 @@ config KCSAN_VERBOSE
          generated from any one of them, system stability may suffer due to
          deadlocks or recursion.  If in doubt, say N.
 
-config KCSAN_DEBUG
-       bool "Debugging of KCSAN internals"
-
 config KCSAN_SELFTEST
        bool "Perform short selftests on boot"
        default y
@@ -149,7 +150,8 @@ config KCSAN_SKIP_WATCH_RANDOMIZE
          KCSAN_WATCH_SKIP.
 
 config KCSAN_INTERRUPT_WATCHER
-       bool "Interruptible watchers"
+       bool "Interruptible watchers" if !KCSAN_STRICT
+       default KCSAN_STRICT
        help
          If enabled, a task that set up a watchpoint may be interrupted while
          delayed. This option will allow KCSAN to detect races between
@@ -169,13 +171,9 @@ config KCSAN_REPORT_ONCE_IN_MS
          reporting to avoid flooding the console with reports.  Setting this
          to 0 disables rate limiting.
 
-# The main purpose of the below options is to control reported data races (e.g.
-# in fuzzer configs), and are not expected to be switched frequently by other
-# users. We could turn some of them into boot parameters, but given they should
-# not be switched normally, let's keep them here to simplify configuration.
-#
-# The defaults below are chosen to be very conservative, and may miss certain
-# bugs.
+# The main purpose of the below options is to control reported data races, and
+# are not expected to be switched frequently by non-testers or at runtime.
+# The defaults are chosen to be conservative, and can miss certain bugs.
 
 config KCSAN_REPORT_RACE_UNKNOWN_ORIGIN
        bool "Report races of unknown origin"
@@ -186,9 +184,17 @@ config KCSAN_REPORT_RACE_UNKNOWN_ORIGIN
          reported if it was only possible to infer a race due to a data value
          change while an access is being delayed on a watchpoint.
 
+config KCSAN_STRICT
+       bool "Strict data-race checking"
+       help
+         KCSAN will report data races with the strictest possible rules, which
+         closely aligns with the rules defined by the Linux-kernel memory
+         consistency model (LKMM).
+
 config KCSAN_REPORT_VALUE_CHANGE_ONLY
        bool "Only report races where watcher observed a data value change"
        default y
+       depends on !KCSAN_STRICT
        help
          If enabled and a conflicting write is observed via a watchpoint, but
          the data value of the memory location was observed to remain
@@ -197,6 +203,7 @@ config KCSAN_REPORT_VALUE_CHANGE_ONLY
 config KCSAN_ASSUME_PLAIN_WRITES_ATOMIC
        bool "Assume that plain aligned writes up to word size are atomic"
        default y
+       depends on !KCSAN_STRICT
        help
          Assume that plain aligned writes up to word size are atomic by
          default, and also not subject to other unsafe compiler optimizations
@@ -209,6 +216,7 @@ config KCSAN_ASSUME_PLAIN_WRITES_ATOMIC
 
 config KCSAN_IGNORE_ATOMICS
        bool "Do not instrument marked atomic accesses"
+       depends on !KCSAN_STRICT
        help
          Never instrument marked atomic accesses. This option can be used for
          additional filtering. Conflicting marked atomic reads and plain
@@ -224,4 +232,14 @@ config KCSAN_IGNORE_ATOMICS
          due to two conflicting plain writes will be reported (aligned and
          unaligned, if CONFIG_KCSAN_ASSUME_PLAIN_WRITES_ATOMIC=n).
 
+config KCSAN_PERMISSIVE
+       bool "Enable all additional permissive rules"
+       depends on KCSAN_REPORT_VALUE_CHANGE_ONLY
+       help
+         Enable additional permissive rules to ignore certain classes of data
+         races (also see kernel/kcsan/permissive.h). None of the permissive
+         rules imply that such data races are generally safe, but can be used
+         to further reduce reported data races due to data-racy patterns
+         common across the kernel.
+
 endif # KCSAN