diff -r 68f40abeb9fe xen/arch/x86/cpu/mcheck/amd_k8.c --- a/xen/arch/x86/cpu/mcheck/amd_k8.c Tue Dec 09 17:04:58 2008 +0000 +++ b/xen/arch/x86/cpu/mcheck/amd_k8.c Wed Dec 10 11:01:29 2008 +0000 @@ -219,7 +219,7 @@ void k8_machine_check(struct cpu_user_re show_execution_state(regs); } x86_mcinfo_dump(mc_data); - panic("End of MCE. Use mcelog to decode above error codes.\n"); + mc_panic("End of MCE. Use mcelog to decode above error codes.\n"); } /* If Dom0 registered a machine check handler, which is only possible @@ -248,7 +248,7 @@ void k8_machine_check(struct cpu_user_re /* Dom0 is impacted. Since noone can't handle * this error, panic! */ x86_mcinfo_dump(mc_data); - panic("MCE occured in Dom0, which it can't handle\n"); + mc_panic("MCE occured in Dom0, which it can't handle\n"); /* UNREACHED */ } else { diff -r 68f40abeb9fe xen/arch/x86/cpu/mcheck/k7.c --- a/xen/arch/x86/cpu/mcheck/k7.c Tue Dec 09 17:04:58 2008 +0000 +++ b/xen/arch/x86/cpu/mcheck/k7.c Wed Dec 10 11:01:40 2008 +0000 @@ -57,9 +57,9 @@ static fastcall void k7_machine_check(st } if (recover&2) - panic ("CPU context corrupt"); + mc_panic ("CPU context corrupt"); if (recover&1) - panic ("Unable to continue"); + mc_panic ("Unable to continue"); printk (KERN_EMERG "Attempting to continue.\n"); mcgstl &= ~(1<<2); wrmsr (MSR_IA32_MCG_STATUS,mcgstl, mcgsth); diff -r 68f40abeb9fe xen/arch/x86/cpu/mcheck/mce.c --- a/xen/arch/x86/cpu/mcheck/mce.c Tue Dec 09 17:04:58 2008 +0000 +++ b/xen/arch/x86/cpu/mcheck/mce.c Wed Dec 10 11:05:57 2008 +0000 @@ -9,6 +9,7 @@ #include #include #include +#include #include #include @@ -574,3 +575,15 @@ long do_mca(XEN_GUEST_HANDLE(xen_mc_t) u return ret; } + +void mc_panic(char *s) +{ + console_start_sync(); + printk("Fatal machine check: %s\n", s); + printk("\n" + "****************************************\n" + "\n" + " The processor has reported a hardware error which cannot\n" + " be recovered from. Xen will now reboot the machine.\n"); + panic("HARDWARE ERROR"); +} diff -r 68f40abeb9fe xen/arch/x86/cpu/mcheck/mce.h --- a/xen/arch/x86/cpu/mcheck/mce.h Tue Dec 09 17:04:58 2008 +0000 +++ b/xen/arch/x86/cpu/mcheck/mce.h Wed Dec 10 11:01:03 2008 +0000 @@ -24,6 +24,7 @@ void x86_mcinfo_clear(struct mc_info *mi void x86_mcinfo_clear(struct mc_info *mi); int x86_mcinfo_add(struct mc_info *mi, void *mcinfo); void x86_mcinfo_dump(struct mc_info *mi); +void mc_panic(char *s); /* Global variables */ extern int mce_disabled; diff -r 68f40abeb9fe xen/arch/x86/cpu/mcheck/p4.c --- a/xen/arch/x86/cpu/mcheck/p4.c Tue Dec 09 17:04:58 2008 +0000 +++ b/xen/arch/x86/cpu/mcheck/p4.c Wed Dec 10 11:01:58 2008 +0000 @@ -204,9 +204,9 @@ static fastcall void intel_machine_check } if (recover & 2) - panic ("CPU context corrupt"); + mc_panic ("CPU context corrupt"); if (recover & 1) - panic ("Unable to continue"); + mc_panic ("Unable to continue"); printk(KERN_EMERG "Attempting to continue.\n"); /* diff -r 68f40abeb9fe xen/arch/x86/cpu/mcheck/p6.c --- a/xen/arch/x86/cpu/mcheck/p6.c Tue Dec 09 17:04:58 2008 +0000 +++ b/xen/arch/x86/cpu/mcheck/p6.c Wed Dec 10 11:02:05 2008 +0000 @@ -51,9 +51,9 @@ static fastcall void intel_machine_check } if (recover & 2) - panic ("CPU context corrupt"); + mc_panic ("CPU context corrupt"); if (recover & 1) - panic ("Unable to continue"); + mc_panic ("Unable to continue"); printk (KERN_EMERG "Attempting to continue.\n"); /*