|
@@ -596,6 +596,8 @@ struct vcpu_vmx {
|
|
|
/* Support for PML */
|
|
|
#define PML_ENTITY_NUM 512
|
|
|
struct page *pml_pg;
|
|
|
+
|
|
|
+ u64 current_tsc_ratio;
|
|
|
};
|
|
|
|
|
|
enum segment_cache_field {
|
|
@@ -2127,14 +2129,16 @@ static void vmx_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
|
|
|
rdmsrl(MSR_IA32_SYSENTER_ESP, sysenter_esp);
|
|
|
vmcs_writel(HOST_IA32_SYSENTER_ESP, sysenter_esp); /* 22.2.3 */
|
|
|
|
|
|
- /* Setup TSC multiplier */
|
|
|
- if (cpu_has_vmx_tsc_scaling())
|
|
|
- vmcs_write64(TSC_MULTIPLIER,
|
|
|
- vcpu->arch.tsc_scaling_ratio);
|
|
|
-
|
|
|
vmx->loaded_vmcs->cpu = cpu;
|
|
|
}
|
|
|
|
|
|
+ /* Setup TSC multiplier */
|
|
|
+ if (kvm_has_tsc_control &&
|
|
|
+ vmx->current_tsc_ratio != vcpu->arch.tsc_scaling_ratio) {
|
|
|
+ vmx->current_tsc_ratio = vcpu->arch.tsc_scaling_ratio;
|
|
|
+ vmcs_write64(TSC_MULTIPLIER, vmx->current_tsc_ratio);
|
|
|
+ }
|
|
|
+
|
|
|
vmx_vcpu_pi_load(vcpu, cpu);
|
|
|
}
|
|
|
|