aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/kcsan-checks.h
diff options
context:
space:
mode:
authorMarco Elver <elver@google.com>2020-02-11 17:04:19 +0100
committerIngo Molnar <mingo@kernel.org>2020-03-21 09:43:47 +0100
commitf0f6928c2c4c19ab6171d4f468f542fac1888a8f (patch)
tree5de365488a803cb53a42fffa0a9cfb43c5e7acbb /include/linux/kcsan-checks.h
parentkcsan: Fix misreporting if concurrent races on same address (diff)
downloadlinux-dev-f0f6928c2c4c19ab6171d4f468f542fac1888a8f.tar.xz
linux-dev-f0f6928c2c4c19ab6171d4f468f542fac1888a8f.zip
kcsan: Move interfaces that affects checks to kcsan-checks.h
This moves functions that affect state changing the behaviour of kcsan_check_access() to kcsan-checks.h. Since these are likely used with kcsan_check_access() it makes more sense to have them in kcsan-checks.h, to avoid including all of 'include/linux/kcsan.h'. No functional change intended. Acked-by: John Hubbard <jhubbard@nvidia.com> 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 'include/linux/kcsan-checks.h')
-rw-r--r--include/linux/kcsan-checks.h48
1 files changed, 46 insertions, 2 deletions
diff --git a/include/linux/kcsan-checks.h b/include/linux/kcsan-checks.h
index cf6961794e9a..8675411c8dbc 100644
--- a/include/linux/kcsan-checks.h
+++ b/include/linux/kcsan-checks.h
@@ -32,10 +32,54 @@
*/
void __kcsan_check_access(const volatile void *ptr, size_t size, int type);
-#else
+/**
+ * kcsan_nestable_atomic_begin - begin nestable atomic region
+ *
+ * Accesses within the atomic region may appear to race with other accesses but
+ * should be considered atomic.
+ */
+void kcsan_nestable_atomic_begin(void);
+
+/**
+ * kcsan_nestable_atomic_end - end nestable atomic region
+ */
+void kcsan_nestable_atomic_end(void);
+
+/**
+ * kcsan_flat_atomic_begin - begin flat atomic region
+ *
+ * Accesses within the atomic region may appear to race with other accesses but
+ * should be considered atomic.
+ */
+void kcsan_flat_atomic_begin(void);
+
+/**
+ * kcsan_flat_atomic_end - end flat atomic region
+ */
+void kcsan_flat_atomic_end(void);
+
+/**
+ * kcsan_atomic_next - consider following accesses as atomic
+ *
+ * Force treating the next n memory accesses for the current context as atomic
+ * operations.
+ *
+ * @n number of following memory accesses to treat as atomic.
+ */
+void kcsan_atomic_next(int n);
+
+#else /* CONFIG_KCSAN */
+
static inline void __kcsan_check_access(const volatile void *ptr, size_t size,
int type) { }
-#endif
+
+static inline void kcsan_nestable_atomic_begin(void) { }
+static inline void kcsan_nestable_atomic_end(void) { }
+static inline void kcsan_flat_atomic_begin(void) { }
+static inline void kcsan_flat_atomic_end(void) { }
+static inline void kcsan_atomic_next(int n) { }
+
+#endif /* CONFIG_KCSAN */
/*
* kcsan_*: Only calls into the runtime when the particular compilation unit has