x86/mce: Deduplicate exception handling
authorThomas Gleixner <tglx@linutronix.de>
Wed, 8 Sep 2021 13:29:15 +0000 (15:29 +0200)
committerBorislav Petkov <bp@suse.de>
Mon, 13 Sep 2021 15:00:23 +0000 (17:00 +0200)
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
arch/x86/kernel/cpu/mce/core.c

index 8cb7816..428eed9 100644 (file)
@@ -373,13 +373,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);
 
@@ -387,7 +390,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;
 }
 
@@ -432,17 +442,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;
 }