From: lon...@linuxonhyperv.com <lon...@linuxonhyperv.com> Sent: Wednesday, 
April 30, 2025 3:06 PM
> 
> Those helpers are simply wrappers for page allocations.
> 
> Signed-off-by: Long Li <lon...@microsoft.com>
> ---
>  drivers/hv/connection.c        | 23 +++++++++++++++++------
>  drivers/hv/hv_common.c         | 24 ------------------------
>  include/asm-generic/mshyperv.h |  4 ----
>  3 files changed, 17 insertions(+), 34 deletions(-)
> 
> diff --git a/drivers/hv/connection.c b/drivers/hv/connection.c
> index 8351360bba16..a0160b73b593 100644
> --- a/drivers/hv/connection.c
> +++ b/drivers/hv/connection.c

See my comment in Patch 1 of the series, suggesting that these
changes to connection.c move into Patch 1.

> @@ -206,11 +206,20 @@ int vmbus_connect(void)
>       INIT_LIST_HEAD(&vmbus_connection.chn_list);
>       mutex_init(&vmbus_connection.channel_mutex);
> 
> +     /*
> +      * The following Hyper-V interrupt and monitor pages can be used by
> +      * UIO for mapping to user-space, it should always be allocated on

s/it should/so should/

> +      * system page boundaries. We use page allocation functions to allocate
> +      * those pages. We assume system page be bigger than Hyper-v page.

Instead of your last sentence above, say:

The system page size must be >= the Hyper-V page size.

> +      */
> +     BUILD_BUG_ON(PAGE_SIZE < HV_HYP_PAGE_SIZE);
> +
>       /*
>        * Setup the vmbus event connection for channel interrupt
>        * abstraction stuff
>        */
> -     vmbus_connection.int_page = hv_alloc_hyperv_zeroed_page();
> +     vmbus_connection.int_page =
> +             (void *)__get_free_page(GFP_KERNEL | __GFP_ZERO);
>       if (vmbus_connection.int_page == NULL) {
>               ret = -ENOMEM;
>               goto cleanup;
> @@ -225,8 +234,8 @@ int vmbus_connect(void)
>        * Setup the monitor notification facility. The 1st page for
>        * parent->child and the 2nd page for child->parent
>        */
> -     vmbus_connection.monitor_pages[0] = hv_alloc_hyperv_page();
> -     vmbus_connection.monitor_pages[1] = hv_alloc_hyperv_page();
> +     vmbus_connection.monitor_pages[0] = (void *)__get_free_page(GFP_KERNEL);
> +     vmbus_connection.monitor_pages[1] = (void *)__get_free_page(GFP_KERNEL);
>       if ((vmbus_connection.monitor_pages[0] == NULL) ||
>           (vmbus_connection.monitor_pages[1] == NULL)) {
>               ret = -ENOMEM;
> @@ -342,21 +351,23 @@ void vmbus_disconnect(void)
>               destroy_workqueue(vmbus_connection.work_queue);
> 
>       if (vmbus_connection.int_page) {
> -             hv_free_hyperv_page(vmbus_connection.int_page);
> +             free_page((unsigned long)vmbus_connection.int_page);
>               vmbus_connection.int_page = NULL;
>       }
> 
>       if (vmbus_connection.monitor_pages[0]) {
>               if (!set_memory_encrypted(
>                       (unsigned long)vmbus_connection.monitor_pages[0], 1))
> -                     hv_free_hyperv_page(vmbus_connection.monitor_pages[0]);
> +                     free_page((unsigned long)
> +                             vmbus_connection.monitor_pages[0]);
>               vmbus_connection.monitor_pages[0] = NULL;
>       }
> 
>       if (vmbus_connection.monitor_pages[1]) {
>               if (!set_memory_encrypted(
>                       (unsigned long)vmbus_connection.monitor_pages[1], 1))
> -                     hv_free_hyperv_page(vmbus_connection.monitor_pages[1]);
> +                     free_page((unsigned long)
> +                             vmbus_connection.monitor_pages[1]);
>               vmbus_connection.monitor_pages[1] = NULL;
>       }
>  }
> diff --git a/drivers/hv/hv_common.c b/drivers/hv/hv_common.c
> index 297ccd7d4997..421376cea17e 100644
> --- a/drivers/hv/hv_common.c
> +++ b/drivers/hv/hv_common.c
> @@ -105,30 +105,6 @@ void __init hv_common_free(void)
>       hv_synic_eventring_tail = NULL;
>  }
> 
> -/*
> - * A Hyper-V page can be used by UIO for mapping to user-space, it should
> - * always be allocated on system page boundaries.
> - */
> -void *hv_alloc_hyperv_page(void)
> -{
> -     BUILD_BUG_ON(PAGE_SIZE < HV_HYP_PAGE_SIZE);
> -     return (void *)__get_free_page(GFP_KERNEL);
> -}
> -EXPORT_SYMBOL_GPL(hv_alloc_hyperv_page);
> -
> -void *hv_alloc_hyperv_zeroed_page(void)
> -{
> -     BUILD_BUG_ON(PAGE_SIZE < HV_HYP_PAGE_SIZE);
> -     return (void *)__get_free_page(GFP_KERNEL | __GFP_ZERO);
> -}
> -EXPORT_SYMBOL_GPL(hv_alloc_hyperv_zeroed_page);
> -
> -void hv_free_hyperv_page(void *addr)
> -{
> -     free_page((unsigned long)addr);
> -}
> -EXPORT_SYMBOL_GPL(hv_free_hyperv_page);
> -
>  static void *hv_panic_page;
> 
>  /*
> diff --git a/include/asm-generic/mshyperv.h b/include/asm-generic/mshyperv.h
> index ccccb1cbf7df..4033508fbb11 100644
> --- a/include/asm-generic/mshyperv.h
> +++ b/include/asm-generic/mshyperv.h
> @@ -236,10 +236,6 @@ int hv_common_cpu_init(unsigned int cpu);
>  int hv_common_cpu_die(unsigned int cpu);
>  void hv_identify_partition_type(void);
> 
> -void *hv_alloc_hyperv_page(void);
> -void *hv_alloc_hyperv_zeroed_page(void);
> -void hv_free_hyperv_page(void *addr);
> -
>  /**
>   * hv_cpu_number_to_vp_number() - Map CPU to VP.
>   * @cpu_number: CPU number in Linux terms
> --
> 2.34.1
> 


Reply via email to