aboutsummaryrefslogtreecommitdiffstats
path: root/arch/parisc/kernel/traps.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/parisc/kernel/traps.c')
-rw-r--r--arch/parisc/kernel/traps.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/arch/parisc/kernel/traps.c b/arch/parisc/kernel/traps.c
index fa0811295acc..949722540864 100644
--- a/arch/parisc/kernel/traps.c
+++ b/arch/parisc/kernel/traps.c
@@ -187,18 +187,19 @@ void show_stack(struct task_struct *task, unsigned long *s)
187 187
188 if (!task) { 188 if (!task) {
189 unsigned long sp; 189 unsigned long sp;
190 struct pt_regs *r;
191 190
192HERE: 191HERE:
193 asm volatile ("copy %%r30, %0" : "=r"(sp)); 192 asm volatile ("copy %%r30, %0" : "=r"(sp));
194 r = kzalloc(sizeof(struct pt_regs), GFP_KERNEL); 193 {
195 if (!r) 194 struct pt_regs r;
196 return; 195
197 r->iaoq[0] = (unsigned long)&&HERE; 196 memset(&r, 0, sizeof(struct pt_regs));
198 r->gr[2] = (unsigned long)__builtin_return_address(0); 197 r.iaoq[0] = (unsigned long)&&HERE;
199 r->gr[30] = sp; 198 r.gr[2] = (unsigned long)__builtin_return_address(0);
200 unwind_frame_init(&info, current, r); 199 r.gr[30] = sp;
201 kfree(r); 200
201 unwind_frame_init(&info, current, &r);
202 }
202 } else { 203 } else {
203 unwind_frame_init_from_blocked_task(&info, task); 204 unwind_frame_init_from_blocked_task(&info, task);
204 } 205 }