From: Wei Yang Date: Thu, 28 Aug 2025 09:16:18 +0000 (+0000) Subject: mm/page_alloc: find_large_buddy() from start_pfn aligned order X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=e8a00de02346b6638aea29dab48377ccaece6b74;p=users%2Fjedix%2Flinux-maple.git mm/page_alloc: find_large_buddy() from start_pfn aligned order We iterate pfn from order 0 to MAX_PAGE_ORDER aligned to find large buddy. While if the order is less than start_pfn aligned order, we would get the same pfn and do the same check again. Iterate from start_pfn aligned order to reduce duplicated work. Link: https://lkml.kernel.org/r/20250828091618.7869-1-richard.weiyang@gmail.com Link: https://lkml.kernel.org/r/20250902025807.11467-1-richard.weiyang@gmail.com Signed-off-by: Wei Yang Reviewed-by: Zi Yan Acked-by: Johannes Weiner Reviewed-by: Vishal Moola (Oracle) Reviewed-by: Vlastimil Babka Cc: David Hildenbrand Signed-off-by: Andrew Morton --- diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 2df6ee6998ab..d8b7268f19f7 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -2033,7 +2033,7 @@ static int move_freepages_block(struct zone *zone, struct page *page, /* Look for a buddy that straddles start_pfn */ static unsigned long find_large_buddy(unsigned long start_pfn) { - int order = 0; + int order = start_pfn ? __ffs(start_pfn) : MAX_PAGE_ORDER; struct page *page; unsigned long pfn = start_pfn;