|
@@ -159,10 +159,10 @@ asmlinkage void smp_reboot_interrupt(void)
|
|
|
irq_exit();
|
|
|
}
|
|
|
|
|
|
-static void native_smp_send_stop(void)
|
|
|
+static void native_stop_other_cpus(int wait)
|
|
|
{
|
|
|
unsigned long flags;
|
|
|
- unsigned long wait;
|
|
|
+ unsigned long timeout;
|
|
|
|
|
|
if (reboot_force)
|
|
|
return;
|
|
@@ -179,9 +179,12 @@ static void native_smp_send_stop(void)
|
|
|
if (num_online_cpus() > 1) {
|
|
|
apic->send_IPI_allbutself(REBOOT_VECTOR);
|
|
|
|
|
|
- /* Don't wait longer than a second */
|
|
|
- wait = USEC_PER_SEC;
|
|
|
- while (num_online_cpus() > 1 && wait--)
|
|
|
+ /*
|
|
|
+ * Don't wait longer than a second if the caller
|
|
|
+ * didn't ask us to wait.
|
|
|
+ */
|
|
|
+ timeout = USEC_PER_SEC;
|
|
|
+ while (num_online_cpus() > 1 && (wait || timeout--))
|
|
|
udelay(1);
|
|
|
}
|
|
|
|
|
@@ -227,7 +230,7 @@ struct smp_ops smp_ops = {
|
|
|
.smp_prepare_cpus = native_smp_prepare_cpus,
|
|
|
.smp_cpus_done = native_smp_cpus_done,
|
|
|
|
|
|
- .smp_send_stop = native_smp_send_stop,
|
|
|
+ .stop_other_cpus = native_stop_other_cpus,
|
|
|
.smp_send_reschedule = native_smp_send_reschedule,
|
|
|
|
|
|
.cpu_up = native_cpu_up,
|