[PATCH 10/10] arm64/BUG: Show explicit backtrace for WARNs

Dave Martin Dave.Martin at arm.com
Thu Jun 11 08:29:24 PDT 2015


The generic slowpath WARN implementation prints a backtrace, but
the report_bug() based implementation does not, opting to print the
registers instead which is generally not as useful.

Ideally, report_bug() should be fixed to make the behaviour more
consistent, but in the meantime this patch generates a backtrace
directly from the arm64 backend instead so that this functionality
is not lost with the migration to report_bug().

As a side-effect, the backtrace will be outside the oops end
marker, but that's hard to avoid without modifying generic code.

This patch can go away if report_bug() grows the ability in the
future to generate a backtrace directly or call an arch hook at the
appropriate time.

Signed-off-by: Dave Martin <Dave.Martin at arm.com>
---
 arch/arm64/kernel/traps.c |    3 +++
 1 file changed, 3 insertions(+)

diff --git a/arch/arm64/kernel/traps.c b/arch/arm64/kernel/traps.c
index 5fdf776..8929c16 100644
--- a/arch/arm64/kernel/traps.c
+++ b/arch/arm64/kernel/traps.c
@@ -489,6 +489,9 @@ static int bug_handler(struct pt_regs *regs, unsigned int esr)
 		/* die() does not return */
 
 	case BUG_TRAP_TYPE_WARN:
+		/* Ideally, report_bug() should backtrace for us... but no. */
+		dump_backtrace(regs, NULL);
+
 		regs->pc += AARCH64_INSN_SIZE;	/* skip BRK and resume */
 		return DBG_HOOK_HANDLED;
 
-- 
1.7.10.4




More information about the linux-arm-kernel mailing list