]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/mips/kernel/traps.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6
[linux-2.6-omap-h63xx.git] / arch / mips / kernel / traps.c
index cb8b0e2c79547ba1c67a577cc852daf51f558dab..b8ea4e9d0d87ee8c169feafb93c8000231d3158b 100644 (file)
@@ -71,7 +71,6 @@ extern asmlinkage void handle_reserved(void);
 extern int fpu_emulator_cop1Handler(struct pt_regs *xcp,
        struct mips_fpu_struct *ctx, int has_fpu);
 
-void (*board_watchpoint_handler)(struct pt_regs *regs);
 void (*board_be_init)(void);
 int (*board_be_handler)(struct pt_regs *regs, int is_fixup);
 void (*board_nmi_handler_setup)(void);
@@ -88,15 +87,17 @@ static void show_raw_backtrace(unsigned long reg29)
 #ifdef CONFIG_KALLSYMS
        printk("\n");
 #endif
-#define IS_KVA01(a) ((((unsigned int)a) & 0xc0000000) == 0x80000000)
-       if (IS_KVA01(sp)) {
-               while (!kstack_end(sp)) {
-                       addr = *sp++;
-                       if (__kernel_text_address(addr))
-                               print_ip_sym(addr);
+       while (!kstack_end(sp)) {
+               unsigned long __user *p =
+                       (unsigned long __user *)(unsigned long)sp++;
+               if (__get_user(addr, p)) {
+                       printk(" (Bad stack address)");
+                       break;
                }
-               printk("\n");
+               if (__kernel_text_address(addr))
+                       print_ip_sym(addr);
        }
+       printk("\n");
 }
 
 #ifdef CONFIG_KALLSYMS
@@ -247,11 +248,11 @@ static void __show_regs(const struct pt_regs *regs)
        /*
         * Saved cp0 registers
         */
-       printk("epc   : %0*lx ", field, regs->cp0_epc);
-       print_symbol("%s ", regs->cp0_epc);
+       printk("epc   : %0*lx %pS\n", field, regs->cp0_epc,
+              (void *) regs->cp0_epc);
        printk("    %s\n", print_tainted());
-       printk("ra    : %0*lx ", field, regs->regs[31]);
-       print_symbol("%s\n", regs->regs[31]);
+       printk("ra    : %0*lx %pS\n", field, regs->regs[31],
+              (void *) regs->regs[31]);
 
        printk("Status: %08x    ", (uint32_t) regs->cp0_status);
 
@@ -890,11 +891,6 @@ asmlinkage void do_mdmx(struct pt_regs *regs)
 
 asmlinkage void do_watch(struct pt_regs *regs)
 {
-       if (board_watchpoint_handler) {
-               (*board_watchpoint_handler)(regs);
-               return;
-       }
-
        /*
         * We use the watch exception where available to detect stack
         * overflows.