Lines Matching refs:regs
85 static inline void conditional_sti(struct pt_regs *regs) in conditional_sti() argument
87 if (regs->flags & X86_EFLAGS_IF) in conditional_sti()
91 static inline void preempt_conditional_sti(struct pt_regs *regs) in preempt_conditional_sti() argument
94 if (regs->flags & X86_EFLAGS_IF) in preempt_conditional_sti()
98 static inline void conditional_cli(struct pt_regs *regs) in conditional_cli() argument
100 if (regs->flags & X86_EFLAGS_IF) in conditional_cli()
104 static inline void preempt_conditional_cli(struct pt_regs *regs) in preempt_conditional_cli() argument
106 if (regs->flags & X86_EFLAGS_IF) in preempt_conditional_cli()
111 enum ctx_state ist_enter(struct pt_regs *regs) in ist_enter() argument
115 if (user_mode(regs)) { in ist_enter()
144 void ist_exit(struct pt_regs *regs, enum ctx_state prev_state) in ist_exit() argument
149 if (user_mode(regs)) in ist_exit()
168 void ist_begin_non_atomic(struct pt_regs *regs) in ist_begin_non_atomic() argument
170 BUG_ON(!user_mode(regs)); in ist_begin_non_atomic()
195 struct pt_regs *regs, long error_code) in do_trap_no_signal() argument
197 if (v8086_mode(regs)) { in do_trap_no_signal()
203 if (!handle_vm86_trap((struct kernel_vm86_regs *) regs, in do_trap_no_signal()
210 if (!user_mode(regs)) { in do_trap_no_signal()
211 if (!fixup_exception(regs)) { in do_trap_no_signal()
214 die(str, regs, error_code); in do_trap_no_signal()
222 static siginfo_t *fill_trap_info(struct pt_regs *regs, int signr, int trapnr, in fill_trap_info() argument
234 siaddr = uprobe_get_trap_addr(regs); in fill_trap_info()
238 siaddr = uprobe_get_trap_addr(regs); in fill_trap_info()
254 do_trap(int trapnr, int signr, char *str, struct pt_regs *regs, in do_trap() argument
260 if (!do_trap_no_signal(tsk, trapnr, str, regs, error_code)) in do_trap()
279 regs->ip, regs->sp, error_code); in do_trap()
280 print_vma_addr(" in ", regs->ip); in do_trap()
289 static void do_error_trap(struct pt_regs *regs, long error_code, char *str, in do_error_trap() argument
295 if (notify_die(DIE_TRAP, str, regs, error_code, trapnr, signr) != in do_error_trap()
297 conditional_sti(regs); in do_error_trap()
298 do_trap(trapnr, signr, str, regs, error_code, in do_error_trap()
299 fill_trap_info(regs, signr, trapnr, &info)); in do_error_trap()
306 dotraplinkage void do_##name(struct pt_regs *regs, long error_code) \
308 do_error_trap(regs, error_code, str, trapnr, signr); \
322 dotraplinkage void do_double_fault(struct pt_regs *regs, long error_code) in do_double_fault() argument
338 if (((long)regs->sp >> PGDIR_SHIFT) == ESPFIX_PGD_ENTRY && in do_double_fault()
339 regs->cs == __KERNEL_CS && in do_double_fault()
340 regs->ip == (unsigned long)native_irq_return_iret) in do_double_fault()
345 memmove(&normal_regs->ip, (void *)regs->sp, 5*8); in do_double_fault()
347 regs->ip = (unsigned long)general_protection; in do_double_fault()
348 regs->sp = (unsigned long)&normal_regs->orig_ax; in do_double_fault()
354 ist_enter(regs); /* Discard prev_state because we won't return. */ in do_double_fault()
355 notify_die(DIE_TRAP, str, regs, error_code, X86_TRAP_DF, SIGSEGV); in do_double_fault()
361 df_debug(regs, error_code); in do_double_fault()
368 die(str, regs, error_code); in do_double_fault()
372 dotraplinkage void do_bounds(struct pt_regs *regs, long error_code) in do_bounds() argument
381 if (notify_die(DIE_TRAP, "bounds", regs, error_code, in do_bounds()
384 conditional_sti(regs); in do_bounds()
386 if (!user_mode(regs)) in do_bounds()
387 die("bounds", regs, error_code); in do_bounds()
416 info = mpx_generate_siginfo(regs, xsave_buf); in do_bounds()
431 do_trap(X86_TRAP_BR, SIGSEGV, "bounds", regs, error_code, info); in do_bounds()
437 die("bounds", regs, error_code); in do_bounds()
451 do_trap(X86_TRAP_BR, SIGSEGV, "bounds", regs, error_code, NULL); in do_bounds()
456 do_general_protection(struct pt_regs *regs, long error_code) in do_general_protection() argument
462 conditional_sti(regs); in do_general_protection()
464 if (v8086_mode(regs)) { in do_general_protection()
466 handle_vm86_fault((struct kernel_vm86_regs *) regs, error_code); in do_general_protection()
471 if (!user_mode(regs)) { in do_general_protection()
472 if (fixup_exception(regs)) in do_general_protection()
477 if (notify_die(DIE_GPF, "general protection fault", regs, error_code, in do_general_protection()
479 die("general protection fault", regs, error_code); in do_general_protection()
490 regs->ip, regs->sp, error_code); in do_general_protection()
491 print_vma_addr(" in ", regs->ip); in do_general_protection()
502 dotraplinkage void notrace do_int3(struct pt_regs *regs, long error_code) in do_int3() argument
512 ftrace_int3_handler(regs)) in do_int3()
515 if (poke_int3_handler(regs)) in do_int3()
518 prev_state = ist_enter(regs); in do_int3()
520 if (kgdb_ll_trap(DIE_INT3, "int3", regs, error_code, X86_TRAP_BP, in do_int3()
526 if (kprobe_int3_handler(regs)) in do_int3()
530 if (notify_die(DIE_INT3, "int3", regs, error_code, X86_TRAP_BP, in do_int3()
539 preempt_conditional_sti(regs); in do_int3()
540 do_trap(X86_TRAP_BP, SIGTRAP, "int3", regs, error_code, NULL); in do_int3()
541 preempt_conditional_cli(regs); in do_int3()
544 ist_exit(regs, prev_state); in do_int3()
556 struct pt_regs *regs = task_pt_regs(current); in sync_regs() local
557 *regs = *eregs; in sync_regs()
558 return regs; in sync_regs()
564 struct pt_regs regs; member
579 struct bad_iret_stack, regs); in fixup_bad_iret()
582 memmove(&new_stack->regs.ip, (void *)s->regs.sp, 5*8); in fixup_bad_iret()
585 memmove(new_stack, s, offsetof(struct bad_iret_stack, regs.ip)); in fixup_bad_iret()
587 BUG_ON(!user_mode(&new_stack->regs)); in fixup_bad_iret()
617 dotraplinkage void do_debug(struct pt_regs *regs, long error_code) in do_debug() argument
625 prev_state = ist_enter(regs); in do_debug()
637 if (!dr6 && user_mode(regs)) in do_debug()
641 if ((dr6 & DR_STEP) && kmemcheck_trap(regs)) in do_debug()
656 if (kprobe_debug_handler(regs)) in do_debug()
660 if (notify_die(DIE_DEBUG, "debug", regs, (long)&dr6, error_code, in do_debug()
671 preempt_conditional_sti(regs); in do_debug()
673 if (v8086_mode(regs)) { in do_debug()
674 handle_vm86_trap((struct kernel_vm86_regs *) regs, error_code, in do_debug()
676 preempt_conditional_cli(regs); in do_debug()
688 if ((dr6 & DR_STEP) && !user_mode(regs)) { in do_debug()
691 regs->flags &= ~X86_EFLAGS_TF; in do_debug()
695 send_sigtrap(tsk, regs, error_code, si_code); in do_debug()
696 preempt_conditional_cli(regs); in do_debug()
700 ist_exit(regs, prev_state); in do_debug()
709 static void math_error(struct pt_regs *regs, int error_code, int trapnr) in math_error() argument
717 if (notify_die(DIE_TRAP, str, regs, error_code, trapnr, SIGFPE) == NOTIFY_STOP) in math_error()
719 conditional_sti(regs); in math_error()
721 if (!user_mode(regs)) in math_error()
723 if (!fixup_exception(regs)) { in math_error()
726 die(str, regs, error_code); in math_error()
739 info.si_addr = (void __user *)uprobe_get_trap_addr(regs); in math_error()
793 dotraplinkage void do_coprocessor_error(struct pt_regs *regs, long error_code) in do_coprocessor_error() argument
798 math_error(regs, error_code, X86_TRAP_MF); in do_coprocessor_error()
803 do_simd_coprocessor_error(struct pt_regs *regs, long error_code) in do_simd_coprocessor_error() argument
808 math_error(regs, error_code, X86_TRAP_XF); in do_simd_coprocessor_error()
813 do_spurious_interrupt_bug(struct pt_regs *regs, long error_code) in do_spurious_interrupt_bug() argument
815 conditional_sti(regs); in do_spurious_interrupt_bug()
873 do_device_not_available(struct pt_regs *regs, long error_code) in do_device_not_available() argument
884 conditional_sti(regs); in do_device_not_available()
886 info.regs = regs; in do_device_not_available()
894 conditional_sti(regs); in do_device_not_available()
901 dotraplinkage void do_iret_error(struct pt_regs *regs, long error_code) in do_iret_error() argument
913 if (notify_die(DIE_TRAP, "iret exception", regs, error_code, in do_iret_error()
915 do_trap(X86_TRAP_IRET, SIGILL, "iret exception", regs, error_code, in do_iret_error()