• A
    [PATCH] zone handle unaligned zone boundaries · cb2b95e1
    Andy Whitcroft 提交于
    The buddy allocator has a requirement that boundaries between contigious
    zones occur aligned with the the MAX_ORDER ranges.  Where they do not we
    will incorrectly merge pages cross zone boundaries.  This can lead to pages
    from the wrong zone being handed out.
    
    Originally the buddy allocator would check that buddies were in the same
    zone by referencing the zone start and end page frame numbers.  This was
    removed as it became very expensive and the buddy allocator already made
    the assumption that zones boundaries were aligned.
    
    It is clear that not all configurations and architectures are honouring
    this alignment requirement.  Therefore it seems safest to reintroduce
    support for non-aligned zone boundaries.  This patch introduces a new check
    when considering a page a buddy it compares the zone_table index for the
    two pages and refuses to merge the pages where they do not match.  The
    zone_table index is unique for each node/zone combination when
    FLATMEM/DISCONTIGMEM is enabled and for each section/zone combination when
    SPARSEMEM is enabled (a SPARSEMEM section is at least a MAX_ORDER size).
    Signed-off-by: NAndy Whitcroft <apw@shadowen.org>
    Cc: Dave Hansen <haveblue@us.ibm.com>
    Cc: Mel Gorman <mel@csn.ul.ie>
    Cc: Yasunori Goto <y-goto@jp.fujitsu.com>
    Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Signed-off-by: NAndrew Morton <akpm@osdl.org>
    Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
    cb2b95e1
page_alloc.c 70.2 KB