diff --git a/hypervisor/arch/x86/page.c b/hypervisor/arch/x86/page.c index 6f932b540..8edd93b21 100644 --- a/hypervisor/arch/x86/page.c +++ b/hypervisor/arch/x86/page.c @@ -103,11 +103,6 @@ static inline bool large_page_support(enum _page_table_level level, __unused uin return support; } -static inline uint64_t ppt_get_default_access_right(void) -{ - return (PAGE_PRESENT | PAGE_RW | PAGE_USER); -} - static inline void ppt_clflush_pagewalk(const void* entry __attribute__((unused))) { } @@ -121,9 +116,9 @@ static inline void nop_tweak_exe_right(uint64_t *entry __attribute__((unused))) static inline void nop_recover_exe_right(uint64_t *entry __attribute__((unused))) {} const struct memory_ops ppt_mem_ops = { + .default_access_right = (PAGE_PRESENT | PAGE_RW | PAGE_USER), .pool = &ppt_page_pool, .large_page_support = large_page_support, - .get_default_access_right = ppt_get_default_access_right, .pgentry_present = ppt_pgentry_present, .clflush_pagewalk = ppt_clflush_pagewalk, .tweak_exe_right = nop_tweak_exe_right, @@ -215,11 +210,6 @@ static inline bool use_large_page(enum _page_table_level level, uint64_t prot) return ret; } -static inline uint64_t ept_get_default_access_right(void) -{ - return EPT_RWX; -} - static inline uint64_t ept_pgentry_present(uint64_t pte) { return pte & EPT_RWX; @@ -265,7 +255,7 @@ void init_ept_mem_ops(struct memory_ops *mem_ops, uint16_t vm_id) } mem_ops->pool = &ept_page_pool[vm_id]; - mem_ops->get_default_access_right = ept_get_default_access_right; + mem_ops->default_access_right = EPT_RWX; mem_ops->pgentry_present = ept_pgentry_present; mem_ops->clflush_pagewalk = ept_clflush_pagewalk; mem_ops->large_page_support = large_page_support; diff --git a/hypervisor/arch/x86/pagetable.c b/hypervisor/arch/x86/pagetable.c index f8cfcfc1d..6eee5ba36 100644 --- a/hypervisor/arch/x86/pagetable.c +++ b/hypervisor/arch/x86/pagetable.c @@ -70,7 +70,7 @@ static void split_large_page(uint64_t *pte, enum _page_table_level level, paddr += paddrinc; } - ref_prot = mem_ops->get_default_access_right(); + ref_prot = mem_ops->default_access_right; set_pgentry(pte, hva2hpa((void *)pbase) | ref_prot, mem_ops); /* TODO: flush the TLB */ @@ -335,7 +335,7 @@ static void add_pde(const uint64_t *pdpte, uint64_t paddr_start, uint64_t vaddr_ break; /* done */ } else { void *pt_page = alloc_page(mem_ops->pool); - construct_pgentry(pde, pt_page, mem_ops->get_default_access_right(), mem_ops); + construct_pgentry(pde, pt_page, mem_ops->default_access_right, mem_ops); } } add_pte(pde, paddr, vaddr, vaddr_end, prot, mem_ops); @@ -384,7 +384,7 @@ static void add_pdpte(const uint64_t *pml4e, uint64_t paddr_start, uint64_t vadd break; /* done */ } else { void *pd_page = alloc_page(mem_ops->pool); - construct_pgentry(pdpte, pd_page, mem_ops->get_default_access_right(), mem_ops); + construct_pgentry(pdpte, pd_page, mem_ops->default_access_right, mem_ops); } } add_pde(pdpte, paddr, vaddr, vaddr_end, prot, mem_ops); @@ -421,7 +421,7 @@ void mmu_add(uint64_t *pml4_page, uint64_t paddr_base, uint64_t vaddr_base, uint pml4e = pml4e_offset(pml4_page, vaddr); if (mem_ops->pgentry_present(*pml4e) == 0UL) { void *pdpt_page = alloc_page(mem_ops->pool); - construct_pgentry(pml4e, pdpt_page, mem_ops->get_default_access_right(), mem_ops); + construct_pgentry(pml4e, pdpt_page, mem_ops->default_access_right, mem_ops); } add_pdpte(pml4e, paddr, vaddr, vaddr_end, prot, mem_ops); diff --git a/hypervisor/include/arch/x86/page.h b/hypervisor/include/arch/x86/page.h index 1094fa30d..fbebb4c65 100644 --- a/hypervisor/include/arch/x86/page.h +++ b/hypervisor/include/arch/x86/page.h @@ -67,9 +67,9 @@ struct page_pool { }; struct memory_ops { + uint64_t default_access_right; struct page_pool *pool; bool (*large_page_support)(enum _page_table_level level, uint64_t prot); - uint64_t (*get_default_access_right)(void); uint64_t (*pgentry_present)(uint64_t pte); void (*clflush_pagewalk)(const void *p); void (*tweak_exe_right)(uint64_t *entry);