From patchwork Tue Oct 19 02:04:47 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hidetoshi Seto X-Patchwork-Id: 68263 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 59D3BB70E0 for ; Tue, 19 Oct 2010 13:08:36 +1100 (EST) Received: from localhost ([127.0.0.1]:42031 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1P81cv-0001m8-Of for incoming@patchwork.ozlabs.org; Mon, 18 Oct 2010 22:08:33 -0400 Received: from [140.186.70.92] (port=44092 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1P81Zg-0000QB-D3 for qemu-devel@nongnu.org; Mon, 18 Oct 2010 22:05:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1P81Zf-0008HN-98 for qemu-devel@nongnu.org; Mon, 18 Oct 2010 22:05:12 -0400 Received: from fgwmail7.fujitsu.co.jp ([192.51.44.37]:54223) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1P81Ze-0008HG-Ky for qemu-devel@nongnu.org; Mon, 18 Oct 2010 22:05:11 -0400 Received: from m4.gw.fujitsu.co.jp ([10.0.50.74]) by fgwmail7.fujitsu.co.jp (Fujitsu Gateway) with ESMTP id o9J257pN028834 for (envelope-from seto.hidetoshi@jp.fujitsu.com); Tue, 19 Oct 2010 11:05:07 +0900 Received: from smail (m4 [127.0.0.1]) by outgoing.m4.gw.fujitsu.co.jp (Postfix) with ESMTP id 5276C45DE6E for ; Tue, 19 Oct 2010 11:05:06 +0900 (JST) Received: from s4.gw.fujitsu.co.jp (s4.gw.fujitsu.co.jp [10.0.50.94]) by m4.gw.fujitsu.co.jp (Postfix) with ESMTP id CD89545DE79 for ; Tue, 19 Oct 2010 11:05:05 +0900 (JST) Received: from s4.gw.fujitsu.co.jp (localhost.localdomain [127.0.0.1]) by s4.gw.fujitsu.co.jp (Postfix) with ESMTP id 3A089EF8002 for ; Tue, 19 Oct 2010 11:05:05 +0900 (JST) Received: from ml13.s.css.fujitsu.com (ml13.s.css.fujitsu.com [10.249.87.103]) by s4.gw.fujitsu.co.jp (Postfix) with ESMTP id 9CBEC1DB803B for ; Tue, 19 Oct 2010 11:05:04 +0900 (JST) Received: from ml13.css.fujitsu.com (ml13 [127.0.0.1]) by ml13.s.css.fujitsu.com (Postfix) with ESMTP id 4FE94FD0002; Tue, 19 Oct 2010 11:05:04 +0900 (JST) Received: from [127.0.0.1] (unknown [10.124.101.108]) by ml13.s.css.fujitsu.com (Postfix) with ESMTP id 965E1FD0003; Tue, 19 Oct 2010 11:05:02 +0900 (JST) X-SecurityPolicyCheck-FJ: OK by FujitsuOutboundMailChecker v1.3.1 Received: from FMVDA2A041[10.124.101.108] by FMVDA2A041 (FujitsuOutboundMailChecker v1.3.1/9992[10.124.101.108]); Tue, 19 Oct 2010 11:04:54 +0900 (JST) Message-ID: <4CBCFCBF.1060509@jp.fujitsu.com> Date: Tue, 19 Oct 2010 11:04:47 +0900 From: Hidetoshi Seto User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; ja; rv:1.9.2.9) Gecko/20100915 Thunderbird/3.1.4 MIME-Version: 1.0 To: Marcelo Tosatti References: <4CB6C580.1090804@np.css.fujitsu.com> <20101015010649.GB32272@amt.cnet> <4CB7B3C5.7070102@jp.fujitsu.com> <20101015133012.GA16246@amt.cnet> <4CBCFB71.3070103@jp.fujitsu.com> In-Reply-To: <4CBCFB71.3070103@jp.fujitsu.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6, seldom 2.4 (older, 4) Cc: KVM list , Dean Nelson , "qemu-devel@nongnu.org" , Avi Kivity , Huang Ying , Jin Dongming Subject: [Qemu-devel] [PATCH uq/master 2/2] kvm, x86: broadcast mce depending on the cpu version X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org There is no reason why SRAO event received by the main thread is the only one that being broadcasted. According to the x86 ASDM vol.3A 15.10.4.1, MCE signal is broadcast on processor version 06H_EH or later. This change is required to handle SRAR in smp guests. Signed-off-by: Hidetoshi Seto --- target-i386/kvm.c | 28 ++++++++++++++++++++++++---- 1 files changed, 24 insertions(+), 4 deletions(-) diff --git a/target-i386/kvm.c b/target-i386/kvm.c index 98a0505..e97fbd3 100644 --- a/target-i386/kvm.c +++ b/target-i386/kvm.c @@ -1631,6 +1631,28 @@ static void hardware_memory_error(void) exit(1); } +#ifdef KVM_CAP_MCE +static void kvm_mce_broadcast_rest(CPUState *env) +{ + CPUState *cenv; + int family, model, cpuver = env->cpuid_version; + + family = (cpuver >> 8) & 0xf; + model = ((cpuver >> 12) & 0xf0) + ((cpuver >> 4) & 0xf); + + /* Broadcast MCA signal for processor version 06H_EH and above */ + if ((family == 6 && model >= 14) || family > 6) { + if (cenv == env) { + continue; + } + for (cenv = first_cpu; cenv != NULL; cenv = cenv->next_cpu) { + kvm_inject_x86_mce(cenv, 1, MCI_STATUS_VAL | MCI_STATUS_UC, + MCG_STATUS_MCIP | MCG_STATUS_RIPV, 0, 0, 1); + } + } +} +#endif + int kvm_on_sigbus_vcpu(CPUState *env, int code, void *addr) { #if defined(KVM_CAP_MCE) @@ -1688,6 +1710,7 @@ int kvm_on_sigbus_vcpu(CPUState *env, int code, void *addr) fprintf(stderr, "kvm_set_mce: %s\n", strerror(errno)); abort(); } + kvm_mce_broadcast_rest(env); } else #endif { @@ -1726,10 +1749,7 @@ int kvm_on_sigbus(int code, void *addr) kvm_inject_x86_mce(first_cpu, 9, status, MCG_STATUS_MCIP | MCG_STATUS_RIPV, paddr, (MCM_ADDR_PHYS << 6) | 0xc, 1); - for (cenv = first_cpu->next_cpu; cenv != NULL; cenv = cenv->next_cpu) { - kvm_inject_x86_mce(cenv, 1, MCI_STATUS_VAL | MCI_STATUS_UC, - MCG_STATUS_MCIP | MCG_STATUS_RIPV, 0, 0, 1); - } + kvm_mce_broadcast_rest(first_cpu); } else #endif {