]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/powerpc/mm/40x_mmu.c
ALSA: hda - Workaround for buggy DMA position on ATI controllers
[linux-2.6-omap-h63xx.git] / arch / powerpc / mm / 40x_mmu.c
index cecbbc76f62425da81edc80529e4a65164d42435..29954dc28942ff8408c940402f9cac7a72b7ebd3 100644 (file)
@@ -93,7 +93,7 @@ void __init MMU_init_hw(void)
 
 unsigned long __init mmu_mapin_ram(void)
 {
-       unsigned long v, s;
+       unsigned long v, s, mapped;
        phys_addr_t p;
 
        v = KERNELBASE;
@@ -130,5 +130,17 @@ unsigned long __init mmu_mapin_ram(void)
                s -= LARGE_PAGE_SIZE_4M;
        }
 
-       return total_lowmem - s;
+       mapped = total_lowmem - s;
+
+       /* If the size of RAM is not an exact power of two, we may not
+        * have covered RAM in its entirety with 16 and 4 MiB
+        * pages. Consequently, restrict the top end of RAM currently
+        * allocable so that calls to the LMB to allocate PTEs for "tail"
+        * coverage with normal-sized pages (or other reasons) do not
+        * attempt to allocate outside the allowed range.
+        */
+
+       __initial_memory_limit_addr = memstart_addr + mapped;
+
+       return mapped;
 }