diff options
Diffstat (limited to 'drivers/clocksource/hyperv_timer.c')
| -rw-r--r-- | drivers/clocksource/hyperv_timer.c | 13 | 
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/clocksource/hyperv_timer.c b/drivers/clocksource/hyperv_timer.c index 9d808d595ca8..09aa44cb8a91 100644 --- a/drivers/clocksource/hyperv_timer.c +++ b/drivers/clocksource/hyperv_timer.c @@ -343,7 +343,8 @@ static u64 notrace read_hv_clock_tsc_cs(struct clocksource *arg)  static u64 read_hv_sched_clock_tsc(void)  { -	return read_hv_clock_tsc() - hv_sched_clock_offset; +	return (read_hv_clock_tsc() - hv_sched_clock_offset) * +		(NSEC_PER_SEC / HV_CLOCK_HZ);  }  static void suspend_hv_clock_tsc(struct clocksource *arg) @@ -369,6 +370,12 @@ static void resume_hv_clock_tsc(struct clocksource *arg)  	hv_set_reference_tsc(tsc_msr);  } +static int hv_cs_enable(struct clocksource *cs) +{ +	hv_enable_vdso_clocksource(); +	return 0; +} +  static struct clocksource hyperv_cs_tsc = {  	.name	= "hyperv_clocksource_tsc_page",  	.rating	= 250, @@ -377,6 +384,7 @@ static struct clocksource hyperv_cs_tsc = {  	.flags	= CLOCK_SOURCE_IS_CONTINUOUS,  	.suspend= suspend_hv_clock_tsc,  	.resume	= resume_hv_clock_tsc, +	.enable = hv_cs_enable,  };  static u64 notrace read_hv_clock_msr(void) @@ -398,7 +406,8 @@ static u64 notrace read_hv_clock_msr_cs(struct clocksource *arg)  static u64 read_hv_sched_clock_msr(void)  { -	return read_hv_clock_msr() - hv_sched_clock_offset; +	return (read_hv_clock_msr() - hv_sched_clock_offset) * +		(NSEC_PER_SEC / HV_CLOCK_HZ);  }  static struct clocksource hyperv_cs_msr = {  |