|
@@ -670,7 +670,7 @@ static void kvm_write_wall_clock(struct kvm *kvm, gpa_t wall_clock)
|
|
{
|
|
{
|
|
static int version;
|
|
static int version;
|
|
struct pvclock_wall_clock wc;
|
|
struct pvclock_wall_clock wc;
|
|
- struct timespec now, sys, boot;
|
|
|
|
|
|
+ struct timespec boot;
|
|
|
|
|
|
if (!wall_clock)
|
|
if (!wall_clock)
|
|
return;
|
|
return;
|
|
@@ -685,9 +685,7 @@ static void kvm_write_wall_clock(struct kvm *kvm, gpa_t wall_clock)
|
|
* wall clock specified here. guest system time equals host
|
|
* wall clock specified here. guest system time equals host
|
|
* system time for us, thus we must fill in host boot time here.
|
|
* system time for us, thus we must fill in host boot time here.
|
|
*/
|
|
*/
|
|
- now = current_kernel_time();
|
|
|
|
- ktime_get_ts(&sys);
|
|
|
|
- boot = ns_to_timespec(timespec_to_ns(&now) - timespec_to_ns(&sys));
|
|
|
|
|
|
+ getboottime(&boot);
|
|
|
|
|
|
wc.sec = boot.tv_sec;
|
|
wc.sec = boot.tv_sec;
|
|
wc.nsec = boot.tv_nsec;
|
|
wc.nsec = boot.tv_nsec;
|
|
@@ -762,6 +760,7 @@ static void kvm_write_guest_time(struct kvm_vcpu *v)
|
|
local_irq_save(flags);
|
|
local_irq_save(flags);
|
|
kvm_get_msr(v, MSR_IA32_TSC, &vcpu->hv_clock.tsc_timestamp);
|
|
kvm_get_msr(v, MSR_IA32_TSC, &vcpu->hv_clock.tsc_timestamp);
|
|
ktime_get_ts(&ts);
|
|
ktime_get_ts(&ts);
|
|
|
|
+ monotonic_to_bootbased(&ts);
|
|
local_irq_restore(flags);
|
|
local_irq_restore(flags);
|
|
|
|
|
|
/* With all the info we got, fill in the values */
|
|
/* With all the info we got, fill in the values */
|