[SPARC64]: Fix show_stack() when stack argument is NULL.
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>
This commit is contained in:
parent
f623f388e4
commit
c1f193a7ae
|
@ -2134,12 +2134,20 @@ static void user_instruction_dump (unsigned int __user *pc)
|
||||||
void show_stack(struct task_struct *tsk, unsigned long *_ksp)
|
void show_stack(struct task_struct *tsk, unsigned long *_ksp)
|
||||||
{
|
{
|
||||||
unsigned long pc, fp, thread_base, ksp;
|
unsigned long pc, fp, thread_base, ksp;
|
||||||
void *tp = task_stack_page(tsk);
|
struct thread_info *tp;
|
||||||
struct reg_window *rw;
|
struct reg_window *rw;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
ksp = (unsigned long) _ksp;
|
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())
|
if (tp == current_thread_info())
|
||||||
flushw_all();
|
flushw_all();
|
||||||
|
|
||||||
|
@ -2168,11 +2176,7 @@ void show_stack(struct task_struct *tsk, unsigned long *_ksp)
|
||||||
|
|
||||||
void dump_stack(void)
|
void dump_stack(void)
|
||||||
{
|
{
|
||||||
unsigned long *ksp;
|
show_stack(current, NULL);
|
||||||
|
|
||||||
__asm__ __volatile__("mov %%fp, %0"
|
|
||||||
: "=r" (ksp));
|
|
||||||
show_stack(current, ksp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL(dump_stack);
|
EXPORT_SYMBOL(dump_stack);
|
||||||
|
|
|
@ -112,15 +112,12 @@ static void __kprobes unhandled_fault(unsigned long address,
|
||||||
|
|
||||||
static void bad_kernel_pc(struct pt_regs *regs, unsigned long vaddr)
|
static void bad_kernel_pc(struct pt_regs *regs, unsigned long vaddr)
|
||||||
{
|
{
|
||||||
unsigned long *ksp;
|
|
||||||
|
|
||||||
printk(KERN_CRIT "OOPS: Bogus kernel PC [%016lx] in fault handler\n",
|
printk(KERN_CRIT "OOPS: Bogus kernel PC [%016lx] in fault handler\n",
|
||||||
regs->tpc);
|
regs->tpc);
|
||||||
printk(KERN_CRIT "OOPS: RPC [%016lx]\n", regs->u_regs[15]);
|
printk(KERN_CRIT "OOPS: RPC [%016lx]\n", regs->u_regs[15]);
|
||||||
print_symbol("RPC: <%s>\n", regs->u_regs[15]);
|
print_symbol("RPC: <%s>\n", regs->u_regs[15]);
|
||||||
printk(KERN_CRIT "OOPS: Fault was to vaddr[%lx]\n", vaddr);
|
printk(KERN_CRIT "OOPS: Fault was to vaddr[%lx]\n", vaddr);
|
||||||
__asm__("mov %%sp, %0" : "=r" (ksp));
|
dump_stack();
|
||||||
show_stack(current, ksp);
|
|
||||||
unhandled_fault(regs->tpc, current, regs);
|
unhandled_fault(regs->tpc, current, regs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue