__SetPageHead(page);
for (i = 1; i < nr_pages; i++) {
struct page *p = page + i;
- __SetPageTail(p);
set_page_count(p, 0);
p->first_page = page;
+ /* Make sure p->first_page is always valid for PageTail() */
+ smp_wmb();
+ __SetPageTail(p);
}
}
page = list_entry(area->free_list[migratetype].next,
struct page, lru);
+
+#ifdef CONFIG_ARCH_ROCKCHIP
+ if (is_migrate_cma(migratetype)){
+ int mt = get_pageblock_migratetype(page);
+ if (unlikely(is_migrate_isolate(mt)))
+ continue;
+ }
+#endif
+
area->nr_free--;
/*
#ifdef CONFIG_HUGETLB_PAGE_SIZE_VARIABLE
/* Initialise the number of pages represented by NR_PAGEBLOCK_BITS */
-void __init set_pageblock_order(void)
+void __paginginit set_pageblock_order(void)
{
unsigned int order;
* include/linux/pageblock-flags.h for the values of pageblock_order based on
* the kernel config
*/
-void __init set_pageblock_order(void)
+void __paginginit set_pageblock_order(void)
{
}