powerpc: Always trim numa memory to lmb_end_of_DRAM()
authorMilton Miller <miltonm@bga.com>
Mon, 20 Oct 2008 15:37:04 +0000 (15:37 +0000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Tue, 21 Oct 2008 04:19:12 +0000 (15:19 +1100)
numa_enforce_memory_limit tried to be smart and only call lmb_end_of_DRAM
when a memory limit was set via mem= on the command line.  However,
the early boot code will also limit memory added to the lmb system
when iommu=off is specified.  When this happens, the page allocator
is given pages not in the linear mapping and this results in a fatal
data reference to the unmapped page.

Signed-off-by: Milton Miller <miltonm@bga.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/mm/numa.c

index 195bfcd08959a4eac2dd9f2ebc2a7e8aa8e9d09c..eb505ad34a857421b2deb85bbedd7b4c6ba99777 100644 (file)
@@ -528,12 +528,10 @@ static unsigned long __init numa_enforce_memory_limit(unsigned long start,
        /*
         * We use lmb_end_of_DRAM() in here instead of memory_limit because
         * we've already adjusted it for the limit and it takes care of
-        * having memory holes below the limit.
+        * having memory holes below the limit.  Also, in the case of
+        * iommu_is_off, memory_limit is not set but is implicitly enforced.
         */
 
-       if (! memory_limit)
-               return size;
-
        if (start + size <= lmb_end_of_DRAM())
                return size;