diff mbox

[kvm-unit-tests,v7,09/11] x86: Cleanup PT_*_MASK flags

Message ID acfb6c37b0f29ca35a7c712f8fc1e5e5e9b31c3c.1462457467.git.agordeev@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Alexander Gordeev May 5, 2016, 2:26 p.m. UTC
Cc: Andrew Jones <drjones@redhat.com>
Cc: Thomas Huth <thuth@redhat.com>
Cc: Radim Kr?má? <rkrcmar@redhat.com>
Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
---
 lib/x86/asm/page.h | 14 +++++++++-----
 lib/x86/vm.c       | 20 ++++++++++----------
 x86/access.c       | 10 +---------
 x86/asyncpf.c      |  2 +-
 x86/eventinj.c     | 10 +++++-----
 x86/hypercall.c    |  2 +-
 x86/pku.c          |  2 +-
 x86/rmap_chain.c   |  2 +-
 x86/smap.c         |  6 +++---
 x86/taskswitch2.c  |  2 +-
 10 files changed, 33 insertions(+), 37 deletions(-)

Comments

Andrew Jones May 6, 2016, 9:04 a.m. UTC | #1
On Thu, May 05, 2016 at 04:26:42PM +0200, Alexander Gordeev wrote:
> Cc: Andrew Jones <drjones@redhat.com>
> Cc: Thomas Huth <thuth@redhat.com>
> Cc: Radim Kr?má? <rkrcmar@redhat.com>
> Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
> ---
>  lib/x86/asm/page.h | 14 +++++++++-----
>  lib/x86/vm.c       | 20 ++++++++++----------
>  x86/access.c       | 10 +---------
>  x86/asyncpf.c      |  2 +-
>  x86/eventinj.c     | 10 +++++-----
>  x86/hypercall.c    |  2 +-
>  x86/pku.c          |  2 +-
>  x86/rmap_chain.c   |  2 +-
>  x86/smap.c         |  6 +++---
>  x86/taskswitch2.c  |  2 +-
>  10 files changed, 33 insertions(+), 37 deletions(-)
> 
> diff --git a/lib/x86/asm/page.h b/lib/x86/asm/page.h
> index 916462d..0342c71 100644
> --- a/lib/x86/asm/page.h
> +++ b/lib/x86/asm/page.h
> @@ -8,6 +8,7 @@
>  
>  
>  #include <linux/const.h>
> +#include <bitops.h>
>  
>  #define PAGE_SHIFT	12
>  #define PAGE_SIZE	(_AC(1,UL) << PAGE_SHIFT)
> @@ -21,11 +22,14 @@
>  #define LARGE_PAGE_SIZE	(1024 * PAGE_SIZE)
>  #endif
>  
> -#define PTE_PRESENT	(1ull << 0)
> -#define PTE_WRITE	(1ull << 1)
> -#define PTE_USER	(1ull << 2)
> -#define PTE_PSE		(1ull << 7)
> -#define PTE_ADDR	(0xffffffffff000ull)
> +#define PT_PRESENT_MASK		(1ull << 0)
> +#define PT_WRITABLE_MASK	(1ull << 1)
> +#define PT_USER_MASK		(1ull << 2)
> +#define PT_ACCESSED_MASK	(1ull << 5)
> +#define PT_DIRTY_MASK		(1ull << 6)
> +#define PT_PAGE_SIZE_MASK	(1ull << 7)
> +#define PT_NX_MASK		(1ull << 63)

This is PT64_NX_MASK in arch/x86/kvm/mmu.h (as I pointed out
before), but whatever.

Reviewed-by: Andrew Jones <drjones@redhat.com>

> +#define PT_ADDR_MASK		GENMASK_ULL(51, 12)
>  
>  #ifdef __x86_64__
>  #define	PAGE_LEVEL	4
> diff --git a/lib/x86/vm.c b/lib/x86/vm.c
> index 9c94ca5..906fbf2 100644
> --- a/lib/x86/vm.c
> +++ b/lib/x86/vm.c
> @@ -49,16 +49,16 @@ unsigned long *install_pte(unsigned long *cr3,
>  
>      for (level = PAGE_LEVEL; level > pte_level; --level) {
>  	offset = ((unsigned long)virt >> ((level-1) * PGDIR_WIDTH + 12)) & PGDIR_MASK;
> -	if (!(pt[offset] & PTE_PRESENT)) {
> +	if (!(pt[offset] & PT_PRESENT_MASK)) {
>  	    unsigned long *new_pt = pt_page;
>              if (!new_pt)
>                  new_pt = alloc_page();
>              else
>                  pt_page = 0;
>  	    memset(new_pt, 0, PAGE_SIZE);
> -	    pt[offset] = virt_to_phys(new_pt) | PTE_PRESENT | PTE_WRITE | PTE_USER;
> +	    pt[offset] = virt_to_phys(new_pt) | PT_PRESENT_MASK | PT_WRITABLE_MASK | PT_USER_MASK;
>  	}
> -	pt = phys_to_virt(pt[offset] & 0xffffffffff000ull);
> +	pt = phys_to_virt(pt[offset] & PT_ADDR_MASK);
>      }
>      offset = ((unsigned long)virt >> ((level-1) * PGDIR_WIDTH + 12)) & PGDIR_MASK;
>      pt[offset] = pte;
> @@ -74,11 +74,11 @@ unsigned long *get_pte(unsigned long *cr3, void *virt)
>      for (level = PAGE_LEVEL; level > 1; --level) {
>  	offset = ((unsigned long)virt >> (((level-1) * PGDIR_WIDTH) + 12)) & PGDIR_MASK;
>  	pte = pt[offset];
> -	if (!(pte & PTE_PRESENT))
> +	if (!(pte & PT_PRESENT_MASK))
>  	    return NULL;
> -	if (level == 2 && (pte & PTE_PSE))
> +	if (level == 2 && (pte & PT_PAGE_SIZE_MASK))
>  	    return &pt[offset];
> -	pt = phys_to_virt(pte & 0xffffffffff000ull);
> +	pt = phys_to_virt(pte & PT_ADDR_MASK);
>      }
>      offset = ((unsigned long)virt >> (((level-1) * PGDIR_WIDTH) + 12)) & PGDIR_MASK;
>      return &pt[offset];
> @@ -89,14 +89,14 @@ unsigned long *install_large_page(unsigned long *cr3,
>  				  void *virt)
>  {
>      return install_pte(cr3, 2, virt,
> -		       phys | PTE_PRESENT | PTE_WRITE | PTE_USER | PTE_PSE, 0);
> +		       phys | PT_PRESENT_MASK | PT_WRITABLE_MASK | PT_USER_MASK | PT_PAGE_SIZE_MASK, 0);
>  }
>  
>  unsigned long *install_page(unsigned long *cr3,
>  			    unsigned long phys,
>  			    void *virt)
>  {
> -    return install_pte(cr3, 1, virt, phys | PTE_PRESENT | PTE_WRITE | PTE_USER, 0);
> +    return install_pte(cr3, 1, virt, phys | PT_PRESENT_MASK | PT_WRITABLE_MASK | PT_USER_MASK, 0);
>  }
>  
>  
> @@ -178,7 +178,7 @@ void *vmalloc(unsigned long size)
>  
>  uint64_t virt_to_phys_cr3(void *mem)
>  {
> -    return (*get_pte(phys_to_virt(read_cr3()), mem) & PTE_ADDR) + ((ulong)mem & (PAGE_SIZE - 1));
> +    return (*get_pte(phys_to_virt(read_cr3()), mem) & PT_ADDR_MASK) + ((ulong)mem & (PAGE_SIZE - 1));
>  }
>  
>  void vfree(void *mem)
> @@ -186,7 +186,7 @@ void vfree(void *mem)
>      unsigned long size = ((unsigned long *)mem)[-1];
>  
>      while (size) {
> -	free_page(phys_to_virt(*get_pte(phys_to_virt(read_cr3()), mem) & PTE_ADDR));
> +	free_page(phys_to_virt(*get_pte(phys_to_virt(read_cr3()), mem) & PT_ADDR_MASK));
>  	mem += PAGE_SIZE;
>  	size -= PAGE_SIZE;
>      }
> diff --git a/x86/access.c b/x86/access.c
> index aaf805d..3c5b8b5 100644
> --- a/x86/access.c
> +++ b/x86/access.c
> @@ -19,14 +19,6 @@ static int invalid_mask;
>  #define PT_BASE_ADDR_MASK ((pt_element_t)((((pt_element_t)1 << 40) - 1) & PAGE_MASK))
>  #define PT_PSE_BASE_ADDR_MASK (PT_BASE_ADDR_MASK & ~(1ull << 21))
>  
> -#define PT_PRESENT_MASK    ((pt_element_t)1 << 0)
> -#define PT_WRITABLE_MASK   ((pt_element_t)1 << 1)
> -#define PT_USER_MASK       ((pt_element_t)1 << 2)
> -#define PT_ACCESSED_MASK   ((pt_element_t)1 << 5)
> -#define PT_DIRTY_MASK      ((pt_element_t)1 << 6)
> -#define PT_PSE_MASK        ((pt_element_t)1 << 7)
> -#define PT_NX_MASK         ((pt_element_t)1 << 63)
> -
>  #define CR0_WP_MASK (1UL << 16)
>  #define CR4_SMEP_MASK (1UL << 20)
>  
> @@ -493,7 +485,7 @@ void __ac_setup_specific_pages(ac_test_t *at, ac_pool_t *pool, u64 pd_page,
>                      pte |= 2ull << 59;
>  	    } else {
>  		pte = at->phys & PT_PSE_BASE_ADDR_MASK;
> -		pte |= PT_PSE_MASK;
> +		pte |= PT_PAGE_SIZE_MASK;
>                  if (F(AC_PKU_PKEY))
>                      pte |= 1ull << 59;
>  	    }
> diff --git a/x86/asyncpf.c b/x86/asyncpf.c
> index 304d015..a6051ab 100644
> --- a/x86/asyncpf.c
> +++ b/x86/asyncpf.c
> @@ -69,7 +69,7 @@ static void pf_isr(struct ex_regs *r)
>  			report("Got present #PF token %x\n", true, read_cr2());
>  			if ((uint32_t)read_cr2() == ~0)
>  				break;
> -			install_pte(phys_to_virt(read_cr3()), 1, virt, phys | PTE_PRESENT | PTE_WRITE, 0);
> +			install_pte(phys_to_virt(read_cr3()), 1, virt, phys | PT_PRESENT_MASK | PT_WRITABLE_MASK, 0);
>  			write_cr3(read_cr3());
>  			phys = 0;
>  			break;
> diff --git a/x86/eventinj.c b/x86/eventinj.c
> index 84dfe71..9ee557b 100644
> --- a/x86/eventinj.c
> +++ b/x86/eventinj.c
> @@ -52,7 +52,7 @@ void do_pf_tss(void)
>  {
>  	printf("PF running\n");
>  	install_pte(phys_to_virt(read_cr3()), 1, stack_va,
> -		    stack_phys | PTE_PRESENT | PTE_WRITE, 0);
> +		    stack_phys | PT_PRESENT_MASK | PT_WRITABLE_MASK, 0);
>  	invlpg(stack_va);
>  }
>  
> @@ -363,7 +363,7 @@ int main()
>  	printf("Try to divide by 0\n");
>  	/* install read only pte */
>  	install_pte(phys_to_virt(read_cr3()), 1, stack_va,
> -		    stack_phys | PTE_PRESENT, 0);
> +		    stack_phys | PT_PRESENT_MASK, 0);
>  	invlpg(stack_va);
>  	flush_phys_addr(stack_phys);
>  	switch_stack(stack_va + 4095);
> @@ -382,7 +382,7 @@ int main()
>  	set_idt_sel(33, NP_SEL);
>  	/* install read only pte */
>  	install_pte(phys_to_virt(read_cr3()), 1, stack_va,
> -		    stack_phys | PTE_PRESENT, 0);
> +		    stack_phys | PT_PRESENT_MASK, 0);
>  	invlpg(stack_va);
>  	flush_idt_page();
>  	flush_phys_addr(stack_phys);
> @@ -398,8 +398,8 @@ int main()
>  	/* use shadowed stack during interrupt delivery */
>  	for (i = 0; i < 4096/sizeof(ulong); i++) {
>  		if (!cr3[i]) {
> -			cr3[i] = virt_to_phys(pt) | PTE_PRESENT | PTE_WRITE;
> -			pt[0] = virt_to_phys(pt) | PTE_PRESENT | PTE_WRITE;
> +			cr3[i] = virt_to_phys(pt) | PT_PRESENT_MASK | PT_WRITABLE_MASK;
> +			pt[0] = virt_to_phys(pt) | PT_PRESENT_MASK | PT_WRITABLE_MASK;
>  #ifndef __x86_64__
>  			((ulong*)(i<<22))[1] = 0;
>  #else
> diff --git a/x86/hypercall.c b/x86/hypercall.c
> index 75179a1..9380f78 100644
> --- a/x86/hypercall.c
> +++ b/x86/hypercall.c
> @@ -65,7 +65,7 @@ int main(int ac, char **av)
>  	u8 *topmost = (void *) ((1ul << 47) - PAGE_SIZE);
>  
>  	install_pte(phys_to_virt(read_cr3()), 1, topmost,
> -		    virt_to_phys(data1) | PTE_PRESENT | PTE_WRITE, 0);
> +		    virt_to_phys(data1) | PT_PRESENT_MASK | PT_WRITABLE_MASK, 0);
>  	memset(topmost, 0xcc, PAGE_SIZE);
>  	topmost[4093] = 0x0f;
>  	topmost[4094] = 0x01;
> diff --git a/x86/pku.c b/x86/pku.c
> index df51d1b..e742735 100644
> --- a/x86/pku.c
> +++ b/x86/pku.c
> @@ -77,7 +77,7 @@ int main(int ac, char **av)
>      wrmsr(MSR_EFER, rdmsr(MSR_EFER) | EFER_LMA);
>  
>      for (i = 0; i < USER_BASE; i += PAGE_SIZE) {
> -        *get_pte(phys_to_virt(read_cr3()), phys_to_virt(i)) &= ~PTE_USER;
> +        *get_pte(phys_to_virt(read_cr3()), phys_to_virt(i)) &= ~PT_USER_MASK;
>          *get_pte(phys_to_virt(read_cr3()), phys_to_virt(i)) |= ((unsigned long)pkey << PTE_PKEY_BIT);
>          invlpg((void *)i);
>      }
> diff --git a/x86/rmap_chain.c b/x86/rmap_chain.c
> index b356a37..7bf6275 100644
> --- a/x86/rmap_chain.c
> +++ b/x86/rmap_chain.c
> @@ -36,7 +36,7 @@ int main (void)
>  
>      virt_addr += PAGE_SIZE;
>      install_pte(phys_to_virt(read_cr3()), 1, virt_addr,
> -                0 | PTE_PRESENT | PTE_WRITE, target_page);
> +                0 | PT_PRESENT_MASK | PT_WRITABLE_MASK, target_page);
>  
>      *(unsigned long *)virt_addr = 0;
>      printf("PASS\n");
> diff --git a/x86/smap.c b/x86/smap.c
> index 69e7186..ace9dc0 100644
> --- a/x86/smap.c
> +++ b/x86/smap.c
> @@ -62,7 +62,7 @@ static void check_smap_nowp(void)
>  {
>  	test = 0x99;
>  
> -	*get_pte(phys_to_virt(read_cr3()), USER_ADDR(test)) &= ~PTE_WRITE;
> +	*get_pte(phys_to_virt(read_cr3()), USER_ADDR(test)) &= ~PT_WRITABLE_MASK;
>  
>  	write_cr4(read_cr4() & ~X86_CR4_SMAP);
>  	write_cr0(read_cr0() & ~X86_CR0_WP);
> @@ -81,7 +81,7 @@ static void check_smap_nowp(void)
>  	report("read from user page with SMAP=1, AC=0, WP=0, PTE.U=1 && PTE.W=0", pf_count == 1 && save == 0x99);
>  
>  	/* Undo changes */
> -	*get_pte(phys_to_virt(read_cr3()), USER_ADDR(test)) |= PTE_WRITE;
> +	*get_pte(phys_to_virt(read_cr3()), USER_ADDR(test)) |= PT_WRITABLE_MASK;
>  
>  	write_cr0(read_cr0() | X86_CR0_WP);
>  	write_cr3(read_cr3());
> @@ -102,7 +102,7 @@ int main(int ac, char **av)
>  
>  	// Map first 16MB as supervisor pages
>  	for (i = 0; i < USER_BASE; i += PAGE_SIZE) {
> -		*get_pte(phys_to_virt(read_cr3()), phys_to_virt(i)) &= ~PTE_USER;
> +		*get_pte(phys_to_virt(read_cr3()), phys_to_virt(i)) &= ~PT_USER_MASK;
>  		invlpg((void *)i);
>  	}
>  
> diff --git a/x86/taskswitch2.c b/x86/taskswitch2.c
> index d70b901..bb7345b 100644
> --- a/x86/taskswitch2.c
> +++ b/x86/taskswitch2.c
> @@ -67,7 +67,7 @@ void do_pf_tss(ulong *error_code)
>  	if (*error_code == 0x2) /* write access, not present */
>  		test_count++;
>  	install_pte(phys_to_virt(read_cr3()), 1, fault_addr,
> -		    fault_phys | PTE_PRESENT | PTE_WRITE, 0);
> +		    fault_phys | PT_PRESENT_MASK | PT_WRITABLE_MASK, 0);
>  }
>  
>  extern void pf_tss(void);
> -- 
> 1.8.3.1
> 
> --
> To unsubscribe from this list: send the line "unsubscribe kvm" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/lib/x86/asm/page.h b/lib/x86/asm/page.h
index 916462d..0342c71 100644
--- a/lib/x86/asm/page.h
+++ b/lib/x86/asm/page.h
@@ -8,6 +8,7 @@ 
 
 
 #include <linux/const.h>
+#include <bitops.h>
 
 #define PAGE_SHIFT	12
 #define PAGE_SIZE	(_AC(1,UL) << PAGE_SHIFT)
@@ -21,11 +22,14 @@ 
 #define LARGE_PAGE_SIZE	(1024 * PAGE_SIZE)
 #endif
 
-#define PTE_PRESENT	(1ull << 0)
-#define PTE_WRITE	(1ull << 1)
-#define PTE_USER	(1ull << 2)
-#define PTE_PSE		(1ull << 7)
-#define PTE_ADDR	(0xffffffffff000ull)
+#define PT_PRESENT_MASK		(1ull << 0)
+#define PT_WRITABLE_MASK	(1ull << 1)
+#define PT_USER_MASK		(1ull << 2)
+#define PT_ACCESSED_MASK	(1ull << 5)
+#define PT_DIRTY_MASK		(1ull << 6)
+#define PT_PAGE_SIZE_MASK	(1ull << 7)
+#define PT_NX_MASK		(1ull << 63)
+#define PT_ADDR_MASK		GENMASK_ULL(51, 12)
 
 #ifdef __x86_64__
 #define	PAGE_LEVEL	4
diff --git a/lib/x86/vm.c b/lib/x86/vm.c
index 9c94ca5..906fbf2 100644
--- a/lib/x86/vm.c
+++ b/lib/x86/vm.c
@@ -49,16 +49,16 @@  unsigned long *install_pte(unsigned long *cr3,
 
     for (level = PAGE_LEVEL; level > pte_level; --level) {
 	offset = ((unsigned long)virt >> ((level-1) * PGDIR_WIDTH + 12)) & PGDIR_MASK;
-	if (!(pt[offset] & PTE_PRESENT)) {
+	if (!(pt[offset] & PT_PRESENT_MASK)) {
 	    unsigned long *new_pt = pt_page;
             if (!new_pt)
                 new_pt = alloc_page();
             else
                 pt_page = 0;
 	    memset(new_pt, 0, PAGE_SIZE);
-	    pt[offset] = virt_to_phys(new_pt) | PTE_PRESENT | PTE_WRITE | PTE_USER;
+	    pt[offset] = virt_to_phys(new_pt) | PT_PRESENT_MASK | PT_WRITABLE_MASK | PT_USER_MASK;
 	}
-	pt = phys_to_virt(pt[offset] & 0xffffffffff000ull);
+	pt = phys_to_virt(pt[offset] & PT_ADDR_MASK);
     }
     offset = ((unsigned long)virt >> ((level-1) * PGDIR_WIDTH + 12)) & PGDIR_MASK;
     pt[offset] = pte;
@@ -74,11 +74,11 @@  unsigned long *get_pte(unsigned long *cr3, void *virt)
     for (level = PAGE_LEVEL; level > 1; --level) {
 	offset = ((unsigned long)virt >> (((level-1) * PGDIR_WIDTH) + 12)) & PGDIR_MASK;
 	pte = pt[offset];
-	if (!(pte & PTE_PRESENT))
+	if (!(pte & PT_PRESENT_MASK))
 	    return NULL;
-	if (level == 2 && (pte & PTE_PSE))
+	if (level == 2 && (pte & PT_PAGE_SIZE_MASK))
 	    return &pt[offset];
-	pt = phys_to_virt(pte & 0xffffffffff000ull);
+	pt = phys_to_virt(pte & PT_ADDR_MASK);
     }
     offset = ((unsigned long)virt >> (((level-1) * PGDIR_WIDTH) + 12)) & PGDIR_MASK;
     return &pt[offset];
@@ -89,14 +89,14 @@  unsigned long *install_large_page(unsigned long *cr3,
 				  void *virt)
 {
     return install_pte(cr3, 2, virt,
-		       phys | PTE_PRESENT | PTE_WRITE | PTE_USER | PTE_PSE, 0);
+		       phys | PT_PRESENT_MASK | PT_WRITABLE_MASK | PT_USER_MASK | PT_PAGE_SIZE_MASK, 0);
 }
 
 unsigned long *install_page(unsigned long *cr3,
 			    unsigned long phys,
 			    void *virt)
 {
-    return install_pte(cr3, 1, virt, phys | PTE_PRESENT | PTE_WRITE | PTE_USER, 0);
+    return install_pte(cr3, 1, virt, phys | PT_PRESENT_MASK | PT_WRITABLE_MASK | PT_USER_MASK, 0);
 }
 
 
@@ -178,7 +178,7 @@  void *vmalloc(unsigned long size)
 
 uint64_t virt_to_phys_cr3(void *mem)
 {
-    return (*get_pte(phys_to_virt(read_cr3()), mem) & PTE_ADDR) + ((ulong)mem & (PAGE_SIZE - 1));
+    return (*get_pte(phys_to_virt(read_cr3()), mem) & PT_ADDR_MASK) + ((ulong)mem & (PAGE_SIZE - 1));
 }
 
 void vfree(void *mem)
@@ -186,7 +186,7 @@  void vfree(void *mem)
     unsigned long size = ((unsigned long *)mem)[-1];
 
     while (size) {
-	free_page(phys_to_virt(*get_pte(phys_to_virt(read_cr3()), mem) & PTE_ADDR));
+	free_page(phys_to_virt(*get_pte(phys_to_virt(read_cr3()), mem) & PT_ADDR_MASK));
 	mem += PAGE_SIZE;
 	size -= PAGE_SIZE;
     }
diff --git a/x86/access.c b/x86/access.c
index aaf805d..3c5b8b5 100644
--- a/x86/access.c
+++ b/x86/access.c
@@ -19,14 +19,6 @@  static int invalid_mask;
 #define PT_BASE_ADDR_MASK ((pt_element_t)((((pt_element_t)1 << 40) - 1) & PAGE_MASK))
 #define PT_PSE_BASE_ADDR_MASK (PT_BASE_ADDR_MASK & ~(1ull << 21))
 
-#define PT_PRESENT_MASK    ((pt_element_t)1 << 0)
-#define PT_WRITABLE_MASK   ((pt_element_t)1 << 1)
-#define PT_USER_MASK       ((pt_element_t)1 << 2)
-#define PT_ACCESSED_MASK   ((pt_element_t)1 << 5)
-#define PT_DIRTY_MASK      ((pt_element_t)1 << 6)
-#define PT_PSE_MASK        ((pt_element_t)1 << 7)
-#define PT_NX_MASK         ((pt_element_t)1 << 63)
-
 #define CR0_WP_MASK (1UL << 16)
 #define CR4_SMEP_MASK (1UL << 20)
 
@@ -493,7 +485,7 @@  void __ac_setup_specific_pages(ac_test_t *at, ac_pool_t *pool, u64 pd_page,
                     pte |= 2ull << 59;
 	    } else {
 		pte = at->phys & PT_PSE_BASE_ADDR_MASK;
-		pte |= PT_PSE_MASK;
+		pte |= PT_PAGE_SIZE_MASK;
                 if (F(AC_PKU_PKEY))
                     pte |= 1ull << 59;
 	    }
diff --git a/x86/asyncpf.c b/x86/asyncpf.c
index 304d015..a6051ab 100644
--- a/x86/asyncpf.c
+++ b/x86/asyncpf.c
@@ -69,7 +69,7 @@  static void pf_isr(struct ex_regs *r)
 			report("Got present #PF token %x\n", true, read_cr2());
 			if ((uint32_t)read_cr2() == ~0)
 				break;
-			install_pte(phys_to_virt(read_cr3()), 1, virt, phys | PTE_PRESENT | PTE_WRITE, 0);
+			install_pte(phys_to_virt(read_cr3()), 1, virt, phys | PT_PRESENT_MASK | PT_WRITABLE_MASK, 0);
 			write_cr3(read_cr3());
 			phys = 0;
 			break;
diff --git a/x86/eventinj.c b/x86/eventinj.c
index 84dfe71..9ee557b 100644
--- a/x86/eventinj.c
+++ b/x86/eventinj.c
@@ -52,7 +52,7 @@  void do_pf_tss(void)
 {
 	printf("PF running\n");
 	install_pte(phys_to_virt(read_cr3()), 1, stack_va,
-		    stack_phys | PTE_PRESENT | PTE_WRITE, 0);
+		    stack_phys | PT_PRESENT_MASK | PT_WRITABLE_MASK, 0);
 	invlpg(stack_va);
 }
 
@@ -363,7 +363,7 @@  int main()
 	printf("Try to divide by 0\n");
 	/* install read only pte */
 	install_pte(phys_to_virt(read_cr3()), 1, stack_va,
-		    stack_phys | PTE_PRESENT, 0);
+		    stack_phys | PT_PRESENT_MASK, 0);
 	invlpg(stack_va);
 	flush_phys_addr(stack_phys);
 	switch_stack(stack_va + 4095);
@@ -382,7 +382,7 @@  int main()
 	set_idt_sel(33, NP_SEL);
 	/* install read only pte */
 	install_pte(phys_to_virt(read_cr3()), 1, stack_va,
-		    stack_phys | PTE_PRESENT, 0);
+		    stack_phys | PT_PRESENT_MASK, 0);
 	invlpg(stack_va);
 	flush_idt_page();
 	flush_phys_addr(stack_phys);
@@ -398,8 +398,8 @@  int main()
 	/* use shadowed stack during interrupt delivery */
 	for (i = 0; i < 4096/sizeof(ulong); i++) {
 		if (!cr3[i]) {
-			cr3[i] = virt_to_phys(pt) | PTE_PRESENT | PTE_WRITE;
-			pt[0] = virt_to_phys(pt) | PTE_PRESENT | PTE_WRITE;
+			cr3[i] = virt_to_phys(pt) | PT_PRESENT_MASK | PT_WRITABLE_MASK;
+			pt[0] = virt_to_phys(pt) | PT_PRESENT_MASK | PT_WRITABLE_MASK;
 #ifndef __x86_64__
 			((ulong*)(i<<22))[1] = 0;
 #else
diff --git a/x86/hypercall.c b/x86/hypercall.c
index 75179a1..9380f78 100644
--- a/x86/hypercall.c
+++ b/x86/hypercall.c
@@ -65,7 +65,7 @@  int main(int ac, char **av)
 	u8 *topmost = (void *) ((1ul << 47) - PAGE_SIZE);
 
 	install_pte(phys_to_virt(read_cr3()), 1, topmost,
-		    virt_to_phys(data1) | PTE_PRESENT | PTE_WRITE, 0);
+		    virt_to_phys(data1) | PT_PRESENT_MASK | PT_WRITABLE_MASK, 0);
 	memset(topmost, 0xcc, PAGE_SIZE);
 	topmost[4093] = 0x0f;
 	topmost[4094] = 0x01;
diff --git a/x86/pku.c b/x86/pku.c
index df51d1b..e742735 100644
--- a/x86/pku.c
+++ b/x86/pku.c
@@ -77,7 +77,7 @@  int main(int ac, char **av)
     wrmsr(MSR_EFER, rdmsr(MSR_EFER) | EFER_LMA);
 
     for (i = 0; i < USER_BASE; i += PAGE_SIZE) {
-        *get_pte(phys_to_virt(read_cr3()), phys_to_virt(i)) &= ~PTE_USER;
+        *get_pte(phys_to_virt(read_cr3()), phys_to_virt(i)) &= ~PT_USER_MASK;
         *get_pte(phys_to_virt(read_cr3()), phys_to_virt(i)) |= ((unsigned long)pkey << PTE_PKEY_BIT);
         invlpg((void *)i);
     }
diff --git a/x86/rmap_chain.c b/x86/rmap_chain.c
index b356a37..7bf6275 100644
--- a/x86/rmap_chain.c
+++ b/x86/rmap_chain.c
@@ -36,7 +36,7 @@  int main (void)
 
     virt_addr += PAGE_SIZE;
     install_pte(phys_to_virt(read_cr3()), 1, virt_addr,
-                0 | PTE_PRESENT | PTE_WRITE, target_page);
+                0 | PT_PRESENT_MASK | PT_WRITABLE_MASK, target_page);
 
     *(unsigned long *)virt_addr = 0;
     printf("PASS\n");
diff --git a/x86/smap.c b/x86/smap.c
index 69e7186..ace9dc0 100644
--- a/x86/smap.c
+++ b/x86/smap.c
@@ -62,7 +62,7 @@  static void check_smap_nowp(void)
 {
 	test = 0x99;
 
-	*get_pte(phys_to_virt(read_cr3()), USER_ADDR(test)) &= ~PTE_WRITE;
+	*get_pte(phys_to_virt(read_cr3()), USER_ADDR(test)) &= ~PT_WRITABLE_MASK;
 
 	write_cr4(read_cr4() & ~X86_CR4_SMAP);
 	write_cr0(read_cr0() & ~X86_CR0_WP);
@@ -81,7 +81,7 @@  static void check_smap_nowp(void)
 	report("read from user page with SMAP=1, AC=0, WP=0, PTE.U=1 && PTE.W=0", pf_count == 1 && save == 0x99);
 
 	/* Undo changes */
-	*get_pte(phys_to_virt(read_cr3()), USER_ADDR(test)) |= PTE_WRITE;
+	*get_pte(phys_to_virt(read_cr3()), USER_ADDR(test)) |= PT_WRITABLE_MASK;
 
 	write_cr0(read_cr0() | X86_CR0_WP);
 	write_cr3(read_cr3());
@@ -102,7 +102,7 @@  int main(int ac, char **av)
 
 	// Map first 16MB as supervisor pages
 	for (i = 0; i < USER_BASE; i += PAGE_SIZE) {
-		*get_pte(phys_to_virt(read_cr3()), phys_to_virt(i)) &= ~PTE_USER;
+		*get_pte(phys_to_virt(read_cr3()), phys_to_virt(i)) &= ~PT_USER_MASK;
 		invlpg((void *)i);
 	}
 
diff --git a/x86/taskswitch2.c b/x86/taskswitch2.c
index d70b901..bb7345b 100644
--- a/x86/taskswitch2.c
+++ b/x86/taskswitch2.c
@@ -67,7 +67,7 @@  void do_pf_tss(ulong *error_code)
 	if (*error_code == 0x2) /* write access, not present */
 		test_count++;
 	install_pte(phys_to_virt(read_cr3()), 1, fault_addr,
-		    fault_phys | PTE_PRESENT | PTE_WRITE, 0);
+		    fault_phys | PT_PRESENT_MASK | PT_WRITABLE_MASK, 0);
 }
 
 extern void pf_tss(void);