diff options
Diffstat (limited to 'arch/x86/kernel/cpu/mcheck/mce.c')
-rw-r--r-- | arch/x86/kernel/cpu/mcheck/mce.c | 19 |
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; | |||
84 | static int mce_bootlog = -1; | 84 | static int mce_bootlog = -1; |
85 | static int monarch_timeout = -1; | 85 | static int monarch_timeout = -1; |
86 | static int mce_panic_timeout; | 86 | static int mce_panic_timeout; |
87 | static int mce_dont_log_ce; | ||
88 | int mce_cmci_disabled; | ||
89 | int mce_ignore_ce; | ||
87 | int mce_ser; | 90 | int mce_ser; |
88 | 91 | ||
89 | static char trigger[128]; | 92 | static 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])) { |