|
@@ -816,9 +816,21 @@ void __init init_cma_reserved_pageblock(struct page *page)
|
|
|
set_page_count(p, 0);
|
|
|
} while (++p, --i);
|
|
|
|
|
|
- set_page_refcounted(page);
|
|
|
set_pageblock_migratetype(page, MIGRATE_CMA);
|
|
|
- __free_pages(page, pageblock_order);
|
|
|
+
|
|
|
+ if (pageblock_order >= MAX_ORDER) {
|
|
|
+ i = pageblock_nr_pages;
|
|
|
+ p = page;
|
|
|
+ do {
|
|
|
+ set_page_refcounted(p);
|
|
|
+ __free_pages(p, MAX_ORDER - 1);
|
|
|
+ p += MAX_ORDER_NR_PAGES;
|
|
|
+ } while (i -= MAX_ORDER_NR_PAGES);
|
|
|
+ } else {
|
|
|
+ set_page_refcounted(page);
|
|
|
+ __free_pages(page, pageblock_order);
|
|
|
+ }
|
|
|
+
|
|
|
adjust_managed_page_count(page, pageblock_nr_pages);
|
|
|
}
|
|
|
#endif
|