aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/kvmclock.c
diff options
context:
space:
mode:
authorPeng Hao <peng.hao2@zte.com.cn>2018-07-14 23:28:29 +0800
committerPaolo Bonzini <pbonzini@redhat.com>2018-07-18 11:43:17 +0200
commite10f7805032365cc11c739a97f226ebb48aee042 (patch)
treefe7cf33daa3ef5a8fc7ae2a1ae64a417686c9860 /arch/x86/kernel/kvmclock.c
parentKVM: VMX: Mark VMXArea with revision_id of physical CPU even when eVMCS enabled (diff)
downloadlinux-dev-e10f7805032365cc11c739a97f226ebb48aee042.tar.xz
linux-dev-e10f7805032365cc11c739a97f226ebb48aee042.zip
kvmclock: fix TSC calibration for nested guests
Inside a nested guest, access to hardware can be slow enough that tsc_read_refs always return ULLONG_MAX, causing tsc_refine_calibration_work to be called periodically and the nested guest to spend a lot of time reading the ACPI timer. However, if the TSC frequency is available from the pvclock page, we can just set X86_FEATURE_TSC_KNOWN_FREQ and avoid the recalibration. 'refine' operation. Suggested-by: Peter Zijlstra <peterz@infradead.org> Signed-off-by: Peng Hao <peng.hao2@zte.com.cn> [Commit message rewritten. - Paolo] Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to '')
-rw-r--r--arch/x86/kernel/kvmclock.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c
index d79a18b4cf9d..4c53d12ca933 100644
--- a/arch/x86/kernel/kvmclock.c
+++ b/arch/x86/kernel/kvmclock.c
@@ -138,6 +138,7 @@ static unsigned long kvm_get_tsc_khz(void)
src = &hv_clock[cpu].pvti;
tsc_khz = pvclock_tsc_khz(src);
put_cpu();
+ setup_force_cpu_cap(X86_FEATURE_TSC_KNOWN_FREQ);
return tsc_khz;
}