Skip to content
  • Joonsoo Kim's avatar
    mm/cma: change fallback behaviour for CMA freepage · dc67647b
    Joonsoo Kim authored
    
    
    Freepage with MIGRATE_CMA can be used only for MIGRATE_MOVABLE and they
    should not be expanded to other migratetype buddy list to protect them
    from unmovable/reclaimable allocation.  Implementing these requirements in
    __rmqueue_fallback(), that is, finding largest possible block of freepage
    has bad effect that high order freepage with MIGRATE_CMA are broken
    continually although there are suitable order CMA freepage.  Reason is
    that they are not be expanded to other migratetype buddy list and next
    __rmqueue_fallback() invocation try to finds another largest block of
    freepage and break it again.  So, MIGRATE_CMA fallback should be handled
    separately.  This patch introduces __rmqueue_cma_fallback(), that just
    wrapper of __rmqueue_smallest() and call it before __rmqueue_fallback() if
    migratetype == MIGRATE_MOVABLE.
    
    This results in unintended behaviour change that MIGRATE_CMA freepage is
    always used first rather than other migratetype as movable allocation's
    fallback.  But, as already mentioned above, MIGRATE_CMA can be used only
    for MIGRATE_MOVABLE, so it is better to use MIGRATE_CMA freepage first as
    much as possible.  Otherwise, we needlessly take up precious freepages
    with other migratetype and increase chance of fragmentation.
    
    Signed-off-by: default avatarJoonsoo Kim <iamjoonsoo.kim@lge.com>
    Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Cc: Mel Gorman <mgorman@suse.de>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Rik van Riel <riel@redhat.com>
    Cc: Zhang Yanfei <zhangyanfei@cn.fujitsu.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    dc67647b