|
@@ -21,12 +21,11 @@ static unsigned long save_context_stack(struct stack_trace *trace,
|
|
|
unsigned long addr;
|
|
|
|
|
|
while(1) {
|
|
|
- sp &= PSW_ADDR_INSN;
|
|
|
if (sp < low || sp > high)
|
|
|
return sp;
|
|
|
sf = (struct stack_frame *)sp;
|
|
|
while(1) {
|
|
|
- addr = sf->gprs[8] & PSW_ADDR_INSN;
|
|
|
+ addr = sf->gprs[8];
|
|
|
if (!trace->skip)
|
|
|
trace->entries[trace->nr_entries++] = addr;
|
|
|
else
|
|
@@ -34,7 +33,7 @@ static unsigned long save_context_stack(struct stack_trace *trace,
|
|
|
if (trace->nr_entries >= trace->max_entries)
|
|
|
return sp;
|
|
|
low = sp;
|
|
|
- sp = sf->back_chain & PSW_ADDR_INSN;
|
|
|
+ sp = sf->back_chain;
|
|
|
if (!sp)
|
|
|
break;
|
|
|
if (sp <= low || sp > high - sizeof(*sf))
|
|
@@ -46,7 +45,7 @@ static unsigned long save_context_stack(struct stack_trace *trace,
|
|
|
if (sp <= low || sp > high - sizeof(*regs))
|
|
|
return sp;
|
|
|
regs = (struct pt_regs *)sp;
|
|
|
- addr = regs->psw.addr & PSW_ADDR_INSN;
|
|
|
+ addr = regs->psw.addr;
|
|
|
if (savesched || !in_sched_functions(addr)) {
|
|
|
if (!trace->skip)
|
|
|
trace->entries[trace->nr_entries++] = addr;
|
|
@@ -65,7 +64,7 @@ void save_stack_trace(struct stack_trace *trace)
|
|
|
register unsigned long sp asm ("15");
|
|
|
unsigned long orig_sp, new_sp;
|
|
|
|
|
|
- orig_sp = sp & PSW_ADDR_INSN;
|
|
|
+ orig_sp = sp;
|
|
|
new_sp = save_context_stack(trace, orig_sp,
|
|
|
S390_lowcore.panic_stack - PAGE_SIZE,
|
|
|
S390_lowcore.panic_stack, 1);
|
|
@@ -86,7 +85,7 @@ void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace)
|
|
|
{
|
|
|
unsigned long sp, low, high;
|
|
|
|
|
|
- sp = tsk->thread.ksp & PSW_ADDR_INSN;
|
|
|
+ sp = tsk->thread.ksp;
|
|
|
low = (unsigned long) task_stack_page(tsk);
|
|
|
high = (unsigned long) task_pt_regs(tsk);
|
|
|
save_context_stack(trace, sp, low, high, 0);
|