diff options
author | Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com> | 2011-06-08 10:53:35 +0900 |
---|---|---|
committer | Borislav Petkov <borislav.petkov@amd.com> | 2011-06-16 12:09:42 +0200 |
commit | a17957cdec69acb9e26319618b95a810a936e637 (patch) | |
tree | ceaa2c75a8feeba562b652c58f35c679a1a7fb80 | |
parent | 901d7691d3238ad68c80a567b88b1e5d614137fb (diff) | |
download | op-kernel-dev-a17957cdec69acb9e26319618b95a810a936e637.zip op-kernel-dev-a17957cdec69acb9e26319618b95a810a936e637.tar.gz |
x86, mce, severity: Cleanup severity table
The current format of an item in this table is:
condition(param, ..., level, message [, condition2 ...])
So we have to check both an item's head and tail to find the conditions
which match the item.
Format them in a more straight forward manner:
item(level, message, condition [, condition2 ...])
Signed-off-by: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
Acked-by: Tony Luck <tony.luck@intel.com>
Link: http://lkml.kernel.org/r/4DEED61F.5010502@jp.fujitsu.com
Signed-off-by: Borislav Petkov <borislav.petkov@amd.com>
-rw-r--r-- | arch/x86/kernel/cpu/mcheck/mce-severity.c | 127 |
1 files changed, 58 insertions, 69 deletions
diff --git a/arch/x86/kernel/cpu/mcheck/mce-severity.c b/arch/x86/kernel/cpu/mcheck/mce-severity.c index eaf5a43..27e778e 100644 --- a/arch/x86/kernel/cpu/mcheck/mce-severity.c +++ b/arch/x86/kernel/cpu/mcheck/mce-severity.c @@ -43,116 +43,105 @@ static struct severity { unsigned char covered; char *msg; } severities[] = { -#define KERNEL .context = IN_KERNEL -#define USER .context = IN_USER -#define SER .ser = SER_REQUIRED -#define NOSER .ser = NO_SER -#define SEV(s) .sev = MCE_ ## s ## _SEVERITY -#define BITCLR(x, s, m, r...) { .mask = x, .result = 0, SEV(s), .msg = m, ## r } -#define BITSET(x, s, m, r...) { .mask = x, .result = x, SEV(s), .msg = m, ## r } -#define MCGMASK(x, res, s, m, r...) \ - { .mcgmask = x, .mcgres = res, SEV(s), .msg = m, ## r } -#define MASK(x, y, s, m, r...) \ - { .mask = x, .result = y, SEV(s), .msg = m, ## r } +#define MCESEV(s, m, c...) { .sev = MCE_ ## s ## _SEVERITY, .msg = m, ## c } +#define KERNEL .context = IN_KERNEL +#define USER .context = IN_USER +#define SER .ser = SER_REQUIRED +#define NOSER .ser = NO_SER +#define BITCLR(x) .mask = x, .result = 0 +#define BITSET(x) .mask = x, .result = x +#define MCGMASK(x, y) .mcgmask = x, .mcgres = y +#define MASK(x, y) .mask = x, .result = y #define MCI_UC_S (MCI_STATUS_UC|MCI_STATUS_S) #define MCI_UC_SAR (MCI_STATUS_UC|MCI_STATUS_S|MCI_STATUS_AR) #define MCACOD 0xffff - BITCLR( - MCI_STATUS_VAL, - NO, "Invalid" + MCESEV( + NO, "Invalid", + BITCLR(MCI_STATUS_VAL) ), - BITCLR( - MCI_STATUS_EN, - NO, "Not enabled" + MCESEV( + NO, "Not enabled", + BITCLR(MCI_STATUS_EN) ), - BITSET( - MCI_STATUS_PCC, - PANIC, "Processor context corrupt" + MCESEV( + PANIC, "Processor context corrupt", + BITSET(MCI_STATUS_PCC) ), /* When MCIP is not set something is very confused */ - MCGMASK( - MCG_STATUS_MCIP, 0, - PANIC, "MCIP not set in MCA handler" + MCESEV( + PANIC, "MCIP not set in MCA handler", + MCGMASK(MCG_STATUS_MCIP, 0) ), /* Neither return not error IP -- no chance to recover -> PANIC */ - MCGMASK( - MCG_STATUS_RIPV|MCG_STATUS_EIPV, 0, - PANIC, "Neither restart nor error IP" + MCESEV( + PANIC, "Neither restart nor error IP", + MCGMASK(MCG_STATUS_RIPV|MCG_STATUS_EIPV, 0) ), - MCGMASK( - MCG_STATUS_RIPV, 0, + MCESEV( PANIC, "In kernel and no restart IP", - KERNEL + KERNEL, MCGMASK(MCG_STATUS_RIPV, 0) ), - BITCLR( - MCI_STATUS_UC, + MCESEV( KEEP, "Corrected error", - NOSER + NOSER, BITCLR(MCI_STATUS_UC) ), /* ignore OVER for UCNA */ - MASK( - MCI_UC_SAR, MCI_STATUS_UC, + MCESEV( KEEP, "Uncorrected no action required", - SER + SER, MASK(MCI_UC_SAR, MCI_STATUS_UC) ), - MASK( - MCI_STATUS_OVER|MCI_UC_SAR, MCI_STATUS_UC|MCI_STATUS_AR, + MCESEV( PANIC, "Illegal combination (UCNA with AR=1)", - SER + SER, + MASK(MCI_STATUS_OVER|MCI_UC_SAR, MCI_STATUS_UC|MCI_STATUS_AR) ), - MASK( - MCI_STATUS_S, 0, + MCESEV( KEEP, "Non signalled machine check", - SER + SER, MASK(MCI_STATUS_S, 0) ), /* AR add known MCACODs here */ - MASK( - MCI_STATUS_OVER|MCI_UC_SAR, MCI_STATUS_OVER|MCI_UC_SAR, + MCESEV( PANIC, "Action required with lost events", - SER + SER, + MASK(MCI_STATUS_OVER|MCI_UC_SAR, MCI_STATUS_OVER|MCI_UC_SAR) ), - MASK( - MCI_STATUS_OVER|MCI_UC_SAR, MCI_UC_SAR, + MCESEV( PANIC, "Action required; unknown MCACOD", - SER + SER, MASK(MCI_STATUS_OVER|MCI_UC_SAR, MCI_UC_SAR) ), /* known AO MCACODs: */ - MASK( - MCI_UC_SAR|MCI_STATUS_OVER|0xfff0, MCI_UC_S|0xc0, + MCESEV( AO, "Action optional: memory scrubbing error", - SER + SER, MASK(MCI_UC_SAR|MCI_STATUS_OVER|0xfff0, MCI_UC_S|0xc0) ), - MASK( - MCI_UC_SAR|MCI_STATUS_OVER|MCACOD, MCI_UC_S|0x17a, + MCESEV( AO, "Action optional: last level cache writeback error", - SER + SER, MASK(MCI_UC_SAR|MCI_STATUS_OVER|MCACOD, MCI_UC_S|0x17a) ), - - MASK( - MCI_STATUS_OVER|MCI_UC_SAR, MCI_UC_S, + MCESEV( SOME, "Action optional unknown MCACOD", - SER + SER, MASK(MCI_STATUS_OVER|MCI_UC_SAR, MCI_UC_S) ), - MASK( - MCI_STATUS_OVER|MCI_UC_SAR, MCI_UC_S|MCI_STATUS_OVER, + MCESEV( SOME, "Action optional with lost events", - SER + SER, MASK(MCI_STATUS_OVER|MCI_UC_SAR, MCI_UC_S|MCI_STATUS_OVER) ), - BITSET( - MCI_STATUS_UC|MCI_STATUS_OVER, - PANIC, "Overflowed uncorrected" + + MCESEV( + PANIC, "Overflowed uncorrected", + BITSET(MCI_STATUS_UC|MCI_STATUS_OVER) ), - BITSET( - MCI_STATUS_UC, - UC, "Uncorrected" + MCESEV( + UC, "Uncorrected", + BITSET(MCI_STATUS_UC) ), - BITSET( - 0, - SOME, "No match" + MCESEV( + SOME, "No match", + BITSET(0) ) /* always matches. keep at end */ }; |