From: Tianyu Lan <tianyu....@microsoft.com> Hyper-V guests use the default native_sched_clock() in pv_ops.time.sched_clock on x86. But native_sched_clock() directly uses the raw TSC value, which can be discontinuous in a Hyper-V VM. Add the generic hv_setup_sched_clock() to set the sched clock function appropriately. On x86, this sets pv_ops.time.sched_clock to read the Hyper-V reference TSC value that is scaled and adjusted to be continuous.
Also move the Hyper-V reference TSC initialization much earlier in the boot process so no discontinuity is observed when pv_ops.time.sched_clock calculates its offset. This earlier initialization requires that the Hyper-V TSC page be allocated statically instead of with vmalloc(), so fixup the references to the TSC page and the method of getting its physical address. Tianyu Lan (2): clocksource/Hyper-v: Allocate Hyper-V tsc page statically clocksource/Hyper-V: Add Hyper-V specific sched clock function arch/x86/entry/vdso/vma.c | 2 +- arch/x86/hyperv/hv_init.c | 2 -- arch/x86/kernel/cpu/mshyperv.c | 8 ++++++++ drivers/clocksource/hyperv_timer.c | 34 ++++++++++++++++------------------ include/asm-generic/mshyperv.h | 1 + 5 files changed, 26 insertions(+), 21 deletions(-) -- 2.14.5