|
@@ -223,34 +223,16 @@ __test_page_isolated_in_pageblock(unsigned long pfn, unsigned long end_pfn,
|
|
|
continue;
|
|
|
}
|
|
|
page = pfn_to_page(pfn);
|
|
|
- if (PageBuddy(page)) {
|
|
|
+ if (PageBuddy(page))
|
|
|
/*
|
|
|
- * If race between isolatation and allocation happens,
|
|
|
- * some free pages could be in MIGRATE_MOVABLE list
|
|
|
- * although pageblock's migratation type of the page
|
|
|
- * is MIGRATE_ISOLATE. Catch it and move the page into
|
|
|
- * MIGRATE_ISOLATE list.
|
|
|
+ * If the page is on a free list, it has to be on
|
|
|
+ * the correct MIGRATE_ISOLATE freelist. There is no
|
|
|
+ * simple way to verify that as VM_BUG_ON(), though.
|
|
|
*/
|
|
|
- if (get_freepage_migratetype(page) != MIGRATE_ISOLATE) {
|
|
|
- struct page *end_page;
|
|
|
-
|
|
|
- end_page = page + (1 << page_order(page)) - 1;
|
|
|
- move_freepages(page_zone(page), page, end_page,
|
|
|
- MIGRATE_ISOLATE);
|
|
|
- }
|
|
|
pfn += 1 << page_order(page);
|
|
|
- }
|
|
|
- else if (page_count(page) == 0 &&
|
|
|
- get_freepage_migratetype(page) == MIGRATE_ISOLATE)
|
|
|
- pfn += 1;
|
|
|
- else if (skip_hwpoisoned_pages && PageHWPoison(page)) {
|
|
|
- /*
|
|
|
- * The HWPoisoned page may be not in buddy
|
|
|
- * system, and page_count() is not 0.
|
|
|
- */
|
|
|
+ else if (skip_hwpoisoned_pages && PageHWPoison(page))
|
|
|
+ /* A HWPoisoned page cannot be also PageBuddy */
|
|
|
pfn++;
|
|
|
- continue;
|
|
|
- }
|
|
|
else
|
|
|
break;
|
|
|
}
|