diff options
Diffstat (limited to 'drivers/staging/hv/hv.c')
-rw-r--r-- | drivers/staging/hv/hv.c | 19 |
1 files changed, 5 insertions, 14 deletions
diff --git a/drivers/staging/hv/hv.c b/drivers/staging/hv/hv.c index 824f81679ae8..736794ef7872 100644 --- a/drivers/staging/hv/hv.c +++ b/drivers/staging/hv/hv.c @@ -111,7 +111,7 @@ static u64 do_hypercall(u64 control, void *input, void *output) u64 hv_status = 0; u64 input_address = (input) ? virt_to_phys(input) : 0; u64 output_address = (output) ? virt_to_phys(output) : 0; - volatile void *hypercall_page = hv_context.hypercall_page; + void *hypercall_page = hv_context.hypercall_page; __asm__ __volatile__("mov %0, %%r8" : : "r" (output_address) : "r8"); __asm__ __volatile__("call *%3" : "=a" (hv_status) : @@ -132,7 +132,7 @@ static u64 do_hypercall(u64 control, void *input, void *output) u64 output_address = (output) ? virt_to_phys(output) : 0; u32 output_address_hi = output_address >> 32; u32 output_address_lo = output_address & 0xFFFFFFFF; - volatile void *hypercall_page = hv_context.hypercall_page; + void *hypercall_page = hv_context.hypercall_page; __asm__ __volatile__ ("call *%8" : "=d"(hv_status_hi), "=a"(hv_status_lo) : "d" (control_hi), @@ -151,7 +151,6 @@ static u64 do_hypercall(u64 control, void *input, void *output) */ int hv_init(void) { - int ret = 0; int max_leaf; union hv_x64_msr_hypercall_contents hypercall_msr; void *virtaddr = NULL; @@ -164,11 +163,7 @@ int hv_init(void) goto cleanup; max_leaf = query_hypervisor_info(); - /* HvQueryHypervisorFeatures(maxLeaf); */ - /* - * We only support running on top of Hyper-V - */ rdmsrl(HV_X64_MSR_GUEST_OS_ID, hv_context.guestid); if (hv_context.guestid != 0) @@ -181,10 +176,6 @@ int hv_init(void) /* See if the hypercall page is already set */ rdmsrl(HV_X64_MSR_HYPERCALL, hypercall_msr.as_uint64); - /* - * Allocate the hypercall page memory - * virtaddr = osd_page_alloc(1); - */ virtaddr = __vmalloc(PAGE_SIZE, GFP_KERNEL, PAGE_KERNEL_EXEC); if (!virtaddr) @@ -222,7 +213,7 @@ int hv_init(void) hv_context.signal_event_param->flag_number = 0; hv_context.signal_event_param->rsvdz = 0; - return ret; + return 0; cleanup: if (virtaddr) { @@ -233,8 +224,8 @@ cleanup: vfree(virtaddr); } - ret = -1; - return ret; + + return -ENOTSUPP; } /* |