diff options
author | Vitaly Kuznetsov <vkuznets@redhat.com> | 2016-12-07 14:53:11 -0800 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2017-01-10 21:46:41 +0100 |
commit | 76d36ab79820430f73c584673aef10ba2446fced (patch) | |
tree | d43d61e014d5d143c5c7dece02cc33495ba445f7 /drivers/hv/hv.c | |
parent | e7e97dd8b77ee7366f2f8c70a033bf5fa05ec2e0 (diff) |
hv: switch to cpuhp state machine for synic init/cleanup
To make it possible to online/offline CPUs switch to cpuhp infrastructure
for doing hv_synic_init()/hv_synic_cleanup().
Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/hv/hv.c')
-rw-r--r-- | drivers/hv/hv.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/drivers/hv/hv.c b/drivers/hv/hv.c index fbd8ce6d7ff3..8dbbed4efa45 100644 --- a/drivers/hv/hv.c +++ b/drivers/hv/hv.c @@ -496,7 +496,7 @@ void hv_synic_free(void) * retrieve the initialized message and event pages. Otherwise, we create and * initialize the message and event pages. */ -void hv_synic_init(void *arg) +int hv_synic_init(unsigned int cpu) { u64 version; union hv_synic_simp simp; @@ -505,10 +505,8 @@ void hv_synic_init(void *arg) union hv_synic_scontrol sctrl; u64 vp_index; - int cpu = smp_processor_id(); - if (!hv_context.hypercall_page) - return; + return -EFAULT; /* Check the version */ rdmsrl(HV_X64_MSR_SVERSION, version); @@ -563,7 +561,7 @@ void hv_synic_init(void *arg) HV_TIMER_FREQUENCY, HV_MIN_DELTA_TICKS, HV_MAX_MAX_DELTA_TICKS); - return; + return 0; } /* @@ -583,16 +581,15 @@ void hv_synic_clockevents_cleanup(void) /* * hv_synic_cleanup - Cleanup routine for hv_synic_init(). */ -void hv_synic_cleanup(void *arg) +int hv_synic_cleanup(unsigned int cpu) { union hv_synic_sint shared_sint; union hv_synic_simp simp; union hv_synic_siefp siefp; union hv_synic_scontrol sctrl; - int cpu = smp_processor_id(); if (!hv_context.synic_initialized) - return; + return -EFAULT; /* Turn off clockevent device */ if (ms_hyperv.features & HV_X64_MSR_SYNTIMER_AVAILABLE) { @@ -624,4 +621,6 @@ void hv_synic_cleanup(void *arg) rdmsrl(HV_X64_MSR_SCONTROL, sctrl.as_uint64); sctrl.enable = 0; wrmsrl(HV_X64_MSR_SCONTROL, sctrl.as_uint64); + + return 0; } |