This can be used in further patches. Signed-off-by: Peter Xu <peterx@xxxxxxxxxx> --- lib/x86/asm/page.h | 3 +++ lib/x86/vm.c | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/x86/asm/page.h b/lib/x86/asm/page.h index 5044a49..c43bab2 100644 --- a/lib/x86/asm/page.h +++ b/lib/x86/asm/page.h @@ -41,5 +41,8 @@ #define PGDIR_MASK 1023 #endif +#define PGDIR_BITS(lvl) (((lvl) - 1) * PGDIR_WIDTH + PAGE_SHIFT) +#define PGDIR_OFFSET(va, lvl) (((va) >> PGDIR_BITS(lvl)) & PGDIR_MASK) + #endif /* !__ASSEMBLY__ */ #endif diff --git a/lib/x86/vm.c b/lib/x86/vm.c index 9771bd7..f97d1e5 100644 --- a/lib/x86/vm.c +++ b/lib/x86/vm.c @@ -48,7 +48,7 @@ unsigned long *install_pte(unsigned long *cr3, unsigned offset; for (level = PAGE_LEVEL; level > pte_level; --level) { - offset = ((unsigned long)virt >> ((level-1) * PGDIR_WIDTH + 12)) & PGDIR_MASK; + offset = PGDIR_OFFSET((unsigned long)virt, level); if (!(pt[offset] & PT_PRESENT_MASK)) { unsigned long *new_pt = pt_page; if (!new_pt) @@ -60,7 +60,7 @@ unsigned long *install_pte(unsigned long *cr3, } pt = phys_to_virt(pt[offset] & PT_ADDR_MASK); } - offset = ((unsigned long)virt >> ((level-1) * PGDIR_WIDTH + 12)) & PGDIR_MASK; + offset = PGDIR_OFFSET((unsigned long)virt, level); pt[offset] = pte; return &pt[offset]; } -- 2.7.4 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html