diff options
author | Heiko Carstens <heiko.carstens@de.ibm.com> | 2016-01-18 07:12:19 -0500 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2016-01-19 06:14:03 -0500 |
commit | 9cb1ccecb69d133e014b7be4de2609f689398c07 (patch) | |
tree | 1f1c79f80ad49efc0de749b4d8bc88a9135cd1da | |
parent | fecc868a668774b0fc666728c3f5d9f6fceefe64 (diff) |
s390: remove all usages of PSW_ADDR_INSN
Yet another leftover from the 31 bit era. The usual operation
"y = x & PSW_ADDR_INSN" with the PSW_ADDR_INSN mask is a nop for
CONFIG_64BIT.
Therefore remove all usages and hope the code is a bit less confusing.
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Reviewed-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
-rw-r--r-- | arch/s390/include/asm/ptrace.h | 4 | ||||
-rw-r--r-- | arch/s390/kernel/debug.c | 2 | ||||
-rw-r--r-- | arch/s390/kernel/dumpstack.c | 9 | ||||
-rw-r--r-- | arch/s390/kernel/early.c | 2 | ||||
-rw-r--r-- | arch/s390/kernel/ftrace.c | 2 | ||||
-rw-r--r-- | arch/s390/kernel/kprobes.c | 6 | ||||
-rw-r--r-- | arch/s390/kernel/perf_event.c | 12 | ||||
-rw-r--r-- | arch/s390/kernel/process.c | 10 | ||||
-rw-r--r-- | arch/s390/kernel/ptrace.c | 6 | ||||
-rw-r--r-- | arch/s390/kernel/stacktrace.c | 11 | ||||
-rw-r--r-- | arch/s390/kernel/traps.c | 9 | ||||
-rw-r--r-- | arch/s390/kvm/guestdbg.c | 4 | ||||
-rw-r--r-- | arch/s390/mm/fault.c | 4 | ||||
-rw-r--r-- | arch/s390/oprofile/backtrace.c | 9 |
14 files changed, 41 insertions, 49 deletions
diff --git a/arch/s390/include/asm/ptrace.h b/arch/s390/include/asm/ptrace.h index 7423fd05cb94..99bc456cc26a 100644 --- a/arch/s390/include/asm/ptrace.h +++ b/arch/s390/include/asm/ptrace.h | |||
@@ -149,7 +149,7 @@ static inline int test_pt_regs_flag(struct pt_regs *regs, int flag) | |||
149 | #define arch_has_block_step() (1) | 149 | #define arch_has_block_step() (1) |
150 | 150 | ||
151 | #define user_mode(regs) (((regs)->psw.mask & PSW_MASK_PSTATE) != 0) | 151 | #define user_mode(regs) (((regs)->psw.mask & PSW_MASK_PSTATE) != 0) |
152 | #define instruction_pointer(regs) ((regs)->psw.addr & PSW_ADDR_INSN) | 152 | #define instruction_pointer(regs) ((regs)->psw.addr) |
153 | #define user_stack_pointer(regs)((regs)->gprs[15]) | 153 | #define user_stack_pointer(regs)((regs)->gprs[15]) |
154 | #define profile_pc(regs) instruction_pointer(regs) | 154 | #define profile_pc(regs) instruction_pointer(regs) |
155 | 155 | ||
@@ -171,7 +171,7 @@ unsigned long regs_get_kernel_stack_nth(struct pt_regs *regs, unsigned int n); | |||
171 | 171 | ||
172 | static inline unsigned long kernel_stack_pointer(struct pt_regs *regs) | 172 | static inline unsigned long kernel_stack_pointer(struct pt_regs *regs) |
173 | { | 173 | { |
174 | return regs->gprs[15] & PSW_ADDR_INSN; | 174 | return regs->gprs[15]; |
175 | } | 175 | } |
176 | 176 | ||
177 | #endif /* __ASSEMBLY__ */ | 177 | #endif /* __ASSEMBLY__ */ |
diff --git a/arch/s390/kernel/debug.c b/arch/s390/kernel/debug.c index 6fca0e46464e..c890a5589e59 100644 --- a/arch/s390/kernel/debug.c +++ b/arch/s390/kernel/debug.c | |||
@@ -1470,7 +1470,7 @@ debug_dflt_header_fn(debug_info_t * id, struct debug_view *view, | |||
1470 | except_str = "*"; | 1470 | except_str = "*"; |
1471 | else | 1471 | else |
1472 | except_str = "-"; | 1472 | except_str = "-"; |
1473 | caller = ((unsigned long) entry->caller) & PSW_ADDR_INSN; | 1473 | caller = (unsigned long) entry->caller; |
1474 | rc += sprintf(out_buf, "%02i %011lld:%06lu %1u %1s %02i %p ", | 1474 | rc += sprintf(out_buf, "%02i %011lld:%06lu %1u %1s %02i %p ", |
1475 | area, (long long)time_spec.tv_sec, | 1475 | area, (long long)time_spec.tv_sec, |
1476 | time_spec.tv_nsec / 1000, level, except_str, | 1476 | time_spec.tv_nsec / 1000, level, except_str, |
diff --git a/arch/s390/kernel/dumpstack.c b/arch/s390/kernel/dumpstack.c index dc8e20473484..02bd02ff648b 100644 --- a/arch/s390/kernel/dumpstack.c +++ b/arch/s390/kernel/dumpstack.c | |||
@@ -34,22 +34,21 @@ __show_trace(unsigned long sp, unsigned long low, unsigned long high) | |||
34 | unsigned long addr; | 34 | unsigned long addr; |
35 | 35 | ||
36 | while (1) { | 36 | while (1) { |
37 | sp = sp & PSW_ADDR_INSN; | ||
38 | if (sp < low || sp > high - sizeof(*sf)) | 37 | if (sp < low || sp > high - sizeof(*sf)) |
39 | return sp; | 38 | return sp; |
40 | sf = (struct stack_frame *) sp; | 39 | sf = (struct stack_frame *) sp; |
41 | addr = sf->gprs[8] & PSW_ADDR_INSN; | 40 | addr = sf->gprs[8]; |
42 | printk("([<%016lx>] %pSR)\n", addr, (void *)addr); | 41 | printk("([<%016lx>] %pSR)\n", addr, (void *)addr); |
43 | /* Follow the backchain. */ | 42 | /* Follow the backchain. */ |
44 | while (1) { | 43 | while (1) { |
45 | low = sp; | 44 | low = sp; |
46 | sp = sf->back_chain & PSW_ADDR_INSN; | 45 | sp = sf->back_chain; |
47 | if (!sp) | 46 | if (!sp) |
48 | break; | 47 | break; |
49 | if (sp <= low || sp > high - sizeof(*sf)) | 48 | if (sp <= low || sp > high - sizeof(*sf)) |
50 | return sp; | 49 | return sp; |
51 | sf = (struct stack_frame *) sp; | 50 | sf = (struct stack_frame *) sp; |
52 | addr = sf->gprs[8] & PSW_ADDR_INSN; | 51 | addr = sf->gprs[8]; |
53 | printk(" [<%016lx>] %pSR\n", addr, (void *)addr); | 52 | printk(" [<%016lx>] %pSR\n", addr, (void *)addr); |
54 | } | 53 | } |
55 | /* Zero backchain detected, check for interrupt frame. */ | 54 | /* Zero backchain detected, check for interrupt frame. */ |
@@ -57,7 +56,7 @@ __show_trace(unsigned long sp, unsigned long low, unsigned long high) | |||
57 | if (sp <= low || sp > high - sizeof(*regs)) | 56 | if (sp <= low || sp > high - sizeof(*regs)) |
58 | return sp; | 57 | return sp; |
59 | regs = (struct pt_regs *) sp; | 58 | regs = (struct pt_regs *) sp; |
60 | addr = regs->psw.addr & PSW_ADDR_INSN; | 59 | addr = regs->psw.addr; |
61 | printk(" [<%016lx>] %pSR\n", addr, (void *)addr); | 60 | printk(" [<%016lx>] %pSR\n", addr, (void *)addr); |
62 | low = sp; | 61 | low = sp; |
63 | sp = regs->gprs[15]; | 62 | sp = regs->gprs[15]; |
diff --git a/arch/s390/kernel/early.c b/arch/s390/kernel/early.c index 43ea2feb85d4..c55576bbaa1f 100644 --- a/arch/s390/kernel/early.c +++ b/arch/s390/kernel/early.c | |||
@@ -252,7 +252,7 @@ static void early_pgm_check_handler(void) | |||
252 | unsigned long addr; | 252 | unsigned long addr; |
253 | 253 | ||
254 | addr = S390_lowcore.program_old_psw.addr; | 254 | addr = S390_lowcore.program_old_psw.addr; |
255 | fixup = search_exception_tables(addr & PSW_ADDR_INSN); | 255 | fixup = search_exception_tables(addr); |
256 | if (!fixup) | 256 | if (!fixup) |
257 | disabled_wait(0); | 257 | disabled_wait(0); |
258 | /* Disable low address protection before storing into lowcore. */ | 258 | /* Disable low address protection before storing into lowcore. */ |
diff --git a/arch/s390/kernel/ftrace.c b/arch/s390/kernel/ftrace.c index e0eaf11134b4..0f7bfeba6da6 100644 --- a/arch/s390/kernel/ftrace.c +++ b/arch/s390/kernel/ftrace.c | |||
@@ -203,7 +203,7 @@ unsigned long prepare_ftrace_return(unsigned long parent, unsigned long ip) | |||
203 | goto out; | 203 | goto out; |
204 | if (unlikely(atomic_read(¤t->tracing_graph_pause))) | 204 | if (unlikely(atomic_read(¤t->tracing_graph_pause))) |
205 | goto out; | 205 | goto out; |
206 | ip = (ip & PSW_ADDR_INSN) - MCOUNT_INSN_SIZE; | 206 | ip -= MCOUNT_INSN_SIZE; |
207 | trace.func = ip; | 207 | trace.func = ip; |
208 | trace.depth = current->curr_ret_stack + 1; | 208 | trace.depth = current->curr_ret_stack + 1; |
209 | /* Only trace if the calling function expects to. */ | 209 | /* Only trace if the calling function expects to. */ |
diff --git a/arch/s390/kernel/kprobes.c b/arch/s390/kernel/kprobes.c index 66490289b028..250f5972536a 100644 --- a/arch/s390/kernel/kprobes.c +++ b/arch/s390/kernel/kprobes.c | |||
@@ -310,7 +310,7 @@ static int kprobe_handler(struct pt_regs *regs) | |||
310 | */ | 310 | */ |
311 | preempt_disable(); | 311 | preempt_disable(); |
312 | kcb = get_kprobe_ctlblk(); | 312 | kcb = get_kprobe_ctlblk(); |
313 | p = get_kprobe((void *)((regs->psw.addr & PSW_ADDR_INSN) - 2)); | 313 | p = get_kprobe((void *)(regs->psw.addr - 2)); |
314 | 314 | ||
315 | if (p) { | 315 | if (p) { |
316 | if (kprobe_running()) { | 316 | if (kprobe_running()) { |
@@ -490,7 +490,7 @@ NOKPROBE_SYMBOL(trampoline_probe_handler); | |||
490 | static void resume_execution(struct kprobe *p, struct pt_regs *regs) | 490 | static void resume_execution(struct kprobe *p, struct pt_regs *regs) |
491 | { | 491 | { |
492 | struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); | 492 | struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); |
493 | unsigned long ip = regs->psw.addr & PSW_ADDR_INSN; | 493 | unsigned long ip = regs->psw.addr; |
494 | int fixup = probe_get_fixup_type(p->ainsn.insn); | 494 | int fixup = probe_get_fixup_type(p->ainsn.insn); |
495 | 495 | ||
496 | /* Check if the kprobes location is an enabled ftrace caller */ | 496 | /* Check if the kprobes location is an enabled ftrace caller */ |
@@ -605,7 +605,7 @@ static int kprobe_trap_handler(struct pt_regs *regs, int trapnr) | |||
605 | * In case the user-specified fault handler returned | 605 | * In case the user-specified fault handler returned |
606 | * zero, try to fix up. | 606 | * zero, try to fix up. |
607 | */ | 607 | */ |
608 | entry = search_exception_tables(regs->psw.addr & PSW_ADDR_INSN); | 608 | entry = search_exception_tables(regs->psw.addr); |
609 | if (entry) { | 609 | if (entry) { |
610 | regs->psw.addr = extable_fixup(entry); | 610 | regs->psw.addr = extable_fixup(entry); |
611 | return 1; | 611 | return 1; |
diff --git a/arch/s390/kernel/perf_event.c b/arch/s390/kernel/perf_event.c index 61595c1f0a0f..cfcba2dd9bb5 100644 --- a/arch/s390/kernel/perf_event.c +++ b/arch/s390/kernel/perf_event.c | |||
@@ -74,7 +74,7 @@ static unsigned long guest_is_user_mode(struct pt_regs *regs) | |||
74 | 74 | ||
75 | static unsigned long instruction_pointer_guest(struct pt_regs *regs) | 75 | static unsigned long instruction_pointer_guest(struct pt_regs *regs) |
76 | { | 76 | { |
77 | return sie_block(regs)->gpsw.addr & PSW_ADDR_INSN; | 77 | return sie_block(regs)->gpsw.addr; |
78 | } | 78 | } |
79 | 79 | ||
80 | unsigned long perf_instruction_pointer(struct pt_regs *regs) | 80 | unsigned long perf_instruction_pointer(struct pt_regs *regs) |
@@ -231,29 +231,27 @@ static unsigned long __store_trace(struct perf_callchain_entry *entry, | |||
231 | struct pt_regs *regs; | 231 | struct pt_regs *regs; |
232 | 232 | ||
233 | while (1) { | 233 | while (1) { |
234 | sp = sp & PSW_ADDR_INSN; | ||
235 | if (sp < low || sp > high - sizeof(*sf)) | 234 | if (sp < low || sp > high - sizeof(*sf)) |
236 | return sp; | 235 | return sp; |
237 | sf = (struct stack_frame *) sp; | 236 | sf = (struct stack_frame *) sp; |
238 | perf_callchain_store(entry, sf->gprs[8] & PSW_ADDR_INSN); | 237 | perf_callchain_store(entry, sf->gprs[8]); |
239 | /* Follow the backchain. */ | 238 | /* Follow the backchain. */ |
240 | while (1) { | 239 | while (1) { |
241 | low = sp; | 240 | low = sp; |
242 | sp = sf->back_chain & PSW_ADDR_INSN; | 241 | sp = sf->back_chain; |
243 | if (!sp) | 242 | if (!sp) |
244 | break; | 243 | break; |
245 | if (sp <= low || sp > high - sizeof(*sf)) | 244 | if (sp <= low || sp > high - sizeof(*sf)) |
246 | return sp; | 245 | return sp; |
247 | sf = (struct stack_frame *) sp; | 246 | sf = (struct stack_frame *) sp; |
248 | perf_callchain_store(entry, | 247 | perf_callchain_store(entry, sf->gprs[8]); |
249 | sf->gprs[8] & PSW_ADDR_INSN); | ||
250 | } | 248 | } |
251 | /* Zero backchain detected, check for interrupt frame. */ | 249 | /* Zero backchain detected, check for interrupt frame. */ |
252 | sp = (unsigned long) (sf + 1); | 250 | sp = (unsigned long) (sf + 1); |
253 | if (sp <= low || sp > high - sizeof(*regs)) | 251 | if (sp <= low || sp > high - sizeof(*regs)) |
254 | return sp; | 252 | return sp; |
255 | regs = (struct pt_regs *) sp; | 253 | regs = (struct pt_regs *) sp; |
256 | perf_callchain_store(entry, sf->gprs[8] & PSW_ADDR_INSN); | 254 | perf_callchain_store(entry, sf->gprs[8]); |
257 | low = sp; | 255 | low = sp; |
258 | sp = regs->gprs[15]; | 256 | sp = regs->gprs[15]; |
259 | } | 257 | } |
diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c index 4a41eb7d66cc..2bba7df4ac51 100644 --- a/arch/s390/kernel/process.c +++ b/arch/s390/kernel/process.c | |||
@@ -56,10 +56,10 @@ unsigned long thread_saved_pc(struct task_struct *tsk) | |||
56 | return 0; | 56 | return 0; |
57 | low = task_stack_page(tsk); | 57 | low = task_stack_page(tsk); |
58 | high = (struct stack_frame *) task_pt_regs(tsk); | 58 | high = (struct stack_frame *) task_pt_regs(tsk); |
59 | sf = (struct stack_frame *) (tsk->thread.ksp & PSW_ADDR_INSN); | 59 | sf = (struct stack_frame *) tsk->thread.ksp; |
60 | if (sf <= low || sf > high) | 60 | if (sf <= low || sf > high) |
61 | return 0; | 61 | return 0; |
62 | sf = (struct stack_frame *) (sf->back_chain & PSW_ADDR_INSN); | 62 | sf = (struct stack_frame *) sf->back_chain; |
63 | if (sf <= low || sf > high) | 63 | if (sf <= low || sf > high) |
64 | return 0; | 64 | return 0; |
65 | return sf->gprs[8]; | 65 | return sf->gprs[8]; |
@@ -220,14 +220,14 @@ unsigned long get_wchan(struct task_struct *p) | |||
220 | return 0; | 220 | return 0; |
221 | low = task_stack_page(p); | 221 | low = task_stack_page(p); |
222 | high = (struct stack_frame *) task_pt_regs(p); | 222 | high = (struct stack_frame *) task_pt_regs(p); |
223 | sf = (struct stack_frame *) (p->thread.ksp & PSW_ADDR_INSN); | 223 | sf = (struct stack_frame *) p->thread.ksp; |
224 | if (sf <= low || sf > high) | 224 | if (sf <= low || sf > high) |
225 | return 0; | 225 | return 0; |
226 | for (count = 0; count < 16; count++) { | 226 | for (count = 0; count < 16; count++) { |
227 | sf = (struct stack_frame *) (sf->back_chain & PSW_ADDR_INSN); | 227 | sf = (struct stack_frame *) sf->back_chain; |
228 | if (sf <= low || sf > high) | 228 | if (sf <= low || sf > high) |
229 | return 0; | 229 | return 0; |
230 | return_address = sf->gprs[8] & PSW_ADDR_INSN; | 230 | return_address = sf->gprs[8]; |
231 | if (!in_sched_functions(return_address)) | 231 | if (!in_sched_functions(return_address)) |
232 | return return_address; | 232 | return return_address; |
233 | } | 233 | } |
diff --git a/arch/s390/kernel/ptrace.c b/arch/s390/kernel/ptrace.c index 01c37b36caf9..49b1c13bf6c9 100644 --- a/arch/s390/kernel/ptrace.c +++ b/arch/s390/kernel/ptrace.c | |||
@@ -84,7 +84,7 @@ void update_cr_regs(struct task_struct *task) | |||
84 | if (test_tsk_thread_flag(task, TIF_UPROBE_SINGLESTEP)) | 84 | if (test_tsk_thread_flag(task, TIF_UPROBE_SINGLESTEP)) |
85 | new.control |= PER_EVENT_IFETCH; | 85 | new.control |= PER_EVENT_IFETCH; |
86 | new.start = 0; | 86 | new.start = 0; |
87 | new.end = PSW_ADDR_INSN; | 87 | new.end = -1UL; |
88 | } | 88 | } |
89 | 89 | ||
90 | /* Take care of the PER enablement bit in the PSW. */ | 90 | /* Take care of the PER enablement bit in the PSW. */ |
@@ -148,7 +148,7 @@ static inline unsigned long __peek_user_per(struct task_struct *child, | |||
148 | else if (addr == (addr_t) &dummy->cr11) | 148 | else if (addr == (addr_t) &dummy->cr11) |
149 | /* End address of the active per set. */ | 149 | /* End address of the active per set. */ |
150 | return test_thread_flag(TIF_SINGLE_STEP) ? | 150 | return test_thread_flag(TIF_SINGLE_STEP) ? |
151 | PSW_ADDR_INSN : child->thread.per_user.end; | 151 | -1UL : child->thread.per_user.end; |
152 | else if (addr == (addr_t) &dummy->bits) | 152 | else if (addr == (addr_t) &dummy->bits) |
153 | /* Single-step bit. */ | 153 | /* Single-step bit. */ |
154 | return test_thread_flag(TIF_SINGLE_STEP) ? | 154 | return test_thread_flag(TIF_SINGLE_STEP) ? |
@@ -495,8 +495,6 @@ long arch_ptrace(struct task_struct *child, long request, | |||
495 | } | 495 | } |
496 | return 0; | 496 | return 0; |
497 | default: | 497 | default: |
498 | /* Removing high order bit from addr (only for 31 bit). */ | ||
499 | addr &= PSW_ADDR_INSN; | ||
500 | return ptrace_request(child, request, addr, data); | 498 | return ptrace_request(child, request, addr, data); |
501 | } | 499 | } |
502 | } | 500 | } |
diff --git a/arch/s390/kernel/stacktrace.c b/arch/s390/kernel/stacktrace.c index 1785cd82253c..5acba3cb7220 100644 --- a/arch/s390/kernel/stacktrace.c +++ b/arch/s390/kernel/stacktrace.c | |||
@@ -21,12 +21,11 @@ static unsigned long save_context_stack(struct stack_trace *trace, | |||
21 | unsigned long addr; | 21 | unsigned long addr; |
22 | 22 | ||
23 | while(1) { | 23 | while(1) { |
24 | sp &= PSW_ADDR_INSN; | ||
25 | if (sp < low || sp > high) | 24 | if (sp < low || sp > high) |
26 | return sp; | 25 | return sp; |
27 | sf = (struct stack_frame *)sp; | 26 | sf = (struct stack_frame *)sp; |
28 | while(1) { | 27 | while(1) { |
29 | addr = sf->gprs[8] & PSW_ADDR_INSN; | 28 | addr = sf->gprs[8]; |
30 | if (!trace->skip) | 29 | if (!trace->skip) |
31 | trace->entries[trace->nr_entries++] = addr; | 30 | trace->entries[trace->nr_entries++] = addr; |
32 | else | 31 | else |
@@ -34,7 +33,7 @@ static unsigned long save_context_stack(struct stack_trace *trace, | |||
34 | if (trace->nr_entries >= trace->max_entries) | 33 | if (trace->nr_entries >= trace->max_entries) |
35 | return sp; | 34 | return sp; |
36 | low = sp; | 35 | low = sp; |
37 | sp = sf->back_chain & PSW_ADDR_INSN; | 36 | sp = sf->back_chain; |
38 | if (!sp) | 37 | if (!sp) |
39 | break; | 38 | break; |
40 | if (sp <= low || sp > high - sizeof(*sf)) | 39 | if (sp <= low || sp > high - sizeof(*sf)) |
@@ -46,7 +45,7 @@ static unsigned long save_context_stack(struct stack_trace *trace, | |||
46 | if (sp <= low || sp > high - sizeof(*regs)) | 45 | if (sp <= low || sp > high - sizeof(*regs)) |
47 | return sp; | 46 | return sp; |
48 | regs = (struct pt_regs *)sp; | 47 | regs = (struct pt_regs *)sp; |
49 | addr = regs->psw.addr & PSW_ADDR_INSN; | 48 | addr = regs->psw.addr; |
50 | if (savesched || !in_sched_functions(addr)) { | 49 | if (savesched || !in_sched_functions(addr)) { |
51 | if (!trace->skip) | 50 | if (!trace->skip) |
52 | trace->entries[trace->nr_entries++] = addr; | 51 | trace->entries[trace->nr_entries++] = addr; |
@@ -65,7 +64,7 @@ void save_stack_trace(struct stack_trace *trace) | |||
65 | register unsigned long sp asm ("15"); | 64 | register unsigned long sp asm ("15"); |
66 | unsigned long orig_sp, new_sp; | 65 | unsigned long orig_sp, new_sp; |
67 | 66 | ||
68 | orig_sp = sp & PSW_ADDR_INSN; | 67 | orig_sp = sp; |
69 | new_sp = save_context_stack(trace, orig_sp, | 68 | new_sp = save_context_stack(trace, orig_sp, |
70 | S390_lowcore.panic_stack - PAGE_SIZE, | 69 | S390_lowcore.panic_stack - PAGE_SIZE, |
71 | S390_lowcore.panic_stack, 1); | 70 | S390_lowcore.panic_stack, 1); |
@@ -86,7 +85,7 @@ void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace) | |||
86 | { | 85 | { |
87 | unsigned long sp, low, high; | 86 | unsigned long sp, low, high; |
88 | 87 | ||
89 | sp = tsk->thread.ksp & PSW_ADDR_INSN; | 88 | sp = tsk->thread.ksp; |
90 | low = (unsigned long) task_stack_page(tsk); | 89 | low = (unsigned long) task_stack_page(tsk); |
91 | high = (unsigned long) task_pt_regs(tsk); | 90 | high = (unsigned long) task_pt_regs(tsk); |
92 | save_context_stack(trace, sp, low, high, 0); | 91 | save_context_stack(trace, sp, low, high, 0); |
diff --git a/arch/s390/kernel/traps.c b/arch/s390/kernel/traps.c index 6a49b7d90e0d..017eb03daee2 100644 --- a/arch/s390/kernel/traps.c +++ b/arch/s390/kernel/traps.c | |||
@@ -32,8 +32,7 @@ static inline void __user *get_trap_ip(struct pt_regs *regs) | |||
32 | address = *(unsigned long *)(current->thread.trap_tdb + 24); | 32 | address = *(unsigned long *)(current->thread.trap_tdb + 24); |
33 | else | 33 | else |
34 | address = regs->psw.addr; | 34 | address = regs->psw.addr; |
35 | return (void __user *) | 35 | return (void __user *) (address - (regs->int_code >> 16)); |
36 | ((address - (regs->int_code >> 16)) & PSW_ADDR_INSN); | ||
37 | } | 36 | } |
38 | 37 | ||
39 | static inline void report_user_fault(struct pt_regs *regs, int signr) | 38 | static inline void report_user_fault(struct pt_regs *regs, int signr) |
@@ -46,7 +45,7 @@ static inline void report_user_fault(struct pt_regs *regs, int signr) | |||
46 | return; | 45 | return; |
47 | printk("User process fault: interruption code %04x ilc:%d ", | 46 | printk("User process fault: interruption code %04x ilc:%d ", |
48 | regs->int_code & 0xffff, regs->int_code >> 17); | 47 | regs->int_code & 0xffff, regs->int_code >> 17); |
49 | print_vma_addr("in ", regs->psw.addr & PSW_ADDR_INSN); | 48 | print_vma_addr("in ", regs->psw.addr); |
50 | printk("\n"); | 49 | printk("\n"); |
51 | show_regs(regs); | 50 | show_regs(regs); |
52 | } | 51 | } |
@@ -69,13 +68,13 @@ void do_report_trap(struct pt_regs *regs, int si_signo, int si_code, char *str) | |||
69 | report_user_fault(regs, si_signo); | 68 | report_user_fault(regs, si_signo); |
70 | } else { | 69 | } else { |
71 | const struct exception_table_entry *fixup; | 70 | const struct exception_table_entry *fixup; |
72 | fixup = search_exception_tables(regs->psw.addr & PSW_ADDR_INSN); | 71 | fixup = search_exception_tables(regs->psw.addr); |
73 | if (fixup) | 72 | if (fixup) |
74 | regs->psw.addr = extable_fixup(fixup); | 73 | regs->psw.addr = extable_fixup(fixup); |
75 | else { | 74 | else { |
76 | enum bug_trap_type btt; | 75 | enum bug_trap_type btt; |
77 | 76 | ||
78 | btt = report_bug(regs->psw.addr & PSW_ADDR_INSN, regs); | 77 | btt = report_bug(regs->psw.addr, regs); |
79 | if (btt == BUG_TRAP_TYPE_WARN) | 78 | if (btt == BUG_TRAP_TYPE_WARN) |
80 | return; | 79 | return; |
81 | die(regs, str); | 80 | die(regs, str); |
diff --git a/arch/s390/kvm/guestdbg.c b/arch/s390/kvm/guestdbg.c index 47518a324d75..d697312ce9ee 100644 --- a/arch/s390/kvm/guestdbg.c +++ b/arch/s390/kvm/guestdbg.c | |||
@@ -116,7 +116,7 @@ static void enable_all_hw_wp(struct kvm_vcpu *vcpu) | |||
116 | if (*cr9 & PER_EVENT_STORE && *cr9 & PER_CONTROL_ALTERATION) { | 116 | if (*cr9 & PER_EVENT_STORE && *cr9 & PER_CONTROL_ALTERATION) { |
117 | *cr9 &= ~PER_CONTROL_ALTERATION; | 117 | *cr9 &= ~PER_CONTROL_ALTERATION; |
118 | *cr10 = 0; | 118 | *cr10 = 0; |
119 | *cr11 = PSW_ADDR_INSN; | 119 | *cr11 = -1UL; |
120 | } else { | 120 | } else { |
121 | *cr9 &= ~PER_CONTROL_ALTERATION; | 121 | *cr9 &= ~PER_CONTROL_ALTERATION; |
122 | *cr9 |= PER_EVENT_STORE; | 122 | *cr9 |= PER_EVENT_STORE; |
@@ -159,7 +159,7 @@ void kvm_s390_patch_guest_per_regs(struct kvm_vcpu *vcpu) | |||
159 | vcpu->arch.sie_block->gcr[0] &= ~0x800ul; | 159 | vcpu->arch.sie_block->gcr[0] &= ~0x800ul; |
160 | vcpu->arch.sie_block->gcr[9] |= PER_EVENT_IFETCH; | 160 | vcpu->arch.sie_block->gcr[9] |= PER_EVENT_IFETCH; |
161 | vcpu->arch.sie_block->gcr[10] = 0; | 161 | vcpu->arch.sie_block->gcr[10] = 0; |
162 | vcpu->arch.sie_block->gcr[11] = PSW_ADDR_INSN; | 162 | vcpu->arch.sie_block->gcr[11] = -1UL; |
163 | } | 163 | } |
164 | 164 | ||
165 | if (guestdbg_hw_bp_enabled(vcpu)) { | 165 | if (guestdbg_hw_bp_enabled(vcpu)) { |
diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c index 95ed8d48f54e..791a4146052c 100644 --- a/arch/s390/mm/fault.c +++ b/arch/s390/mm/fault.c | |||
@@ -228,7 +228,7 @@ static inline void report_user_fault(struct pt_regs *regs, long signr) | |||
228 | return; | 228 | return; |
229 | printk(KERN_ALERT "User process fault: interruption code %04x ilc:%d ", | 229 | printk(KERN_ALERT "User process fault: interruption code %04x ilc:%d ", |
230 | regs->int_code & 0xffff, regs->int_code >> 17); | 230 | regs->int_code & 0xffff, regs->int_code >> 17); |
231 | print_vma_addr(KERN_CONT "in ", regs->psw.addr & PSW_ADDR_INSN); | 231 | print_vma_addr(KERN_CONT "in ", regs->psw.addr); |
232 | printk(KERN_CONT "\n"); | 232 | printk(KERN_CONT "\n"); |
233 | printk(KERN_ALERT "failing address: %016lx TEID: %016lx\n", | 233 | printk(KERN_ALERT "failing address: %016lx TEID: %016lx\n", |
234 | regs->int_parm_long & __FAIL_ADDR_MASK, regs->int_parm_long); | 234 | regs->int_parm_long & __FAIL_ADDR_MASK, regs->int_parm_long); |
@@ -256,7 +256,7 @@ static noinline void do_no_context(struct pt_regs *regs) | |||
256 | const struct exception_table_entry *fixup; | 256 | const struct exception_table_entry *fixup; |
257 | 257 | ||
258 | /* Are we prepared to handle this kernel fault? */ | 258 | /* Are we prepared to handle this kernel fault? */ |
259 | fixup = search_exception_tables(regs->psw.addr & PSW_ADDR_INSN); | 259 | fixup = search_exception_tables(regs->psw.addr); |
260 | if (fixup) { | 260 | if (fixup) { |
261 | regs->psw.addr = extable_fixup(fixup); | 261 | regs->psw.addr = extable_fixup(fixup); |
262 | return; | 262 | return; |
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 | } |