if (tsc_pg && vclock_was_used(VCLOCK_HVCLOCK))
                        return vmf_insert_pfn(vma, vmf->address,
-                                       vmalloc_to_pfn(tsc_pg));
+                                       virt_to_phys(tsc_pg) >> PAGE_SHIFT);
        }
 
        return VM_FAULT_SIGBUS;
 
 
 #ifdef CONFIG_HYPERV_TSCPAGE
 
-static struct ms_hyperv_tsc_page *tsc_pg;
+static struct ms_hyperv_tsc_page tsc_pg __aligned(PAGE_SIZE);
 
 struct ms_hyperv_tsc_page *hv_get_tsc_page(void)
 {
-       return tsc_pg;
+       return &tsc_pg;
 }
 EXPORT_SYMBOL_GPL(hv_get_tsc_page);
 
 static u64 notrace read_hv_sched_clock_tsc(void)
 {
-       u64 current_tick = hv_read_tsc_page(tsc_pg);
+       u64 current_tick = hv_read_tsc_page(&tsc_pg);
 
        if (current_tick == U64_MAX)
                hv_get_time_ref_count(current_tick);
        if (!(ms_hyperv.features & HV_MSR_REFERENCE_TSC_AVAILABLE))
                return false;
 
-       tsc_pg = vmalloc(PAGE_SIZE);
-       if (!tsc_pg)
-               return false;
-
        hyperv_cs = &hyperv_cs_tsc;
-       phys_addr = page_to_phys(vmalloc_to_page(tsc_pg));
+       phys_addr = virt_to_phys(&tsc_pg);
 
        /*
         * The Hyper-V TLFS specifies to preserve the value of reserved