summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMarco Elver <elver@google.com>2020-01-10 19:48:34 +0100
committerIngo Molnar <mingo@kernel.org>2020-03-21 09:40:52 +0100
commit05f9a4067964e3f864210271a6299f13d2eeea55 (patch)
treefb65a68f2d4d27a7dbfaca1c53e36e89e962381d /lib
parent47144eca282189afcf34ef25aee8408c168765d4 (diff)
kcsan: Rate-limit reporting per data races
KCSAN data-race reports can occur quite frequently, so much so as to render the system useless. This commit therefore adds support for time-based rate-limiting KCSAN reports, with the time interval specified by a new KCSAN_REPORT_ONCE_IN_MS Kconfig option. The default is 3000 milliseconds, also known as three seconds. Because KCSAN must detect data races in allocators and in other contexts where use of allocation is ill-advised, a fixed-size array is used to buffer reports during each reporting interval. To reduce the number of reports lost due to array overflow, this commit stores only one instance of duplicate reports, which has the benefit of further reducing KCSAN's console output rate. Reported-by: Qian Cai <cai@lca.pw> Suggested-by: Paul E. McKenney <paulmck@kernel.org> Signed-off-by: Marco Elver <elver@google.com> Signed-off-by: Paul E. McKenney <paulmck@kernel.org> Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'lib')
-rw-r--r--lib/Kconfig.kcsan10
1 files changed, 10 insertions, 0 deletions
diff --git a/lib/Kconfig.kcsan b/lib/Kconfig.kcsan
index 3f78b1434375..3552990abcfe 100644
--- a/lib/Kconfig.kcsan
+++ b/lib/Kconfig.kcsan
@@ -81,6 +81,16 @@ config KCSAN_SKIP_WATCH_RANDOMIZE
KCSAN_WATCH_SKIP. If false, the chosen value is always
KCSAN_WATCH_SKIP.
+config KCSAN_REPORT_ONCE_IN_MS
+ int "Duration in milliseconds, in which any given data race is only reported once"
+ default 3000
+ help
+ Any given data race is only reported once in the defined time window.
+ Different data races may still generate reports within a duration
+ that is smaller than the duration defined here. This allows rate
+ limiting reporting to avoid flooding the console with reports.
+ Setting this to 0 disables rate limiting.
+
# Note that, while some of the below options could be turned into boot
# parameters, to optimize for the common use-case, we avoid this because: (a)
# it would impact performance (and we want to avoid static branch for all