Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/ide-2.6
[firefly-linux-kernel-4.4.55.git] / mm / page_alloc.c
index a5f3c278c5732f4f3c8c9258f5b95b2c86b3e490..30d5093a099dec7f5739a2e78be65f440206ac51 100644 (file)
@@ -73,6 +73,7 @@ unsigned long totalram_pages __read_mostly;
 unsigned long totalreserve_pages __read_mostly;
 unsigned long highest_memmap_pfn __read_mostly;
 int percpu_pagelist_fraction;
+gfp_t gfp_allowed_mask __read_mostly = GFP_BOOT_MASK;
 
 #ifdef CONFIG_HUGETLB_PAGE_SIZE_VARIABLE
 int pageblock_order __read_mostly;
@@ -487,7 +488,6 @@ static inline void __free_one_page(struct page *page,
  */
 static inline void free_page_mlock(struct page *page)
 {
-       __ClearPageMlocked(page);
        __dec_zone_page_state(page, NR_MLOCK);
        __count_vm_event(UNEVICTABLE_MLOCKFREED);
 }
@@ -557,7 +557,7 @@ static void __free_pages_ok(struct page *page, unsigned int order)
        unsigned long flags;
        int i;
        int bad = 0;
-       int clearMlocked = PageMlocked(page);
+       int wasMlocked = TestClearPageMlocked(page);
 
        kmemcheck_free_shadow(page, order);
 
@@ -575,7 +575,7 @@ static void __free_pages_ok(struct page *page, unsigned int order)
        kernel_map_pages(page, 1 << order, 0);
 
        local_irq_save(flags);
-       if (unlikely(clearMlocked))
+       if (unlikely(wasMlocked))
                free_page_mlock(page);
        __count_vm_events(PGFREE, 1 << order);
        free_one_page(page_zone(page), page, order,
@@ -1021,7 +1021,7 @@ static void free_hot_cold_page(struct page *page, int cold)
        struct zone *zone = page_zone(page);
        struct per_cpu_pages *pcp;
        unsigned long flags;
-       int clearMlocked = PageMlocked(page);
+       int wasMlocked = TestClearPageMlocked(page);
 
        kmemcheck_free_shadow(page, 0);
 
@@ -1040,7 +1040,7 @@ static void free_hot_cold_page(struct page *page, int cold)
        pcp = &zone_pcp(zone, get_cpu())->pcp;
        set_page_private(page, get_pageblock_migratetype(page));
        local_irq_save(flags);
-       if (unlikely(clearMlocked))
+       if (unlikely(wasMlocked))
                free_page_mlock(page);
        __count_vm_event(PGFREE);
 
@@ -1863,6 +1863,8 @@ __alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order,
        struct page *page;
        int migratetype = allocflags_to_migratetype(gfp_mask);
 
+       gfp_mask &= gfp_allowed_mask;
+
        lockdep_trace_alloc(gfp_mask);
 
        might_sleep_if(gfp_mask & __GFP_WAIT);