aboutsummaryrefslogtreecommitdiffstats
path: root/xen/arch/x86/shutdown.c
diff options
context:
space:
mode:
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>2006-04-27 09:56:21 +0100
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>2006-04-27 09:56:21 +0100
commit44d7cc5f5d76daf7a9c7b956e474dff411954980 (patch)
treea7a83b61761c9c42fb6f80797a7244cc2efee3ff /xen/arch/x86/shutdown.c
parent4025e86c1a51452c234a43d1661abb6ed993ce36 (diff)
downloadxen-44d7cc5f5d76daf7a9c7b956e474dff411954980.tar.gz
xen-44d7cc5f5d76daf7a9c7b956e474dff411954980.tar.bz2
xen-44d7cc5f5d76daf7a9c7b956e474dff411954980.zip
Occasionally large smp machines fail to reboot properly and die under
an IPI storm of smp_call_function() to machine_reboot. Only the boot processor needs to run machine_restart, so send an IPI to CPU0. Original patch by: Ryan Harper <ryanh@us.ibm.com> Signed-off-by: Keir Fraser <keir@xensource.com>
Diffstat (limited to 'xen/arch/x86/shutdown.c')
-rw-r--r--xen/arch/x86/shutdown.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/xen/arch/x86/shutdown.c b/xen/arch/x86/shutdown.c
index 97b41a94ca..bf9015280a 100644
--- a/xen/arch/x86/shutdown.c
+++ b/xen/arch/x86/shutdown.c
@@ -218,7 +218,9 @@ void machine_restart(char * __unused)
/* Ensure we are the boot CPU. */
if ( GET_APIC_ID(apic_read(APIC_ID)) != boot_cpu_physical_apicid )
{
- smp_call_function((void *)machine_restart, NULL, 1, 0);
+ /* Send IPI to the boot CPU (logical cpu 0). */
+ on_selected_cpus(cpumask_of_cpu(0), (void *)machine_restart,
+ NULL, 1, 0);
for ( ; ; )
safe_halt();
}