x86: mmu: implement arch_page_phys_get()

This implements arch_page_phys_get() to translate mapped
virtual addresses back to physical addresses.

Signed-off-by: Daniel Leung <daniel.leung@intel.com>
This commit is contained in:
Daniel Leung 2021-04-16 11:54:27 -07:00 committed by Anas Nashif
parent 085d3768e1
commit 18aad13d76

View file

@ -1844,6 +1844,29 @@ void arch_reserved_pages_update(void)
}
#endif /* CONFIG_ARCH_HAS_RESERVED_PAGE_FRAMES */
int arch_page_phys_get(void *virt, uintptr_t *phys)
{
pentry_t pte = 0;
int level, ret;
__ASSERT(POINTER_TO_UINT(virt) % CONFIG_MMU_PAGE_SIZE == 0U,
"unaligned address %p to %s", virt, __func__);
pentry_get(&level, &pte, z_x86_page_tables_get(), virt);
if ((pte & MMU_P) != 0) {
if (phys != NULL) {
*phys = (uintptr_t)get_entry_phys(pte, PTE_LEVEL);
}
ret = 0;
} else {
/* Not mapped */
ret = -EFAULT;
}
return ret;
}
#ifdef CONFIG_DEMAND_PAGING
#define PTE_MASK (paging_levels[PTE_LEVEL].mask)