On Tue, 02 Jun 2026 18:10:34 +0800, Muchun Song <[email protected]> 
wrote:

Hi Muchun,

>
> diff --git a/mm/hugetlb.c b/mm/hugetlb.c
> index 5e557c05d80a..218fb1ca45f4 100644
> --- a/mm/hugetlb.c
> +++ b/mm/hugetlb.c
> @@ -3073,22 +3076,38 @@ static bool __init alloc_bootmem_huge_page(struct 
> hstate *h, int nid)
> [ ... skip 26 lines ... ]
> +              * pages belonging to the requested node.
> +              */
> +             if (WARN_ON_ONCE(nid_request != NUMA_NO_NODE && nid != 
> nid_request))
> +                     list_add(&m->list, &huge_boot_pages[nid_request]);
> +             else
> +                     list_add(&m->list, &huge_boot_pages[nid]);

Can we just memblock_free() the page that intersects zones here?

Rather than making alloc_bootmem_huge_page() bool (sorry my bad :)) we
can make it return -ENOMEM when memblock_alloc() fails, 0 if the page is
not usable and 1 (i.e. number of allocated gigantic pages) if everything
is fine.

The callers would need a bit of massage, but it still seems simpler to
me than adding them to the list and then walking that list.

-- 
Sincerely yours,
Mike.


Reply via email to