ARM: 7010/1: mm: fix invalid loop for poison_init_mem
authorJamie Iles <jamie@jamieiles.com>
Thu, 4 Aug 2011 08:39:31 +0000 (09:39 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Tue, 9 Aug 2011 07:42:38 +0000 (08:42 +0100)
poison_init_mem() used a loop of:

while ((count = count - 4))

which has 2 problems - an off by one error so that we do one less word
than we should, and the other is that if count == 0 then we loop forever
and poison too much.  On a platform with HAVE_TCM=y but nothing in the
TCM's, this caused corruption and the platform failed to boot.

Acked-by: Stephen Boyd <sboyd@codeaurora.org>
Acked-by: Nicolas Pitre <nicolas.pitre@linaro.org>
Signed-off-by: Jamie Iles <jamie@jamieiles.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mm/init.c

index 2fee782077c1ac5e7043efed88ad971f779bfa07..91bca355cd3105462bdb4c6756d094910ecd0c81 100644 (file)
@@ -441,7 +441,7 @@ static inline int free_area(unsigned long pfn, unsigned long end, char *s)
 static inline void poison_init_mem(void *s, size_t count)
 {
        u32 *p = (u32 *)s;
-       while ((count = count - 4))
+       for (; count != 0; count -= 4)
                *p++ = 0xe7fddef0;
 }