From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peter Xu Subject: [kvm-unit-tests PATCH 07/14] vm/page: provide PGDIR_OFFSET() macro Date: Fri, 14 Oct 2016 20:40:45 +0800 Message-ID: <1476448852-30062-8-git-send-email-peterx@redhat.com> References: <1476448852-30062-1-git-send-email-peterx@redhat.com> Cc: jan.kiszka@web.de, agordeev@redhat.com, drjones@redhat.com, rkrcmar@redhat.com, pbonzini@redhat.com, peterx@redhat.com To: kvm@vger.kernel.org Return-path: Received: from mx1.redhat.com ([209.132.183.28]:33688 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753298AbcJNMlT (ORCPT ); Fri, 14 Oct 2016 08:41:19 -0400 In-Reply-To: <1476448852-30062-1-git-send-email-peterx@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: This can be used in further patches. Signed-off-by: Peter Xu --- 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