summary refs log tree commit diff
path: root/lib/bug.c
diff options
context:
space:
mode:
authorPeter Zijlstra <peterz@infradead.org>2020-05-28 16:52:40 +0200
committerSteven Rostedt (VMware) <rostedt@goodmis.org>2020-06-01 08:23:42 -0400
commit58f6e384480ec97b902e44399a44862907840ba9 (patch)
treeb9275114631092ae6c3b3706df678e7533c78768 /lib/bug.c
parentbea24f766efceb5322f704015c56596ff94642f7 (diff)
downloadlinux-58f6e384480ec97b902e44399a44862907840ba9.tar.gz
ftrace,bug: Improve traceoff_on_warn
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>
Diffstat (limited to 'lib/bug.c')
-rw-r--r--lib/bug.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/lib/bug.c b/lib/bug.c
index 8c98af0bf585..7103440c0ee1 100644
--- 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;