diff options
author | Borislav Petkov <bp@suse.de> | 2017-03-27 05:33:02 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2017-03-28 02:54:48 -0400 |
commit | 011d8261117249eab97bc86a8e1ac7731e03e319 (patch) | |
tree | 5e4a07f4ac44d81b62344ee3c8dadadf1f77cf66 /include/linux/ras.h | |
parent | e64edfcce9c738300b4102d0739577d6ecc96d4a (diff) |
RAS: Add a Corrected Errors Collector
Introduce a simple data structure for collecting correctable errors
along with accessors. More detailed description in the code itself.
The error decoding is done with the decoding chain now and
mce_first_notifier() gets to see the error first and the CEC decides
whether to log it and then the rest of the chain doesn't hear about it -
basically the main reason for the CE collector - or to continue running
the notifiers.
When the CEC hits the action threshold, it will try to soft-offine the
page containing the ECC and then the whole decoding chain gets to see
the error.
Signed-off-by: Borislav Petkov <bp@suse.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-edac <linux-edac@vger.kernel.org>
Link: http://lkml.kernel.org/r/20170327093304.10683-5-bp@alien8.de
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'include/linux/ras.h')
-rw-r--r-- | include/linux/ras.h | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/include/linux/ras.h b/include/linux/ras.h index 2aceeafd6fe5..ffb147185e8d 100644 --- a/include/linux/ras.h +++ b/include/linux/ras.h | |||
@@ -1,14 +1,25 @@ | |||
1 | #ifndef __RAS_H__ | 1 | #ifndef __RAS_H__ |
2 | #define __RAS_H__ | 2 | #define __RAS_H__ |
3 | 3 | ||
4 | #include <asm/errno.h> | ||
5 | |||
4 | #ifdef CONFIG_DEBUG_FS | 6 | #ifdef CONFIG_DEBUG_FS |
5 | int ras_userspace_consumers(void); | 7 | int ras_userspace_consumers(void); |
6 | void ras_debugfs_init(void); | 8 | void ras_debugfs_init(void); |
7 | int ras_add_daemon_trace(void); | 9 | int ras_add_daemon_trace(void); |
8 | #else | 10 | #else |
9 | static inline int ras_userspace_consumers(void) { return 0; } | 11 | static inline int ras_userspace_consumers(void) { return 0; } |
10 | static inline void ras_debugfs_init(void) { return; } | 12 | static inline void ras_debugfs_init(void) { } |
11 | static inline int ras_add_daemon_trace(void) { return 0; } | 13 | static inline int ras_add_daemon_trace(void) { return 0; } |
12 | #endif | 14 | #endif |
13 | 15 | ||
16 | #ifdef CONFIG_RAS_CEC | ||
17 | void __init cec_init(void); | ||
18 | int __init parse_cec_param(char *str); | ||
19 | int cec_add_elem(u64 pfn); | ||
20 | #else | ||
21 | static inline void __init cec_init(void) { } | ||
22 | static inline int cec_add_elem(u64 pfn) { return -ENODEV; } | ||
14 | #endif | 23 | #endif |
24 | |||
25 | #endif /* __RAS_H__ */ | ||