Commit | Line | Data |
---|---|---|
f39650de AS |
1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | #ifndef _LINUX_PANIC_H | |
3 | #define _LINUX_PANIC_H | |
4 | ||
5 | #include <linux/compiler_attributes.h> | |
6 | #include <linux/types.h> | |
7 | ||
8 | struct pt_regs; | |
9 | ||
10 | extern long (*panic_blink)(int state); | |
11 | __printf(1, 2) | |
12 | void panic(const char *fmt, ...) __noreturn __cold; | |
13 | void nmi_panic(struct pt_regs *regs, const char *msg); | |
79cc1ba7 | 14 | void check_panic_on_warn(const char *origin); |
f39650de AS |
15 | extern void oops_enter(void); |
16 | extern void oops_exit(void); | |
17 | extern bool oops_may_print(void); | |
18 | ||
bcc954c6 | 19 | extern bool panic_triggering_all_cpu_backtrace; |
f39650de AS |
20 | extern int panic_timeout; |
21 | extern unsigned long panic_print; | |
22 | extern int panic_on_oops; | |
23 | extern int panic_on_unrecovered_nmi; | |
24 | extern int panic_on_io_nmi; | |
25 | extern int panic_on_warn; | |
26 | ||
27 | extern unsigned long panic_on_taint; | |
28 | extern bool panic_on_taint_nousertaint; | |
29 | ||
30 | extern int sysctl_panic_on_rcu_stall; | |
31 | extern int sysctl_max_rcu_stall_to_panic; | |
32 | extern int sysctl_panic_on_stackoverflow; | |
33 | ||
34 | extern bool crash_kexec_post_notifiers; | |
35 | ||
d9cdb431 AB |
36 | extern void __stack_chk_fail(void); |
37 | void abort(void); | |
38 | ||
f39650de AS |
39 | /* |
40 | * panic_cpu is used for synchronizing panic() and crash_kexec() execution. It | |
41 | * holds a CPU number which is executing panic() currently. A value of | |
42 | * PANIC_CPU_INVALID means no CPU has entered panic() or crash_kexec(). | |
43 | */ | |
44 | extern atomic_t panic_cpu; | |
45 | #define PANIC_CPU_INVALID -1 | |
46 | ||
47 | /* | |
48 | * Only to be used by arch init code. If the user over-wrote the default | |
49 | * CONFIG_PANIC_TIMEOUT, honor it. | |
50 | */ | |
51 | static inline void set_arch_panic_timeout(int timeout, int arch_default_timeout) | |
52 | { | |
53 | if (panic_timeout == arch_default_timeout) | |
54 | panic_timeout = timeout; | |
55 | } | |
56 | ||
57 | /* This cannot be an enum because some may be used in assembly source. */ | |
58 | #define TAINT_PROPRIETARY_MODULE 0 | |
59 | #define TAINT_FORCED_MODULE 1 | |
60 | #define TAINT_CPU_OUT_OF_SPEC 2 | |
61 | #define TAINT_FORCED_RMMOD 3 | |
62 | #define TAINT_MACHINE_CHECK 4 | |
63 | #define TAINT_BAD_PAGE 5 | |
64 | #define TAINT_USER 6 | |
65 | #define TAINT_DIE 7 | |
66 | #define TAINT_OVERRIDDEN_ACPI_TABLE 8 | |
67 | #define TAINT_WARN 9 | |
68 | #define TAINT_CRAP 10 | |
69 | #define TAINT_FIRMWARE_WORKAROUND 11 | |
70 | #define TAINT_OOT_MODULE 12 | |
71 | #define TAINT_UNSIGNED_MODULE 13 | |
72 | #define TAINT_SOFTLOCKUP 14 | |
73 | #define TAINT_LIVEPATCH 15 | |
74 | #define TAINT_AUX 16 | |
75 | #define TAINT_RANDSTRUCT 17 | |
2852ca7f DG |
76 | #define TAINT_TEST 18 |
77 | #define TAINT_FLAGS_COUNT 19 | |
f39650de AS |
78 | #define TAINT_FLAGS_MAX ((1UL << TAINT_FLAGS_COUNT) - 1) |
79 | ||
80 | struct taint_flag { | |
2f183c68 JN |
81 | char c_true; /* character printed when tainted */ |
82 | char c_false; /* character printed when not tainted */ | |
83 | bool module; /* also show as a per-module taint flag */ | |
84 | const char *desc; /* verbose description of the set taint flag */ | |
f39650de AS |
85 | }; |
86 | ||
87 | extern const struct taint_flag taint_flags[TAINT_FLAGS_COUNT]; | |
88 | ||
89 | enum lockdep_ok { | |
90 | LOCKDEP_STILL_OK, | |
91 | LOCKDEP_NOW_UNRELIABLE, | |
92 | }; | |
93 | ||
94 | extern const char *print_tainted(void); | |
2f183c68 | 95 | extern const char *print_tainted_verbose(void); |
f39650de AS |
96 | extern void add_taint(unsigned flag, enum lockdep_ok); |
97 | extern int test_taint(unsigned flag); | |
98 | extern unsigned long get_taint(void); | |
99 | ||
100 | #endif /* _LINUX_PANIC_H */ |