|
@@ -391,28 +391,6 @@ static inline bool compact_should_abort(struct compact_control *cc)
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
-/* Returns true if the page is within a block suitable for migration to */
|
|
|
|
-static bool suitable_migration_target(struct page *page)
|
|
|
|
-{
|
|
|
|
- /* If the page is a large free page, then disallow migration */
|
|
|
|
- if (PageBuddy(page)) {
|
|
|
|
- /*
|
|
|
|
- * We are checking page_order without zone->lock taken. But
|
|
|
|
- * the only small danger is that we skip a potentially suitable
|
|
|
|
- * pageblock, so it's not worth to check order for valid range.
|
|
|
|
- */
|
|
|
|
- if (page_order_unsafe(page) >= pageblock_order)
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /* If the block is MIGRATE_MOVABLE or MIGRATE_CMA, allow migration */
|
|
|
|
- if (migrate_async_suitable(get_pageblock_migratetype(page)))
|
|
|
|
- return true;
|
|
|
|
-
|
|
|
|
- /* Otherwise skip the block */
|
|
|
|
- return false;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
/*
|
|
/*
|
|
* Isolate free pages onto a private freelist. If @strict is true, will abort
|
|
* Isolate free pages onto a private freelist. If @strict is true, will abort
|
|
* returning 0 on any invalid PFNs or non-free pages inside of the pageblock
|
|
* returning 0 on any invalid PFNs or non-free pages inside of the pageblock
|
|
@@ -896,6 +874,29 @@ isolate_migratepages_range(struct compact_control *cc, unsigned long start_pfn,
|
|
|
|
|
|
#endif /* CONFIG_COMPACTION || CONFIG_CMA */
|
|
#endif /* CONFIG_COMPACTION || CONFIG_CMA */
|
|
#ifdef CONFIG_COMPACTION
|
|
#ifdef CONFIG_COMPACTION
|
|
|
|
+
|
|
|
|
+/* Returns true if the page is within a block suitable for migration to */
|
|
|
|
+static bool suitable_migration_target(struct page *page)
|
|
|
|
+{
|
|
|
|
+ /* If the page is a large free page, then disallow migration */
|
|
|
|
+ if (PageBuddy(page)) {
|
|
|
|
+ /*
|
|
|
|
+ * We are checking page_order without zone->lock taken. But
|
|
|
|
+ * the only small danger is that we skip a potentially suitable
|
|
|
|
+ * pageblock, so it's not worth to check order for valid range.
|
|
|
|
+ */
|
|
|
|
+ if (page_order_unsafe(page) >= pageblock_order)
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /* If the block is MIGRATE_MOVABLE or MIGRATE_CMA, allow migration */
|
|
|
|
+ if (migrate_async_suitable(get_pageblock_migratetype(page)))
|
|
|
|
+ return true;
|
|
|
|
+
|
|
|
|
+ /* Otherwise skip the block */
|
|
|
|
+ return false;
|
|
|
|
+}
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Based on information in the current compact_control, find blocks
|
|
* Based on information in the current compact_control, find blocks
|
|
* suitable for isolating free pages from and then isolate them.
|
|
* suitable for isolating free pages from and then isolate them.
|