[PATCH v5 1/9] mm/page_alloc: factor out the accept-and-free tail of __free_pages_core()
From: Breno Leitao
Date: Tue Sep 15 2026 - 10:28:25 EST
__free_pages_core() ends by accepting the block if it is still
unaccepted and then handing it to the allocator. The poisoned-memory
replay later in this series needs that same tail for the parts of a
block it does not withhold.
Move it into accept_and_free_block(). This will be used later, when
we need to accept and free a subset of a order-block that is
not-poisioned.
Signed-off-by: Breno Leitao <leitao@xxxxxxxxxx>
---
mm/page_alloc.c | 31 +++++++++++++++++++------------
1 file changed, 19 insertions(+), 12 deletions(-)
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 404896b53003ef..b07b5f4751cb95 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -1579,6 +1579,24 @@ static void __free_pages_ok(struct page *page, unsigned int order,
free_one_page(zone, page, pfn, order, fpi_flags);
}
+/* Accept the block if it needs it, then hand it to the allocator. */
+static void __meminit accept_and_free_block(struct page *page,
+ unsigned int order)
+{
+ if (page_contains_unaccepted(page, order)) {
+ if (order == MAX_PAGE_ORDER && __free_unaccepted(page))
+ return;
+
+ accept_memory(page_to_phys(page), PAGE_SIZE << order);
+ }
+
+ /*
+ * Bypass PCP and place fresh pages right to the tail, primarily
+ * relevant for memory onlining.
+ */
+ __free_pages_ok(page, order, FPI_TO_TAIL);
+}
+
void __meminit __free_pages_core(struct page *page, unsigned int order,
enum meminit_context context)
{
@@ -1613,18 +1631,7 @@ void __meminit __free_pages_core(struct page *page, unsigned int order,
atomic_long_add(nr_pages, &page_zone(page)->managed_pages);
}
- if (page_contains_unaccepted(page, order)) {
- if (order == MAX_PAGE_ORDER && __free_unaccepted(page))
- return;
-
- accept_memory(page_to_phys(page), PAGE_SIZE << order);
- }
-
- /*
- * Bypass PCP and place fresh pages right to the tail, primarily
- * relevant for memory onlining.
- */
- __free_pages_ok(page, order, FPI_TO_TAIL);
+ accept_and_free_block(page, order);
}
/*
--
2.53.0-Meta