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.comzero-sugar-mainline-defconfig
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.
|
* When there's any problem use only local no_way_out state.
|
||||||
*/
|
*/
|
||||||
if (!lmce) {
|
if (!lmce) {
|
||||||
if (mce_end(order) < 0)
|
if (mce_end(order) < 0) {
|
||||||
no_way_out = worst >= MCE_PANIC_SEVERITY;
|
if (!no_way_out)
|
||||||
|
no_way_out = worst >= MCE_PANIC_SEVERITY;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
* If there was a fatal machine check we should have
|
* If there was a fatal machine check we should have
|
||||||
|
|
Loading…
Reference in New Issue