Re: [PATCH v2] mm/slub: deduplicate NUMA policy calculation in allocation paths

From: Harry Yoo

Date: Wed Jun 24 2026 - 01:15:04 EST




On 6/23/26 8:04 PM, Hao Li wrote:
> Currently, alloc_from_pcs() and __slab_alloc_node() both calculate the
> NUMA policy independently. Since they are called consecutively in paths
> like __kmalloc_nolock_noprof() and slab_alloc_node(), this leads to
> redundant code snippets.

Right.

> Introduce a helper function to resolve the NUMA policy once, eliminating
> the duplicated code and reducing execution overhead.

Nice.

> Also remove __slab_alloc_node() function because it is almost empty.

Nice!

> The callers of __slab_alloc_node now call ___slab_alloc() directly.
>
> Additional notes:
>
> Previously, when slab_strict_numa was enabled, alloc_from_pcs() and
> __slab_alloc_node() could each resolve the task mempolicy, so
> MPOL_INTERLEAVE or MPOL_WEIGHTED_INTERLEAVE could advance the
> interleave state twice for a single object allocation attempt.
>
> With this change, the strict NUMA node is resolved once and reused by
> both alloc_from_pcs() and ___slab_alloc().

Nice catch!

> This is a behavior change, but it better matches the intent of
> selecting one policy node for one allocation attempt.

Right.

and I think backporting is unnecessary here.

> Signed-off-by: Hao Li <hao.li@xxxxxxxxx>
> ---
> Changes in v2:
> * Use a better function name apply_strict_numa_policy() (Thanks Harry)
> * Remove almost empty function __slab_alloc_node.
> * Add a local variable, strict_node, so the retry path in
> __kmalloc_nolock_noprof() computes the strict NUMA node from the original
> node parameter instead of a previously resolved node value.

What about overriding 'node' before retry label instead?

node = apply_strict_numa_policy(node);
[...]
retry:
[...]

Otherwise LGTM.

--
Cheers,
Harry / Hyeonggon

Attachment: OpenPGP_signature.asc
Description: OpenPGP digital signature