VMM - get_page gets 2mb pages

This commit is contained in:
Thomas Lovén 2018-01-01 23:53:18 +01:00
parent 69022cadd5
commit f81e5cd8b0
2 changed files with 13 additions and 1 deletions

View File

@ -39,6 +39,9 @@ int page_exists(void *P4, uintptr_t addr)
uintptr_t vmm_get_page(void *P4, uintptr_t addr) uintptr_t vmm_get_page(void *P4, uintptr_t addr)
{ {
if(page_exists(P4, addr)) if(page_exists(P4, addr))
if(P2e(P4, addr).huge)
return P2e(P4, addr).value;
else
return P1e(P4, addr).value; return P1e(P4, addr).value;
else else
return -1; return -1;

View File

@ -62,6 +62,15 @@ TEST(get_page_fails_if_PTE_not_present)
ASSERT_EQ_PTR(ret, -1); ASSERT_EQ_PTR(ret, -1);
} }
TEST(get_page_gets_2mb_pages)
{
p4[1] = (uintptr_t)p3; p4[1] |= PAGE_PRESENT;
p3[2] = (uintptr_t)p2; p3[2] |= PAGE_PRESENT;
p2[3] = 0x1234567890A00000 | PAGE_HUGE | PAGE_PRESENT;
uintptr_t ret = vmm_get_page(p4, ADDR1234);
ASSERT_EQ_PTR(ret, 0x1234567890A00000 | PAGE_HUGE | PAGE_PRESENT);
}
TEST(set_page_sets_page) TEST(set_page_sets_page)
{ {