• Bob Picco's avatar
    [PATCH] Align the node_mem_map endpoints to a MAX_ORDER boundary · e984bb43
    Bob Picco authored
    Andy added code to buddy allocator which does not require the zone's
    endpoints to be aligned to MAX_ORDER.  An issue is that the buddy allocator
    requires the node_mem_map's endpoints to be MAX_ORDER aligned.  Otherwise
    __page_find_buddy could compute a buddy not in node_mem_map for partial
    MAX_ORDER regions at zone's endpoints.  page_is_buddy will detect that
    these pages at endpoints are not PG_buddy (they were zeroed out by bootmem
    allocator and not part of zone).  Of course the negative here is we could
    waste a little memory but the positive is eliminating all the old checks
    for zone boundary conditions.
    
    SPARSEMEM won't encounter this issue because of MAX_ORDER size constraint
    when SPARSEMEM is configured.  ia64 VIRTUAL_MEM_MAP doesn't need the logic
    either because the holes and endpoints are handled differently.  This
    leaves checking alloc_remap and other arches which privately allocate for
    node_mem_map.
    Signed-off-by: default avatarBob Picco <bob.picco@hp.com>
    Acked-by: default avatarMel Gorman <mel@csn.ul.ie>
    Cc: Dave Hansen <haveblue@us.ibm.com>
    Cc: Andy Whitcroft <apw@shadowen.org>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    e984bb43
page_alloc.c 70.1 KB