From 521de2a716159df59e7c1cf1e3bb968ec141f1c8 Mon Sep 17 00:00:00 2001 From: Antoine Leca Date: Wed, 3 Apr 2013 15:14:34 +0200 Subject: [PATCH] Env_memory_parse: move into VM Only possible user of that function. While here, fix bug about NR_MEMS vs MAXMEMMAP NR_MEMS=16 is currently less than MAXMEMMAP=40; avoid overriding --- include/env.h | 2 -- lib/libsys/env_parse.c | 24 ------------------------ servers/vm/utility.c | 20 +++++++++++++------- 3 files changed, 13 insertions(+), 33 deletions(-) diff --git a/include/env.h b/include/env.h index eb115724c..2d01a4bac 100644 --- a/include/env.h +++ b/include/env.h @@ -2,5 +2,3 @@ int env_parse(char *env, char *fmt, int field, long *param, long min, long max); void env_panic(char *env); int env_prefix(char *env, char *prefix); -int env_memory_parse(struct memory *chunks, int nchunks); - diff --git a/lib/libsys/env_parse.c b/lib/libsys/env_parse.c index e466d2575..b5c867f03 100644 --- a/lib/libsys/env_parse.c +++ b/lib/libsys/env_parse.c @@ -89,27 +89,3 @@ badenv: env_panic(env); return -1; } - -/*=========================================================================* - * env_memory_parse * - *=========================================================================*/ - -int env_memory_parse(mem_chunks, maxchunks) -struct memory *mem_chunks; /* where to store the memory bits */ -int maxchunks; /* how many were found */ -{ - static kinfo_t kinfo; - int mm, r; - - if((r=sys_getkinfo(&kinfo)) != OK) return r; - - /* Initialize everything to zero. */ - memset(mem_chunks, 0, maxchunks*sizeof(*mem_chunks)); - - for(mm = 0; mm < MAXMEMMAP; mm++) { - mem_chunks[mm].base = kinfo.memmap[mm].addr; - mem_chunks[mm].size = kinfo.memmap[mm].len; - } - - return OK; -} diff --git a/servers/vm/utility.c b/servers/vm/utility.c index eeb1fd9db..9c7640f89 100644 --- a/servers/vm/utility.c +++ b/servers/vm/utility.c @@ -40,20 +40,26 @@ /*===========================================================================* * get_mem_chunks * *===========================================================================*/ -void get_mem_chunks(mem_chunks) -struct memory *mem_chunks; /* store mem chunks here */ +void get_mem_chunks( +struct memory *mem_chunks) /* store mem chunks here */ { -/* Initialize the free memory list from the 'memory' boot variable. Translate +/* Initialize the free memory list from the kernel-provided memory map. Translate * the byte offsets and sizes in this list to clicks, properly truncated. */ phys_bytes base, size, limit; int i; struct memory *memp; - /* Obtain and parse memory from system environment. */ - if(env_memory_parse(mem_chunks, NR_MEMS) != OK) - panic("couldn't obtain memory chunks"); - + /* Initialize everything to zero. */ + memset(mem_chunks, 0, NR_MEMS*sizeof(*mem_chunks)); + + /* Obtain and parse memory from kernel environment. */ + /* XXX Any memory chunk in excess of NR_MEMS is silently ignored. */ + for(i = 0; i < MIN(MAXMEMMAP, NR_MEMS); i++) { + mem_chunks[i].base = kernel_boot_info.memmap[i].addr; + mem_chunks[i].size = kernel_boot_info.memmap[i].len; + } + /* Round physical memory to clicks. Round start up, round end down. */ for (i = 0; i < NR_MEMS; i++) { memp = &mem_chunks[i]; /* next mem chunk is stored here */