|
@@ -805,21 +805,11 @@ void arch_irq_work_raise(void)
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|
|
|
|
|
|
-static DEFINE_RAW_SPINLOCK(stop_lock);
|
|
|
|
-
|
|
|
|
/*
|
|
/*
|
|
* ipi_cpu_stop - handle IPI from smp_send_stop()
|
|
* ipi_cpu_stop - handle IPI from smp_send_stop()
|
|
*/
|
|
*/
|
|
static void ipi_cpu_stop(unsigned int cpu)
|
|
static void ipi_cpu_stop(unsigned int cpu)
|
|
{
|
|
{
|
|
- if (system_state == SYSTEM_BOOTING ||
|
|
|
|
- system_state == SYSTEM_RUNNING) {
|
|
|
|
- raw_spin_lock(&stop_lock);
|
|
|
|
- pr_crit("CPU%u: stopping\n", cpu);
|
|
|
|
- dump_stack();
|
|
|
|
- raw_spin_unlock(&stop_lock);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
set_cpu_online(cpu, false);
|
|
set_cpu_online(cpu, false);
|
|
|
|
|
|
local_irq_disable();
|
|
local_irq_disable();
|
|
@@ -914,6 +904,9 @@ void smp_send_stop(void)
|
|
cpumask_copy(&mask, cpu_online_mask);
|
|
cpumask_copy(&mask, cpu_online_mask);
|
|
cpumask_clear_cpu(smp_processor_id(), &mask);
|
|
cpumask_clear_cpu(smp_processor_id(), &mask);
|
|
|
|
|
|
|
|
+ if (system_state == SYSTEM_BOOTING ||
|
|
|
|
+ system_state == SYSTEM_RUNNING)
|
|
|
|
+ pr_crit("SMP: stopping secondary CPUs\n");
|
|
smp_cross_call(&mask, IPI_CPU_STOP);
|
|
smp_cross_call(&mask, IPI_CPU_STOP);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -923,7 +916,8 @@ void smp_send_stop(void)
|
|
udelay(1);
|
|
udelay(1);
|
|
|
|
|
|
if (num_online_cpus() > 1)
|
|
if (num_online_cpus() > 1)
|
|
- pr_warning("SMP: failed to stop secondary CPUs\n");
|
|
|
|
|
|
+ pr_warning("SMP: failed to stop secondary CPUs %*pbl\n",
|
|
|
|
+ cpumask_pr_args(cpu_online_mask));
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|