Re: [PATCH v3 2/6] mm: hugetlb: Move mpol interpretation out of alloc_buddy_hugetlb_folio_with_mpol()
From: Ackerley Tng
Date: Tue May 19 2026 - 14:32:04 EST
Ackerley Tng via B4 Relay <devnull+ackerleytng.google.com@xxxxxxxxxx>
writes:
>
> [...snip...]
>
> diff --git a/mm/hugetlb.c b/mm/hugetlb.c
> index 190ab539a97d4..6a5f69b3b1cb4 100644
> --- a/mm/hugetlb.c
> +++ b/mm/hugetlb.c
> @@ -1334,6 +1334,12 @@ static unsigned long available_huge_pages(struct hstate *h)
> return h->free_huge_pages - h->resv_huge_pages;
> }
>
> +struct mempolicy_interpreted {
> + int nid;
> + nodemask_t *nodemask;
> + enum mempolicy_mode mode;
> +};
> +
>
> [...snip...]
>
> @@ -2941,8 +2943,20 @@ struct folio *alloc_hugetlb_folio(struct vm_area_struct *vma,
> folio = dequeue_hugetlb_folio_vma(h, vma, addr);
>
> if (!folio) {
> + struct mempolicy_interpreted mpoli;
> + struct mempolicy *mpol;
> + nodemask_t *nodemask;
> + int nid;
> +
> spin_unlock_irq(&hugetlb_lock);
> - folio = alloc_buddy_hugetlb_folio_with_mpol(h, vma, addr);
> + nid = huge_node(vma, addr, gfp, &mpol, &nodemask);
> + mpoli = (struct mempolicy_interpreted){
> + .nid = nid,
> + .mode = mpol->mode,
> + .nodemask = nodemask,
> + };
This needs to take into account CONFIG_NUMA, so the next revision will
look something like this instead:
mpoli = (struct mempolicy_interpreted){
.nid = nid,
#ifdef CONFIG_NUMA
.mode = mpol ? mpol->mode : MPOL_DEFAULT,
#else
.mode = MPOL_DEFAULT,
#endif
.nodemask = nodemask,
};
> + folio = alloc_buddy_hugetlb_folio(h, gfp, &mpoli);
> + mpol_cond_put(mpol);
> if (!folio)
> goto out_uncharge_cgroup;
> spin_lock_irq(&hugetlb_lock);
>
> [...snip...]
>