void kexec_crash(void) { int pos; pos = (test_bit(KEXEC_FLAG_CRASH_POS, &kexec_flags) != 0); if ( !test_bit(KEXEC_IMAGE_CRASH_BASE + pos, &kexec_flags) ) return; kexec_common_shutdown(); kexec_crash_save_cpu(); machine_crash_shutdown(); machine_kexec(&kexec_image[KEXEC_IMAGE_CRASH_BASE + pos]); BUG(); }
static int crash_nmi_callback(struct cpu_user_regs *regs, int cpu) { /* Don't do anything if this handler is invoked on crashing cpu. * Otherwise, system will completely hang. Crashing cpu can get * an NMI if system was initially booted with nmi_watchdog parameter. */ if ( cpu == crashing_cpu ) return 1; local_irq_disable(); kexec_crash_save_cpu(); __stop_this_cpu(); atomic_dec(&waiting_for_crash_ipi); for ( ; ; ) halt(); return 1; }