kcsan: Introduce CONFIG_KCSAN_STRICT
authorMarco Elver <elver@google.com>
Mon, 7 Jun 2021 12:56:49 +0000 (14:56 +0200)
committerPaul E. McKenney <paulmck@kernel.org>
Tue, 20 Jul 2021 20:49:43 +0000 (13:49 -0700)
Add a simpler Kconfig variable to configure KCSAN's "strict" mode. This
makes it simpler in documentation or messages to suggest just a single
configuration option to select the strictest checking mode (vs.
currently having to list several options).

Signed-off-by: Marco Elver <elver@google.com>
Acked-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Documentation/dev-tools/kcsan.rst
lib/Kconfig.kcsan

index 6a600cf8430b164afa6dd037cf49246cc6ed1a0c..69dc9c502ccc5eaf2e8ee49b2586ccf84bab0aeb 100644 (file)
@@ -127,6 +127,10 @@ Kconfig options:
   causes KCSAN to not report data races due to conflicts where the only plain
   accesses are aligned writes up to word size.
 
+To use the strictest possible rules, select ``CONFIG_KCSAN_STRICT=y``, which
+configures KCSAN to follow the Linux-kernel memory consistency model (LKMM) as
+closely as possible.
+
 DebugFS interface
 ~~~~~~~~~~~~~~~~~
 
index 5304f211f81f1c467fe74e39cb545b819656468d..c76fbb3ee09ec8c9b30d7271a96993bd4ac8f511 100644 (file)
@@ -183,9 +183,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
@@ -194,6 +202,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
@@ -206,6 +215,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