From 937f4f3f505f4421d3ec399f65e9fc1a04f60363 Mon Sep 17 00:00:00 2001 From: Robin Getz Date: Fri, 12 Mar 2010 21:17:44 +0000 Subject: [PATCH] --- yaml --- r: 198183 b: refs/heads/master c: d60805ad470aef52465f3dc982212f559d9f661b h: refs/heads/master i: 198181: 6c0b7ab21c78df9339a805adddbf4711b8ab3be8 198179: 991b414a498dac224626f402382ca4e71ea265c8 198175: a4a30a18c822dbd58d983d1f5651a73c558cfc05 v: v3 --- [refs] | 2 +- trunk/arch/blackfin/kernel/trace.c | 19 +++++++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 46503739adb7..926450af3173 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d28cff4b615c2da274922311cef024d52c839870 +refs/heads/master: d60805ad470aef52465f3dc982212f559d9f661b diff --git a/trunk/arch/blackfin/kernel/trace.c b/trunk/arch/blackfin/kernel/trace.c index 6e37a8765bc0..5aa0d5e4e704 100644 --- a/trunk/arch/blackfin/kernel/trace.c +++ b/trunk/arch/blackfin/kernel/trace.c @@ -19,6 +19,7 @@ #include #include #include +#include void decode_address(char *buf, unsigned long address) { @@ -260,9 +261,10 @@ static void decode_instruction(unsigned short *address) void dump_bfin_trace_buffer(void) { #ifdef CONFIG_DEBUG_BFIN_HWTRACE_ON - int tflags, i = 0; + int tflags, i = 0, fault = 0; char buf[150]; unsigned short *addr; + unsigned int cpu = raw_smp_processor_id(); #ifdef CONFIG_DEBUG_BFIN_HWTRACE_EXPAND int j, index; #endif @@ -277,8 +279,21 @@ void dump_bfin_trace_buffer(void) if (likely(bfin_read_TBUFSTAT() & TBUFCNT)) { for (; bfin_read_TBUFSTAT() & TBUFCNT; i++) { - decode_address(buf, (unsigned long)bfin_read_TBUF()); + addr = (unsigned short *)bfin_read_TBUF(); + decode_address(buf, (unsigned long)addr); pr_notice("%4i Target : %s\n", i, buf); + /* Normally, the faulting instruction doesn't go into + * the trace buffer, (since it doesn't commit), so + * we print out the fault address here + */ + if (!fault && addr == (unsigned short *)trap && + (cpu_pda[cpu].seqstat & SEQSTAT_EXCAUSE) > VEC_EXCPT15) { + decode_address(buf, cpu_pda[cpu].icplb_fault_addr); + pr_notice(" FAULT : %s ", buf); + decode_instruction((unsigned short *)cpu_pda[cpu].icplb_fault_addr); + pr_cont("\n"); + fault = 1; + } addr = (unsigned short *)bfin_read_TBUF(); decode_address(buf, (unsigned long)addr); pr_notice(" Source : %s ", buf);