x86/mce: Deduplicate exception handling
authorThomas Gleixner <tglx@linutronix.de>
Wed, 8 Sep 2021 13:29:15 +0000 (15:29 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 29 Jul 2022 15:25:25 +0000 (17:25 +0200)
[ Upstream commit e42404afc4ca856c48f1e05752541faa3587c472 ]

Prepare code for further simplification. No functional change.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Borislav Petkov <bp@suse.de>
Link: https://lkml.kernel.org/r/20210908132525.096452100@linutronix.de
Signed-off-by: Sasha Levin <sashal@kernel.org>
arch/x86/kernel/cpu/mce/core.c

index 848cfb0..d8da3ac 100644 (file)
@@ -382,13 +382,16 @@ static int msr_to_offset(u32 msr)
        return -1;
 }
 
-__visible bool ex_handler_rdmsr_fault(const struct exception_table_entry *fixup,
-                                     struct pt_regs *regs, int trapnr,
-                                     unsigned long error_code,
-                                     unsigned long fault_addr)
+static void ex_handler_msr_mce(struct pt_regs *regs, bool wrmsr)
 {
-       pr_emerg("MSR access error: RDMSR from 0x%x at rIP: 0x%lx (%pS)\n",
-                (unsigned int)regs->cx, regs->ip, (void *)regs->ip);
+       if (wrmsr) {
+               pr_emerg("MSR access error: WRMSR to 0x%x (tried to write 0x%08x%08x) at rIP: 0x%lx (%pS)\n",
+                        (unsigned int)regs->cx, (unsigned int)regs->dx, (unsigned int)regs->ax,
+                        regs->ip, (void *)regs->ip);
+       } else {
+               pr_emerg("MSR access error: RDMSR from 0x%x at rIP: 0x%lx (%pS)\n",
+                        (unsigned int)regs->cx, regs->ip, (void *)regs->ip);
+       }
 
        show_stack_regs(regs);
 
@@ -396,7 +399,14 @@ __visible bool ex_handler_rdmsr_fault(const struct exception_table_entry *fixup,
 
        while (true)
                cpu_relax();
+}
 
+__visible bool ex_handler_rdmsr_fault(const struct exception_table_entry *fixup,
+                                     struct pt_regs *regs, int trapnr,
+                                     unsigned long error_code,
+                                     unsigned long fault_addr)
+{
+       ex_handler_msr_mce(regs, false);
        return true;
 }
 
@@ -441,17 +451,7 @@ __visible bool ex_handler_wrmsr_fault(const struct exception_table_entry *fixup,
                                      unsigned long error_code,
                                      unsigned long fault_addr)
 {
-       pr_emerg("MSR access error: WRMSR to 0x%x (tried to write 0x%08x%08x) at rIP: 0x%lx (%pS)\n",
-                (unsigned int)regs->cx, (unsigned int)regs->dx, (unsigned int)regs->ax,
-                 regs->ip, (void *)regs->ip);
-
-       show_stack_regs(regs);
-
-       panic("MCA architectural violation!\n");
-
-       while (true)
-               cpu_relax();
-
+       ex_handler_msr_mce(regs, true);
        return true;
 }