arm64: setup min_low_pfn
authorMiles Chen <miles.chen@mediatek.com>
Thu, 21 Mar 2019 04:21:25 +0000 (12:21 +0800)
committerWill Deacon <will.deacon@arm.com>
Wed, 3 Apr 2019 12:07:59 +0000 (13:07 +0100)
When debugging with CONFIG_PAGE_OWNER, I noticed that the min_low_pfn
on arm64 is always zero and the page owner scanning has to start from zero.
We have to loop a while before we see the first valid pfn.
(see: read_page_owner())

Setup min_low_pfn to save some loops.

Before setting min_low_pfn:

[   21.265602] min_low_pfn=0, *ppos=0
Page allocated via order 0, mask 0x100cca(GFP_HIGHUSER_MOVABLE)
PFN 262144 type Movable Block 512 type Movable Flags 0x8001e
referenced|uptodate|dirty|lru|swapbacked)
prep_new_page+0x13c/0x140
get_page_from_freelist+0x254/0x1068
__alloc_pages_nodemask+0xd4/0xcb8

After setting min_low_pfn:

[   11.025787] min_low_pfn=262144, *ppos=0
Page allocated via order 0, mask 0x100cca(GFP_HIGHUSER_MOVABLE)
PFN 262144 type Movable Block 512 type Movable Flags 0x8001e
referenced|uptodate|dirty|lru|swapbacked)
prep_new_page+0x13c/0x140
get_page_from_freelist+0x254/0x1068
__alloc_pages_nodemask+0xd4/0xcb8
shmem_alloc_page+0x7c/0xa0
shmem_alloc_and_acct_page+0x124/0x1e8
shmem_getpage_gfp.isra.7+0x118/0x878
shmem_write_begin+0x38/0x68

Signed-off-by: Miles Chen <miles.chen@mediatek.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
arch/arm64/mm/init.c

index c29b17b..43fa756 100644 (file)
@@ -440,6 +440,7 @@ void __init bootmem_init(void)
        early_memtest(min << PAGE_SHIFT, max << PAGE_SHIFT);
 
        max_pfn = max_low_pfn = max;
+       min_low_pfn = min;
 
        arm64_numa_init();
        /*