From: Christophe Leroy <christophe.leroy@csgroup.eu>
To: pratyush.brahma@oss.qualcomm.com,
Andrew Morton <akpm@linux-foundation.org>,
Mike Rapoport <rppt@kernel.org>
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/2] mm/numa_emulation: Move the size calculation in split_nodes_interleave() to a separate function
Date: Fri, 26 Sep 2025 15:48:24 +0200 [thread overview]
Message-ID: <3a1e75dd-6b39-4506-b4d7-806915d2a6fa@csgroup.eu> (raw)
In-Reply-To: <20250926-numa-emu-v1-2-714f2691bf8b@oss.qualcomm.com>
Le 26/09/2025 à 12:34, pratyush.brahma@oss.qualcomm.com a écrit :
> From: Pratyush Brahma <pratyush.brahma@oss.qualcomm.com>
>
> The size calculation in split_nodes_interleave() has several nuances.
> Move it to a separate function to improve code modularity and
> simplify the readability of split_nodes_interleave().
>
> Signed-off-by: Pratyush Brahma <pratyush.brahma@oss.qualcomm.com>
> ---
> mm/numa_emulation.c | 44 +++++++++++++++++++++++++++++---------------
> 1 file changed, 29 insertions(+), 15 deletions(-)
>
> diff --git a/mm/numa_emulation.c b/mm/numa_emulation.c
> index 2a335b3dd46a..882c349c2a0f 100644
> --- a/mm/numa_emulation.c
> +++ b/mm/numa_emulation.c
> @@ -76,6 +76,34 @@ static int __init emu_setup_memblk(struct numa_meminfo *ei,
> return 0;
> }
>
> +static void __init __calc_split_params(u64 addr, u64 max_addr,
> + int nr_nodes, u64 *psize, int *pbig)
> +{
> + u64 size, usable_size;
> + int big;
> +
> + /* total usable memory (skip holes) */
> + usable_size = max_addr - addr - mem_hole_size(addr, max_addr);
> +
> + /*
> + * Calculate target node size. x86_32 freaks on __udivdi3() so do
> + * the division in ulong number of pages and convert back.
> + */
> + size = PFN_PHYS((unsigned long)(usable_size >> PAGE_SHIFT) / nr_nodes);
> +
> + /*
> + * Calculate the number of big nodes that can be allocated as a result
> + * of consolidating the remainder.
> + */
> + big = ((size & (FAKE_NODE_MIN_SIZE - 1UL)) * nr_nodes) / FAKE_NODE_MIN_SIZE;
> +
> + /* Align the base size down to the minimum granularity */
> + size = ALIGN_DOWN(size, FAKE_NODE_MIN_SIZE);
> +
> + *psize = size;
> + *pbig = big;
Having to return simple type values through pointers is usually the
start of proplems.Whenever possible you shouldn't returning simple types
via pointers.
Your function is void, it could return size instead.
And big seems independant, could be returned by another function.
> +}
> +
> /*
> * Sets up nr_nodes fake nodes interleaved over physical nodes ranging from addr
> * to max_addr.
> @@ -100,21 +128,7 @@ static int __init split_nodes_interleave(struct numa_meminfo *ei,
> nr_nodes = MAX_NUMNODES;
> }
>
> - /*
> - * Calculate target node size. x86_32 freaks on __udivdi3() so do
> - * the division in ulong number of pages and convert back.
> - */
> - size = max_addr - addr - mem_hole_size(addr, max_addr);
> - size = PFN_PHYS((unsigned long)(size >> PAGE_SHIFT) / nr_nodes);
> -
> - /*
> - * Calculate the number of big nodes that can be allocated as a result
> - * of consolidating the remainder.
> - */
> - big = ((size & (FAKE_NODE_MIN_SIZE - 1UL)) * nr_nodes) /
> - FAKE_NODE_MIN_SIZE;
> -
> - size = ALIGN_DOWN(size, FAKE_NODE_MIN_SIZE);
> + __calc_split_params(addr, max_addr, nr_nodes, &size, &big);
> if (!size) {
> pr_err("Not enough memory for each node. "
> "NUMA emulation disabled.\n");
>
next prev parent reply other threads:[~2025-09-26 13:48 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-26 10:34 [PATCH 0/2] (no cover subject) pratyush.brahma
2025-09-26 10:34 ` [PATCH 1/2] mm/numa_emulation: Refactor NUMA emulation size handling to use kernel macros pratyush.brahma
2025-09-26 10:34 ` [PATCH 2/2] mm/numa_emulation: Move the size calculation in split_nodes_interleave() to a separate function pratyush.brahma
2025-09-26 13:48 ` Christophe Leroy [this message]
2025-09-29 7:16 ` Pratyush Brahma
2025-10-07 2:48 ` Pratyush Brahma
2025-10-07 4:23 ` [PATCH 0/2] (no cover subject) Anshuman Khandual
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3a1e75dd-6b39-4506-b4d7-806915d2a6fa@csgroup.eu \
--to=christophe.leroy@csgroup.eu \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=pratyush.brahma@oss.qualcomm.com \
--cc=rppt@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox