|
@@ -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 */
|
|
|
};
|
|
|
|