diff options
author | David S. Miller <davem@sunset.davemloft.net> | 2007-07-30 03:17:12 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-07-30 03:27:38 -0400 |
commit | c1f193a7aed1b468617bb26075777c0c2f4f597a (patch) | |
tree | 3668a8fe9105cfcc0d52a47dd57068ab753a433e /arch/sparc64/kernel/traps.c | |
parent | f623f388e4f83c01ac23f228247a6a4b9cc71111 (diff) |
[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>
Diffstat (limited to 'arch/sparc64/kernel/traps.c')
-rw-r--r-- | arch/sparc64/kernel/traps.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/arch/sparc64/kernel/traps.c b/arch/sparc64/kernel/traps.c index 6ef2d299fb10..6ef42b8e53d8 100644 --- a/arch/sparc64/kernel/traps.c +++ b/arch/sparc64/kernel/traps.c | |||
@@ -2134,12 +2134,20 @@ static void user_instruction_dump (unsigned int __user *pc) | |||
2134 | void show_stack(struct task_struct *tsk, unsigned long *_ksp) | 2134 | void show_stack(struct task_struct *tsk, unsigned long *_ksp) |
2135 | { | 2135 | { |
2136 | unsigned long pc, fp, thread_base, ksp; | 2136 | unsigned long pc, fp, thread_base, ksp; |
2137 | void *tp = task_stack_page(tsk); | 2137 | struct thread_info *tp; |
2138 | struct reg_window *rw; | 2138 | struct reg_window *rw; |
2139 | int count = 0; | 2139 | int count = 0; |
2140 | 2140 | ||
2141 | ksp = (unsigned long) _ksp; | 2141 | ksp = (unsigned long) _ksp; |
2142 | 2142 | if (!tsk) | |
2143 | tsk = current; | ||
2144 | tp = task_thread_info(tsk); | ||
2145 | if (ksp == 0UL) { | ||
2146 | if (tsk == current) | ||
2147 | asm("mov %%fp, %0" : "=r" (ksp)); | ||
2148 | else | ||
2149 | ksp = tp->ksp; | ||
2150 | } | ||
2143 | if (tp == current_thread_info()) | 2151 | if (tp == current_thread_info()) |
2144 | flushw_all(); | 2152 | flushw_all(); |
2145 | 2153 | ||
@@ -2168,11 +2176,7 @@ void show_stack(struct task_struct *tsk, unsigned long *_ksp) | |||
2168 | 2176 | ||
2169 | void dump_stack(void) | 2177 | void dump_stack(void) |
2170 | { | 2178 | { |
2171 | unsigned long *ksp; | 2179 | show_stack(current, NULL); |
2172 | |||
2173 | __asm__ __volatile__("mov %%fp, %0" | ||
2174 | : "=r" (ksp)); | ||
2175 | show_stack(current, ksp); | ||
2176 | } | 2180 | } |
2177 | 2181 | ||
2178 | EXPORT_SYMBOL(dump_stack); | 2182 | EXPORT_SYMBOL(dump_stack); |