|
@@ -2803,7 +2803,7 @@ static int vmx_get_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
|
|
msr_info->data = vcpu->arch.ia32_xss;
|
|
msr_info->data = vcpu->arch.ia32_xss;
|
|
break;
|
|
break;
|
|
case MSR_TSC_AUX:
|
|
case MSR_TSC_AUX:
|
|
- if (!guest_cpuid_has_rdtscp(vcpu))
|
|
|
|
|
|
+ if (!guest_cpuid_has_rdtscp(vcpu) && !msr_info->host_initiated)
|
|
return 1;
|
|
return 1;
|
|
/* Otherwise falls through */
|
|
/* Otherwise falls through */
|
|
default:
|
|
default:
|
|
@@ -2909,7 +2909,7 @@ static int vmx_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
|
|
clear_atomic_switch_msr(vmx, MSR_IA32_XSS);
|
|
clear_atomic_switch_msr(vmx, MSR_IA32_XSS);
|
|
break;
|
|
break;
|
|
case MSR_TSC_AUX:
|
|
case MSR_TSC_AUX:
|
|
- if (!guest_cpuid_has_rdtscp(vcpu))
|
|
|
|
|
|
+ if (!guest_cpuid_has_rdtscp(vcpu) && !msr_info->host_initiated)
|
|
return 1;
|
|
return 1;
|
|
/* Check reserved bit, higher 32 bits should be zero */
|
|
/* Check reserved bit, higher 32 bits should be zero */
|
|
if ((data >> 32) != 0)
|
|
if ((data >> 32) != 0)
|