Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a17957cd authored by Hidetoshi Seto's avatar Hidetoshi Seto Committed by Borislav Petkov
Browse files

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: default avatarHidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
Acked-by: default avatarTony Luck <tony.luck@intel.com>
Link: http://lkml.kernel.org/r/4DEED61F.5010502@jp.fujitsu.com


Signed-off-by: default avatarBorislav Petkov <borislav.petkov@amd.com>
parent 901d7691
Loading
Loading
Loading
Loading
+58 −69
Original line number Diff line number Diff line
@@ -43,116 +43,105 @@ static struct severity {
	unsigned char covered;
	char *msg;
} severities[] = {
#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 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  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 */
};