]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
timer hack to show kvmclock drift
authorDavid Woodhouse <dwmw@amazon.co.uk>
Mon, 2 Oct 2023 10:15:10 +0000 (11:15 +0100)
committerDavid Woodhouse <dwmw@amazon.co.uk>
Wed, 4 Oct 2023 08:45:02 +0000 (09:45 +0100)
arch/x86/kvm/x86.c
arch/x86/kvm/xen.c

index 856b12875bcbe58c38676f5b156078b9276048ce..6631f9a2a366a17bf500b4ee287a1ca882db8de7 100644 (file)
@@ -3262,7 +3262,7 @@ uint64_t kvm_get_wall_clock_epoch(struct kvm *kvm)
                local_tsc_khz = get_cpu_tsc_khz();
 
                if (local_tsc_khz &&
-                   !kvm_get_walltime_and_clockread(&ts, &host_tsc))
+                   !kvm_get_time_and_clockread(&ts.tv_sec, &host_tsc))
                        local_tsc_khz = 0; /* Fall back to old method */
 
                hv_clock.tsc_timestamp = ka->master_cycle_now;
@@ -3280,6 +3280,14 @@ uint64_t kvm_get_wall_clock_epoch(struct kvm *kvm)
                kvm_get_time_scale(NSEC_PER_SEC, local_tsc_khz * 1000LL,
                                   &hv_clock.tsc_shift,
                                   &hv_clock.tsc_to_system_mul);
+
+               uint64_t res = __pvclock_read_cycles(&hv_clock, host_tsc);
+               uint64_t d2 = ts.tv_sec + ka->kvmclock_offset;
+               printk("Calculated %lld (%lld/%lld delta %lld, ns %lld o %lld)\n",
+                      res,
+                      ts.tv_sec, d2, d2-res,
+                      ka->master_kernel_ns, ka->kvmclock_offset);
+               if (0)
                return ts.tv_nsec + NSEC_PER_SEC * ts.tv_sec -
                        __pvclock_read_cycles(&hv_clock, host_tsc);
        }
index 6bab715be428d1df12c0a4036b4d5a6eeaadf423..276a5b602d9bdaa18e1d9bd824511dc39ff6eb72 100644 (file)
@@ -106,7 +106,7 @@ static int kvm_xen_shared_info_init(struct kvm *kvm, gfn_t gfn)
        wc->version = wc_version + 1;
        read_unlock_irq(&gpc->lock);
 
-       kvm_make_all_cpus_request(kvm, KVM_REQ_MASTERCLOCK_UPDATE);
+       //kvm_make_all_cpus_request(kvm, KVM_REQ_MASTERCLOCK_UPDATE);
 
 out:
        srcu_read_unlock(&kvm->srcu, idx);