aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/kvmclock.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/kvmclock.c')
-rw-r--r--arch/x86/kernel/kvmclock.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c
index e811d4d1c824..904494b924c1 100644
--- a/arch/x86/kernel/kvmclock.c
+++ b/arch/x86/kernel/kvmclock.c
@@ -104,12 +104,8 @@ static u64 kvm_sched_clock_read(void)
104 104
105static inline void kvm_sched_clock_init(bool stable) 105static inline void kvm_sched_clock_init(bool stable)
106{ 106{
107 if (!stable) { 107 if (!stable)
108 pv_ops.time.sched_clock = kvm_clock_read;
109 clear_sched_clock_stable(); 108 clear_sched_clock_stable();
110 return;
111 }
112
113 kvm_sched_clock_offset = kvm_clock_read(); 109 kvm_sched_clock_offset = kvm_clock_read();
114 pv_ops.time.sched_clock = kvm_sched_clock_read; 110 pv_ops.time.sched_clock = kvm_sched_clock_read;
115 111
@@ -355,6 +351,20 @@ void __init kvmclock_init(void)
355 machine_ops.crash_shutdown = kvm_crash_shutdown; 351 machine_ops.crash_shutdown = kvm_crash_shutdown;
356#endif 352#endif
357 kvm_get_preset_lpj(); 353 kvm_get_preset_lpj();
354
355 /*
356 * X86_FEATURE_NONSTOP_TSC is TSC runs at constant rate
357 * with P/T states and does not stop in deep C-states.
358 *
359 * Invariant TSC exposed by host means kvmclock is not necessary:
360 * can use TSC as clocksource.
361 *
362 */
363 if (boot_cpu_has(X86_FEATURE_CONSTANT_TSC) &&
364 boot_cpu_has(X86_FEATURE_NONSTOP_TSC) &&
365 !check_tsc_unstable())
366 kvm_clock.rating = 299;
367
358 clocksource_register_hz(&kvm_clock, NSEC_PER_SEC); 368 clocksource_register_hz(&kvm_clock, NSEC_PER_SEC);
359 pv_info.name = "KVM"; 369 pv_info.name = "KVM";
360} 370}