Move struct page init to an helper function __init_zone_device_page().

Signed-off-by: Joao Martins <joao.m.mart...@oracle.com>
---
 mm/page_alloc.c | 74 +++++++++++++++++++++++++++----------------------
 1 file changed, 41 insertions(+), 33 deletions(-)

diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 43dd98446b0b..58974067bbd4 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -6237,6 +6237,46 @@ void __meminit memmap_init_range(unsigned long size, int 
nid, unsigned long zone
 }
 
 #ifdef CONFIG_ZONE_DEVICE
+static void __ref __init_zone_device_page(struct page *page, unsigned long pfn,
+                                         unsigned long zone_idx, int nid,
+                                         struct dev_pagemap *pgmap)
+{
+
+       __init_single_page(page, pfn, zone_idx, nid);
+
+       /*
+        * Mark page reserved as it will need to wait for onlining
+        * phase for it to be fully associated with a zone.
+        *
+        * We can use the non-atomic __set_bit operation for setting
+        * the flag as we are still initializing the pages.
+        */
+       __SetPageReserved(page);
+
+       /*
+        * ZONE_DEVICE pages union ->lru with a ->pgmap back pointer
+        * and zone_device_data.  It is a bug if a ZONE_DEVICE page is
+        * ever freed or placed on a driver-private list.
+        */
+       page->pgmap = pgmap;
+       page->zone_device_data = NULL;
+
+       /*
+        * Mark the block movable so that blocks are reserved for
+        * movable at startup. This will force kernel allocations
+        * to reserve their blocks rather than leaking throughout
+        * the address space during boot when many long-lived
+        * kernel allocations are made.
+        *
+        * Please note that MEMINIT_HOTPLUG path doesn't clear memmap
+        * because this is done early in section_activate()
+        */
+       if (IS_ALIGNED(pfn, pageblock_nr_pages)) {
+               set_pageblock_migratetype(page, MIGRATE_MOVABLE);
+               cond_resched();
+       }
+}
+
 void __ref memmap_init_zone_device(struct zone *zone,
                                   unsigned long start_pfn,
                                   unsigned long nr_pages,
@@ -6265,39 +6305,7 @@ void __ref memmap_init_zone_device(struct zone *zone,
        for (pfn = start_pfn; pfn < end_pfn; pfn++) {
                struct page *page = pfn_to_page(pfn);
 
-               __init_single_page(page, pfn, zone_idx, nid);
-
-               /*
-                * Mark page reserved as it will need to wait for onlining
-                * phase for it to be fully associated with a zone.
-                *
-                * We can use the non-atomic __set_bit operation for setting
-                * the flag as we are still initializing the pages.
-                */
-               __SetPageReserved(page);
-
-               /*
-                * ZONE_DEVICE pages union ->lru with a ->pgmap back pointer
-                * and zone_device_data.  It is a bug if a ZONE_DEVICE page is
-                * ever freed or placed on a driver-private list.
-                */
-               page->pgmap = pgmap;
-               page->zone_device_data = NULL;
-
-               /*
-                * Mark the block movable so that blocks are reserved for
-                * movable at startup. This will force kernel allocations
-                * to reserve their blocks rather than leaking throughout
-                * the address space during boot when many long-lived
-                * kernel allocations are made.
-                *
-                * Please note that MEMINIT_HOTPLUG path doesn't clear memmap
-                * because this is done early in section_activate()
-                */
-               if (IS_ALIGNED(pfn, pageblock_nr_pages)) {
-                       set_pageblock_migratetype(page, MIGRATE_MOVABLE);
-                       cond_resched();
-               }
+               __init_zone_device_page(page, pfn, zone_idx, nid, pgmap);
        }
 
        pr_info("%s initialised %lu pages in %ums\n", __func__,
-- 
2.17.1
_______________________________________________
Linux-nvdimm mailing list -- linux-nvdimm@lists.01.org
To unsubscribe send an email to linux-nvdimm-le...@lists.01.org

Reply via email to