parisc: Consolidate unwind initialization calls
[sfrench/cifs-2.6.git] / arch / parisc / kernel / traps.c
index 9372a41c8812a6828802bc858b657b53988b0cf5..68f10f87073dab74f414ebf5bdef2dd681707fb4 100644 (file)
@@ -45,7 +45,7 @@
 
 #include "../math-emu/math-emu.h"      /* for handle_fpe() */
 
-static void parisc_show_stack(struct task_struct *task, unsigned long *sp,
+static void parisc_show_stack(struct task_struct *task,
        struct pt_regs *regs);
 
 static int printbinary(char *buf, unsigned long x, int nbits)
@@ -152,7 +152,7 @@ void show_regs(struct pt_regs *regs)
                printk("%s IAOQ[1]: %pS\n", level, (void *) regs->iaoq[1]);
                printk("%s RP(r2): %pS\n", level, (void *) regs->gr[2]);
 
-               parisc_show_stack(current, NULL, regs);
+               parisc_show_stack(current, regs);
        }
 }
 
@@ -185,44 +185,19 @@ static void do_show_stack(struct unwind_frame_info *info)
        printk(KERN_CRIT "\n");
 }
 
-static void parisc_show_stack(struct task_struct *task, unsigned long *sp,
+static void parisc_show_stack(struct task_struct *task,
        struct pt_regs *regs)
 {
        struct unwind_frame_info info;
-       struct task_struct *t;
 
-       t = task ? task : current;
-       if (regs) {
-               unwind_frame_init(&info, t, regs);
-               goto show_stack;
-       }
-
-       if (t == current) {
-               unsigned long sp;
-
-HERE:
-               asm volatile ("copy %%r30, %0" : "=r"(sp));
-               {
-                       struct pt_regs r;
-
-                       memset(&r, 0, sizeof(struct pt_regs));
-                       r.iaoq[0] = (unsigned long)&&HERE;
-                       r.gr[2] = (unsigned long)__builtin_return_address(0);
-                       r.gr[30] = sp;
-
-                       unwind_frame_init(&info, current, &r);
-               }
-       } else {
-               unwind_frame_init_from_blocked_task(&info, t);
-       }
+       unwind_frame_init_task(&info, task, regs);
 
-show_stack:
        do_show_stack(&info);
 }
 
 void show_stack(struct task_struct *t, unsigned long *sp)
 {
-       return parisc_show_stack(t, sp, NULL);
+       parisc_show_stack(t, NULL);
 }
 
 int is_valid_bugaddr(unsigned long iaoq)