|
@@ -255,7 +255,7 @@ extern long (*panic_blink)(int state);
|
|
__printf(1, 2)
|
|
__printf(1, 2)
|
|
void panic(const char *fmt, ...)
|
|
void panic(const char *fmt, ...)
|
|
__noreturn __cold;
|
|
__noreturn __cold;
|
|
-void nmi_panic_self_stop(struct pt_regs *);
|
|
|
|
|
|
+void nmi_panic(struct pt_regs *regs, const char *msg);
|
|
extern void oops_enter(void);
|
|
extern void oops_enter(void);
|
|
extern void oops_exit(void);
|
|
extern void oops_exit(void);
|
|
void print_oops_end_marker(void);
|
|
void print_oops_end_marker(void);
|
|
@@ -456,25 +456,6 @@ extern bool crash_kexec_post_notifiers;
|
|
extern atomic_t panic_cpu;
|
|
extern atomic_t panic_cpu;
|
|
#define PANIC_CPU_INVALID -1
|
|
#define PANIC_CPU_INVALID -1
|
|
|
|
|
|
-/*
|
|
|
|
- * A variant of panic() called from NMI context. We return if we've already
|
|
|
|
- * panicked on this CPU. If another CPU already panicked, loop in
|
|
|
|
- * nmi_panic_self_stop() which can provide architecture dependent code such
|
|
|
|
- * as saving register state for crash dump.
|
|
|
|
- */
|
|
|
|
-#define nmi_panic(regs, fmt, ...) \
|
|
|
|
-do { \
|
|
|
|
- int old_cpu, cpu; \
|
|
|
|
- \
|
|
|
|
- cpu = raw_smp_processor_id(); \
|
|
|
|
- old_cpu = atomic_cmpxchg(&panic_cpu, PANIC_CPU_INVALID, cpu); \
|
|
|
|
- \
|
|
|
|
- if (old_cpu == PANIC_CPU_INVALID) \
|
|
|
|
- panic(fmt, ##__VA_ARGS__); \
|
|
|
|
- else if (old_cpu != cpu) \
|
|
|
|
- nmi_panic_self_stop(regs); \
|
|
|
|
-} while (0)
|
|
|
|
-
|
|
|
|
/*
|
|
/*
|
|
* Only to be used by arch init code. If the user over-wrote the default
|
|
* Only to be used by arch init code. If the user over-wrote the default
|
|
* CONFIG_PANIC_TIMEOUT, honor it.
|
|
* CONFIG_PANIC_TIMEOUT, honor it.
|