diff options
| -rw-r--r-- | arch/x86/kvm/x86.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 3b51c8659741..34c85aa2e2d1 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c | |||
| @@ -2006,10 +2006,12 @@ static void kvmclock_sync_fn(struct work_struct *work) | |||
| 2006 | KVMCLOCK_SYNC_PERIOD); | 2006 | KVMCLOCK_SYNC_PERIOD); |
| 2007 | } | 2007 | } |
| 2008 | 2008 | ||
| 2009 | static int set_msr_mce(struct kvm_vcpu *vcpu, u32 msr, u64 data) | 2009 | static int set_msr_mce(struct kvm_vcpu *vcpu, struct msr_data *msr_info) |
| 2010 | { | 2010 | { |
| 2011 | u64 mcg_cap = vcpu->arch.mcg_cap; | 2011 | u64 mcg_cap = vcpu->arch.mcg_cap; |
| 2012 | unsigned bank_num = mcg_cap & 0xff; | 2012 | unsigned bank_num = mcg_cap & 0xff; |
| 2013 | u32 msr = msr_info->index; | ||
| 2014 | u64 data = msr_info->data; | ||
| 2013 | 2015 | ||
| 2014 | switch (msr) { | 2016 | switch (msr) { |
| 2015 | case MSR_IA32_MCG_STATUS: | 2017 | case MSR_IA32_MCG_STATUS: |
| @@ -2034,6 +2036,9 @@ static int set_msr_mce(struct kvm_vcpu *vcpu, u32 msr, u64 data) | |||
| 2034 | if ((offset & 0x3) == 0 && | 2036 | if ((offset & 0x3) == 0 && |
| 2035 | data != 0 && (data | (1 << 10)) != ~(u64)0) | 2037 | data != 0 && (data | (1 << 10)) != ~(u64)0) |
| 2036 | return -1; | 2038 | return -1; |
| 2039 | if (!msr_info->host_initiated && | ||
| 2040 | (offset & 0x3) == 1 && data != 0) | ||
| 2041 | return -1; | ||
| 2037 | vcpu->arch.mce_banks[offset] = data; | 2042 | vcpu->arch.mce_banks[offset] = data; |
| 2038 | break; | 2043 | break; |
| 2039 | } | 2044 | } |
| @@ -2283,7 +2288,7 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info) | |||
| 2283 | case MSR_IA32_MCG_CTL: | 2288 | case MSR_IA32_MCG_CTL: |
| 2284 | case MSR_IA32_MCG_STATUS: | 2289 | case MSR_IA32_MCG_STATUS: |
| 2285 | case MSR_IA32_MC0_CTL ... MSR_IA32_MCx_CTL(KVM_MAX_MCE_BANKS) - 1: | 2290 | case MSR_IA32_MC0_CTL ... MSR_IA32_MCx_CTL(KVM_MAX_MCE_BANKS) - 1: |
| 2286 | return set_msr_mce(vcpu, msr, data); | 2291 | return set_msr_mce(vcpu, msr_info); |
| 2287 | 2292 | ||
| 2288 | case MSR_K7_PERFCTR0 ... MSR_K7_PERFCTR3: | 2293 | case MSR_K7_PERFCTR0 ... MSR_K7_PERFCTR3: |
| 2289 | case MSR_P6_PERFCTR0 ... MSR_P6_PERFCTR1: | 2294 | case MSR_P6_PERFCTR0 ... MSR_P6_PERFCTR1: |
