1 | /* SPDX-License-Identifier: GPL-2.0 */ |
---|---|
2 | #ifndef _ASM_X86_TRAPS_H |
3 | #define _ASM_X86_TRAPS_H |
4 | |
5 | #include <linux/context_tracking_state.h> |
6 | #include <linux/kprobes.h> |
7 | |
8 | #include <asm/debugreg.h> |
9 | #include <asm/idtentry.h> |
10 | #include <asm/siginfo.h> /* TRAP_TRACE, ... */ |
11 | #include <asm/trap_pf.h> |
12 | |
13 | #ifdef CONFIG_X86_64 |
14 | asmlinkage __visible notrace struct pt_regs *sync_regs(struct pt_regs *eregs); |
15 | asmlinkage __visible notrace |
16 | struct pt_regs *fixup_bad_iret(struct pt_regs *bad_regs); |
17 | void __init trap_init(void); |
18 | asmlinkage __visible noinstr struct pt_regs *vc_switch_off_ist(struct pt_regs *eregs); |
19 | #endif |
20 | |
21 | extern int ibt_selftest(void); |
22 | extern int ibt_selftest_noendbr(void); |
23 | |
24 | #ifdef CONFIG_X86_F00F_BUG |
25 | /* For handling the FOOF bug */ |
26 | void handle_invalid_op(struct pt_regs *regs); |
27 | #endif |
28 | |
29 | static inline int get_si_code(unsigned long condition) |
30 | { |
31 | if (condition & DR_STEP) |
32 | return TRAP_TRACE; |
33 | else if (condition & (DR_TRAP0|DR_TRAP1|DR_TRAP2|DR_TRAP3)) |
34 | return TRAP_HWBKPT; |
35 | else |
36 | return TRAP_BRKPT; |
37 | } |
38 | |
39 | extern int panic_on_unrecovered_nmi; |
40 | |
41 | void math_emulate(struct math_emu_info *); |
42 | |
43 | bool fault_in_kernel_space(unsigned long address); |
44 | |
45 | #ifdef CONFIG_VMAP_STACK |
46 | void __noreturn handle_stack_overflow(struct pt_regs *regs, |
47 | unsigned long fault_address, |
48 | struct stack_info *info); |
49 | #endif |
50 | |
51 | static inline void cond_local_irq_enable(struct pt_regs *regs) |
52 | { |
53 | if (regs->flags & X86_EFLAGS_IF) |
54 | local_irq_enable(); |
55 | } |
56 | |
57 | static inline void cond_local_irq_disable(struct pt_regs *regs) |
58 | { |
59 | if (regs->flags & X86_EFLAGS_IF) |
60 | local_irq_disable(); |
61 | } |
62 | |
63 | #endif /* _ASM_X86_TRAPS_H */ |
64 |