-
-/*
- * This function will be called by secondary cpus or by kexec cpu
- * if soft-reset is activated to stop some CPUs.
- */
-void crash_kexec_secondary(struct pt_regs *regs)
-{
- int cpu = smp_processor_id();
- unsigned long flags;
- int msecs = 5;
-
- local_irq_save(flags);
- /* Wait 5ms if the kexec CPU is not entered yet. */
- while (crashing_cpu < 0) {
- if (--msecs < 0) {
- /*
- * Either kdump image is not loaded or
- * kdump process is not started - Probably xmon
- * exited using 'x'(exit and recover) or
- * kexec_should_crash() failed for all running tasks.
- */
- cpu_clear(cpu, cpus_in_sr);
- local_irq_restore(flags);
- return;
- }
- mdelay(1);
- cpu_relax();
- }
- if (cpu == crashing_cpu) {
- /*
- * Panic CPU will enter this func only via soft-reset.
- * Wait until all secondary CPUs entered and
- * then start kexec boot.
- */
- crash_soft_reset_check(cpu);
- cpu_set(crashing_cpu, cpus_in_crash);
- if (ppc_md.kexec_cpu_down)
- ppc_md.kexec_cpu_down(1, 0);
- machine_kexec(kexec_crash_image);
- /* NOTREACHED */
- }
- crash_ipi_callback(regs);
-}
-