aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/cpu/mcheck/mce.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/cpu/mcheck/mce.c')
-rw-r--r--arch/x86/kernel/cpu/mcheck/mce.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c
index 6a3127ecb5cc..fabba15e4558 100644
--- a/arch/x86/kernel/cpu/mcheck/mce.c
+++ b/arch/x86/kernel/cpu/mcheck/mce.c
@@ -84,6 +84,9 @@ static int rip_msr;
84static int mce_bootlog = -1; 84static int mce_bootlog = -1;
85static int monarch_timeout = -1; 85static int monarch_timeout = -1;
86static int mce_panic_timeout; 86static int mce_panic_timeout;
87static int mce_dont_log_ce;
88int mce_cmci_disabled;
89int mce_ignore_ce;
87int mce_ser; 90int mce_ser;
88 91
89static char trigger[128]; 92static char trigger[128];
@@ -526,7 +529,7 @@ void machine_check_poll(enum mcp_flags flags, mce_banks_t *b)
526 * Don't get the IP here because it's unlikely to 529 * Don't get the IP here because it's unlikely to
527 * have anything to do with the actual error location. 530 * have anything to do with the actual error location.
528 */ 531 */
529 if (!(flags & MCP_DONTLOG)) { 532 if (!(flags & MCP_DONTLOG) && !mce_dont_log_ce) {
530 mce_log(&m); 533 mce_log(&m);
531 add_taint(TAINT_MACHINE_CHECK); 534 add_taint(TAINT_MACHINE_CHECK);
532 } 535 }
@@ -1307,6 +1310,9 @@ static void mce_init_timer(void)
1307 struct timer_list *t = &__get_cpu_var(mce_timer); 1310 struct timer_list *t = &__get_cpu_var(mce_timer);
1308 int *n = &__get_cpu_var(next_interval); 1311 int *n = &__get_cpu_var(next_interval);
1309 1312
1313 if (mce_ignore_ce)
1314 return;
1315
1310 *n = check_interval * HZ; 1316 *n = check_interval * HZ;
1311 if (!*n) 1317 if (!*n)
1312 return; 1318 return;
@@ -1517,7 +1523,10 @@ static struct miscdevice mce_log_device = {
1517}; 1523};
1518 1524
1519/* 1525/*
1520 * mce=off disables machine check 1526 * mce=off Disables machine check
1527 * mce=no_cmci Disables CMCI
1528 * mce=dont_log_ce Clears corrected events silently, no log created for CEs.
1529 * mce=ignore_ce Disables polling and CMCI, corrected events are not cleared.
1521 * mce=TOLERANCELEVEL[,monarchtimeout] (number, see above) 1530 * mce=TOLERANCELEVEL[,monarchtimeout] (number, see above)
1522 * monarchtimeout is how long to wait for other CPUs on machine 1531 * monarchtimeout is how long to wait for other CPUs on machine
1523 * check, or 0 to not wait 1532 * check, or 0 to not wait
@@ -1532,6 +1541,12 @@ static int __init mcheck_enable(char *str)
1532 str++; 1541 str++;
1533 if (!strcmp(str, "off")) 1542 if (!strcmp(str, "off"))
1534 mce_disabled = 1; 1543 mce_disabled = 1;
1544 else if (!strcmp(str, "no_cmci"))
1545 mce_cmci_disabled = 1;
1546 else if (!strcmp(str, "dont_log_ce"))
1547 mce_dont_log_ce = 1;
1548 else if (!strcmp(str, "ignore_ce"))
1549 mce_ignore_ce = 1;
1535 else if (!strcmp(str, "bootlog") || !strcmp(str, "nobootlog")) 1550 else if (!strcmp(str, "bootlog") || !strcmp(str, "nobootlog"))
1536 mce_bootlog = (str[0] == 'b'); 1551 mce_bootlog = (str[0] == 'b');
1537 else if (isdigit(str[0])) { 1552 else if (isdigit(str[0])) {