Merge branch 'akpm'
Linus Torvalds [Wed, 17 Jun 2009 02:50:13 +0000 (19:50 -0700)]
* akpm: (182 commits)
  fbdev: bf54x-lq043fb: use kzalloc over kmalloc/memset
  fbdev: *bfin*: fix __dev{init,exit} markings
  fbdev: *bfin*: drop unnecessary calls to memset
  fbdev: bfin-t350mcqb-fb: drop unused local variables
  fbdev: blackfin has __raw I/O accessors, so use them in fb.h
  fbdev: s1d13xxxfb: add accelerated bitblt functions
  tcx: use standard fields for framebuffer physical address and length
  fbdev: add support for handoff from firmware to hw framebuffers
  intelfb: fix a bug when changing video timing
  fbdev: use framebuffer_release() for freeing fb_info structures
  radeon: P2G2CLK_ALWAYS_ONb tested twice, should 2nd be P2G2CLK_DAC_ALWAYS_ONb?
  s3c-fb: CPUFREQ frequency scaling support
  s3c-fb: fix resource releasing on error during probing
  carminefb: fix possible access beyond end of carmine_modedb[]
  acornfb: remove fb_mmap function
  mb862xxfb: use CONFIG_OF instead of CONFIG_PPC_OF
  mb862xxfb: restrict compliation of platform driver to PPC
  Samsung SoC Framebuffer driver: add Alpha Channel support
  atmel-lcdc: fix pixclock upper bound detection
  offb: use framebuffer_alloc() to allocate fb_info struct
  ...

Manually fix up conflicts due to kmemcheck in mm/slab.c

13 files changed:
1  2 
MAINTAINERS
drivers/hwmon/Kconfig
include/linux/fs.h
include/linux/gfp.h
include/linux/mm_types.h
include/linux/sched.h
init/main.c
kernel/sysctl.c
mm/Kconfig
mm/Makefile
mm/page_alloc.c
mm/slab.c
mm/slub.c

diff --cc MAINTAINERS
Simple merge
Simple merge
Simple merge
@@@ -50,21 -52,8 +52,20 @@@ struct vm_area_struct
  #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 */
Simple merge
Simple merge
diff --cc init/main.c
Simple merge
diff --cc kernel/sysctl.c
Simple merge
diff --cc mm/Kconfig
Simple merge
diff --cc mm/Makefile
Simple merge
diff --cc mm/page_alloc.c
@@@ -546,9 -556,8 +557,10 @@@ static void __free_pages_ok(struct pag
        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)
@@@ -996,9 -1018,8 +1021,10 @@@ static void free_hot_cold_page(struct p
        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))
@@@ -1682,13 -1828,55 +1843,58 @@@ nopage
                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.
diff --cc mm/slab.c
+++ b/mm/slab.c
@@@ -1627,7 -1704,7 +1624,7 @@@ static void *kmem_getpages(struct kmem_
        if (cachep->flags & SLAB_RECLAIM_ACCOUNT)
                flags |= __GFP_RECLAIMABLE;
  
-       page = alloc_pages_node(nodeid, flags | __GFP_NOTRACK, cachep->gfporder);
 -      page = alloc_pages_exact_node(nodeid, flags, cachep->gfporder);
++      page = alloc_pages_exact_node(nodeid, flags | __GFP_NOTRACK, cachep->gfporder);
        if (!page)
                return NULL;
  
diff --cc mm/slub.c
Simple merge