aboutsummaryrefslogtreecommitdiffstats
path: root/mm/compaction.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/compaction.c')
-rw-r--r--mm/compaction.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/mm/compaction.c b/mm/compaction.c
index 7a92e418a187..da7d35ea5103 100644
--- a/mm/compaction.c
+++ b/mm/compaction.c
@@ -45,6 +45,11 @@ static void map_pages(struct list_head *list)
45 } 45 }
46} 46}
47 47
48static inline bool migrate_async_suitable(int migratetype)
49{
50 return is_migrate_cma(migratetype) || migratetype == MIGRATE_MOVABLE;
51}
52
48/* 53/*
49 * Isolate free pages onto a private freelist. Caller must hold zone->lock. 54 * Isolate free pages onto a private freelist. Caller must hold zone->lock.
50 * If @strict is true, will abort returning 0 on any invalid PFNs or non-free 55 * If @strict is true, will abort returning 0 on any invalid PFNs or non-free
@@ -299,7 +304,7 @@ isolate_migratepages_range(struct zone *zone, struct compact_control *cc,
299 */ 304 */
300 pageblock_nr = low_pfn >> pageblock_order; 305 pageblock_nr = low_pfn >> pageblock_order;
301 if (!cc->sync && last_pageblock_nr != pageblock_nr && 306 if (!cc->sync && last_pageblock_nr != pageblock_nr &&
302 get_pageblock_migratetype(page) != MIGRATE_MOVABLE) { 307 !migrate_async_suitable(get_pageblock_migratetype(page))) {
303 low_pfn += pageblock_nr_pages; 308 low_pfn += pageblock_nr_pages;
304 low_pfn = ALIGN(low_pfn, pageblock_nr_pages) - 1; 309 low_pfn = ALIGN(low_pfn, pageblock_nr_pages) - 1;
305 last_pageblock_nr = pageblock_nr; 310 last_pageblock_nr = pageblock_nr;
@@ -367,8 +372,8 @@ static bool suitable_migration_target(struct page *page)
367 if (PageBuddy(page) && page_order(page) >= pageblock_order) 372 if (PageBuddy(page) && page_order(page) >= pageblock_order)
368 return true; 373 return true;
369 374
370 /* If the block is MIGRATE_MOVABLE, allow migration */ 375 /* If the block is MIGRATE_MOVABLE or MIGRATE_CMA, allow migration */
371 if (migratetype == MIGRATE_MOVABLE) 376 if (migrate_async_suitable(migratetype))
372 return true; 377 return true;
373 378
374 /* Otherwise skip the block */ 379 /* Otherwise skip the block */