diff options
author | Peter Zijlstra <peterz@infradead.org> | 2025-04-25 14:55:20 +0200 |
---|---|---|
committer | Peter Zijlstra <peterz@infradead.org> | 2025-04-25 14:55:20 +0200 |
commit | 1caafd919e2a5c483f7a27449f8497fa4b15a44f (patch) | |
tree | 0cfd4f3121273ae2bee75d3b01e376f742a31406 /lib/alloc_tag.c | |
parent | 2492e5aba2be064d0604ae23ae0770ecc0168192 (diff) | |
parent | 7da9960b59fb7e590eb8538c9428db55a4ea2d23 (diff) |
Merge branch 'perf/urgent'
Merge urgent fixes for dependencies.
Signed-off-by: Peter Zijlstra <peterz@infradead.org>
Diffstat (limited to 'lib/alloc_tag.c')
-rw-r--r-- | lib/alloc_tag.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/lib/alloc_tag.c b/lib/alloc_tag.c index 1d893e313614..25ecc1334b67 100644 --- a/lib/alloc_tag.c +++ b/lib/alloc_tag.c @@ -422,11 +422,20 @@ static int vm_module_tags_populate(void) unsigned long old_shadow_end = ALIGN(phys_end, MODULE_ALIGN); unsigned long new_shadow_end = ALIGN(new_end, MODULE_ALIGN); unsigned long more_pages; - unsigned long nr; + unsigned long nr = 0; more_pages = ALIGN(new_end - phys_end, PAGE_SIZE) >> PAGE_SHIFT; - nr = alloc_pages_bulk_node(GFP_KERNEL | __GFP_NOWARN, - NUMA_NO_NODE, more_pages, next_page); + while (nr < more_pages) { + unsigned long allocated; + + allocated = alloc_pages_bulk_node(GFP_KERNEL | __GFP_NOWARN, + NUMA_NO_NODE, more_pages - nr, next_page + nr); + + if (!allocated) + break; + nr += allocated; + } + if (nr < more_pages || vmap_pages_range(phys_end, phys_end + (nr << PAGE_SHIFT), PAGE_KERNEL, next_page, PAGE_SHIFT) < 0) { |