kvm: x86: Update tsc multiplier on change.
commit 2680d6da455b636dd006636780c0f235c6561d70 upstream.
vmx.c writes the TSC_MULTIPLIER field in vmx_vcpu_load, but only when a
vcpu has migrated physical cpus. Record the last value written and
update in vmx_vcpu_load on any change, otherwise a cpu migration must
occur for TSC frequency scaling to take effect.
Fixes: ff2c3a1803
Signed-off-by: Owen Hofmann <osh@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
ce16d9cf04
commit
8cedd1c079
1 changed files with 9 additions and 5 deletions
|
@ -595,6 +595,8 @@ struct vcpu_vmx {
|
||||||
/* Support for PML */
|
/* Support for PML */
|
||||||
#define PML_ENTITY_NUM 512
|
#define PML_ENTITY_NUM 512
|
||||||
struct page *pml_pg;
|
struct page *pml_pg;
|
||||||
|
|
||||||
|
u64 current_tsc_ratio;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum segment_cache_field {
|
enum segment_cache_field {
|
||||||
|
@ -2062,14 +2064,16 @@ static void vmx_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
|
||||||
rdmsrl(MSR_IA32_SYSENTER_ESP, sysenter_esp);
|
rdmsrl(MSR_IA32_SYSENTER_ESP, sysenter_esp);
|
||||||
vmcs_writel(HOST_IA32_SYSENTER_ESP, sysenter_esp); /* 22.2.3 */
|
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;
|
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);
|
vmx_vcpu_pi_load(vcpu, cpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue