• Mike Rapoport's avatar
    alpha: register early reserved memory in memblock · 640b7ea5
    Mike Rapoport authored
    The memory reserved by console/PALcode or non-volatile memory is not added
    to memblock.memory.
    
    Since commit fa3354e4 (mm: free_area_init: use maximal zone PFNs rather
    than zone sizes) the initialization of the memory map relies on the
    accuracy of memblock.memory to properly calculate zone sizes. The holes in
    memblock.memory caused by absent regions reserved by the firmware cause
    incorrect initialization of struct pages which leads to BUG() during the
    initial page freeing:
    
    BUG: Bad page state in process swapper  pfn:2ffc53
    page:fffffc000ecf14c0 refcount:0 mapcount:1 mapping:0000000000000000 index:0x0
    flags: 0x0()
    raw: 0000000000000000 0000000000000000 0000000000000000 0000000000000000
    raw: 0000000000000000 0000000000000000 0000000000000000 0000000000000000
    page dumped because: nonzero mapcount
    Modules linked in:
    CPU: 0 PID: 0 Comm: swapper Not tainted 5.7.0-03841-gfa3354e4-dirty #26
           fffffc0001b5bd68 fffffc0001b5be80 fffffc00011cd148 fffffc000ecf14c0
           fffffc00019803df fffffc0001b5be80 fffffc00011ce340 fffffc000ecf14c0
           0000000000000000 fffffc0001b5be80 fffffc0001b482c0 fffffc00027d6618
           fffffc00027da7d0 00000000002ff97a 0000000000000000 fffffc0001b5be80
           fffffc00011d1abc fffffc000ecf14c0 fffffc0002d00000 fffffc0001b5be80
           fffffc0001b2350c 0000000000300000 fffffc0001b48298 fffffc0001b482c0
    Trace:
    [<fffffc00011cd148>] bad_page+0x168/0x1b0
    [<fffffc00011ce340>] free_pcp_prepare+0x1e0/0x290
    [<fffffc00011d1abc>] free_unref_page+0x2c/0xa0
    [<fffffc00014ee5f0>] cmp_ex_sort+0x0/0x30
    [<fffffc00014ee5f0>] cmp_ex_sort+0x0/0x30
    [<fffffc000101001c>] _stext+0x1c/0x20
    
    Fix this by registering the reserved ranges in memblock.memory.
    
    Link: https://lore.kernel.org/lkml/20210726192311.uffqnanxw3ac5wwi@ivybridge
    Fixes: fa3354e4 ("mm: free_area_init: use maximal zone PFNs rather than zone sizes")
    Reported-by: default avatarMatt Turner <mattst88@gmail.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarMike Rapoport <rppt@linux.ibm.com>
    Signed-off-by: default avatarMatt Turner <mattst88@gmail.com>
    640b7ea5
setup.c 36.6 KB