Lines Matching refs:regs

60 static inline int notify_page_fault(struct pt_regs *regs)  in notify_page_fault()  argument
65 if (kprobes_built_in() && !user_mode(regs)) { in notify_page_fault()
67 if (kprobe_running() && kprobe_fault_handler(regs, 14)) in notify_page_fault()
102 static inline int user_space_fault(struct pt_regs *regs) in user_space_fault() argument
110 trans_exc_code = regs->int_parm_long & 3; in user_space_fault()
113 if (user_mode(regs)) in user_space_fault()
182 static void dump_fault_info(struct pt_regs *regs) in dump_fault_info() argument
187 switch (regs->int_parm_long & 3) { in dump_fault_info()
202 if (!user_space_fault(regs)) { in dump_fault_info()
218 dump_pagetable(asce, regs->int_parm_long & __FAIL_ADDR_MASK); in dump_fault_info()
221 static inline void report_user_fault(struct pt_regs *regs, long signr) in report_user_fault() argument
230 regs->int_code & 0xffff, regs->int_code >> 17); in report_user_fault()
231 print_vma_addr(KERN_CONT "in ", regs->psw.addr & PSW_ADDR_INSN); in report_user_fault()
234 regs->int_parm_long & __FAIL_ADDR_MASK, regs->int_parm_long); in report_user_fault()
235 dump_fault_info(regs); in report_user_fault()
236 show_regs(regs); in report_user_fault()
243 static noinline void do_sigsegv(struct pt_regs *regs, int si_code) in do_sigsegv() argument
247 report_user_fault(regs, SIGSEGV); in do_sigsegv()
250 si.si_addr = (void __user *)(regs->int_parm_long & __FAIL_ADDR_MASK); in do_sigsegv()
254 static noinline void do_no_context(struct pt_regs *regs) in do_no_context() argument
260 fixup = search_exception_tables(regs->psw.addr & PSW_ADDR_INSN); in do_no_context()
262 regs->psw.addr = extable_fixup(fixup) | PSW_ADDR_AMODE; in do_no_context()
270 address = regs->int_parm_long & __FAIL_ADDR_MASK; in do_no_context()
271 if (!user_space_fault(regs)) in do_no_context()
278 regs->int_parm_long & __FAIL_ADDR_MASK, regs->int_parm_long); in do_no_context()
279 dump_fault_info(regs); in do_no_context()
280 die(regs, "Oops"); in do_no_context()
284 static noinline void do_low_address(struct pt_regs *regs) in do_low_address() argument
288 if (regs->psw.mask & PSW_MASK_PSTATE) { in do_low_address()
290 die (regs, "Low-address protection"); in do_low_address()
294 do_no_context(regs); in do_low_address()
297 static noinline void do_sigbus(struct pt_regs *regs) in do_sigbus() argument
309 si.si_addr = (void __user *)(regs->int_parm_long & __FAIL_ADDR_MASK); in do_sigbus()
313 static noinline void do_fault_error(struct pt_regs *regs, int fault) in do_fault_error() argument
321 if (user_mode(regs)) { in do_fault_error()
325 do_sigsegv(regs, si_code); in do_fault_error()
330 do_no_context(regs); in do_fault_error()
333 if (!user_mode(regs)) in do_fault_error()
334 do_no_context(regs); in do_fault_error()
338 if (!user_mode(regs)) in do_fault_error()
339 do_no_context(regs); in do_fault_error()
344 if (!user_mode(regs)) in do_fault_error()
345 do_no_context(regs); in do_fault_error()
347 do_sigsegv(regs, SEGV_MAPERR); in do_fault_error()
350 if (!user_mode(regs)) in do_fault_error()
351 do_no_context(regs); in do_fault_error()
353 do_sigbus(regs); in do_fault_error()
371 static inline int do_exception(struct pt_regs *regs, int access) in do_exception() argument
389 clear_pt_regs_flag(regs, PIF_PER_TRAP); in do_exception()
391 if (notify_page_fault(regs)) in do_exception()
395 trans_exc_code = regs->int_parm_long; in do_exception()
403 if (unlikely(!user_space_fault(regs) || faulthandler_disabled() || !mm)) in do_exception()
407 perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address); in do_exception()
409 if (user_mode(regs)) in do_exception()
476 regs, address); in do_exception()
480 regs, address); in do_exception()
522 void do_protection_exception(struct pt_regs *regs) in do_protection_exception() argument
527 trans_exc_code = regs->int_parm_long; in do_protection_exception()
533 if (!(regs->int_code & 0x200)) in do_protection_exception()
534 regs->psw.addr = __rewind_psw(regs->psw, regs->int_code >> 16); in do_protection_exception()
541 do_low_address(regs); in do_protection_exception()
544 fault = do_exception(regs, VM_WRITE); in do_protection_exception()
546 do_fault_error(regs, fault); in do_protection_exception()
550 void do_dat_exception(struct pt_regs *regs) in do_dat_exception() argument
555 fault = do_exception(regs, access); in do_dat_exception()
557 do_fault_error(regs, fault); in do_dat_exception()