Merge 46487e0095 ("mm/page_alloc: refactor memmap_init_zone_device() page init") into android-mainline
Steps on the way to 5.17-rc1 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: Ie793221f8d9c00b305bd865478fd0e9e1da7ef39
This commit is contained in:
+41
-33
@@ -6572,6 +6572,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,
|
||||
@@ -6600,39 +6640,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__,
|
||||
|
||||
Reference in New Issue
Block a user