diff options
author | Richard Braun <rbraun@sceen.net> | 2012-10-15 20:53:44 +0200 |
---|---|---|
committer | Richard Braun <rbraun@sceen.net> | 2012-10-15 20:53:44 +0200 |
commit | 7b3593f5a1cba8c05dc489ded3118322af38cde0 (patch) | |
tree | 6b34688b115b2b68b1b48c6bb3efd318b2244474 | |
parent | a287fd9833dc88ae6a36df2c7bd297c94c701cfc (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.c | 5 |
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]; |