cifs: fix uninitialised var in smb2_compound_op()
[linux-2.6-microblaze.git] / mm / memblock.c
index a9f18b9..511d478 100644 (file)
 # define INIT_MEMBLOCK_RESERVED_REGIONS                INIT_MEMBLOCK_REGIONS
 #endif
 
+#ifndef INIT_MEMBLOCK_MEMORY_REGIONS
+#define INIT_MEMBLOCK_MEMORY_REGIONS           INIT_MEMBLOCK_REGIONS
+#endif
+
 /**
  * DOC: memblock overview
  *
@@ -55,9 +59,9 @@
  * the allocator metadata. The "memory" and "reserved" types are nicely
  * wrapped with struct memblock. This structure is statically
  * initialized at build time. The region arrays are initially sized to
- * %INIT_MEMBLOCK_REGIONS for "memory" and %INIT_MEMBLOCK_RESERVED_REGIONS
- * for "reserved". The region array for "physmem" is initially sized to
- * %INIT_PHYSMEM_REGIONS.
+ * %INIT_MEMBLOCK_MEMORY_REGIONS for "memory" and
+ * %INIT_MEMBLOCK_RESERVED_REGIONS for "reserved". The region array
+ * for "physmem" is initially sized to %INIT_PHYSMEM_REGIONS.
  * The memblock_allow_resize() enables automatic resizing of the region
  * arrays during addition of new regions. This feature should be used
  * with care so that memory allocated for the region array will not
@@ -102,7 +106,7 @@ unsigned long min_low_pfn;
 unsigned long max_pfn;
 unsigned long long max_possible_pfn;
 
-static struct memblock_region memblock_memory_init_regions[INIT_MEMBLOCK_REGIONS] __initdata_memblock;
+static struct memblock_region memblock_memory_init_regions[INIT_MEMBLOCK_MEMORY_REGIONS] __initdata_memblock;
 static struct memblock_region memblock_reserved_init_regions[INIT_MEMBLOCK_RESERVED_REGIONS] __initdata_memblock;
 #ifdef CONFIG_HAVE_MEMBLOCK_PHYS_MAP
 static struct memblock_region memblock_physmem_init_regions[INIT_PHYSMEM_REGIONS];
@@ -111,7 +115,7 @@ static struct memblock_region memblock_physmem_init_regions[INIT_PHYSMEM_REGIONS
 struct memblock memblock __initdata_memblock = {
        .memory.regions         = memblock_memory_init_regions,
        .memory.cnt             = 1,    /* empty dummy entry */
-       .memory.max             = INIT_MEMBLOCK_REGIONS,
+       .memory.max             = INIT_MEMBLOCK_MEMORY_REGIONS,
        .memory.name            = "memory",
 
        .reserved.regions       = memblock_reserved_init_regions,
@@ -593,6 +597,17 @@ static int __init_memblock memblock_add_range(struct memblock_type *type,
                type->total_size = size;
                return 0;
        }
+
+       /*
+        * The worst case is when new range overlaps all existing regions,
+        * then we'll need type->cnt + 1 empty regions in @type. So if
+        * type->cnt * 2 + 1 is less than type->max, we know
+        * that there is enough empty regions in @type, and we can insert
+        * regions directly.
+        */
+       if (type->cnt * 2 + 1 < type->max)
+               insert = true;
+
 repeat:
        /*
         * The following is executed twice.  Once with %false @insert and
@@ -1348,8 +1363,8 @@ __next_mem_pfn_range_in_zone(u64 *idx, struct zone *zone,
  * from the regions with mirroring enabled and then retried from any
  * memory region.
  *
- * In addition, function sets the min_count to 0 using kmemleak_alloc_phys for
- * allocated boot memory block, so that it is never reported as leaks.
+ * In addition, function using kmemleak_alloc_phys for allocated boot
+ * memory block, it is never reported as leaks.
  *
  * Return:
  * Physical address of allocated memory block on success, %0 on failure.
@@ -1401,12 +1416,12 @@ done:
         */
        if (end != MEMBLOCK_ALLOC_NOLEAKTRACE)
                /*
-                * The min_count is set to 0 so that memblock allocated
-                * blocks are never reported as leaks. This is because many
-                * of these blocks are only referred via the physical
-                * address which is not looked up by kmemleak.
+                * Memblock allocated blocks are never reported as
+                * leaks. This is because many of these blocks are
+                * only referred via the physical address which is
+                * not looked up by kmemleak.
                 */
-               kmemleak_alloc_phys(found, size, 0, 0);
+               kmemleak_alloc_phys(found, size, 0);
 
        return found;
 }
@@ -1985,7 +2000,7 @@ static void __init free_unused_memmap(void)
                 * presume that there are no holes in the memory map inside
                 * a pageblock
                 */
-               start = round_down(start, pageblock_nr_pages);
+               start = pageblock_start_pfn(start);
 
                /*
                 * If we had a previous bank, and there is a space
@@ -1999,12 +2014,12 @@ static void __init free_unused_memmap(void)
                 * presume that there are no holes in the memory map inside
                 * a pageblock
                 */
-               prev_end = ALIGN(end, pageblock_nr_pages);
+               prev_end = pageblock_align(end);
        }
 
 #ifdef CONFIG_SPARSEMEM
        if (!IS_ALIGNED(prev_end, PAGES_PER_SECTION)) {
-               prev_end = ALIGN(end, pageblock_nr_pages);
+               prev_end = pageblock_align(end);
                free_memmap(prev_end, ALIGN(prev_end, PAGES_PER_SECTION));
        }
 #endif