From: Kai Huang Subject: [PATCH] x86/MCE: bypass uninitialized vcpu in vMCE injection Date: Wed, 7 May 2014 15:29:18 +0800 Message-ID: <1399447758-11798-1-git-send-email-kai.huang@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xen.org Cc: kevin.tian@intel.com, jinsong.liu@alibaba-inc.com, Kai Huang , dongxiao.xu@intel.com, JBeulich@suse.com, yang.z.zhang@intel.com List-Id: xen-devel@lists.xenproject.org Dom0 may bring up less number of vCPUs than xen hypervisor actually created for it, and in this case, on Intel platform, vMCE injection to dom0 will fail due to injecting vMCE to uninitialized vcpu, and cause dom0 crash. Signed-off-by: Kai Huang --- xen/arch/x86/cpu/mcheck/vmce.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/xen/arch/x86/cpu/mcheck/vmce.c b/xen/arch/x86/cpu/mcheck/vmce.c index c83375e..72fe924 100644 --- a/xen/arch/x86/cpu/mcheck/vmce.c +++ b/xen/arch/x86/cpu/mcheck/vmce.c @@ -356,6 +356,10 @@ int inject_vmce(struct domain *d, int vcpu) if ( vcpu != VMCE_INJECT_BROADCAST && vcpu != v->vcpu_id ) continue; + /* In case of broadcasting, don't inject to uninitialized VCPU */ + if ( vcpu == VMCE_INJECT_BROADCAST && !v->is_initialised ) + continue; + if ( (has_hvm_container_domain(d) || guest_has_trap_callback(d, v->vcpu_id, TRAP_machine_check)) && !test_and_set_bool(v->mce_pending) ) -- 1.9.1