[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID:
<SN6PR02MB4157FD8E8A3E45837BDE17B8D4822@SN6PR02MB4157.namprd02.prod.outlook.com>
Date: Thu, 1 May 2025 01:56:10 +0000
From: Michael Kelley <mhklinux@...look.com>
To: "longli@...uxonhyperv.com" <longli@...uxonhyperv.com>, "K. Y. Srinivasan"
<kys@...rosoft.com>, Haiyang Zhang <haiyangz@...rosoft.com>, Wei Liu
<wei.liu@...nel.org>, Dexuan Cui <decui@...rosoft.com>, Greg Kroah-Hartman
<gregkh@...uxfoundation.org>, "linux-hyperv@...r.kernel.org"
<linux-hyperv@...r.kernel.org>, "linux-kernel@...r.kernel.org"
<linux-kernel@...r.kernel.org>
CC: Long Li <longli@...rosoft.com>
Subject: RE: [Patch v2 4/4] Drivers: hv: Remove hv_free/alloc_* helpers
From: longli@...uxonhyperv.com <longli@...uxonhyperv.com> Sent: Wednesday, April 30, 2025 3:06 PM
>
> Those helpers are simply wrappers for page allocations.
>
> Signed-off-by: Long Li <longli@...rosoft.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
>
Powered by blists - more mailing lists