diff options
author | Andi Kleen <andi@firstfloor.org> | 2009-02-12 13:43:23 +0100 |
---|---|---|
committer | H. Peter Anvin <hpa@linux.intel.com> | 2009-02-19 14:52:20 -0800 |
commit | b79109c3bbcf52cac5103979b283b9e5df4e796c (patch) | |
tree | 528da2232a2c7f013bde63b623bc11a205ce8773 /arch/x86/include/asm/mce.h | |
parent | b5f2fa4ea00a179ac1c2ff342ceeee261dd75e53 (diff) | |
download | blackbird-op-linux-b79109c3bbcf52cac5103979b283b9e5df4e796c.tar.gz blackbird-op-linux-b79109c3bbcf52cac5103979b283b9e5df4e796c.zip |
x86, mce: separate correct machine check poller and fatal exception handler
Impact: cleanup, performance enhancement
The machine check poller is diverging more and more from the fatal
exception handler. Instead of adding more special cases separate the code
paths completely. The corrected poll path is actually quite simple,
and this doesn't result in much code duplication.
This makes both handlers much easier to read and results in
cleaner code flow. The exception handler now only needs to care
about uncorrected errors, which also simplifies the handling of multiple
errors. The corrected poller also now always runs in standard interrupt
context and does not need to do anything special to handle NMI context.
Minor behaviour changes:
- MCG status is now not cleared on polling.
- Only the banks which had corrected errors get cleared on polling
- The exception handler only clears banks with errors now
v2: Forward port to new patch order. Add "uc" argument.
Signed-off-by: Andi Kleen <ak@linux.intel.com>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Diffstat (limited to 'arch/x86/include/asm/mce.h')
-rw-r--r-- | arch/x86/include/asm/mce.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/arch/x86/include/asm/mce.h b/arch/x86/include/asm/mce.h index 048b71d9387a..225cdb5d2bfc 100644 --- a/arch/x86/include/asm/mce.h +++ b/arch/x86/include/asm/mce.h @@ -112,6 +112,13 @@ void mce_log_therm_throt_event(__u64 status); extern atomic_t mce_entry; extern void do_machine_check(struct pt_regs *, long); + +enum mcp_flags { + MCP_TIMESTAMP = (1 << 0), /* log time stamp */ + MCP_UC = (1 << 1), /* log uncorrected errors */ +}; +extern void machine_check_poll(enum mcp_flags flags); + extern int mce_notify_user(void); #endif /* !CONFIG_X86_32 */ |