rk_sdmmc: recalculate audib rx_wmark
[firefly-linux-kernel-4.4.55.git] / mm / page_alloc.c
index 82e897fc291f53b4d2a9202efddfb871fa6f9609..bf6c9285013fb0372693ef82f75cdd50007b2620 100644 (file)
@@ -373,9 +373,11 @@ void prep_compound_page(struct page *page, unsigned long order)
        __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);
        }
 }
 
@@ -1048,6 +1050,15 @@ __rmqueue_fallback(struct zone *zone, int order, int start_migratetype)
 
                        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--;
 
                        /*
@@ -4540,7 +4551,7 @@ static inline void setup_usemap(struct pglist_data *pgdat, struct zone *zone,
 #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;
 
@@ -4568,7 +4579,7 @@ void __init set_pageblock_order(void)
  * 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)
 {
 }