]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
memblock: move reserve_bootmem_range() to memblock.c and make it static
authorMike Rapoport (Microsoft) <rppt@kernel.org>
Mon, 23 Mar 2026 07:20:42 +0000 (09:20 +0200)
committerMike Rapoport (Microsoft) <rppt@kernel.org>
Wed, 1 Apr 2026 08:19:45 +0000 (11:19 +0300)
reserve_bootmem_region() is only called from
memmap_init_reserved_pages() and it was in mm/mm_init.c because of its
dependecies on static init_deferred_page().

Since init_deferred_page() is not static anymore, move
reserve_bootmem_region(), rename it to memmap_init_reserved_range() and
make it static.

Update the comment describing it to better reflect what the function
does and drop bogus comment about reserved pages in free_bootmem_page().

Update memblock test stubs to reflect the core changes.

Reviewed-by: Lorenzo Stoakes (Oracle) <ljs@kernel.org>
Reviewed-by: David Hildenbrand (Arm) <david@kernel.org>
Link: https://patch.msgid.link/20260323072042.3651061-1-rppt@kernel.org
Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
include/linux/bootmem_info.h
include/linux/mm.h
mm/memblock.c
mm/mm_init.c
tools/include/linux/mm.h
tools/testing/memblock/internal.h
tools/testing/memblock/mmzone.c

index 4c506e76a80859457c78337600f536a4e5521f10..492ceeb1cdf89af0a60c6caa2c2c713bf1eb2851 100644 (file)
@@ -44,10 +44,6 @@ static inline void free_bootmem_page(struct page *page)
 {
        enum bootmem_type type = bootmem_type(page);
 
-       /*
-        * The reserve_bootmem_region sets the reserved flag on bootmem
-        * pages.
-        */
        VM_BUG_ON_PAGE(page_ref_count(page) != 2, page);
 
        if (type == SECTION_INFO || type == MIX_SECTION_INFO)
index abb4963c1f0640067d551b37d63a21905eda23ed..764d10fdfb5deeb0895449fa30cc7b9eeaf784e1 100644 (file)
@@ -3686,9 +3686,6 @@ extern unsigned long free_reserved_area(void *start, void *end,
 
 extern void adjust_managed_page_count(struct page *page, long count);
 
-extern void reserve_bootmem_region(phys_addr_t start,
-                                  phys_addr_t end, int nid);
-
 /* Free the reserved page into the buddy system, so it gets managed. */
 void free_reserved_page(struct page *page);
 
index 57d96f2484ccd2504f41478b8982deea2bc8687f..eaaa6110bcc1b41f8a9e71c4c2d4c28768b8ab89 100644 (file)
@@ -974,7 +974,7 @@ __init void memmap_init_kho_scratch_pages(void)
        /*
         * Initialize struct pages for free scratch memory.
         * The struct pages for reserved scratch memory will be set up in
-        * reserve_bootmem_region()
+        * memmap_init_reserved_pages()
         */
        __for_each_mem_range(i, &memblock.memory, NULL, NUMA_NO_NODE,
                             MEMBLOCK_KHO_SCRATCH, &start, &end, &nid) {
@@ -2241,6 +2241,31 @@ static unsigned long __init __free_memory_core(phys_addr_t start,
        return end_pfn - start_pfn;
 }
 
+/*
+ * Initialised pages do not have PageReserved set. This function is called
+ * for each reserved range and marks the pages PageReserved.
+ * When deferred initialization of struct pages is enabled it also ensures
+ * that struct pages are properly initialised.
+ */
+static void __init memmap_init_reserved_range(phys_addr_t start,
+                                             phys_addr_t end, int nid)
+{
+       unsigned long pfn;
+
+       for_each_valid_pfn(pfn, PFN_DOWN(start), PFN_UP(end)) {
+               struct page *page = pfn_to_page(pfn);
+
+               init_deferred_page(pfn, nid);
+
+               /*
+                * no need for atomic set_bit because the struct
+                * page is not visible yet so nobody should
+                * access it yet.
+                */
+               __SetPageReserved(page);
+       }
+}
+
 static void __init memmap_init_reserved_pages(void)
 {
        struct memblock_region *region;
@@ -2260,7 +2285,7 @@ repeat:
                end = start + region->size;
 
                if (memblock_is_nomap(region))
-                       reserve_bootmem_region(start, end, nid);
+                       memmap_init_reserved_range(start, end, nid);
 
                memblock_set_node(start, region->size, &memblock.reserved, nid);
        }
@@ -2285,7 +2310,7 @@ repeat:
                        if (!numa_valid_node(nid))
                                nid = early_pfn_to_nid(PFN_DOWN(start));
 
-                       reserve_bootmem_region(start, end, nid);
+                       memmap_init_reserved_range(start, end, nid);
                }
        }
 }
index df34797691bda2423132b10d0a84cc2d8a9177d0..ea8d3de43470d6fd52d7ed45cf6b9194e6cf2d08 100644 (file)
@@ -772,31 +772,6 @@ void __meminit init_deferred_page(unsigned long pfn, int nid)
        __init_deferred_page(pfn, nid);
 }
 
-/*
- * Initialised pages do not have PageReserved set. This function is
- * called for each range allocated by the bootmem allocator and
- * marks the pages PageReserved. The remaining valid pages are later
- * sent to the buddy page allocator.
- */
-void __meminit reserve_bootmem_region(phys_addr_t start,
-                                     phys_addr_t end, int nid)
-{
-       unsigned long pfn;
-
-       for_each_valid_pfn(pfn, PFN_DOWN(start), PFN_UP(end)) {
-               struct page *page = pfn_to_page(pfn);
-
-               __init_deferred_page(pfn, nid);
-
-               /*
-                * no need for atomic set_bit because the struct
-                * page is not visible yet so nobody should
-                * access it yet.
-                */
-               __SetPageReserved(page);
-       }
-}
-
 /* If zone is ZONE_MOVABLE but memory is mirrored, it is an overlapped init */
 static bool __meminit
 overlap_memmap_init(unsigned long zone, unsigned long *pfn)
index 028f3faf46e71f60b5a91da8bb6c2c099ca049d7..74cbd51dbea294fe227e6c5777543c1e052510ad 100644 (file)
@@ -32,8 +32,6 @@ static inline phys_addr_t virt_to_phys(volatile void *address)
        return (phys_addr_t)address;
 }
 
-void reserve_bootmem_region(phys_addr_t start, phys_addr_t end, int nid);
-
 static inline void totalram_pages_inc(void)
 {
 }
index 009b97bbdd22cbd50bf4aafc618c746445c7265b..eb02d5771f4c8e7665a24e235dc202fa844e80f8 100644 (file)
@@ -29,4 +29,13 @@ static inline unsigned long free_reserved_area(void *start, void *end,
        return 0;
 }
 
+#define for_each_valid_pfn(pfn, start_pfn, end_pfn)                     \
+       for ((pfn) = (start_pfn); (pfn) < (end_pfn); (pfn)++)
+
+static inline void init_deferred_page(unsigned long pfn, int nid)
+{
+}
+
+#define __SetPageReserved(p)   ((void)(p))
+
 #endif
index d3d58851864e7c7f842e201a1032bf195d50bd7a..e719450f81cbe3e0150f5ca232b0019cb3d0238a 100644 (file)
@@ -11,10 +11,6 @@ struct pglist_data *next_online_pgdat(struct pglist_data *pgdat)
        return NULL;
 }
 
-void reserve_bootmem_region(phys_addr_t start, phys_addr_t end, int nid)
-{
-}
-
 void atomic_long_set(atomic_long_t *v, long i)
 {
 }