unsigned int pageblock_order __read_mostly;
 #endif
 
-static void __free_pages_ok(struct page *page, unsigned int order);
+static void __free_pages_ok(struct page *page, unsigned int order,
+                           fpi_t fpi_flags);
 
 /*
  * results with 256, 32 in the lowmem_reserve sysctl:
 void free_compound_page(struct page *page)
 {
        mem_cgroup_uncharge(page);
-       __free_pages_ok(page, compound_order(page));
+       __free_pages_ok(page, compound_order(page), FPI_NONE);
 }
 
 void prep_compound_page(struct page *page, unsigned int order)
 static void free_one_page(struct zone *zone,
                                struct page *page, unsigned long pfn,
                                unsigned int order,
-                               int migratetype)
+                               int migratetype, fpi_t fpi_flags)
 {
        spin_lock(&zone->lock);
        if (unlikely(has_isolate_pageblock(zone) ||
                is_migrate_isolate(migratetype))) {
                migratetype = get_pfnblock_migratetype(page, pfn);
        }
-       __free_one_page(page, pfn, zone, order, migratetype, FPI_NONE);
+       __free_one_page(page, pfn, zone, order, migratetype, fpi_flags);
        spin_unlock(&zone->lock);
 }
 
        }
 }
 
-static void __free_pages_ok(struct page *page, unsigned int order)
+static void __free_pages_ok(struct page *page, unsigned int order,
+                           fpi_t fpi_flags)
 {
        unsigned long flags;
        int migratetype;
        migratetype = get_pfnblock_migratetype(page, pfn);
        local_irq_save(flags);
        __count_vm_events(PGFREE, 1 << order);
-       free_one_page(page_zone(page), page, pfn, order, migratetype);
+       free_one_page(page_zone(page), page, pfn, order, migratetype,
+                     fpi_flags);
        local_irq_restore(flags);
 }
 
        struct page *p = page;
        unsigned int loop;
 
+       /*
+        * When initializing the memmap, __init_single_page() sets the refcount
+        * of all pages to 1 ("allocated"/"not free"). We have to set the
+        * refcount of all involved pages to 0.
+        */
        prefetchw(p);
        for (loop = 0; loop < (nr_pages - 1); loop++, p++) {
                prefetchw(p + 1);
        set_page_count(p, 0);
 
        atomic_long_add(nr_pages, &page_zone(page)->managed_pages);
-       set_page_refcounted(page);
-       __free_pages(page, order);
+
+       /*
+        * Bypass PCP and place fresh pages right to the tail, primarily
+        * relevant for memory onlining.
+        */
+       __free_pages_ok(page, order, FPI_TO_TAIL);
 }
 
 #ifdef CONFIG_NEED_MULTIPLE_NODES
         */
        if (migratetype >= MIGRATE_PCPTYPES) {
                if (unlikely(is_migrate_isolate(migratetype))) {
-                       free_one_page(zone, page, pfn, 0, migratetype);
+                       free_one_page(zone, page, pfn, 0, migratetype,
+                                     FPI_NONE);
                        return;
                }
                migratetype = MIGRATE_MOVABLE;
        if (order == 0)         /* Via pcp? */
                free_unref_page(page);
        else
-               __free_pages_ok(page, order);
+               __free_pages_ok(page, order, FPI_NONE);
 }
 
 void __free_pages(struct page *page, unsigned int order)