diff options
| -rw-r--r-- | arch/x86/kvm/x86.c | 11 | 
1 files changed, 7 insertions, 4 deletions
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 4552427105f6..f49fe514d1b2 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -1798,10 +1798,13 @@ u64 get_kvmclock_ns(struct kvm *kvm)  	/* both __this_cpu_read() and rdtsc() should be on the same cpu */  	get_cpu(); -	kvm_get_time_scale(NSEC_PER_SEC, __this_cpu_read(cpu_tsc_khz) * 1000LL, -			   &hv_clock.tsc_shift, -			   &hv_clock.tsc_to_system_mul); -	ret = __pvclock_read_cycles(&hv_clock, rdtsc()); +	if (__this_cpu_read(cpu_tsc_khz)) { +		kvm_get_time_scale(NSEC_PER_SEC, __this_cpu_read(cpu_tsc_khz) * 1000LL, +				   &hv_clock.tsc_shift, +				   &hv_clock.tsc_to_system_mul); +		ret = __pvclock_read_cycles(&hv_clock, rdtsc()); +	} else +		ret = ktime_get_boot_ns() + ka->kvmclock_offset;  	put_cpu();  | 
