summaryrefslogtreecommitdiffstats
path: root/arch/powerpc/mm/40x_mmu.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2008-12-03 12:54:45 +0100
committerIngo Molnar <mingo@elte.hu>2008-12-03 12:54:45 +0100
commitc36910c147fd7b129a8f1269c76b9767c99de5cd (patch)
tree29403cd341b62581718f6b34944271980fb133e6 /arch/powerpc/mm/40x_mmu.c
parent70d7d357578245f1993fd2d3ccd26088bcd38941 (diff)
parent09ee17eb8ea89514c13980c4010bdbbaea8630c2 (diff)
downloadop-kernel-dev-c36910c147fd7b129a8f1269c76b9767c99de5cd.zip
op-kernel-dev-c36910c147fd7b129a8f1269c76b9767c99de5cd.tar.gz
Merge branch 'iommu-fixes-2.6.28' of git://git.kernel.org/pub/scm/linux/kernel/git/joro/linux-2.6-iommu into x86/urgent
Diffstat (limited to 'arch/powerpc/mm/40x_mmu.c')
-rw-r--r--arch/powerpc/mm/40x_mmu.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/arch/powerpc/mm/40x_mmu.c b/arch/powerpc/mm/40x_mmu.c
index cecbbc7..29954dc 100644
--- a/arch/powerpc/mm/40x_mmu.c
+++ b/arch/powerpc/mm/40x_mmu.c
@@ -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;
}
OpenPOWER on IntegriCloud