From mboxrd@z Thu Jan 1 00:00:00 1970 From: Huang Ying Subject: Re: [PATCH v3 12/21] kvm: x86: Drop MCE MSRs write back restrictions Date: Wed, 05 Jan 2011 14:42:31 +0800 Message-ID: <1294209751.22308.337.camel@yhuang-dev> References: <2c5efab40d7088353c5147c41fb13b44a944679c.1294129949.git.jan.kiszka@web.de> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit Cc: Avi Kivity , Marcelo Tosatti , "kvm@vger.kernel.org" , "qemu-devel@nongnu.org" To: Jan Kiszka Return-path: Received: from mga02.intel.com ([134.134.136.20]:41614 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750996Ab1AEGm4 (ORCPT ); Wed, 5 Jan 2011 01:42:56 -0500 In-Reply-To: <2c5efab40d7088353c5147c41fb13b44a944679c.1294129949.git.jan.kiszka@web.de> Sender: kvm-owner@vger.kernel.org List-ID: On Tue, 2011-01-04 at 16:32 +0800, Jan Kiszka wrote: > From: Jan Kiszka > > There is no need to restrict writing back MCE MSRs to reset or full > state updates as setting their values has no side effects. Sorry for late. The MCE MSRs contents is sticky for warm reset except MCG_STATUS, so their content should be kept. And the following sequence may set uncorrected value in MCE registers. savevm -> loadvm -> (OS clear MCE registers) -> reset -> (MCE registers has new (uncorrected) value) Best Regards, Huang Ying > Signed-off-by: Jan Kiszka > CC: Huang Ying > --- > target-i386/kvm.c | 12 ++++-------- > 1 files changed, 4 insertions(+), 8 deletions(-) > > diff --git a/target-i386/kvm.c b/target-i386/kvm.c > index 8267655..1789bff 100644 > --- a/target-i386/kvm.c > +++ b/target-i386/kvm.c > @@ -863,14 +863,10 @@ static int kvm_put_msrs(CPUState *env, int level) > if (env->mcg_cap) { > int i; > > - if (level == KVM_PUT_RESET_STATE) { > - kvm_msr_entry_set(&msrs[n++], MSR_MCG_STATUS, env->mcg_status); > - } else if (level == KVM_PUT_FULL_STATE) { > - kvm_msr_entry_set(&msrs[n++], MSR_MCG_STATUS, env->mcg_status); > - kvm_msr_entry_set(&msrs[n++], MSR_MCG_CTL, env->mcg_ctl); > - for (i = 0; i < (env->mcg_cap & 0xff) * 4; i++) { > - kvm_msr_entry_set(&msrs[n++], MSR_MC0_CTL + i, env->mce_banks[i]); > - } > + kvm_msr_entry_set(&msrs[n++], MSR_MCG_STATUS, env->mcg_status); > + kvm_msr_entry_set(&msrs[n++], MSR_MCG_CTL, env->mcg_ctl); > + for (i = 0; i < (env->mcg_cap & 0xff) * 4; i++) { > + kvm_msr_entry_set(&msrs[n++], MSR_MC0_CTL + i, env->mce_banks[i]); > } > } > #endif