Hyper-V assumes page size to be 4K. This might not be the case for ARM64
architecture. Hence use hyper-v page size and page allocation function
to avoid conflicts between different host and guest page size on ARM64.

Signed-off-by: Himadri Pandya <[email protected]>
---
 drivers/hv/connection.c | 14 +++++++-------
 drivers/hv/vmbus_drv.c  |  6 +++---
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/drivers/hv/connection.c b/drivers/hv/connection.c
index 09829e15d4a0..dcb8f6a8c08c 100644
--- a/drivers/hv/connection.c
+++ b/drivers/hv/connection.c
@@ -202,7 +202,7 @@ int vmbus_connect(void)
         * abstraction stuff
         */
        vmbus_connection.int_page =
-       (void *)__get_free_pages(GFP_KERNEL|__GFP_ZERO, 0);
+       (void *)hv_alloc_hyperv_zeroed_page();
        if (vmbus_connection.int_page == NULL) {
                ret = -ENOMEM;
                goto cleanup;
@@ -211,14 +211,14 @@ int vmbus_connect(void)
        vmbus_connection.recv_int_page = vmbus_connection.int_page;
        vmbus_connection.send_int_page =
                (void *)((unsigned long)vmbus_connection.int_page +
-                       (PAGE_SIZE >> 1));
+                       (HV_HYP_PAGE_SIZE >> 1));
 
        /*
         * Setup the monitor notification facility. The 1st page for
         * parent->child and the 2nd page for child->parent
         */
-       vmbus_connection.monitor_pages[0] = (void 
*)__get_free_pages((GFP_KERNEL|__GFP_ZERO), 0);
-       vmbus_connection.monitor_pages[1] = (void 
*)__get_free_pages((GFP_KERNEL|__GFP_ZERO), 0);
+       vmbus_connection.monitor_pages[0] = (void 
*)hv_alloc_hyperv_zeroed_page();
+       vmbus_connection.monitor_pages[1] = (void 
*)hv_alloc_hyperv_zeroed_page();
        if ((vmbus_connection.monitor_pages[0] == NULL) ||
            (vmbus_connection.monitor_pages[1] == NULL)) {
                ret = -ENOMEM;
@@ -291,12 +291,12 @@ void vmbus_disconnect(void)
                destroy_workqueue(vmbus_connection.work_queue);
 
        if (vmbus_connection.int_page) {
-               free_pages((unsigned long)vmbus_connection.int_page, 0);
+               hv_free_hyperv_page((unsigned long)vmbus_connection.int_page);
                vmbus_connection.int_page = NULL;
        }
 
-       free_pages((unsigned long)vmbus_connection.monitor_pages[0], 0);
-       free_pages((unsigned long)vmbus_connection.monitor_pages[1], 0);
+       hv_free_hyperv_page((unsigned long)vmbus_connection.monitor_pages[0]);
+       hv_free_hyperv_page((unsigned long)vmbus_connection.monitor_pages[1]);
        vmbus_connection.monitor_pages[0] = NULL;
        vmbus_connection.monitor_pages[1] = NULL;
 }
diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
index ebd35fc35290..2ee388a23c8f 100644
--- a/drivers/hv/vmbus_drv.c
+++ b/drivers/hv/vmbus_drv.c
@@ -1186,7 +1186,7 @@ static void hv_kmsg_dump(struct kmsg_dumper *dumper,
         * Write dump contents to the page. No need to synchronize; panic should
         * be single-threaded.
         */
-       kmsg_dump_get_buffer(dumper, true, hv_panic_page, PAGE_SIZE,
+       kmsg_dump_get_buffer(dumper, true, hv_panic_page, HV_HYP_PAGE_SIZE,
                             &bytes_written);
        if (bytes_written)
                hyperv_report_panic_msg(panic_pa, bytes_written);
@@ -1290,7 +1290,7 @@ static int vmbus_bus_init(void)
                 */
                hv_get_crash_ctl(hyperv_crash_ctl);
                if (hyperv_crash_ctl & HV_CRASH_CTL_CRASH_NOTIFY_MSG) {
-                       hv_panic_page = (void *)get_zeroed_page(GFP_KERNEL);
+                       hv_panic_page = (void *)hv_alloc_hyperv_zeroed_page();
                        if (hv_panic_page) {
                                ret = kmsg_dump_register(&hv_kmsg_dumper);
                                if (ret)
@@ -1319,7 +1319,7 @@ static int vmbus_bus_init(void)
        hv_remove_vmbus_irq();
 
        bus_unregister(&hv_bus);
-       free_page((unsigned long)hv_panic_page);
+       hv_free_hyperv_page((unsigned long)hv_panic_page);
        unregister_sysctl_table(hv_ctl_table_hdr);
        hv_ctl_table_hdr = NULL;
        return ret;
-- 
2.17.1

Reply via email to