summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHeiko Carstens <heiko.carstens@de.ibm.com>2007-11-05 11:10:11 +0100
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2007-11-05 11:10:17 +0100
commit0b8da654b6c13b40b0e0efd916ee57ed13f9fa1f (patch)
tree31a302d2f92bc451dfa4fea433f8683495b13f4b
parent0d2be08893605be00de0f95ee7e4b8917ea1ebc3 (diff)
[S390] Fix memory detection.
Yet another patch in the countless series of memory detection fixes: if the last area of the reported storage size is a hole the detection loop will loop forever. Just break chunk detection loop if its end is going to be larger than reported storage size. Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
-rw-r--r--arch/s390/kernel/early.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/arch/s390/kernel/early.c b/arch/s390/kernel/early.c
index e6289ee74ec..8bf4ae1150b 100644
--- a/arch/s390/kernel/early.c
+++ b/arch/s390/kernel/early.c
@@ -200,11 +200,13 @@ static noinline __init void find_memory_chunks(unsigned long memsize)
cc = __tprot(addr);
while (cc == old_cc) {
addr += CHUNK_INCR;
- cc = __tprot(addr);
+ if (addr >= memsize)
+ break;
#ifndef CONFIG_64BIT
if (addr == ADDR2G)
break;
#endif
+ cc = __tprot(addr);
}
if (old_addr != addr &&