aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/kernel/early.c
diff options
context:
space:
mode:
authorHeiko Carstens <heiko.carstens@de.ibm.com>2007-11-05 05:10:11 -0500
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2007-11-05 05:10:17 -0500
commit0b8da654b6c13b40b0e0efd916ee57ed13f9fa1f (patch)
tree31a302d2f92bc451dfa4fea433f8683495b13f4b /arch/s390/kernel/early.c
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>
Diffstat (limited to 'arch/s390/kernel/early.c')
-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 e6289ee74ecd..8bf4ae1150be 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)
200 cc = __tprot(addr); 200 cc = __tprot(addr);
201 while (cc == old_cc) { 201 while (cc == old_cc) {
202 addr += CHUNK_INCR; 202 addr += CHUNK_INCR;
203 cc = __tprot(addr); 203 if (addr >= memsize)
204 break;
204#ifndef CONFIG_64BIT 205#ifndef CONFIG_64BIT
205 if (addr == ADDR2G) 206 if (addr == ADDR2G)
206 break; 207 break;
207#endif 208#endif
209 cc = __tprot(addr);
208 } 210 }
209 211
210 if (old_addr != addr && 212 if (old_addr != addr &&