aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHeiko Carstens <heiko.carstens@de.ibm.com>2016-01-18 07:12:19 -0500
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2016-01-19 06:14:03 -0500
commit9cb1ccecb69d133e014b7be4de2609f689398c07 (patch)
tree1f1c79f80ad49efc0de749b4d8bc88a9135cd1da
parentfecc868a668774b0fc666728c3f5d9f6fceefe64 (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.h4
-rw-r--r--arch/s390/kernel/debug.c2
-rw-r--r--arch/s390/kernel/dumpstack.c9
-rw-r--r--arch/s390/kernel/early.c2
-rw-r--r--arch/s390/kernel/ftrace.c2
-rw-r--r--arch/s390/kernel/kprobes.c6
-rw-r--r--arch/s390/kernel/perf_event.c12
-rw-r--r--arch/s390/kernel/process.c10
-rw-r--r--arch/s390/kernel/ptrace.c6
-rw-r--r--arch/s390/kernel/stacktrace.c11
-rw-r--r--arch/s390/kernel/traps.c9
-rw-r--r--arch/s390/kvm/guestdbg.c4
-rw-r--r--arch/s390/mm/fault.c4
-rw-r--r--arch/s390/oprofile/backtrace.c9
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
172static inline unsigned long kernel_stack_pointer(struct pt_regs *regs) 172static 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(&current->tracing_graph_pause))) 204 if (unlikely(atomic_read(&current->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);
490static void resume_execution(struct kprobe *p, struct pt_regs *regs) 490static 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
75static unsigned long instruction_pointer_guest(struct pt_regs *regs) 75static 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
80unsigned long perf_instruction_pointer(struct pt_regs *regs) 80unsigned 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
39static inline void report_user_fault(struct pt_regs *regs, int signr) 38static 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 }