VMM - set_page sets 2Mb pages
This commit is contained in:
parent
f81e5cd8b0
commit
518eaf73c3
@ -49,6 +49,17 @@ uintptr_t vmm_get_page(void *P4, uintptr_t addr)
|
|||||||
|
|
||||||
int vmm_set_page(void *P4, uintptr_t addr, uintptr_t page, uint16_t flags)
|
int vmm_set_page(void *P4, uintptr_t addr, uintptr_t page, uint16_t flags)
|
||||||
{
|
{
|
||||||
|
if(flags & PAGE_HUGE)
|
||||||
|
{
|
||||||
|
if(!(P4
|
||||||
|
&& P4e(P4, addr).present
|
||||||
|
&& P3e(P4, addr).present
|
||||||
|
))
|
||||||
|
return -1;
|
||||||
|
P2e(P4, addr).value = page | flags;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if(!page_exists(P4, addr))
|
if(!page_exists(P4, addr))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
@ -97,6 +97,15 @@ TEST(set_page_fails_if_PT_missing)
|
|||||||
|
|
||||||
ASSERT_NEQ_INT(retval, 0);
|
ASSERT_NEQ_INT(retval, 0);
|
||||||
}
|
}
|
||||||
|
TEST(set_page_sets_2mb_pages)
|
||||||
|
{
|
||||||
|
p4[1] = (uintptr_t)p3; p4[1] |= PAGE_PRESENT;
|
||||||
|
p3[2] = (uintptr_t)p2; p3[2] |= PAGE_PRESENT;
|
||||||
|
|
||||||
|
vmm_set_page(p4, (1UL<<39)+(2UL<<30)+(3UL<<21), 0x1234567890A00000, PAGE_HUGE | PAGE_PRESENT);
|
||||||
|
|
||||||
|
ASSERT_EQ_PTR(p2[3], 0x1234567890A00000 | PAGE_HUGE | PAGE_PRESENT);
|
||||||
|
}
|
||||||
|
|
||||||
uintptr_t pmm_alloc()
|
uintptr_t pmm_alloc()
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user