|
@@ -54,12 +54,13 @@ __show_trace(unsigned int *depth, unsigned long sp,
|
|
|
|
|
|
void s390_backtrace(struct pt_regs * const regs, unsigned int depth)
|
|
|
{
|
|
|
- unsigned long head;
|
|
|
+ unsigned long head, frame_size;
|
|
|
struct stack_frame* head_sf;
|
|
|
|
|
|
if (user_mode(regs))
|
|
|
return;
|
|
|
|
|
|
+ frame_size = STACK_FRAME_OVERHEAD + sizeof(struct pt_regs);
|
|
|
head = regs->gprs[15];
|
|
|
head_sf = (struct stack_frame*)head;
|
|
|
|
|
@@ -68,8 +69,9 @@ void s390_backtrace(struct pt_regs * const regs, unsigned int depth)
|
|
|
|
|
|
head = head_sf->back_chain;
|
|
|
|
|
|
- head = __show_trace(&depth, head, S390_lowcore.async_stack - ASYNC_SIZE,
|
|
|
- S390_lowcore.async_stack);
|
|
|
+ head = __show_trace(&depth, head,
|
|
|
+ S390_lowcore.async_stack + frame_size - ASYNC_SIZE,
|
|
|
+ S390_lowcore.async_stack + frame_size);
|
|
|
|
|
|
__show_trace(&depth, head, S390_lowcore.thread_info,
|
|
|
S390_lowcore.thread_info + THREAD_SIZE);
|