SPECS/linux/05-pv-ops-clocksource.patch
e7547e1f
 From 725ac7c54935bbff858092e2db302afe88062162 Mon Sep 17 00:00:00 2001
 From: Alexey Makhalov <amakhalov@vmware.com>
 Date: Tue, 9 May 2017 12:39:18 -0700
 Subject: [PATCH] x86/vmware: pv-ops clocksource
 
 ---
  arch/x86/kernel/cpu/vmware.c | 21 +++++++++++++++++++++
  1 file changed, 21 insertions(+)
 
fc081194
 diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c
e7547e1f
 index 70b8c4614e22..987ac571d16c 100644
fc081194
 --- a/arch/x86/kernel/cpu/vmware.c
 +++ b/arch/x86/kernel/cpu/vmware.c
1a6f8e5d
 @@ -155,6 +155,27 @@ static void __init vmware_cyc2ns_setup(void)
fc081194
  	pr_info("using clock offset of %llu ns\n", d->cyc2ns_offset);
  }
  
c8bf217f
 +static u64 vmware_clock_get_cycles(struct clocksource *cs)
fc081194
 +{
c8bf217f
 +	return (u64)rdtsc_ordered();
fc081194
 +}
 +
 +static struct clocksource clocksource_vmware = {
 +	.name = "vmware-clock",
 +	.read = vmware_clock_get_cycles,
 +	.rating = 400,
 +	.mask = CLOCKSOURCE_MASK(64),
 +	.flags = CLOCK_SOURCE_IS_CONTINUOUS,
1a6f8e5d
 +	.archdata = { .vclock_mode = VCLOCK_TSC },
fc081194
 +};
 +
 +/* We want to use clocksource_vmware from the beginning to avoid drifting in
 +   monotonic clock */
 +struct clocksource * __init clocksource_default_clock(void)
 +{
 +	return &clocksource_vmware;
 +}
 +
  static uint64_t vmware_steal_clock(int cpu)
  {
  	struct vmware_steal_time *steal;
 @@ -290,6 +310,7 @@ static void __init vmware_paravirt_ops_setup(void)
  		vmware_guest_cpu_init();
  #endif
  	}
 +	clocksource_register_khz(&clocksource_vmware, vmware_tsc_khz);
  }
  #else
  #define vmware_paravirt_ops_setup() do {} while (0)
e7547e1f
 -- 
 2.11.0