[S390] Fix memory detection.
authorHeiko Carstens <heiko.carstens@de.ibm.com>
Mon, 5 Nov 2007 10:10:11 +0000 (11:10 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Mon, 5 Nov 2007 10:10:17 +0000 (11:10 +0100)
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>
arch/s390/kernel/early.c

index e6289ee74ecd400bcfaf606d8f9585191225462f..8bf4ae1150be6775b2c348af2ee56a2786dd320c 100644 (file)
@@ -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 &&