powerpc/64s: machine check do not trace real-mode handler
authorNicholas Piggin <npiggin@gmail.com>
Fri, 8 May 2020 04:34:05 +0000 (14:34 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Mon, 18 May 2020 14:10:34 +0000 (00:10 +1000)
Rather than notrace annotations throughout a significant part of the
machine check code across kernel/ pseries/ and powernv/ which can
easily be broken and is infrequently tested, use paca->ftrace_enabled
to blanket-disable tracing of the real-mode non-maskable handler.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Reviewed-by: Christophe Leroy <christophe.leroy@c-s.fr>
Acked-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Link: https://lore.kernel.org/r/20200508043408.886394-14-npiggin@gmail.com
arch/powerpc/kernel/mce.c

index be7e3f9..fd90c0e 100644 (file)
@@ -16,6 +16,7 @@
 #include <linux/export.h>
 #include <linux/irq_work.h>
 #include <linux/extable.h>
+#include <linux/ftrace.h>
 
 #include <asm/machdep.h>
 #include <asm/mce.h>
@@ -571,10 +572,14 @@ EXPORT_SYMBOL_GPL(machine_check_print_event_info);
  *
  * regs->nip and regs->msr contains srr0 and ssr1.
  */
-long machine_check_early(struct pt_regs *regs)
+long notrace machine_check_early(struct pt_regs *regs)
 {
        long handled = 0;
        bool nested = in_nmi();
+       u8 ftrace_enabled = this_cpu_get_ftrace_enabled();
+
+       this_cpu_set_ftrace_enabled(0);
+
        if (!nested)
                nmi_enter();
 
@@ -589,6 +594,8 @@ long machine_check_early(struct pt_regs *regs)
        if (!nested)
                nmi_exit();
 
+       this_cpu_set_ftrace_enabled(ftrace_enabled);
+
        return handled;
 }