[POWERPC] Fix parse_drconf_memory() for 64-bit start addresses
authorMichael Ellerman <michael@ellerman.id.au>
Wed, 1 Aug 2007 01:34:38 +0000 (11:34 +1000)
committerPaul Mackerras <paulus@samba.org>
Fri, 3 Aug 2007 09:36:00 +0000 (19:36 +1000)
Some new machines use the "ibm,dynamic-reconfiguration-memory" property
to provide memory layout information, rather than via memory nodes.

There is a bug in the code to parse this property for start addresses
over 4GB; we store the start address in an unsigned int, which means
we throw away the high bits and add apparently duplicate regions.
This results in a BUG() in free_bootmem_core().  This fixes it by
using an unsigned long instead.

Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
Signed-off-by: Paul Mackerras <paulus@samba.org>
arch/powerpc/mm/numa.c

index de45aa82d97b11c133fb14ccab6fbdf2e2bce450..c12adc3ddffd892b3238025873afc7764eb20831 100644 (file)
@@ -307,9 +307,9 @@ static void __init parse_drconf_memory(struct device_node *memory)
        const unsigned int *lm, *dm, *aa;
        unsigned int ls, ld, la;
        unsigned int n, aam, aalen;
-       unsigned long lmb_size, size;
+       unsigned long lmb_size, size, start;
        int nid, default_nid = 0;
-       unsigned int start, ai, flags;
+       unsigned int ai, flags;
 
        lm = of_get_property(memory, "ibm,lmb-size", &ls);
        dm = of_get_property(memory, "ibm,dynamic-memory", &ld);