]> git.ipfire.org Git - people/arne_f/kernel.git/commitdiff
[SPARC64]: Fix show_stack() when stack argument is NULL.
authorDavid S. Miller <davem@davemloft.net>
Fri, 2 Nov 2007 21:56:18 +0000 (22:56 +0100)
committerAdrian Bunk <bunk@kernel.org>
Fri, 2 Nov 2007 21:56:18 +0000 (22:56 +0100)
It didn't handle that case at all, and now dump_stack()
can be implemented directly as show_stack(current, NULL)

Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Adrian Bunk <bunk@kernel.org>
arch/sparc64/kernel/traps.c
arch/sparc64/mm/fault.c

index 8d44ae5a15e32f11e8ebee392ecb67a350799fa3..73e729e363ebfa4eaaaa84adb21cc8e7dc4aa2f1 100644 (file)
@@ -1808,12 +1808,20 @@ static void user_instruction_dump (unsigned int __user *pc)
 void show_stack(struct task_struct *tsk, unsigned long *_ksp)
 {
        unsigned long pc, fp, thread_base, ksp;
-       void *tp = task_stack_page(tsk);
+       struct thread_info *tp;
        struct reg_window *rw;
        int count = 0;
 
        ksp = (unsigned long) _ksp;
-
+       if (!tsk)
+               tsk = current;
+       tp = task_thread_info(tsk);
+       if (ksp == 0UL) {
+               if (tsk == current)
+                       asm("mov %%fp, %0" : "=r" (ksp));
+               else
+                       ksp = tp->ksp;
+       }
        if (tp == current_thread_info())
                flushw_all();
 
@@ -1842,11 +1850,7 @@ void show_stack(struct task_struct *tsk, unsigned long *_ksp)
 
 void dump_stack(void)
 {
-       unsigned long *ksp;
-
-       __asm__ __volatile__("mov       %%fp, %0"
-                            : "=r" (ksp));
-       show_stack(current, ksp);
+       show_stack(current, NULL);
 }
 
 EXPORT_SYMBOL(dump_stack);
index 6f0539aa44d04de592214384bbf313cdce1a28a0..efc2c9d26c2c8a0e8f8e69daeb15d53168508364 100644 (file)
@@ -93,12 +93,9 @@ static void __kprobes unhandled_fault(unsigned long address,
 
 static void bad_kernel_pc(struct pt_regs *regs)
 {
-       unsigned long *ksp;
-
        printk(KERN_CRIT "OOPS: Bogus kernel PC [%016lx] in fault handler\n",
               regs->tpc);
-       __asm__("mov %%sp, %0" : "=r" (ksp));
-       show_stack(current, ksp);
+       dump_stack();
        unhandled_fault(regs->tpc, current, regs);
 }