From 3ad5319327eb1f076de17c9ad03f6fd58e987e2a Mon Sep 17 00:00:00 2001 From: Johannes Weiner Date: Mon, 11 May 2009 15:43:33 +0200 Subject: [PATCH] --- yaml --- r: 144919 b: refs/heads/master c: 586411dcd1935f91796d5e8a29aa3cfdf01a01f4 h: refs/heads/master i: 144917: 92e3732943a65166e794d49f4af12203ce4bcab0 144915: 356ec68f27f49540afe8c3c8cda50b468c97a0a6 144911: f18166359655ab326511d0766b5699c6898634eb v: v3 --- [refs] | 2 +- trunk/arch/xtensa/kernel/traps.c | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 5f358c021b1c..260661dc9da4 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 7dbe5c542464a511f0ea6a14e3ff08874d7e21d5 +refs/heads/master: 586411dcd1935f91796d5e8a29aa3cfdf01a01f4 diff --git a/trunk/arch/xtensa/kernel/traps.c b/trunk/arch/xtensa/kernel/traps.c index 9f0b71189e94..ba9ab9349782 100644 --- a/trunk/arch/xtensa/kernel/traps.c +++ b/trunk/arch/xtensa/kernel/traps.c @@ -369,6 +369,18 @@ void show_regs(struct pt_regs * regs) regs->syscall); } +static __always_inline unsigned long *stack_pointer(struct task_struct *task) +{ + unsigned long *sp; + + if (!task || task == current) + __asm__ __volatile__ ("mov %0, a1\n" : "=a"(sp)); + else + sp = (unsigned long *)task->thread.sp; + + return sp; +} + void show_trace(struct task_struct *task, unsigned long *sp) { unsigned long a0, a1, pc; @@ -377,7 +389,7 @@ void show_trace(struct task_struct *task, unsigned long *sp) if (sp) a1 = (unsigned long)sp; else - a1 = task->thread.sp; + a1 = (unsigned long)stack_pointer(task); sp_start = a1 & ~(THREAD_SIZE-1); sp_end = sp_start + THREAD_SIZE; @@ -420,7 +432,7 @@ void show_stack(struct task_struct *task, unsigned long *sp) unsigned long *stack; if (!sp) - sp = (unsigned long *)task->thread.sp; + sp = stack_pointer(task); stack = sp; printk("\nStack: ");