diff options
Diffstat (limited to 'mm/compaction.c')
-rw-r--r-- | mm/compaction.c | 11 |
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 | ||
48 | static 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 */ |