|
|
|
|
|
|
|
|
|
|
xen-changelog
[Xen-changelog] [xen-unstable] x86: On CPU shutdown, clear pending FPU e
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1204626830 0
# Node ID 017927162815139a0b31f7ce5705e9d8bc886945
# Parent 771c7124bf3869493023b78450da71a236debddf
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/arch/x86/smp.c | 18 ++++++++++++++----
1 files changed, 14 insertions(+), 4 deletions(-)
diff -r 771c7124bf38 -r 017927162815 xen/arch/x86/smp.c
--- a/xen/arch/x86/smp.c Tue Mar 04 10:32:13 2008 +0000
+++ b/xen/arch/x86/smp.c Tue Mar 04 10:33:50 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
|
<Prev in Thread] |
Current Thread |
[Next in Thread> |
- [Xen-changelog] [xen-unstable] x86: On CPU shutdown, clear pending FPU exceptions.,
Xen patchbot-unstable <=
|
|
|
|
|