diff --git a/xen/arch/x86/cpu/mcheck/mce.c b/xen/arch/x86/cpu/mcheck/mce.c index a81952c831..548841121b 100644 --- a/xen/arch/x86/cpu/mcheck/mce.c +++ b/xen/arch/x86/cpu/mcheck/mce.c @@ -72,8 +72,9 @@ custom_param("mce_verbosity", mce_set_verbosity); /* Handle unconfigured int18 (should never happen) */ static void unexpected_machine_check(struct cpu_user_regs *regs, long error_code) { - printk(XENLOG_ERR "CPU#%d: Unexpected int18 (Machine Check).\n", - smp_processor_id()); + console_force_unlock(); + printk("Unexpected Machine Check Exception"); + fatal_trap(TRAP_machine_check, regs); } diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index 46cb48e0a8..fcd5b006fe 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -561,7 +561,8 @@ static void do_trap(struct cpu_user_regs *regs, int use_error_code) } if ( ((trapnr == TRAP_copro_error) || (trapnr == TRAP_simd_error)) && - has_hvm_container_vcpu(curr) && curr->arch.hvm_vcpu.fpu_exception_callback ) + system_state >= SYS_STATE_active && has_hvm_container_vcpu(curr) && + curr->arch.hvm_vcpu.fpu_exception_callback ) { curr->arch.hvm_vcpu.fpu_exception_callback( curr->arch.hvm_vcpu.fpu_exception_callback_arg, regs);