From nobody Fri Sep 25 22:18:50 2026 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by smtp.subspace.kernel.org (Postfix) with ESMTP id E6CC1277C96; Tue, 8 Sep 2026 02:13:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=13.77.154.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788833636; cv=none; b=jcoT1gw7Yu67hfoHISDd/UG180yC/N7f3/rrgVBzNbWj14V0O/wkWyQdcBjN+eJ+KwWnGNlYAPKWCPSA5dylGLmeDIA0XpqU8c1Ke3bSCfmehSVOKiDcv/JIVNNgvCL7vXChfnYnlloCdzE8wfi6HL8WjeeNvajVieUKQ4iy+fo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788833636; c=relaxed/simple; bh=q7FW86teRs2NsSbkZr+5h7AoW/iRvR8mltjThBYCM2k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=a6bDJNMo1k/2LzaLK7OMT0Dwtq0rDS0TqEimLXvs+ynywApxC6vAmJTINDAjHywtOdiARqDgzN3eEVZ+RMXsLn6llafU9g5BVVdsJHcSJB23mj+SqXC8etNcSEjHmbEYTs4TcP2nyJF2nnUGRTMK32MqcsyXfn/F3tJz7+aW0Fg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.microsoft.com; spf=pass smtp.mailfrom=linux.microsoft.com; dkim=pass (1024-bit key) header.d=linux.microsoft.com header.i=@linux.microsoft.com header.b=ElhlnYjY; arc=none smtp.client-ip=13.77.154.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.microsoft.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.microsoft.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.microsoft.com header.i=@linux.microsoft.com header.b="ElhlnYjY" Received: from mrdev.corp.microsoft.com (192-184-212-33.fiber.dynamic.sonic.net [192.184.212.33]) by linux.microsoft.com (Postfix) with ESMTPSA id A9A7D20B7007; Mon, 7 Sep 2026 19:13:14 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com A9A7D20B7007 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1788833594; bh=aXqUm+CiuvKpPhqb5UJXX8/ZWR9aeIDSv7Mr86OLMtA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ElhlnYjYoA5sA8yq0NQcdzzjIgoyPtyS0E+wZxvu/jTLzLNUpYmZte6w4hM9T2qzY GlfESpJrvtxM/OllXxsQbhxXBV1/eZopkMWC8htmwQthm9L+MJYNkaJXqzaXWmwsks nd0vp6ss2Upw7OuzZRy8O+tme6jDiTJidHugTJwA= From: Mukesh R To: linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org Cc: kys@microsoft.com, wei.liu@kernel.org, mhkelley58@gmail.com, mrathor@linux.microsoft.com Subject: [PATCH V1 1/3] mshv: Rename memory deposit memory functions to _old Date: Mon, 7 Sep 2026 19:13:38 -0700 Message-ID: <20260908021340.2548924-2-mrathor@linux.microsoft.com> X-Mailer: git-send-email 2.51.2.vfs.0.1 In-Reply-To: <20260908021340.2548924-1-mrathor@linux.microsoft.com> References: <20260908021340.2548924-1-mrathor@linux.microsoft.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Rename hv_call_deposit_pages() and hv_deposit_memory_node() to _old to make reviewing the new functions much easier. Signed-off-by: Mukesh R --- drivers/hv/hv_proc.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/drivers/hv/hv_proc.c b/drivers/hv/hv_proc.c index 57b2c64197cb..57864bb5bcd8 100644 --- a/drivers/hv/hv_proc.c +++ b/drivers/hv/hv_proc.c @@ -13,10 +13,10 @@ * See struct hv_deposit_memory. The first u64 is partition ID, the rest * are GPAs. */ -#define HV_DEPOSIT_MAX (HV_HYP_PAGE_SIZE / sizeof(u64) - 1) +#define HV_DEPOSIT_MAX_OLD (HV_HYP_PAGE_SIZE / sizeof(u64) - 1) =20 /* Deposits exact number of pages. Must be called with interrupts enabled.= */ -int hv_call_deposit_pages(int node, u64 partition_id, u32 num_pages) +static int hv_call_deposit_pages_old(int node, u64 partition_id, u32 num_p= ages) { struct page **pages, *page; int *counts; @@ -29,7 +29,7 @@ int hv_call_deposit_pages(int node, u64 partition_id, u32= num_pages) struct hv_deposit_memory *input_page; unsigned long flags; =20 - if (num_pages > HV_DEPOSIT_MAX) + if (num_pages > HV_DEPOSIT_MAX_OLD) return -E2BIG; if (!num_pages) return 0; @@ -40,7 +40,7 @@ int hv_call_deposit_pages(int node, u64 partition_id, u32= num_pages) return -ENOMEM; pages =3D page_address(page); =20 - counts =3D kzalloc_objs(int, HV_DEPOSIT_MAX); + counts =3D kzalloc_objs(int, HV_DEPOSIT_MAX_OLD); if (!counts) { free_page((unsigned long)pages); return -ENOMEM; @@ -108,10 +108,14 @@ int hv_call_deposit_pages(int node, u64 partition_id,= u32 num_pages) kfree(counts); return ret; } + +int hv_call_deposit_pages(int node, u64 partition_id, u32 num_pages) +{ + return hv_call_deposit_pages_old(node, partition_id, num_pages); +} EXPORT_SYMBOL_GPL(hv_call_deposit_pages); =20 -int hv_deposit_memory_node(int node, u64 partition_id, - u64 hv_status) +static int __maybe_unused hv_deposit_memory_node_old(int node, u64 partiti= on_id, u64 hv_status) { u32 num_pages =3D 1; =20 @@ -137,7 +141,12 @@ int hv_deposit_memory_node(int node, u64 partition_id, hv_status_err(hv_status, "Unexpected!\n"); return -ENOMEM; } - return hv_call_deposit_pages(node, partition_id, num_pages); + return hv_call_deposit_pages_old(node, partition_id, num_pages); +} + +int hv_deposit_memory_node(int node, u64 partition_id, u64 hv_status) +{ + return hv_deposit_memory_node_old(node, partition_id, hv_status); } EXPORT_SYMBOL_GPL(hv_deposit_memory_node); =20 --=20 2.51.2.vfs.0.1 From nobody Fri Sep 25 22:18:50 2026 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by smtp.subspace.kernel.org (Postfix) with ESMTP id E95583290B1; Tue, 8 Sep 2026 02:13:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=13.77.154.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788833637; cv=none; b=dtd/SpbxvFtcf54b0IiO6fuTftGOraMvgVdyFZklg+AS/cDOTVklzsfvLyYJfXVlEOOJQ/+X4mUSFUlTUft3ILepyFL/lmCWnIDc61OBi2BMn25A9Z/V9m4D2WuNx8DMMfIJ+ZNX8232anABudWgd13Nr0VWLBXx3ro2rWPGnEs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788833637; c=relaxed/simple; bh=wZ/r4/bF9hAlTtquHXnE+wBTqQ/7BYwrtsPzipxkVGk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hHGY7+f+OLnuuV4JLYtUS6PL8gcBL4z/yF3PHLDACN6FdBisFkDZtYXkDOqe+E2siPKgnguXkT8Y9Bamv6fhm3V9+BwgVnhoP4LlLmOIBDiybWmXrjlS18ABDBlYLTQ0az7HcxZ/hXdlU5reeOqbEdLZKNVcgFu7NCHTIls4u6Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.microsoft.com; spf=pass smtp.mailfrom=linux.microsoft.com; dkim=pass (1024-bit key) header.d=linux.microsoft.com header.i=@linux.microsoft.com header.b=Wg/U2UpR; arc=none smtp.client-ip=13.77.154.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.microsoft.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.microsoft.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.microsoft.com header.i=@linux.microsoft.com header.b="Wg/U2UpR" Received: from mrdev.corp.microsoft.com (192-184-212-33.fiber.dynamic.sonic.net [192.184.212.33]) by linux.microsoft.com (Postfix) with ESMTPSA id 6477E20B700D; Mon, 7 Sep 2026 19:13:15 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 6477E20B700D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1788833595; bh=woYa3VktAHCxIlUnUShf3U66XvJ2x0MsWEVzqJ9QFTQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Wg/U2UpRmjP+qL5e3dbgKbJ5/4Ux/AqKTLMQhvHtohBNeB3vRpyEuE1dDALfAfSRE rvJEArNqWvTyLvoJWmDY+egu52QvQ+K/qSIOpxDOGFqTkuCwPV/uDPRO0OHXLdjWTz SdEEQkQygWCP8AHMdJmZkPX1rtul7iPlvBny7QkU= From: Mukesh R To: linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org Cc: kys@microsoft.com, wei.liu@kernel.org, mhkelley58@gmail.com, mrathor@linux.microsoft.com Subject: [PATCH V1 2/3] mshv: Redesign hypervisor memory deposit logic Date: Mon, 7 Sep 2026 19:13:39 -0700 Message-ID: <20260908021340.2548924-3-mrathor@linux.microsoft.com> X-Mailer: git-send-email 2.51.2.vfs.0.1 In-Reply-To: <20260908021340.2548924-1-mrathor@linux.microsoft.com> References: <20260908021340.2548924-1-mrathor@linux.microsoft.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The current memory deposit implementation has a few issues and bugs: o It is very slow o Contiguous range requirement is broken, and is critical bug o An incorrect assumption is made that contiguous memory size would always be power of 2. o Two pages are allocated, only one is really needed. This adds to overhead. o For a 512 page deposit, the allocation is split into two: one for 511 and second for 1. Thus, an order 9 allocation never happens. A contiguous 2M range, if possible, significantly improves performance in the hypervisor. o Since a page is already allocated to collect the frames, there is not really a need to use per cpu input page, and hence avoid local irq disable. o In hv_call_deposit_pages(), in case of error, under err_free_allocations label, all pages are freed without checking status to see if some pages were deposited. This is a critical bug as it would free pages that hyp may be using. All of above is addressed by: o Allocate 2M by default, this is the recommendation from the hypervisor team, and greatly improves performance. o Always start with a full 2M range allocation, thus getting contiguous if available. In cases where possible, the deposits are much faster. o Allocate only one page in the deposit function and collect 511 pfns there. Just use a local variable for last pfn. o Use the page as input to hypercall. Since this page is locally allocated, irq disable can be avoided helping speed up the deposit. o Fix the physical contiguous memory requirement. o Lastly, remove pre-deposits hv_call_create_vp() and hv_call_initialize_partition() as they were removed internally while ago, most likely because they didn't help much. Signed-off-by: Mukesh R --- drivers/hv/hv_proc.c | 198 +++++++++++++++++++++++++++++---- drivers/hv/mshv_root_hv_call.c | 10 +- include/asm-generic/mshyperv.h | 5 - 3 files changed, 179 insertions(+), 34 deletions(-) diff --git a/drivers/hv/hv_proc.c b/drivers/hv/hv_proc.c index 57864bb5bcd8..0ebede0bc8b4 100644 --- a/drivers/hv/hv_proc.c +++ b/drivers/hv/hv_proc.c @@ -9,6 +9,184 @@ #include #include =20 +#define HV_DEPOSIT_MAX 512 +#define HV_DEPOSIT_INP_MAX ((HV_HYP_PAGE_SIZE - \ + offsetof(struct hv_deposit_memory, gpa_page_list)) / sizeof(u64)) + +/* + * Allocate free pages for deposit to hypervisor. pfna[] must be large eno= ugh + * to hold HV_DEPOSIT_INP_MAX (511) pages. If num_pages is 512, return last + * pfn in lastpfn. If @single, then it must be a single allocation (not sp= lit + * over multiple contiguous ranges). + * + * Returns: number of pages allocated or -ENOMEM + */ +static int hv_alloc_dep_pages(int node, u64 *pfna, u64 *lastpfnp, int num_= pages, + bool single) +{ + struct page *page; + int num_allocd, count =3D 0; + + /* Published ABI, enforce its immutability. */ + BUILD_BUG_ON(HV_DEPOSIT_INP_MAX !=3D 511); + + if (num_pages > HV_DEPOSIT_MAX || + (num_pages =3D=3D HV_DEPOSIT_MAX && lastpfnp =3D=3D NULL)) + return -EINVAL; + + while (num_pages) { + /* Find highest order we can actually allocate */ + int order =3D 31 - __builtin_clz(num_pages); + gfp_t gfp_flags =3D GFP_KERNEL; + + if (!single) + gfp_flags |=3D __GFP_NOWARN; + + while (1) { + page =3D alloc_pages_node(node, gfp_flags, order); + if (page || order =3D=3D 0 || single) + break; + + order--; + } + + if (page =3D=3D NULL) + break; + + split_page(page, order); + num_allocd =3D 1 << order; + num_pages -=3D num_allocd; + + while (num_allocd && count < HV_DEPOSIT_INP_MAX) { + pfna[count++] =3D page_to_pfn(page++); + num_allocd--; + } + + if (num_allocd-- && count =3D=3D HV_DEPOSIT_INP_MAX) { + *lastpfnp =3D page_to_pfn(page); + count++; + break; + } + } + + return count ? count : -ENOMEM; +} + +/* + * Deposit memory in the hypervisor. Even if @contiguous is false, a conti= guous + * 2M worth of pfns is utmost desired for performance reasons. But short of + * that, we deposit whatever contiguous chunks we can get. If @contiguous = is + * true, then the entire range has to be physically contiguous. Note, in t= hat + * case, upon withdrawl, hypervisor could return any page in between the r= ange, + * so we must split that also. Lastly, HV_MAX_CONTIGUOUS_ALLOCATION_PAGES = is + * not guaranteed to always be power of 2. + */ +static int hv_call_deposit_pages(int node, u64 partition_id, bool contiguo= us) +{ + struct hv_deposit_memory *hc_input; + int i, rc, num_pages; + u64 status, *pfna, lastpfn =3D 0; + bool trunc_extra =3D false; + + BUILD_BUG_ON(HV_MAX_CONTIGUOUS_ALLOCATION_PAGES > HV_DEPOSIT_MAX); + + if (contiguous) { + num_pages =3D roundup_pow_of_two( + HV_MAX_CONTIGUOUS_ALLOCATION_PAGES); + trunc_extra =3D num_pages !=3D HV_MAX_CONTIGUOUS_ALLOCATION_PAGES; + } else { + num_pages =3D HV_DEPOSIT_MAX; + } + + hc_input =3D (struct hv_deposit_memory *)get_zeroed_page(GFP_KERNEL); + if (hc_input =3D=3D NULL) + return -ENOMEM; + + hc_input->partition_id =3D partition_id; + pfna =3D hc_input->gpa_page_list; + + rc =3D hv_alloc_dep_pages(node, pfna, &lastpfn, num_pages, contiguous); + if (rc < 0) + goto out_free; + + num_pages =3D rc; + if (num_pages > HV_DEPOSIT_INP_MAX) + num_pages =3D HV_DEPOSIT_INP_MAX; + + if (contiguous && trunc_extra) { + for (i =3D HV_MAX_CONTIGUOUS_ALLOCATION_PAGES; i < num_pages; i++) + __free_page(pfn_to_page(pfna[i])); + + if (lastpfn) { + __free_page(pfn_to_page(lastpfn)); + lastpfn =3D 0; + } + + num_pages =3D HV_MAX_CONTIGUOUS_ALLOCATION_PAGES; + } + + /* We are not using hyperv_pcpu_input_arg, so no need to disable */ + + status =3D hv_do_rep_hypercall(HVCALL_DEPOSIT_MEMORY, num_pages, + 0, hc_input, NULL); + if (!hv_result_success(status)) + goto err_free_dep_pages; + + if (lastpfn) { + hc_input->gpa_page_list[0] =3D lastpfn; + status =3D hv_do_rep_hypercall(HVCALL_DEPOSIT_MEMORY, 1, 0, + hc_input, NULL); + + if (!hv_result_success(status)) { + if (contiguous) + goto err_free_dep_pages; + + /* We deposited lot earlier, so give it a go */ + __free_page(pfn_to_page(lastpfn)); + } + } + + free_page((unsigned long)hc_input); + return 0; + +err_free_dep_pages: + hv_status_err(status, "\n"); + rc =3D hv_result_to_errno(status); + + for (i =3D hv_repcomp(status); i < num_pages; i++) + __free_page(pfn_to_page(pfna[i])); + if (lastpfn) + __free_page(pfn_to_page(lastpfn)); + +out_free: + free_page((unsigned long)hc_input); + return rc; +} + +int hv_deposit_memory_node(int node, u64 pt_id, u64 hv_status) +{ + int result =3D hv_result(hv_status); + bool contiguous =3D false; + + if (result =3D=3D HV_STATUS_INSUFFICIENT_ROOT_MEMORY || + result =3D=3D HV_STATUS_INSUFFICIENT_CONTIGUOUS_ROOT_MEMORY) { + if (!hv_root_partition()) { + hv_status_err(hv_status, + "Unexpected root memory deposit\n"); + return -EINVAL; + } + + pt_id =3D HV_PARTITION_ID_SELF; + } + + if (result =3D=3D HV_STATUS_INSUFFICIENT_CONTIGUOUS_MEMORY || + result =3D=3D HV_STATUS_INSUFFICIENT_CONTIGUOUS_ROOT_MEMORY) + contiguous =3D true; + + return hv_call_deposit_pages(node, pt_id, contiguous); +} +EXPORT_SYMBOL_GPL(hv_deposit_memory_node); + /* * See struct hv_deposit_memory. The first u64 is partition ID, the rest * are GPAs. @@ -109,12 +287,6 @@ static int hv_call_deposit_pages_old(int node, u64 par= tition_id, u32 num_pages) return ret; } =20 -int hv_call_deposit_pages(int node, u64 partition_id, u32 num_pages) -{ - return hv_call_deposit_pages_old(node, partition_id, num_pages); -} -EXPORT_SYMBOL_GPL(hv_call_deposit_pages); - static int __maybe_unused hv_deposit_memory_node_old(int node, u64 partiti= on_id, u64 hv_status) { u32 num_pages =3D 1; @@ -144,12 +316,6 @@ static int __maybe_unused hv_deposit_memory_node_old(i= nt node, u64 partition_id, return hv_call_deposit_pages_old(node, partition_id, num_pages); } =20 -int hv_deposit_memory_node(int node, u64 partition_id, u64 hv_status) -{ - return hv_deposit_memory_node_old(node, partition_id, hv_status); -} -EXPORT_SYMBOL_GPL(hv_deposit_memory_node); - bool hv_result_needs_memory(u64 status) { switch (hv_result(status)) { @@ -212,14 +378,6 @@ int hv_call_create_vp(int node, u64 partition_id, u32 = vp_index, u32 flags) unsigned long irq_flags; int ret =3D 0; =20 - /* Root VPs don't seem to need pages deposited */ - if (partition_id !=3D hv_current_partition_id) { - /* The value 90 is empirically determined. It may change. */ - ret =3D hv_call_deposit_pages(node, partition_id, 90); - if (ret) - return ret; - } - do { local_irq_save(irq_flags); =20 diff --git a/drivers/hv/mshv_root_hv_call.c b/drivers/hv/mshv_root_hv_call.c index cb55d4d4be2e..b8d199f95299 100644 --- a/drivers/hv/mshv_root_hv_call.c +++ b/drivers/hv/mshv_root_hv_call.c @@ -15,8 +15,6 @@ #include "mshv_root.h" =20 /* Determined empirically */ -#define HV_INIT_PARTITION_DEPOSIT_PAGES 208 -#define HV_MAP_GPA_DEPOSIT_PAGES 256 #define HV_UMAP_GPA_PAGES 512 =20 #define HV_PAGE_COUNT_2M_ALIGNED(pg_count) (!((pg_count) & (0x200 - 1))) @@ -140,11 +138,6 @@ int hv_call_initialize_partition(u64 partition_id) =20 input.partition_id =3D partition_id; =20 - ret =3D hv_call_deposit_pages(NUMA_NO_NODE, partition_id, - HV_INIT_PARTITION_DEPOSIT_PAGES); - if (ret) - return ret; - do { status =3D hv_do_fast_hypercall8(HVCALL_INITIALIZE_PARTITION, *(u64 *)&input); @@ -248,8 +241,7 @@ static int hv_do_map_gpa_hcall(u64 partition_id, u64 gf= n, u64 page_struct_count, completed =3D hv_repcomp(status); =20 if (hv_result_needs_memory(status)) { - ret =3D hv_call_deposit_pages(NUMA_NO_NODE, partition_id, - HV_MAP_GPA_DEPOSIT_PAGES); + ret =3D hv_deposit_memory(partition_id, status); if (ret) break; =20 diff --git a/include/asm-generic/mshyperv.h b/include/asm-generic/mshyperv.h index bf601d67cecb..c16abaecb65e 100644 --- a/include/asm-generic/mshyperv.h +++ b/include/asm-generic/mshyperv.h @@ -345,7 +345,6 @@ static inline bool hv_parent_partition(void) =20 bool hv_result_needs_memory(u64 status); int hv_deposit_memory_node(int node, u64 partition_id, u64 status); -int hv_call_deposit_pages(int node, u64 partition_id, u32 num_pages); int hv_call_add_logical_proc(int node, u32 lp_index, u32 acpi_id); int hv_call_notify_all_processors_started(void); bool hv_lp_exists(u32 lp_index); @@ -360,10 +359,6 @@ static inline int hv_deposit_memory_node(int node, u64= partition_id, u64 status) { return -EOPNOTSUPP; } -static inline int hv_call_deposit_pages(int node, u64 partition_id, u32 nu= m_pages) -{ - return -EOPNOTSUPP; -} static inline int hv_call_add_logical_proc(int node, u32 lp_index, u32 acp= i_id) { return -EOPNOTSUPP; --=20 2.51.2.vfs.0.1 From nobody Fri Sep 25 22:18:50 2026 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 9AD27331A56; Tue, 8 Sep 2026 02:13:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=13.77.154.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788833637; cv=none; b=IClP+5T/OIITL+zB7pZC1+RGyaeQKcpMFhNEo2IHlBqNJNML+2xKg/xp9Lze9EPppA/ihE+4D9lK9fnfYYSzzXDfZL9xFXjvu2asUuFh7nDnIj2AxRaAjfapq1q8Zkl5ObGqeOrACfXkqbq7btKCrJLYepHvrvfU2EOek1VBACk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788833637; c=relaxed/simple; bh=bgC11ADyUT2qR2XTFMdrMQNAyr2QK1n7HlurnnjeKtE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NEni8aYyT3Tk35bAzPbFND6ns1+mEJfUgYsTT8BIQzghA+ITPHTf8qsSUFO2Rp5aAdKGpVH2JqpIxqF+yP6I5ImPXy5UgraUrjdZcfyKbJ06StJBix9UoL0/2nx4gjFDWC/ePwlTZCGGR9gsrzfrQGrTvcF9KP9YNZA/ANlPiHc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.microsoft.com; spf=pass smtp.mailfrom=linux.microsoft.com; dkim=pass (1024-bit key) header.d=linux.microsoft.com header.i=@linux.microsoft.com header.b=WJCkTNB9; arc=none smtp.client-ip=13.77.154.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.microsoft.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.microsoft.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.microsoft.com header.i=@linux.microsoft.com header.b="WJCkTNB9" Received: from mrdev.corp.microsoft.com (192-184-212-33.fiber.dynamic.sonic.net [192.184.212.33]) by linux.microsoft.com (Postfix) with ESMTPSA id 735EA20B7001; Mon, 7 Sep 2026 19:13:16 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 735EA20B7001 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1788833596; bh=r052JvtVOfdMBLZT7qlDdXdnY3xSoimEYtLMcJ/0mjk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=WJCkTNB9DSRvu5kKQuFpEO5/2dPLsclT09o+hYN4F6i/irlLEFGetchrVwyZm73wz 9GTsrkARa58tD5ASNxaIALOUjFciP64G2loo5plSnQTcBPgyLbQ+m6/buyc3AbvNXQ v6he6jenBT8GO+yCrwWaK4dT1/BM5ilDRy2Gp6UQ= From: Mukesh R To: linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org Cc: kys@microsoft.com, wei.liu@kernel.org, mhkelley58@gmail.com, mrathor@linux.microsoft.com Subject: [PATCH V1 3/3] mshv: Remove unused *_old memory deposit functions Date: Mon, 7 Sep 2026 19:13:40 -0700 Message-ID: <20260908021340.2548924-4-mrathor@linux.microsoft.com> X-Mailer: git-send-email 2.51.2.vfs.0.1 In-Reply-To: <20260908021340.2548924-1-mrathor@linux.microsoft.com> References: <20260908021340.2548924-1-mrathor@linux.microsoft.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Remove the renamed *_old functions. Signed-off-by: Mukesh R --- drivers/hv/hv_proc.c | 129 ------------------------------------------- 1 file changed, 129 deletions(-) diff --git a/drivers/hv/hv_proc.c b/drivers/hv/hv_proc.c index 0ebede0bc8b4..dfae4b933fa9 100644 --- a/drivers/hv/hv_proc.c +++ b/drivers/hv/hv_proc.c @@ -187,135 +187,6 @@ int hv_deposit_memory_node(int node, u64 pt_id, u64 h= v_status) } EXPORT_SYMBOL_GPL(hv_deposit_memory_node); =20 -/* - * See struct hv_deposit_memory. The first u64 is partition ID, the rest - * are GPAs. - */ -#define HV_DEPOSIT_MAX_OLD (HV_HYP_PAGE_SIZE / sizeof(u64) - 1) - -/* Deposits exact number of pages. Must be called with interrupts enabled.= */ -static int hv_call_deposit_pages_old(int node, u64 partition_id, u32 num_p= ages) -{ - struct page **pages, *page; - int *counts; - int num_allocations; - int i, j, page_count; - int order; - u64 status; - int ret; - u64 base_pfn; - struct hv_deposit_memory *input_page; - unsigned long flags; - - if (num_pages > HV_DEPOSIT_MAX_OLD) - return -E2BIG; - if (!num_pages) - return 0; - - /* One buffer for page pointers and counts */ - page =3D alloc_page(GFP_KERNEL); - if (!page) - return -ENOMEM; - pages =3D page_address(page); - - counts =3D kzalloc_objs(int, HV_DEPOSIT_MAX_OLD); - if (!counts) { - free_page((unsigned long)pages); - return -ENOMEM; - } - - /* Allocate all the pages before disabling interrupts */ - i =3D 0; - - while (num_pages) { - /* Find highest order we can actually allocate */ - order =3D 31 - __builtin_clz(num_pages); - - while (1) { - pages[i] =3D alloc_pages_node(node, GFP_KERNEL, order); - if (pages[i]) - break; - if (!order) { - ret =3D -ENOMEM; - num_allocations =3D i; - goto err_free_allocations; - } - --order; - } - - split_page(pages[i], order); - counts[i] =3D 1 << order; - num_pages -=3D counts[i]; - i++; - } - num_allocations =3D i; - - local_irq_save(flags); - - input_page =3D *this_cpu_ptr(hyperv_pcpu_input_arg); - - input_page->partition_id =3D partition_id; - - /* Populate gpa_page_list - these will fit on the input page */ - for (i =3D 0, page_count =3D 0; i < num_allocations; ++i) { - base_pfn =3D page_to_pfn(pages[i]); - for (j =3D 0; j < counts[i]; ++j, ++page_count) - input_page->gpa_page_list[page_count] =3D base_pfn + j; - } - status =3D hv_do_rep_hypercall(HVCALL_DEPOSIT_MEMORY, - page_count, 0, input_page, NULL); - local_irq_restore(flags); - if (!hv_result_success(status)) { - hv_status_err(status, "\n"); - ret =3D hv_result_to_errno(status); - goto err_free_allocations; - } - - ret =3D 0; - goto free_buf; - -err_free_allocations: - for (i =3D 0; i < num_allocations; ++i) { - base_pfn =3D page_to_pfn(pages[i]); - for (j =3D 0; j < counts[i]; ++j) - __free_page(pfn_to_page(base_pfn + j)); - } - -free_buf: - free_page((unsigned long)pages); - kfree(counts); - return ret; -} - -static int __maybe_unused hv_deposit_memory_node_old(int node, u64 partiti= on_id, u64 hv_status) -{ - u32 num_pages =3D 1; - - switch (hv_result(hv_status)) { - case HV_STATUS_INSUFFICIENT_MEMORY: - break; - case HV_STATUS_INSUFFICIENT_CONTIGUOUS_MEMORY: - num_pages =3D HV_MAX_CONTIGUOUS_ALLOCATION_PAGES; - break; - - case HV_STATUS_INSUFFICIENT_CONTIGUOUS_ROOT_MEMORY: - num_pages =3D HV_MAX_CONTIGUOUS_ALLOCATION_PAGES; - fallthrough; - case HV_STATUS_INSUFFICIENT_ROOT_MEMORY: - if (!hv_root_partition()) { - hv_status_err(hv_status, "Unexpected root memory deposit\n"); - return -ENOMEM; - } - partition_id =3D HV_PARTITION_ID_SELF; - break; - - default: - hv_status_err(hv_status, "Unexpected!\n"); - return -ENOMEM; - } - return hv_call_deposit_pages_old(node, partition_id, num_pages); -} - bool hv_result_needs_memory(u64 status) { switch (hv_result(status)) { --=20 2.51.2.vfs.0.1