diff options
Diffstat (limited to 'arch/s390/kernel/stacktrace.c')
| -rw-r--r-- | arch/s390/kernel/stacktrace.c | 17 | 
1 files changed, 8 insertions, 9 deletions
diff --git a/arch/s390/kernel/stacktrace.c b/arch/s390/kernel/stacktrace.c index d9428a0fc8f..0d14a4789bf 100644 --- a/arch/s390/kernel/stacktrace.c +++ b/arch/s390/kernel/stacktrace.c @@ -62,27 +62,26 @@ static inline unsigned long save_context_stack(struct stack_trace *trace,  void save_stack_trace(struct stack_trace *trace, struct task_struct *task)  {  	register unsigned long sp asm ("15"); -	unsigned long orig_sp; +	unsigned long orig_sp, new_sp; -	sp &= PSW_ADDR_INSN; -	orig_sp = sp; +	orig_sp = sp & PSW_ADDR_INSN; -	sp = save_context_stack(trace, &trace->skip, sp, +	new_sp = save_context_stack(trace, &trace->skip, orig_sp,  				S390_lowcore.panic_stack - PAGE_SIZE,  				S390_lowcore.panic_stack); -	if ((sp != orig_sp) && !trace->all_contexts) +	if ((new_sp != orig_sp) && !trace->all_contexts)  		return; -	sp = save_context_stack(trace, &trace->skip, sp, +	new_sp = save_context_stack(trace, &trace->skip, new_sp,  				S390_lowcore.async_stack - ASYNC_SIZE,  				S390_lowcore.async_stack); -	if ((sp != orig_sp) && !trace->all_contexts) +	if ((new_sp != orig_sp) && !trace->all_contexts)  		return;  	if (task) -		save_context_stack(trace, &trace->skip, sp, +		save_context_stack(trace, &trace->skip, new_sp,  				   (unsigned long) task_stack_page(task),  				   (unsigned long) task_stack_page(task) + THREAD_SIZE);  	else -		save_context_stack(trace, &trace->skip, sp, +		save_context_stack(trace, &trace->skip, new_sp,  				   S390_lowcore.thread_info,  				   S390_lowcore.thread_info + THREAD_SIZE);  	return;  |