• Pavel Tatashin's avatar
    mm: zero unavailable pages before memmap init · e181ae0c
    Pavel Tatashin authored
    We must zero struct pages for memory that is not backed by physical
    memory, or kernel does not have access to.
    
    Recently, there was a change which zeroed all memmap for all holes in
    e820.  Unfortunately, it introduced a bug that is discussed here:
    
      https://www.spinics.net/lists/linux-mm/msg156764.html
    
    Linus, also saw this bug on his machine, and confirmed that reverting
    commit 124049de ("x86/e820: put !E820_TYPE_RAM regions into
    memblock.reserved") fixes the issue.
    
    The problem is that we incorrectly zero some struct pages after they
    were setup.
    
    The fix is to zero unavailable struct pages prior to initializing of
    struct pages.
    
    A more detailed fix should come later that would avoid double zeroing
    cases: one in __init_single_page(), the other one in
    zero_resv_unavail().
    
    Fixes: 124049de ("x86/e820: put !E820_TYPE_RAM regions into memblock.reserved")
    Signed-off-by: default avatarPavel Tatashin <pasha.tatashin@oracle.com>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    e181ae0c
page_alloc.c 219 KB