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,7 +39,10 @@ int page_exists(void *P4, uintptr_t addr)
uintptr_t vmm_get_page(void *P4, uintptr_t addr)
{
if(page_exists(P4, addr))
return P1e(P4, addr).value;
if(P2e(P4, addr).huge)
return P2e(P4, addr).value;
else
return P1e(P4, addr).value;
else
return -1;
}

View File

@ -62,6 +62,15 @@ TEST(get_page_fails_if_PTE_not_present)
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)
{