• David Hildenbrand's avatar
    mm/page_alloc.c: initialize memmap of unavailable memory directly · 4b094b78
    David Hildenbrand authored
    Let's make sure that all memory holes are actually marked PageReserved(),
    that page_to_pfn() produces reliable results, and that these pages are not
    detected as "mmap" pages due to the mapcount.
    
    E.g., booting a x86-64 QEMU guest with 4160 MB:
    
    [    0.010585] Early memory node ranges
    [    0.010586]   node   0: [mem 0x0000000000001000-0x000000000009efff]
    [    0.010588]   node   0: [mem 0x0000000000100000-0x00000000bffdefff]
    [    0.010589]   node   0: [mem 0x0000000100000000-0x0000000143ffffff]
    
    max_pfn is 0x144000.
    
    Before this change:
    
    [root@localhost ~]# ./page-types -r -a 0x144000,
                 flags      page-count       MB  symbolic-flags                     long-symbolic-flags
    0x0000000000000800           16384       64  ___________M_______________________________        mmap
                 total           16384       64
    
    After this change:
    
    [root@localhost ~]# ./page-types -r -a 0x144000,
                 flags      page-count       MB  symbolic-flags                     long-symbolic-flags
    0x0000000100000000           16384       64  ___________________________r_______________        reserved
                 total           16384       64
    
    IOW, especially the unavailable physical memory ("memory hole") in the
    last section would not get properly marked PageReserved() and is indicated
    to be "mmap" memory.
    
    Drop the trace of that function from include/linux/mm.h - nobody else
    needs it, and rename it accordingly.
    
    Note: The fake zone/node might not be covered by the zone/node span.  This
    is not an urgent issue (for now, we had the same node/zone due to the
    zeroing).  We'll need a clean way to mark memory holes (e.g., using a page
    type PageHole() if possible or a fake ZONE_INVALID) and eventually stop
    marking these memory holes PageReserved().
    
    Link: http://lkml.kernel.org/r/20191211163201.17179-4-david@redhat.comSigned-off-by: default avatarDavid Hildenbrand <david@redhat.com>
    Cc: Oscar Salvador <osalvador@suse.de>
    Cc: Michal Hocko <mhocko@kernel.org>
    Cc: Dan Williams <dan.j.williams@intel.com>
    Cc: Alexey Dobriyan <adobriyan@gmail.com>
    Cc: Bob Picco <bob.picco@oracle.com>
    Cc: Daniel Jordan <daniel.m.jordan@oracle.com>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
    Cc: Pavel Tatashin <pasha.tatashin@oracle.com>
    Cc: Stephen Rothwell <sfr@canb.auug.org.au>
    Cc: Steven Sistare <steven.sistare@oracle.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    4b094b78
page_alloc.c 241 KB