summaryrefslogtreecommitdiff
path: root/include/linux/bug.h
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2018-10-06 03:46:09 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2018-10-06 03:46:08 -0700
commit3b8fc0b7a3fcc809378d82dbf66b417e186af205 (patch)
tree6e44c44ec85ddba4faf8cb108b04c47cb3fc4414 /include/linux/bug.h
parent8f037f0b363b3907444a3a46b90e293284c6da51 (diff)
parentd9a879450e01a53b297876072dfc1e541181862b (diff)
Merge "Merge android-4.4.158 (f9e4134) into msm-4.4"
Diffstat (limited to 'include/linux/bug.h')
-rw-r--r--include/linux/bug.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/include/linux/bug.h b/include/linux/bug.h
index 91eedf5fae38..218ac5875124 100644
--- a/include/linux/bug.h
+++ b/include/linux/bug.h
@@ -115,4 +115,23 @@ static inline enum bug_trap_type report_bug(unsigned long bug_addr,
#else
#define PANIC_CORRUPTION 0
#endif /* CONFIG_PANIC_ON_DATA_CORRUPTION */
+
+/*
+ * Since detected data corruption should stop operation on the affected
+ * structures. Return value must be checked and sanely acted on by caller.
+ */
+static inline __must_check bool check_data_corruption(bool v) { return v; }
+#define CHECK_DATA_CORRUPTION(condition, fmt, ...) \
+ check_data_corruption(({ \
+ bool corruption = unlikely(condition); \
+ if (corruption) { \
+ if (IS_ENABLED(CONFIG_BUG_ON_DATA_CORRUPTION)) { \
+ pr_err(fmt, ##__VA_ARGS__); \
+ BUG(); \
+ } else \
+ WARN(1, fmt, ##__VA_ARGS__); \
+ } \
+ corruption; \
+ }))
+
#endif /* _LINUX_BUG_H */