aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/oprofile/backtrace.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/s390/oprofile/backtrace.c')
-rw-r--r--arch/s390/oprofile/backtrace.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/arch/s390/oprofile/backtrace.c b/arch/s390/oprofile/backtrace.c
index 8a6811b2cdb9..fe0bfe370c45 100644
--- a/arch/s390/oprofile/backtrace.c
+++ b/arch/s390/oprofile/backtrace.c
@@ -16,24 +16,23 @@ __show_trace(unsigned int *depth, unsigned long sp,
16 struct pt_regs *regs; 16 struct pt_regs *regs;
17 17
18 while (*depth) { 18 while (*depth) {
19 sp = sp & PSW_ADDR_INSN;
20 if (sp < low || sp > high - sizeof(*sf)) 19 if (sp < low || sp > high - sizeof(*sf))
21 return sp; 20 return sp;
22 sf = (struct stack_frame *) sp; 21 sf = (struct stack_frame *) sp;
23 (*depth)--; 22 (*depth)--;
24 oprofile_add_trace(sf->gprs[8] & PSW_ADDR_INSN); 23 oprofile_add_trace(sf->gprs[8]);
25 24
26 /* Follow the backchain. */ 25 /* Follow the backchain. */
27 while (*depth) { 26 while (*depth) {
28 low = sp; 27 low = sp;
29 sp = sf->back_chain & PSW_ADDR_INSN; 28 sp = sf->back_chain;
30 if (!sp) 29 if (!sp)
31 break; 30 break;
32 if (sp <= low || sp > high - sizeof(*sf)) 31 if (sp <= low || sp > high - sizeof(*sf))
33 return sp; 32 return sp;
34 sf = (struct stack_frame *) sp; 33 sf = (struct stack_frame *) sp;
35 (*depth)--; 34 (*depth)--;
36 oprofile_add_trace(sf->gprs[8] & PSW_ADDR_INSN); 35 oprofile_add_trace(sf->gprs[8]);
37 36
38 } 37 }
39 38
@@ -46,7 +45,7 @@ __show_trace(unsigned int *depth, unsigned long sp,
46 return sp; 45 return sp;
47 regs = (struct pt_regs *) sp; 46 regs = (struct pt_regs *) sp;
48 (*depth)--; 47 (*depth)--;
49 oprofile_add_trace(sf->gprs[8] & PSW_ADDR_INSN); 48 oprofile_add_trace(sf->gprs[8]);
50 low = sp; 49 low = sp;
51 sp = regs->gprs[15]; 50 sp = regs->gprs[15];
52 } 51 }