ftrace,bug: Improve traceoff_on_warn
authorPeter Zijlstra <peterz@infradead.org>
Thu, 28 May 2020 14:52:40 +0000 (16:52 +0200)
committerSteven Rostedt (VMware) <rostedt@goodmis.org>
Mon, 1 Jun 2020 12:23:42 +0000 (08:23 -0400)
While doing some tracing, I found a huge portion of the per-cpu buffer
was taken by printk/serial output because we're disabling the trace far
too late (after printing the CUT string).

Improve matters for architectures that have GENERIC_BUG + _BUG_FLAGS by
killing the tracer in the exception handler before printing anything
much.

Link: https://lkml.kernel.org/r/20200528145240.GF706495@hirez.programming.kicks-ass.net
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
lib/bug.c

index 8c98af0bf5857000d7ca137ecbde0cfcb241d01a..7103440c0ee1af84ccd732f131894836d628674a 100644 (file)
--- a/lib/bug.c
+++ b/lib/bug.c
@@ -47,6 +47,7 @@
 #include <linux/bug.h>
 #include <linux/sched.h>
 #include <linux/rculist.h>
+#include <linux/ftrace.h>
 
 extern struct bug_entry __start___bug_table[], __stop___bug_table[];
 
@@ -153,6 +154,8 @@ enum bug_trap_type report_bug(unsigned long bugaddr, struct pt_regs *regs)
        if (!bug)
                return BUG_TRAP_TYPE_NONE;
 
+       disable_trace_on_warning();
+
        file = NULL;
        line = 0;
        warning = 0;