summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2012-10-15 20:53:44 +0200
committerRichard Braun <rbraun@sceen.net>2012-10-15 20:53:44 +0200
commit7b3593f5a1cba8c05dc489ded3118322af38cde0 (patch)
tree6b34688b115b2b68b1b48c6bb3efd318b2244474
parenta287fd9833dc88ae6a36df2c7bd297c94c701cfc (diff)
x86/pmap: fix pmap_growkernel
The pmap_growkernel function uses va as the last page address that must be directly mappable. But if it's already aligned on PDP boundary, the P2ROUND macro will return its original value. Use P2END to make sure va really is an end address.
-rw-r--r--arch/x86/machine/pmap.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/arch/x86/machine/pmap.c b/arch/x86/machine/pmap.c
index ea0c21cf..1b5e6c99 100644
--- a/arch/x86/machine/pmap.c
+++ b/arch/x86/machine/pmap.c
@@ -370,10 +370,9 @@ pmap_growkernel(unsigned long va)
pmap_pte_t *pte;
phys_addr_t pa;
- assert(pmap_klimit < va);
-
start = pmap_klimit;
- va = P2ROUND(va, 1 << PMAP_L2_SHIFT) - 1;
+ va = P2END(va, 1 << PMAP_L2_SHIFT) - 1;
+ assert(start < va);
for (level = PMAP_NR_LEVELS; level > 1; level--) {
pt_level = &pmap_pt_levels[level - 1];