101 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#ifndef _LINUX_PANIC_H3#define _LINUX_PANIC_H4 5#include <linux/compiler_attributes.h>6#include <linux/types.h>7 8struct pt_regs;9 10extern long (*panic_blink)(int state);11__printf(1, 2)12void panic(const char *fmt, ...) HWJS_SUSPENDS __noreturn __cold;13void nmi_panic(struct pt_regs *regs, const char *msg) HWJS_SUSPENDS;14void check_panic_on_warn(const char *origin) HWJS_SUSPENDS;15extern void oops_enter(void);16extern void oops_exit(void);17extern bool oops_may_print(void);18 19extern bool panic_triggering_all_cpu_backtrace;20extern int panic_timeout;21extern unsigned long panic_print;22extern int panic_on_oops;23extern int panic_on_unrecovered_nmi;24extern int panic_on_io_nmi;25extern int panic_on_warn;26 27extern unsigned long panic_on_taint;28extern bool panic_on_taint_nousertaint;29 30extern int sysctl_panic_on_rcu_stall;31extern int sysctl_max_rcu_stall_to_panic;32extern int sysctl_panic_on_stackoverflow;33 34extern bool crash_kexec_post_notifiers;35 36extern void __stack_chk_fail(void);37void abort(void);38 39/*40 * panic_cpu is used for synchronizing panic() and crash_kexec() execution. It41 * holds a CPU number which is executing panic() currently. A value of42 * PANIC_CPU_INVALID means no CPU has entered panic() or crash_kexec().43 */44extern atomic_t panic_cpu;45#define PANIC_CPU_INVALID -146 47/*48 * Only to be used by arch init code. If the user over-wrote the default49 * CONFIG_PANIC_TIMEOUT, honor it.50 */51static 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 059#define TAINT_FORCED_MODULE 160#define TAINT_CPU_OUT_OF_SPEC 261#define TAINT_FORCED_RMMOD 362#define TAINT_MACHINE_CHECK 463#define TAINT_BAD_PAGE 564#define TAINT_USER 665#define TAINT_DIE 766#define TAINT_OVERRIDDEN_ACPI_TABLE 867#define TAINT_WARN 968#define TAINT_CRAP 1069#define TAINT_FIRMWARE_WORKAROUND 1170#define TAINT_OOT_MODULE 1271#define TAINT_UNSIGNED_MODULE 1372#define TAINT_SOFTLOCKUP 1473#define TAINT_LIVEPATCH 1574#define TAINT_AUX 1675#define TAINT_RANDSTRUCT 1776#define TAINT_TEST 1877#define TAINT_FLAGS_COUNT 1978#define TAINT_FLAGS_MAX ((1UL << TAINT_FLAGS_COUNT) - 1)79 80struct taint_flag {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 */85};86 87extern const struct taint_flag taint_flags[TAINT_FLAGS_COUNT];88 89enum lockdep_ok {90 LOCKDEP_STILL_OK,91 LOCKDEP_NOW_UNRELIABLE,92};93 94extern const char *print_tainted(void);95extern const char *print_tainted_verbose(void);96extern void add_taint(unsigned flag, enum lockdep_ok) HWJS_SUSPENDS;97extern int test_taint(unsigned flag);98extern unsigned long get_taint(void);99 100#endif /* _LINUX_PANIC_H */101