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>
This commit is contained in:
Hidetoshi Seto 2011-06-08 10:53:35 +09:00 committed by Borislav Petkov
parent 901d7691d3
commit a17957cdec
1 changed files with 61 additions and 72 deletions

View File

@ -43,116 +43,105 @@ static struct severity {
unsigned char covered; unsigned char covered;
char *msg; char *msg;
} severities[] = { } severities[] = {
#define KERNEL .context = IN_KERNEL #define MCESEV(s, m, c...) { .sev = MCE_ ## s ## _SEVERITY, .msg = m, ## c }
#define USER .context = IN_USER #define KERNEL .context = IN_KERNEL
#define SER .ser = SER_REQUIRED #define USER .context = IN_USER
#define NOSER .ser = NO_SER #define SER .ser = SER_REQUIRED
#define SEV(s) .sev = MCE_ ## s ## _SEVERITY #define NOSER .ser = NO_SER
#define BITCLR(x, s, m, r...) { .mask = x, .result = 0, SEV(s), .msg = m, ## r } #define BITCLR(x) .mask = x, .result = 0
#define BITSET(x, s, m, r...) { .mask = x, .result = x, SEV(s), .msg = m, ## r } #define BITSET(x) .mask = x, .result = x
#define MCGMASK(x, res, s, m, r...) \ #define MCGMASK(x, y) .mcgmask = x, .mcgres = y
{ .mcgmask = x, .mcgres = res, SEV(s), .msg = m, ## r } #define MASK(x, y) .mask = x, .result = y
#define MASK(x, y, s, m, r...) \
{ .mask = x, .result = y, SEV(s), .msg = m, ## r }
#define MCI_UC_S (MCI_STATUS_UC|MCI_STATUS_S) #define MCI_UC_S (MCI_STATUS_UC|MCI_STATUS_S)
#define MCI_UC_SAR (MCI_STATUS_UC|MCI_STATUS_S|MCI_STATUS_AR) #define MCI_UC_SAR (MCI_STATUS_UC|MCI_STATUS_S|MCI_STATUS_AR)
#define MCACOD 0xffff #define MCACOD 0xffff
BITCLR( MCESEV(
MCI_STATUS_VAL, NO, "Invalid",
NO, "Invalid" BITCLR(MCI_STATUS_VAL)
), ),
BITCLR( MCESEV(
MCI_STATUS_EN, NO, "Not enabled",
NO, "Not enabled" BITCLR(MCI_STATUS_EN)
), ),
BITSET( MCESEV(
MCI_STATUS_PCC, PANIC, "Processor context corrupt",
PANIC, "Processor context corrupt" BITSET(MCI_STATUS_PCC)
), ),
/* When MCIP is not set something is very confused */ /* When MCIP is not set something is very confused */
MCGMASK( MCESEV(
MCG_STATUS_MCIP, 0, PANIC, "MCIP not set in MCA handler",
PANIC, "MCIP not set in MCA handler" MCGMASK(MCG_STATUS_MCIP, 0)
), ),
/* Neither return not error IP -- no chance to recover -> PANIC */ /* Neither return not error IP -- no chance to recover -> PANIC */
MCGMASK( MCESEV(
MCG_STATUS_RIPV|MCG_STATUS_EIPV, 0, PANIC, "Neither restart nor error IP",
PANIC, "Neither restart nor error IP" MCGMASK(MCG_STATUS_RIPV|MCG_STATUS_EIPV, 0)
), ),
MCGMASK( MCESEV(
MCG_STATUS_RIPV, 0,
PANIC, "In kernel and no restart IP", PANIC, "In kernel and no restart IP",
KERNEL KERNEL, MCGMASK(MCG_STATUS_RIPV, 0)
), ),
BITCLR( MCESEV(
MCI_STATUS_UC,
KEEP, "Corrected error", KEEP, "Corrected error",
NOSER NOSER, BITCLR(MCI_STATUS_UC)
), ),
/* ignore OVER for UCNA */ /* ignore OVER for UCNA */
MASK( MCESEV(
MCI_UC_SAR, MCI_STATUS_UC,
KEEP, "Uncorrected no action required", KEEP, "Uncorrected no action required",
SER SER, MASK(MCI_UC_SAR, MCI_STATUS_UC)
), ),
MASK( MCESEV(
MCI_STATUS_OVER|MCI_UC_SAR, MCI_STATUS_UC|MCI_STATUS_AR,
PANIC, "Illegal combination (UCNA with AR=1)", PANIC, "Illegal combination (UCNA with AR=1)",
SER SER,
MASK(MCI_STATUS_OVER|MCI_UC_SAR, MCI_STATUS_UC|MCI_STATUS_AR)
), ),
MASK( MCESEV(
MCI_STATUS_S, 0,
KEEP, "Non signalled machine check", KEEP, "Non signalled machine check",
SER SER, MASK(MCI_STATUS_S, 0)
), ),
/* AR add known MCACODs here */ /* AR add known MCACODs here */
MASK( MCESEV(
MCI_STATUS_OVER|MCI_UC_SAR, MCI_STATUS_OVER|MCI_UC_SAR,
PANIC, "Action required with lost events", PANIC, "Action required with lost events",
SER SER,
MASK(MCI_STATUS_OVER|MCI_UC_SAR, MCI_STATUS_OVER|MCI_UC_SAR)
), ),
MASK( MCESEV(
MCI_STATUS_OVER|MCI_UC_SAR, MCI_UC_SAR,
PANIC, "Action required; unknown MCACOD", PANIC, "Action required; unknown MCACOD",
SER SER, MASK(MCI_STATUS_OVER|MCI_UC_SAR, MCI_UC_SAR)
), ),
/* known AO MCACODs: */ /* known AO MCACODs: */
MASK( MCESEV(
MCI_UC_SAR|MCI_STATUS_OVER|0xfff0, MCI_UC_S|0xc0,
AO, "Action optional: memory scrubbing error", AO, "Action optional: memory scrubbing error",
SER SER, MASK(MCI_UC_SAR|MCI_STATUS_OVER|0xfff0, MCI_UC_S|0xc0)
), ),
MASK( MCESEV(
MCI_UC_SAR|MCI_STATUS_OVER|MCACOD, MCI_UC_S|0x17a,
AO, "Action optional: last level cache writeback error", AO, "Action optional: last level cache writeback error",
SER SER, MASK(MCI_UC_SAR|MCI_STATUS_OVER|MCACOD, MCI_UC_S|0x17a)
),
MCESEV(
SOME, "Action optional unknown MCACOD",
SER, MASK(MCI_STATUS_OVER|MCI_UC_SAR, MCI_UC_S)
),
MCESEV(
SOME, "Action optional with lost events",
SER, MASK(MCI_STATUS_OVER|MCI_UC_SAR, MCI_UC_S|MCI_STATUS_OVER)
), ),
MASK( MCESEV(
MCI_STATUS_OVER|MCI_UC_SAR, MCI_UC_S, PANIC, "Overflowed uncorrected",
SOME, "Action optional unknown MCACOD", BITSET(MCI_STATUS_UC|MCI_STATUS_OVER)
SER
), ),
MASK( MCESEV(
MCI_STATUS_OVER|MCI_UC_SAR, MCI_UC_S|MCI_STATUS_OVER, UC, "Uncorrected",
SOME, "Action optional with lost events", BITSET(MCI_STATUS_UC)
SER
), ),
BITSET( MCESEV(
MCI_STATUS_UC|MCI_STATUS_OVER, SOME, "No match",
PANIC, "Overflowed uncorrected" BITSET(0)
),
BITSET(
MCI_STATUS_UC,
UC, "Uncorrected"
),
BITSET(
0,
SOME, "No match"
) /* always matches. keep at end */ ) /* always matches. keep at end */
}; };