• Joonsoo Kim's avatar
    mm/page_alloc: fix memalloc_nocma_{save/restore} APIs · 8510e69c
    Joonsoo Kim authored
    Currently, memalloc_nocma_{save/restore} API that prevents CMA area
    in page allocation is implemented by using current_gfp_context(). However,
    there are two problems of this implementation.
    
    First, this doesn't work for allocation fastpath. In the fastpath,
    original gfp_mask is used since current_gfp_context() is introduced in
    order to control reclaim and it is on slowpath. So, CMA area can be
    allocated through the allocation fastpath even if
    memalloc_nocma_{save/restore} APIs are used. Currently, there is just
    one user for these APIs and it has a fallback method to prevent actual
    problem.
    Second, clearing __GFP_MOVABLE in current_gfp_context() has a side effect
    to exclude the memory on the ZONE_MOVABLE for allocation target.
    
    To fix these problems, this patch changes the implementation to exclude
    CMA area in page allocation. Main point of this change is using the
    alloc_flags. alloc_flags is mainly used to control allocation so it fits
    for excluding CMA area in allocation.
    
    Fixes: d7fefcc8 (mm/cma: add PF flag to force non cma alloc)
    Signed-off-by: default avatarJoonsoo Kim <iamjoonsoo.kim@lge.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Reviewed-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Cc: Christoph Hellwig <hch@infradead.org>
    Cc: Roman Gushchin <guro@fb.com>
    Cc: Mike Kravetz <mike.kravetz@oracle.com>
    Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: "Aneesh Kumar K . V" <aneesh.kumar@linux.ibm.com>
    Link: http://lkml.kernel.org/r/1595468942-29687-1-git-send-email-iamjoonsoo.kim@lge.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    8510e69c
page_alloc.c 242 KB