#define __GFP_HARDWALL   ((__force gfp_t)0x20000u) /* Enforce hardwall cpuset memory allocs */
  #define __GFP_THISNODE        ((__force gfp_t)0x40000u)/* No fallback, no policies */
  #define __GFP_RECLAIMABLE ((__force gfp_t)0x80000u) /* Page is reclaimable */
- #define __GFP_MOVABLE ((__force gfp_t)0x100000u)  /* Page is movable */
  
 -#define __GFP_BITS_SHIFT 21   /* Room for 21 __GFP_FOO bits */
 +#ifdef CONFIG_KMEMCHECK
 +#define __GFP_NOTRACK ((__force gfp_t)0x200000u)  /* Don't track with kmemcheck */
 +#else
 +#define __GFP_NOTRACK ((__force gfp_t)0)
 +#endif
 +
 +/*
 + * This may seem redundant, but it's a way of annotating false positives vs.
 + * allocations that simply cannot be supported (e.g. page tables).
 + */
 +#define __GFP_NOTRACK_FALSE_POSITIVE (__GFP_NOTRACK)
 +
 +#define __GFP_BITS_SHIFT 22   /* Room for 22 __GFP_FOO bits */
  #define __GFP_BITS_MASK ((__force gfp_t)((1 << __GFP_BITS_SHIFT) - 1))
  
  /* This equals 0, but use constants in case they ever change */
 
        unsigned long flags;
        int i;
        int bad = 0;
+       int clearMlocked = PageMlocked(page);
  
 +      kmemcheck_free_shadow(page, order);
 +
        for (i = 0 ; i < (1 << order) ; ++i)
                bad += free_pages_check(page + i);
        if (bad)
        struct zone *zone = page_zone(page);
        struct per_cpu_pages *pcp;
        unsigned long flags;
+       int clearMlocked = PageMlocked(page);
  
 +      kmemcheck_free_shadow(page, 0);
 +
        if (PageAnon(page))
                page->mapping = NULL;
        if (free_pages_check(page))
                dump_stack();
                show_mem();
        }
 +      return page;
  got_pg:
 +      if (kmemcheck_enabled)
 +              kmemcheck_pagealloc_alloc(page, order, gfp_mask);
        return page;
+ 
  }
- EXPORT_SYMBOL(__alloc_pages_internal);
+ 
+ /*
+  * This is the 'heart' of the zoned buddy allocator.
+  */
+ struct page *
+ __alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order,
+                       struct zonelist *zonelist, nodemask_t *nodemask)
+ {
+       enum zone_type high_zoneidx = gfp_zone(gfp_mask);
+       struct zone *preferred_zone;
+       struct page *page;
+       int migratetype = allocflags_to_migratetype(gfp_mask);
+ 
+       lockdep_trace_alloc(gfp_mask);
+ 
+       might_sleep_if(gfp_mask & __GFP_WAIT);
+ 
+       if (should_fail_alloc_page(gfp_mask, order))
+               return NULL;
+ 
+       /*
+        * Check the zones suitable for the gfp_mask contain at least one
+        * valid zone. It's possible to have an empty zonelist as a result
+        * of GFP_THISNODE and a memoryless node
+        */
+       if (unlikely(!zonelist->_zonerefs->zone))
+               return NULL;
+ 
+       /* The preferred zone is used for statistics later */
+       first_zones_zonelist(zonelist, high_zoneidx, nodemask, &preferred_zone);
+       if (!preferred_zone)
+               return NULL;
+ 
+       /* First allocation attempt */
+       page = get_page_from_freelist(gfp_mask|__GFP_HARDWALL, nodemask, order,
+                       zonelist, high_zoneidx, ALLOC_WMARK_LOW|ALLOC_CPUSET,
+                       preferred_zone, migratetype);
+       if (unlikely(!page))
+               page = __alloc_pages_slowpath(gfp_mask, order,
+                               zonelist, high_zoneidx, nodemask,
+                               preferred_zone, migratetype);
+ 
+       return page;
+ }
+ EXPORT_SYMBOL(__alloc_pages_nodemask);
  
  /*
   * Common helper functions.