• J
    mm: page_alloc: remain memblock_next_valid_pfn() on arm/arm64 · 4f256a79
    Jia He 提交于
    hulk inclusion
    category: performance
    bugzilla: 11028
    CVE: NA
    
    -------------------------------------------------
    
    Commit b92df1de ("mm: page_alloc: skip over regions of invalid pfns
    where possible") optimized the loop in memmap_init_zone(). But it causes
    possible panic bug. So Daniel Vacek reverted it later.
    
    But as suggested by Daniel Vacek, it is fine to using memblock to skip
    gaps and finding next valid frame with CONFIG_HAVE_ARCH_PFN_VALID.
    Daniel said:
    "On arm and arm64, memblock is used by default. But generic version of
    pfn_valid() is based on mem sections and memblock_next_valid_pfn() does
    not always return the next valid one but skips more resulting in some
    valid frames to be skipped (as if they were invalid). And that's why
    kernel was eventually crashing on some !arm machines."
    
    About the performance consideration:
    As said by James in b92df1de,
    "I have tested this patch on a virtual model of a Samurai CPU
    with a sparse memory map.  The kernel boot time drops from 109 to
    62 seconds."
    
    Thus it would be better if we remain memblock_next_valid_pfn on arm/arm64.
    Suggested-by: NDaniel Vacek <neelx@redhat.com>
    Signed-off-by: NJia He <jia.he@hxt-semitech.com>
    Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
    Reviewed-by: Nzhong jiang <zhongjiang@huawei.com>
    Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
    4f256a79
mmzone.h 40.1 KB