VMM - free_page unsets page

This commit is contained in:
Thomas Lovén 2017-12-29 23:15:34 +01:00
parent bbd220a395
commit 063c065d2f
2 changed files with 27 additions and 0 deletions

View File

@ -71,3 +71,15 @@ int touch_page(void *P4, uintptr_t addr, uint16_t flags)
return 0; return 0;
} }
void free_page(void *P4, uintptr_t addr, int free)
{
(void)free;
if(!(P4
&& P4e(P4, addr).present
&& P3e(P4, addr).present
&& P2e(P4, addr).present
))
return;
P1e(P4, addr).value = 0;
}

View File

@ -155,3 +155,18 @@ TEST(touch_page_fails_if_out_of_pages)
int retval = touch_page(p4, 0, 0); int retval = touch_page(p4, 0, 0);
ASSERT_NEQ_INT(retval, 0); ASSERT_NEQ_INT(retval, 0);
} }
TEST(free_page_unsets_page)
{
p4[1] = (uintptr_t)p3;
p4[1] |= PAGE_PRESENT;
p3[2] = (uintptr_t)p2;
p3[2] |= PAGE_PRESENT;
p2[3] = (uintptr_t)p1;
p2[3] |= PAGE_PRESENT;
p1[4] = PAGE_PRESENT;
free_page(p4, ADDR1234, 0);
ASSERT_EQ_PTR(p1[4], 0);
}