Lines Matching refs:regs
59 static inline int notify_page_fault(struct pt_regs *regs) in notify_page_fault() argument
64 if (kprobes_built_in() && !user_mode(regs)) { in notify_page_fault()
66 if (kprobe_running() && kprobe_fault_handler(regs, 14)) in notify_page_fault()
101 static inline int user_space_fault(struct pt_regs *regs) in user_space_fault() argument
109 trans_exc_code = regs->int_parm_long & 3; in user_space_fault()
112 if (user_mode(regs)) in user_space_fault()
181 static void dump_fault_info(struct pt_regs *regs) in dump_fault_info() argument
186 switch (regs->int_parm_long & 3) { in dump_fault_info()
201 if (!user_space_fault(regs)) { in dump_fault_info()
217 dump_pagetable(asce, regs->int_parm_long & __FAIL_ADDR_MASK); in dump_fault_info()
220 static inline void report_user_fault(struct pt_regs *regs, long signr) in report_user_fault() argument
229 regs->int_code & 0xffff, regs->int_code >> 17); in report_user_fault()
230 print_vma_addr(KERN_CONT "in ", regs->psw.addr & PSW_ADDR_INSN); in report_user_fault()
233 regs->int_parm_long & __FAIL_ADDR_MASK, regs->int_parm_long); in report_user_fault()
234 dump_fault_info(regs); in report_user_fault()
235 show_regs(regs); in report_user_fault()
242 static noinline void do_sigsegv(struct pt_regs *regs, int si_code) in do_sigsegv() argument
246 report_user_fault(regs, SIGSEGV); in do_sigsegv()
249 si.si_addr = (void __user *)(regs->int_parm_long & __FAIL_ADDR_MASK); in do_sigsegv()
253 static noinline void do_no_context(struct pt_regs *regs) in do_no_context() argument
259 fixup = search_exception_tables(regs->psw.addr & PSW_ADDR_INSN); in do_no_context()
261 regs->psw.addr = extable_fixup(fixup) | PSW_ADDR_AMODE; in do_no_context()
269 address = regs->int_parm_long & __FAIL_ADDR_MASK; in do_no_context()
270 if (!user_space_fault(regs)) in do_no_context()
277 regs->int_parm_long & __FAIL_ADDR_MASK, regs->int_parm_long); in do_no_context()
278 dump_fault_info(regs); in do_no_context()
279 die(regs, "Oops"); in do_no_context()
283 static noinline void do_low_address(struct pt_regs *regs) in do_low_address() argument
287 if (regs->psw.mask & PSW_MASK_PSTATE) { in do_low_address()
289 die (regs, "Low-address protection"); in do_low_address()
293 do_no_context(regs); in do_low_address()
296 static noinline void do_sigbus(struct pt_regs *regs) in do_sigbus() argument
308 si.si_addr = (void __user *)(regs->int_parm_long & __FAIL_ADDR_MASK); in do_sigbus()
312 static noinline void do_fault_error(struct pt_regs *regs, int fault) in do_fault_error() argument
320 if (user_mode(regs)) { in do_fault_error()
324 do_sigsegv(regs, si_code); in do_fault_error()
329 do_no_context(regs); in do_fault_error()
332 if (!user_mode(regs)) in do_fault_error()
333 do_no_context(regs); in do_fault_error()
337 if (!user_mode(regs)) in do_fault_error()
338 do_no_context(regs); in do_fault_error()
343 if (!user_mode(regs)) in do_fault_error()
344 do_no_context(regs); in do_fault_error()
346 do_sigsegv(regs, SEGV_MAPERR); in do_fault_error()
349 if (!user_mode(regs)) in do_fault_error()
350 do_no_context(regs); in do_fault_error()
352 do_sigbus(regs); in do_fault_error()
370 static inline int do_exception(struct pt_regs *regs, int access) in do_exception() argument
388 clear_pt_regs_flag(regs, PIF_PER_TRAP); in do_exception()
390 if (notify_page_fault(regs)) in do_exception()
394 trans_exc_code = regs->int_parm_long; in do_exception()
402 if (unlikely(!user_space_fault(regs) || in_atomic() || !mm)) in do_exception()
406 perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address); in do_exception()
408 if (user_mode(regs)) in do_exception()
475 regs, address); in do_exception()
479 regs, address); in do_exception()
521 void do_protection_exception(struct pt_regs *regs) in do_protection_exception() argument
526 trans_exc_code = regs->int_parm_long; in do_protection_exception()
532 if (!(regs->int_code & 0x200)) in do_protection_exception()
533 regs->psw.addr = __rewind_psw(regs->psw, regs->int_code >> 16); in do_protection_exception()
540 do_low_address(regs); in do_protection_exception()
543 fault = do_exception(regs, VM_WRITE); in do_protection_exception()
545 do_fault_error(regs, fault); in do_protection_exception()
549 void do_dat_exception(struct pt_regs *regs) in do_dat_exception() argument
554 fault = do_exception(regs, access); in do_dat_exception()
556 do_fault_error(regs, fault); in do_dat_exception()