[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-3.2-testing] x86: On CPU shutdown, clear pending FPU exceptions.
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1204734122 0 # Node ID 75dc8f774858482ca01a1e5d12a2566528e575e0 # Parent 9e22366fb92a3c3fef9adbe85662653ca5fd4e1d x86: On CPU shutdown, clear pending FPU exceptions. I've seen at least one BIOS which fails warm reboot if FPU exceptions are pending. Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx> xen-unstable changeset: 17181:017927162815139a0b31f7ce5705e9d8bc886945 xen-unstable date: Tue Mar 04 10:33:50 2008 +0000 --- xen/arch/x86/smp.c | 18 ++++++++++++++---- 1 files changed, 14 insertions(+), 4 deletions(-) diff -r 9e22366fb92a -r 75dc8f774858 xen/arch/x86/smp.c --- a/xen/arch/x86/smp.c Wed Mar 05 16:21:36 2008 +0000 +++ b/xen/arch/x86/smp.c Wed Mar 05 16:22:02 2008 +0000 @@ -306,15 +306,26 @@ int on_selected_cpus( return 0; } -static void stop_this_cpu (void *dummy) +static void __stop_this_cpu(void) { ASSERT(!local_irq_is_enabled()); disable_local_APIC(); + hvm_cpu_down(); + /* + * Clear FPU, zapping any pending exceptions. Needed for warm reset with + * some BIOSes. + */ + clts(); + asm volatile ( "fninit" ); +} + +static void stop_this_cpu(void *dummy) +{ + __stop_this_cpu(); cpu_clear(smp_processor_id(), cpu_online_map); - for ( ; ; ) halt(); } @@ -334,9 +345,8 @@ void smp_send_stop(void) mdelay(1); local_irq_disable(); - disable_local_APIC(); + __stop_this_cpu(); disable_IO_APIC(); - hvm_cpu_down(); local_irq_enable(); } _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |