diff options
Diffstat (limited to 'mm/page_alloc.c')
| -rw-r--r-- | mm/page_alloc.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 2c12348ac..1135f4a10 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -1318,7 +1318,8 @@ static int preferred_mt = MIGRATE_MOVABLE; * half of the pageblock, change pageblock's migratetype as well. */ static void try_to_steal_freepages(struct zone *zone, struct page *page, - int start_type, int fallback_type) + int start_type, int fallback_type, + int start_order) { int current_order = page_order(page); @@ -1330,7 +1331,8 @@ static void try_to_steal_freepages(struct zone *zone, struct page *page, if (current_order >= pageblock_order / 2 || start_type == MIGRATE_RECLAIMABLE || - start_type == MIGRATE_UNMOVABLE || + // allow unmovable allocs up to 64K without migrating blocks + (start_type == MIGRATE_UNMOVABLE && start_order >= 5) || page_group_by_mobility_disabled) { int pages; @@ -1408,8 +1410,8 @@ __rmqueue_fallback(struct zone *zone, int order, int start_migratetype) if (!is_migrate_cma(migratetype)) { try_to_steal_freepages(zone, page, - start_migratetype, - migratetype); + start_migratetype, + migratetype, order); } else { /* * When borrowing from MIGRATE_CMA, we need to |
