• Mike Rapoport's avatar
    mm/page_alloc: fix memory map initialization for descending nodes · 122e093c
    Mike Rapoport authored
    On systems with memory nodes sorted in descending order, for instance Dell
    Precision WorkStation T5500, the struct pages for higher PFNs and
    respectively lower nodes, could be overwritten by the initialization of
    struct pages corresponding to the holes in the memory sections.
    
    For example for the below memory layout
    
    [    0.245624] Early memory node ranges
    [    0.248496]   node   1: [mem 0x0000000000001000-0x0000000000090fff]
    [    0.251376]   node   1: [mem 0x0000000000100000-0x00000000dbdf8fff]
    [    0.254256]   node   1: [mem 0x0000000100000000-0x0000001423ffffff]
    [    0.257144]   node   0: [mem 0x0000001424000000-0x0000002023ffffff]
    
    the range 0x1424000000 - 0x1428000000 in the beginning of node 0 starts in
    the middle of a section and will be considered as a hole during the
    initialization of the last section in node 1.
    
    The wrong initialization of the memory map causes panic on boot when
    CONFIG_DEBUG_VM is enabled.
    
    Reorder loop order of the memory map initialization so that the outer loop
    will always iterate over populated memory regions in the ascending order
    and the inner loop will select the zone corresponding to the PFN range.
    
    This way initialization of the struct pages for the memory holes will be
    always done for the ranges that are actually not populated.
    
    [akpm@linux-foundation.org: coding style fixes]
    
    Link: https://lkml.kernel.org/r/YNXlMqBbL+tBG7yq@kernel.org
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=213073
    Link: https://lkml.kernel.org/r/20210624062305.10940-1-rppt@kernel.org
    Fixes: 0740a50b ("mm/page_alloc.c: refactor initialization of struct page for holes in memory layout")
    Signed-off-by: default avatarMike Rapoport <rppt@linux.ibm.com>
    Cc: Boris Petkov <bp@alien8.de>
    Cc: Robert Shteynfeld <robert.shteynfeld@gmail.com>
    Cc: Baoquan He <bhe@redhat.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    122e093c
page_alloc.c 256 KB