VMM - free_page unsets page
This commit is contained in:
parent
bbd220a395
commit
063c065d2f
@ -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;
|
||||||
|
}
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user