aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeng Hao <peng.hao2@zte.com.cn>2018-07-14 23:28:29 +0800
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2018-08-24 13:09:18 +0200
commit114a5608cde4197870d4f217c69f27ea20f9350c (patch)
treeb0dea0b7d50ccbafb1175111e82cabc5456df3ff
parent1b1968d8f6ae913f5c0ec55893d324195d234fbe (diff)
downloadlinux-114a5608cde4197870d4f217c69f27ea20f9350c.tar.gz
kvmclock: fix TSC calibration for nested guests
[ Upstream commit e10f7805032365cc11c739a97f226ebb48aee042 ] 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> Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-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 5b609e28ce3f4..48703d430a2fb 100644
--- a/arch/x86/kernel/kvmclock.c
+++ b/arch/x86/kernel/kvmclock.c
@@ -143,6 +143,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;
}