summaryrefslogtreecommitdiffstats
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 14:23:42 +0200
commit58f6e384480ec97b902e44399a44862907840ba9 (patch)
treeb9275114631092ae6c3b3706df678e7533c78768 /lib/bug.c
parentselftests/ftrace: Distinguish between hist and synthetic event checks (diff)
downloadlinux-58f6e384480ec97b902e44399a44862907840ba9.tar.xz
linux-58f6e384480ec97b902e44399a44862907840ba9.zip
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;