x86/mce: Do not overwrite no_way_out if mce_end() fails
Currently, if mce_end() fails, no_way_out - the variable denoting whether the machine can recover from this MCE - is determined by whether the worst severity that was found across the MCA banks associated with the current CPU, is of panic severity. However, at this point no_way_out could have been already set by mca_start() after looking at all severities of all CPUs that entered the MCE handler. If mce_end() fails, check first if no_way_out is already set and, if so, stick to it, otherwise use the local worst value. [ bp: Massage. ] Signed-off-by: Gabriele Paoloni <gabriele.paoloni@intel.com> Signed-off-by: Borislav Petkov <bp@suse.de> Reviewed-by: Tony Luck <tony.luck@intel.com> Cc: <stable@vger.kernel.org> Link: https://lkml.kernel.org/r/20201127161819.3106432-2-gabriele.paoloni@intel.com
This commit is contained in:
parent
33fc379df7
commit
25bc65d8dd
|
@ -1384,8 +1384,10 @@ noinstr void do_machine_check(struct pt_regs *regs)
|
|||
* When there's any problem use only local no_way_out state.
|
||||
*/
|
||||
if (!lmce) {
|
||||
if (mce_end(order) < 0)
|
||||
no_way_out = worst >= MCE_PANIC_SEVERITY;
|
||||
if (mce_end(order) < 0) {
|
||||
if (!no_way_out)
|
||||
no_way_out = worst >= MCE_PANIC_SEVERITY;
|
||||
}
|
||||
} else {
|
||||
/*
|
||||
* If there was a fatal machine check we should have
|
||||
|
|
Loading…
Reference in New Issue