]> err.no Git - linux-2.6/blobdiff - arch/sparc64/kernel/unaligned.c
[SPARC64]: Print symbol name of regs->tpc on kernel unaligned accesses.
[linux-2.6] / arch / sparc64 / kernel / unaligned.c
index 001e8518331fb91bf56a28d2770e9cfef68769f0..a9b765271b85f9da4546c846f446ab383cecd781 100644 (file)
@@ -20,6 +20,7 @@
 #include <linux/smp.h>
 #include <linux/smp_lock.h>
 #include <linux/bitops.h>
+#include <linux/kallsyms.h>
 #include <asm/fpumacro.h>
 
 /* #define DEBUG_MNA */
@@ -279,12 +280,22 @@ static void kernel_mna_trap_fault(void)
 
 asmlinkage void kernel_unaligned_trap(struct pt_regs *regs, unsigned int insn)
 {
+       static unsigned long count, last_time;
        enum direction dir = decode_direction(insn);
        int size = decode_access_size(insn);
 
        current_thread_info()->kern_una_regs = regs;
        current_thread_info()->kern_una_insn = insn;
 
+       if (jiffies - last_time > 5 * HZ)
+               count = 0;
+       if (count < 5) {
+               last_time = jiffies;
+               count++;
+               printk("Kernel unaligned access at TPC[%lx] ", regs->tpc);
+               print_symbol("%s\n", regs->tpc);
+       }
+
        if (!ok_for_kernel(insn) || dir == both) {
                printk("Unsupported unaligned load/store trap for kernel "
                       "at <%016lx>.\n", regs->tpc);