From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [PATCH] [2/2] KVM: Add VT-x machine check support Date: Thu, 04 Jun 2009 14:48:17 +0300 Message-ID: <4A27B481.5020003@redhat.com> References: <20090604112.650907584@firstfloor.org> <20090604111205.C47C31D0282@basil.firstfloor.org> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: ying.huang@intel.com, kvm@vger.kernel.org, linux-kernel@vger.kernel.org To: Andi Kleen Return-path: Received: from mx2.redhat.com ([66.187.237.31]:33097 "EHLO mx2.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751512AbZFDLsX (ORCPT ); Thu, 4 Jun 2009 07:48:23 -0400 In-Reply-To: <20090604111205.C47C31D0282@basil.firstfloor.org> Sender: kvm-owner@vger.kernel.org List-ID: Andi Kleen wrote: > [Avi could you please still consider this patch for your 2.6.31 patchqueue? > It's fairly simple, but important to handle memory errors in guests] > Oh yes, and it'll be needed for -stable. IIUC, right now a machine check is trapped by the guest, so the guest is killed instead of the host? > +/* > + * Trigger machine check on the host. We assume all the MSRs are already set up > + * by the CPU and that we still run on the same CPU as the MCE occurred on. > + * We pass a fake environment to the machine check handler because we want > + * the guest to be always treated like user space, no matter what context > + * it used internally. > + */ > This assumption is incorrect. This code is executed after preemption has been enabled, and we may have even slept before reaching it. NMI suffers from the same issue, see vmx_complete_interrupts(). You could handle it the same way. > @@ -3150,6 +3171,7 @@ > [EXIT_REASON_WBINVD] = handle_wbinvd, > [EXIT_REASON_TASK_SWITCH] = handle_task_switch, > [EXIT_REASON_EPT_VIOLATION] = handle_ept_violation, > + [EXIT_REASON_MACHINE_CHECK] = handle_machine_check, > }; > > static const int kvm_vmx_max_exit_handlers = > We get both an explicit EXIT_REASON and an exception? -- error compiling committee.c: too many arguments to function