From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45203) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a1cKe-0006qU-In for qemu-devel@nongnu.org; Wed, 25 Nov 2015 10:50:09 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1a1cKd-0006vN-L1 for qemu-devel@nongnu.org; Wed, 25 Nov 2015 10:50:08 -0500 Received: from mx1.redhat.com ([209.132.183.28]:53159) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a1cKd-0006vA-Dz for qemu-devel@nongnu.org; Wed, 25 Nov 2015 10:50:07 -0500 From: Eduardo Habkost Date: Wed, 25 Nov 2015 13:49:48 -0200 Message-Id: <1448466589-9407-3-git-send-email-ehabkost@redhat.com> In-Reply-To: <1448466589-9407-1-git-send-email-ehabkost@redhat.com> References: <1448466589-9407-1-git-send-email-ehabkost@redhat.com> Subject: [Qemu-devel] [PATCH 2/3] target-i386: kvm: Use env->mcg_cap when setting up MCE List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kvm@vger.kernel.org, Marcelo Tosatti , Borislav Petkov , ying.huang@intel.com, Paolo Bonzini , =?UTF-8?q?Andreas=20F=C3=A4rber?= , Richard Henderson When setting up MCE, instead of using the MCE_*_DEF macros directly, just filter the existing env->mcg_cap value. As env->mcg_cap is already initialized as MCE_CAP_DEF|MCE_BANKS_DEF at target-i386/cpu.c:mce_init(), this doesn't change any behavior. But it will allow us to change mce_init() in the future, to implement different defaults depending on CPU model, machine-type or command-line parameters. Signed-off-by: Eduardo Habkost --- target-i386/cpu.h | 2 ++ target-i386/kvm.c | 11 ++++------- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/target-i386/cpu.h b/target-i386/cpu.h index fc4a605..84edfd0 100644 --- a/target-i386/cpu.h +++ b/target-i386/cpu.h @@ -286,6 +286,8 @@ #define MCE_CAP_DEF (MCG_CTL_P|MCG_SER_P) #define MCE_BANKS_DEF 10 +#define MCG_CAP_BANKS_MASK 0xff + #define MCG_STATUS_RIPV (1ULL<<0) /* restart ip valid */ #define MCG_STATUS_EIPV (1ULL<<1) /* ip points to correct instruction */ #define MCG_STATUS_MCIP (1ULL<<2) /* machine check in progress */ diff --git a/target-i386/kvm.c b/target-i386/kvm.c index ee7bc69..d63a85b 100644 --- a/target-i386/kvm.c +++ b/target-i386/kvm.c @@ -784,21 +784,18 @@ int kvm_arch_init_vcpu(CPUState *cs) return ret; } - if (MCE_BANKS_DEF > banks) { + if ((env->mcg_cap & MCG_CAP_BANKS_MASK) > banks) { error_report("kvm: Unsupported MCE bank count: %d > %d\n", - MCE_BANKS_DEF, banks); + (int)(env->mcg_cap & MCG_CAP_BANKS_MASK), banks); return -ENOTSUP; } - mcg_cap &= MCE_CAP_DEF; - mcg_cap |= MCE_BANKS_DEF; - ret = kvm_vcpu_ioctl(cs, KVM_X86_SETUP_MCE, &mcg_cap); + env->mcg_cap &= mcg_cap | MCG_CAP_BANKS_MASK; + ret = kvm_vcpu_ioctl(cs, KVM_X86_SETUP_MCE, &env->mcg_cap); if (ret < 0) { fprintf(stderr, "KVM_X86_SETUP_MCE: %s", strerror(-ret)); return ret; } - - env->mcg_cap = mcg_cap; } qemu_add_vm_change_state_handler(cpu_update_state, env); -- 2.1.0