VMM - touch_page adds P2 and P1
This commit is contained in:
parent
1d4b689215
commit
86d8aea9ea
@ -55,7 +55,11 @@ int touch_page(void *P4, uintptr_t addr, uint16_t flags)
|
|||||||
(void)flags;
|
(void)flags;
|
||||||
if(!P4) return -1;
|
if(!P4) return -1;
|
||||||
if(!P4e(P4, addr).present)
|
if(!P4e(P4, addr).present)
|
||||||
P4e(P4, addr).value = pmm_alloc();
|
P4e(P4, addr).value = pmm_alloc() | flags | PAGE_PRESENT;
|
||||||
|
if(!P3e(P4, addr).present)
|
||||||
|
P3e(P4, addr).value = pmm_alloc() | flags | PAGE_PRESENT;
|
||||||
|
if(!P2e(P4, addr).present)
|
||||||
|
P2e(P4, addr).value = pmm_alloc() | flags | PAGE_PRESENT;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -124,9 +124,19 @@ uintptr_t pmm_alloc()
|
|||||||
|
|
||||||
TEST(touch_page_adds_P3)
|
TEST(touch_page_adds_P3)
|
||||||
{
|
{
|
||||||
p4[0] = 0;
|
touch_page(p4, (1UL<<39)+(2UL<<30)+(3UL<<21)+(4UL<<12), 0);
|
||||||
|
|
||||||
touch_page(p4, 0, 0);
|
ASSERT_EQ_PTR(p4[1], (uintptr_t)p3 | PAGE_PRESENT);
|
||||||
|
}
|
||||||
ASSERT_NEQ_PTR(p4[0], 0);
|
TEST(touch_page_adds_P2)
|
||||||
|
{
|
||||||
|
touch_page(p4, (1UL<<39)+(2UL<<30)+(3UL<<21)+(4UL<<12), 0);
|
||||||
|
|
||||||
|
ASSERT_EQ_PTR(p3[2], (uintptr_t)p2 | PAGE_PRESENT);
|
||||||
|
}
|
||||||
|
TEST(touch_page_adds_P1)
|
||||||
|
{
|
||||||
|
touch_page(p4, (1UL<<39)+(2UL<<30)+(3UL<<21)+(4UL<<12), 0);
|
||||||
|
|
||||||
|
ASSERT_EQ_PTR(p2[3], (uintptr_t)p1 | PAGE_PRESENT);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user