In do_machine_check function, we can find the following code segment:

*       ...
*        /* mce_clear_state will clear *final, save locally for use later */
*        m = *final;
*
*        if (!no_way_out)
*                mce_clear_state(toclear);
*       ...

But the reality is that mce_clear_state function will not clear *final. It is 
just
used to clear bank MSRs or the relative field of injectm used by MCE-Injection.
Meanwhile, mce_reign executed by monarch CPU will clear *final, therefore we 
need
to save it locally for use later.

Signed-off-by: Chen Yucong <sla...@gmail.com>
---
 arch/x86/kernel/cpu/mcheck/mce.c |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c
index 68317c8..83159c1 100644
--- a/arch/x86/kernel/cpu/mcheck/mce.c
+++ b/arch/x86/kernel/cpu/mcheck/mce.c
@@ -1137,7 +1137,9 @@ void do_machine_check(struct pt_regs *regs, long 
error_code)
                }
        }
 
-       /* mce_clear_state will clear *final, save locally for use later */
+       /* mce_reign executed by monarch CPU will clear *final(mces_seen),
+        * save locally for use later
+        */
        m = *final;
 
        if (!no_way_out)
-- 
1.7.10.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to