• Michal Hocko's avatar
    Revert "mm, memory_hotplug: initialize struct pages for the full memory section" · 4aa9fc2a
    Michal Hocko authored
    This reverts commit 2830bf6f.
    
    The underlying assumption that one sparse section belongs into a single
    numa node doesn't hold really. Robert Shteynfeld has reported a boot
    failure. The boot log was not captured but his memory layout is as
    follows:
    
      Early memory node ranges
        node   1: [mem 0x0000000000001000-0x0000000000090fff]
        node   1: [mem 0x0000000000100000-0x00000000dbdf8fff]
        node   1: [mem 0x0000000100000000-0x0000001423ffffff]
        node   0: [mem 0x0000001424000000-0x0000002023ffffff]
    
    This means that node0 starts in the middle of a memory section which is
    also in node1.  memmap_init_zone tries to initialize padding of a
    section even when it is outside of the given pfn range because there are
    code paths (e.g.  memory hotplug) which assume that the full worth of
    memory section is always initialized.
    
    In this particular case, though, such a range is already intialized and
    most likely already managed by the page allocator.  Scribbling over
    those pages corrupts the internal state and likely blows up when any of
    those pages gets used.
    Reported-by: default avatarRobert Shteynfeld <robert.shteynfeld@gmail.com>
    Fixes: 2830bf6f ("mm, memory_hotplug: initialize struct pages for the full memory section")
    Cc: stable@kernel.org
    Signed-off-by: default avatarMichal Hocko <mhocko@suse.com>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    4aa9fc2a
page_alloc.c 230 KB