Re: [PATCH v2 0/2] mm: refactor zonelist constructors and iterators
From: Zenghui Yu
Date: Tue Sep 15 2026 - 12:42:42 EST
On 9/12/26 11:04 AM, Gregory Price wrote:
> find_next_best_node() picks the next-closest node when building a
> fallback list, and hardcodes N_MEMORY as the set it picks from.
>
> Refactor it into find_next_best_node_in(), which takes the candidate
> set explicitly.
>
> This makes the existing behaviour explicit at both mm/memory-tiers.c
> call sites - they select demotion targets in fallback order from
> N_MEMORY - and lets callers narrow that set.
>
> Then extract the per-node construction loop out of build_zonelists()
> into build_node_zonelist(),i parameterised on the candidate nodemask
> and destination zonelist index.
>
> Together these allow a zonelist to be built over a candidate set other
> than N_MEMORY, into a zonelist other than FALLBACK, and iterated in
> fallback order over a caller-defined subset.
>
> These are prerequisites for generating a private node zonelist (nodes
> unreachable by default), but are otherwise general improvements to
> the existing interfaces so I'm proposing them separately.
>
> No functional change intended - purely refactor commits.
>
> Verified on x86_64:
>
> - find_next_best_node_in() compiles to the same 319 bytes as
> find_next_best_node().
> - Both mm/memory-tiers.c callers grow a single instruction - the
> added argument.
> - Boot-time fallback orders are identical on a 4-node guest with an
> asymmetric distance matrix.
>
> Gregory Price (2):
> mm: refactor find_next_best_node to find_next_best_node_in
> mm/page_alloc: refactor build_node_zonelist() out of build_zonelists()
>
> mm/internal.h | 6 ++--
> mm/memory-tiers.c | 7 +++--
> mm/page_alloc.c | 74 +++++++++++++++++++----------------------------
> 3 files changed, 38 insertions(+), 49 deletions(-)
Reviewed-by: Zenghui Yu (Huawei) <zenghui.yu@xxxxxxxxx>
Thanks,
Zenghui