diff options
author | kaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk> | 2006-04-27 09:56:21 +0100 |
---|---|---|
committer | kaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk> | 2006-04-27 09:56:21 +0100 |
commit | 44d7cc5f5d76daf7a9c7b956e474dff411954980 (patch) | |
tree | a7a83b61761c9c42fb6f80797a7244cc2efee3ff /xen/arch/x86/shutdown.c | |
parent | 4025e86c1a51452c234a43d1661abb6ed993ce36 (diff) | |
download | xen-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.c | 4 |
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(); } |