summaryrefslogtreecommitdiff
path: root/arch/arm64
diff options
context:
space:
mode:
authorSatyajit Desai <sadesai@codeaurora.org>2016-06-27 12:39:34 -0700
committerSatyajit Desai <sadesai@codeaurora.org>2016-08-19 14:56:53 -0700
commitc34bf4be22d64499449d1cfe550b05365d048403 (patch)
tree9a1558daae6ed11ba043063b2ab588c227e191c6 /arch/arm64
parent0c8cf716fa02d0f6b6ef2ef1446f9f4819fc83dd (diff)
coresight: abort coresight tracing on kernel crash
Add trace events to control aborting CoreSight trace dynamically based on module parameter. Coresight driver will dump any trace present in the current sink in case we hit a kernel panic, user fault or an undefined instruction. Change-Id: Iee1ccf5cbd7b767753a3115c0570e63fbe2aa8f3 Signed-off-by: Satyajit Desai <sadesai@codeaurora.org>
Diffstat (limited to 'arch/arm64')
-rw-r--r--arch/arm64/kernel/traps.c4
-rw-r--r--arch/arm64/mm/fault.c4
2 files changed, 8 insertions, 0 deletions
diff --git a/arch/arm64/kernel/traps.c b/arch/arm64/kernel/traps.c
index e8b1f7910490..48b75ece4c17 100644
--- a/arch/arm64/kernel/traps.c
+++ b/arch/arm64/kernel/traps.c
@@ -44,6 +44,8 @@
#include <asm/esr.h>
#include <asm/edac.h>
+#include <trace/events/exception.h>
+
static const char *handler[]= {
"Synchronous Abort",
"IRQ",
@@ -421,6 +423,8 @@ asmlinkage void __exception do_undefinstr(struct pt_regs *regs)
if (call_undef_hook(regs) == 0)
return;
+ trace_undef_instr(regs, (void *)pc);
+
if (unhandled_signal(current, SIGILL) && show_unhandled_signals_ratelimited()) {
pr_info("%s[%d]: undefined instruction: pc=%p\n",
current->comm, task_pid_nr(current), pc);
diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c
index 7bb08670fc10..69079e5bfc84 100644
--- a/arch/arm64/mm/fault.c
+++ b/arch/arm64/mm/fault.c
@@ -40,6 +40,8 @@
#include <asm/tlbflush.h>
#include <asm/edac.h>
+#include <trace/events/exception.h>
+
static const char *fault_name(unsigned int esr);
/*
@@ -118,6 +120,8 @@ static void __do_user_fault(struct task_struct *tsk, unsigned long addr,
{
struct siginfo si;
+ trace_user_fault(tsk, addr, esr);
+
if (unhandled_signal(tsk, sig) && show_unhandled_signals_ratelimited()) {
pr_info("%s[%d]: unhandled %s (%d) at 0x%08lx, esr 0x%03x\n",
tsk->comm, task_pid_nr(tsk), fault_name(esr), sig,