From 2c569bb629717bd1dcf6f1f6721f85de1eff18f6 Mon Sep 17 00:00:00 2001 From: Benjamin Herrenschmidt Date: Tue, 6 Jul 2010 15:39:06 -0700 Subject: [PATCH] --- yaml --- r: 212698 b: refs/heads/master c: bf23c51f1f49d3960f3cd8e3d2e7f943d9c41042 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/include/linux/memblock.h | 7 ++++--- trunk/mm/memblock.c | 10 +++++++++- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 799765466e4d..035944729466 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 4734b594c6ca1be796d30c82d93fdf5160f45124 +refs/heads/master: bf23c51f1f49d3960f3cd8e3d2e7f943d9c41042 diff --git a/trunk/include/linux/memblock.h b/trunk/include/linux/memblock.h index c9c7b0f344a5..150be938b910 100644 --- a/trunk/include/linux/memblock.h +++ b/trunk/include/linux/memblock.h @@ -18,7 +18,7 @@ #include -#define MAX_MEMBLOCK_REGIONS 128 +#define INIT_MEMBLOCK_REGIONS 128 struct memblock_region { phys_addr_t base; @@ -26,8 +26,9 @@ struct memblock_region { }; struct memblock_type { - unsigned long cnt; - struct memblock_region regions[MAX_MEMBLOCK_REGIONS+1]; + unsigned long cnt; /* number of regions */ + unsigned long max; /* size of the allocated array */ + struct memblock_region *regions; }; struct memblock { diff --git a/trunk/mm/memblock.c b/trunk/mm/memblock.c index 5ae413e9afd8..3c474502d92b 100644 --- a/trunk/mm/memblock.c +++ b/trunk/mm/memblock.c @@ -18,6 +18,8 @@ struct memblock memblock; static int memblock_debug; +static struct memblock_region memblock_memory_init_regions[INIT_MEMBLOCK_REGIONS + 1]; +static struct memblock_region memblock_reserved_init_regions[INIT_MEMBLOCK_REGIONS + 1]; static int __init early_memblock(char *p) { @@ -104,6 +106,12 @@ static void memblock_coalesce_regions(struct memblock_type *type, void __init memblock_init(void) { + /* Hookup the initial arrays */ + memblock.memory.regions = memblock_memory_init_regions; + memblock.memory.max = INIT_MEMBLOCK_REGIONS; + memblock.reserved.regions = memblock_reserved_init_regions; + memblock.reserved.max = INIT_MEMBLOCK_REGIONS; + /* Create a dummy zero size MEMBLOCK which will get coalesced away later. * This simplifies the memblock_add() code below... */ @@ -169,7 +177,7 @@ static long memblock_add_region(struct memblock_type *type, phys_addr_t base, ph if (coalesced) return coalesced; - if (type->cnt >= MAX_MEMBLOCK_REGIONS) + if (type->cnt >= type->max) return -1; /* Couldn't coalesce the MEMBLOCK, so add it to the sorted table. */