X-Git-Url: https://git.karo-electronics.de/?a=blobdiff_plain;f=mm%2Fpage_alloc.c;h=0ea758b898fdae74dbe5bf414b8995c4c944e7b3;hb=90d51d56069f8c63b043bacf55c62a98df88ef67;hp=20d17f8266fed9e482055c5c68034b8149f3329c;hpb=d92a333a65a17b8638a0980df4bedf8a262b12f3;p=karo-tx-linux.git diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 20d17f8266fe..0ea758b898fd 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -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