• Mel Gorman's avatar
    x86: make NUMA work on 32-bit again · bac4894d
    Mel Gorman authored
    On 32-bit NUMA, the memmap representing struct pages on each node is
    allocated from node-local memory if possible. As only node-0 has memory from
    ZONE_NORMAL, the memmap must be mapped into low memory. This is done by
    reserving space in the Kernel Virtual Area (KVA) for the memmap belonging
    to other nodes by taking pages from the end of ZONE_NORMAL and remapping
    the other nodes memmap into those virtual addresses. The node boundaries
    are then adjusted so that the region of pages is not used and it is marked
    as reserved in the bootmem allocator.
    
    This reserved portion of the KVA is PMD aligned althought
    strictly speaking that requirement could be lifted (see thread at
    http://lkml.org/lkml/2007/8/24/220). The problem is that when aligned, there
    may be a portion of ZONE_NORMAL at the end that is not used for memmap and
    does not have an initialised memmap nor is it marked reserved in the bootmem
    allocator. Later in the boot process, these pages are freed and a storm of
    Bad page state messages result.
    
    This patch marks these pages reserved that are wasted due to alignment
    in the bootmem allocator so they are not accidently freed. It is worth
    noting that memory from node-0 is wasted where it could have been put into
    ZONE_HIGHMEM on NUMA machines. Worse, the KVA is always reserved from the
    location of real memory even when there is plenty of spare virtual address
    space.
    
    This patch also makes sure that reserve_bootmem() is not called with a
    0-length size in numa_kva_reserve().  When this happens, it usually means
    that a kernel built for Summit is being booted on a normal machine. The
    resulting BUG_ON() is misleading so it is caught here.
    Signed-off-by: default avatarMel Gorman <mel@csn.ul.ie>
    Signed-off-by: default avatarAndy Whitcroft <apw@shadowen.org>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    bac4894d
discontig_32.c 12.6 KB