Skip to contentSkip to conversation

x86: Do not panic if mce=2 is passed

RFC PATCH Applied Yinghai Lu 4 participants 5 messages Sep 16, 2016 – Nov 8, 2016 x86

lore
Share & tools
lore

Yinghai Lu

author
#0 lore raw

RFC PATCH 1/1 x86: Do not panic if mce=2 is passed

From: Yinghai Lu <[email protected]>

For UE recovery support, current we need mce=2 in command line and also disable panic_on_oops with sysctl.

but other user may still need to have panic_on_oops to 1 always.

We can remove checking of panic_on_oops for mce-severity path.

We should be ok as on default path when mce=2 is not passed, tolerant is 0, so they will still get MCE_PANIC_SEVERITY returned.

---
 arch/x86/kernel/cpu/mcheck/mce-severity.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
arch/x86/kernel/cpu/mcheck/mce-severity.c +1 -1
Index: linux-2.6/arch/x86/kernel/cpu/mcheck/mce-severity.c
===================================================================
@@ -311,7 +311,7 @@ static int mce_severity_intel(struct mce
 			*msg = s->msg;
 		s->covered = 1;
 		if (s->sev >= MCE_UC_SEVERITY && ctx == IN_KERNEL) {
-			if (panic_on_oops || tolerant < 1)
+			if (tolerant < 1)
 				return MCE_PANIC_SEVERITY;
 		}
 		return s->sev;
#1 lore raw
Quoted 2 lines

For UE recovery support, current we need mce=2 in command line and also disable panic_on_oops with sysctl.

Please explain. I've never given mce=2 on command line, and have had my kernel recover from thousands of (injected) UE memory errors.

-Tony

maintainer
#2 lore raw
Quoted 5 lines · Tony
Quoted 2 lines

For UE recovery support, current we need mce=2 in command line and also disable panic_on_oops with sysctl.

Please explain. I've never given mce=2 on command line, and have had my kernel recover from thousands of (injected) UE memory errors.

So frankly, that panic_on_oops doesn't make a whole lotta sense to me.

It is promoting MCEs with severity MCE_UC_SEVERITY and higher to a panic.

So let's look at those:

MCE_UC_SEVERITY, - we don't do anything special in the kernel for
those so just as well.
MCE_AR_SEVERITY, - those end up in the memory failure code if
they're memory errors
MCE_PANIC_SEVERITY, - causes panic

so if anything, panic_on_oops shouldn't control the panicking behavior as tolerant does that already:

* Tolerant levels:
* 0: always panic on uncorrected errors, log corrected errors
* 1: panic or SIGBUS on uncorrected errors, log corrected errors
* 2: SIGBUS or log uncorrected errors (if possible), log corr. errors
* 3: never panic or SIGBUS, log all errors (for testing only)

IOW, I think that patch makes sense but please doublecheck my logic above first.

Thanks.

Signature · 5 lines
Regards/Gruss,
    Boris.

ECO tip #101: Trim your mails when you reply.
--
maintainer Applied
#3 lore raw
In reply to Yinghai Lu
Quoted 24 lines · Yinghai Lu

From: Yinghai Lu <[email protected]>

For UE recovery support, current we need mce=2 in command line and also disable panic_on_oops with sysctl.

but other user may still need to have panic_on_oops to 1 always.

We can remove checking of panic_on_oops for mce-severity path.

We should be ok as on default path when mce=2 is not passed, tolerant is 0, so they will still get MCE_PANIC_SEVERITY returned.

---
 arch/x86/kernel/cpu/mcheck/mce-severity.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Index: linux-2.6/arch/x86/kernel/cpu/mcheck/mce-severity.c
===================================================================

arch/x86/kernel/cpu/mcheck/mce-severity.c static int mce_severity_intel(struct mce · line 317

Quoted 8 lines
arch/x86/kernel/cpu/mcheck/mce-severity.c +1 -1
@@ -311,7 +311,7 @@ static int mce_severity_intel(struct mce
 			*msg = s->msg;
 		s->covered = 1;
 		if (s->sev >= MCE_UC_SEVERITY && ctx == IN_KERNEL) {
-			if (panic_on_oops || tolerant < 1)
+			if (tolerant < 1)
 				return MCE_PANIC_SEVERITY;
 		}
 		return s->sev;

Applied,
thanks.

Signature · 4 lines
Regards/Gruss,
    Boris.

ECO tip #101: Trim your mails when you reply.
#4 lore raw

[tip:ras/core] x86/MCE: Do not look at panic_on_oops in the severity grading

In reply to Yinghai Lu
x86/MCE: Do not look at panic_on_oops in the severity grading
Commit-ID:  f5e886ef9b45a3dbfd42b054a13c755894ea8402
Gitweb:     http://git.kernel.org/tip/f5e886ef9b45a3dbfd42b054a13c755894ea8402
Author:     Yinghai Lu <[email protected]>
AuthorDate: Fri, 16 Sep 2016 13:23:25 -0700
Committer:  Thomas Gleixner <[email protected]>
CommitDate: Tue, 8 Nov 2016 17:10:12 +0100

x86/MCE: Do not look at panic_on_oops in the severity grading

The MCE tolerance levels control whether we panic on a machine check or do something else like generating a signal and logging error information. This is controlled by the mce=<level> command line parameter.

However, if panic_on_oops is set, it will force a panic for such an MCE even though the user didn't want to.

So don't check panic_on_oops in the severity grading anymore.

One of the use cases for that is recovery from uncorrectable errors with mce=2.

[ Boris: rewrite commit message. ]

---
 arch/x86/kernel/cpu/mcheck/mce-severity.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
arch/x86/kernel/cpu/mcheck/mce-severity.c +1 -1
index 631356c..c7efbcf 100644
@@ -311,7 +311,7 @@ static int mce_severity_intel(struct mce *m, int tolerant, char **msg, bool is_e
 			*msg = s->msg;
 		s->covered = 1;
 		if (s->sev >= MCE_UC_SEVERITY && ctx == IN_KERNEL) {
-			if (panic_on_oops || tolerant < 1)
+			if (tolerant < 1)
 				return MCE_PANIC_SEVERITY;
 		}
 		return s->sev;