Re: [PATCH] mm/hugetlb: two-phase hugepage allocation when reservation is high
From: David Hildenbrand
Date: Wed Aug 27 2025 - 08:43:42 EST
On 27.08.25 14:33, Li,Rongqing wrote:
Not sure if something like the following could fly:
diff --git a/mm/hugetlb.c b/mm/hugetlb.c index
1f42186a85ea4..dfb4d717b8a02 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -3595,8 +3595,6 @@ static unsigned long __init
hugetlb_pages_alloc_boot(struct hstate *h)
unsigned long jiffies_end;
job.thread_fn = hugetlb_pages_alloc_boot_node;
- job.start = 0;
- job.size = h->max_huge_pages;
/*
* job.max_threads is 25% of the available cpu threads by default.
@@ -3620,10 +3618,24 @@ static unsigned long __init
hugetlb_pages_alloc_boot(struct hstate *h)
}
job.max_threads = hugepage_allocation_threads;
- job.min_chunk = h->max_huge_pages /
hugepage_allocation_threads;
jiffies_start = jiffies;
- padata_do_multithreaded(&job);
+ /* TODO: comment why we retry and how it interacts with
vmemmap op. */
+ while (h->nr_huge_pages != h->max_huge_pages) {
+ unsigned long remaining = h->max_huge_pages -
+ h->nr_huge_pages;
+
+ job.start = h->nr_huge_pages;
+ job.size = remaining;
+ job.min_chunk = remaining /
hugepage_allocation_threads;
+ padata_do_multithreaded(&job);
+
+ if (hugetlb_vmemmap_optimizable(h))
+ break;
It should be:
if (!hugetlb_vmemmap_optimizable(h))
break;
Very right.
--
Cheers
David / dhildenb