VMM -- refactor page table setup in tests
This commit is contained in:
parent
063c065d2f
commit
e62c167494
@ -7,6 +7,10 @@ void *data;
|
|||||||
uintptr_t *p4, *p3, *p2, *p1;
|
uintptr_t *p4, *p3, *p2, *p1;
|
||||||
|
|
||||||
#define ADDR1234 ((1UL<<39) + (2UL<<30) + (3UL<<21) + (4UL<<12))
|
#define ADDR1234 ((1UL<<39) + (2UL<<30) + (3UL<<21) + (4UL<<12))
|
||||||
|
#define BUILD_PT(o4, o3, o2) \
|
||||||
|
p4[(o4)] = (uintptr_t)p3; p4[(o4)] |= PAGE_PRESENT; \
|
||||||
|
p3[(o3)] = (uintptr_t)p2; p3[(o3)] |= PAGE_PRESENT; \
|
||||||
|
p2[(o2)] = (uintptr_t)p1; p2[(o2)] |= PAGE_PRESENT;
|
||||||
|
|
||||||
BEFORE()
|
BEFORE()
|
||||||
{
|
{
|
||||||
@ -23,12 +27,7 @@ AFTER()
|
|||||||
|
|
||||||
TEST(get_page_returns_correct_address)
|
TEST(get_page_returns_correct_address)
|
||||||
{
|
{
|
||||||
p4[0] = (uintptr_t)p3;
|
BUILD_PT(0,0,0);
|
||||||
p4[0] |= PAGE_PRESENT;
|
|
||||||
p3[0] = (uintptr_t)p2;
|
|
||||||
p3[0] |= PAGE_PRESENT;
|
|
||||||
p2[0] = (uintptr_t)p1;
|
|
||||||
p2[0] |= PAGE_PRESENT;
|
|
||||||
p1[0] = 0x1234567890ABC000 | PAGE_PRESENT;
|
p1[0] = 0x1234567890ABC000 | PAGE_PRESENT;
|
||||||
|
|
||||||
uintptr_t ret = vmm_get_page(p4, 0);
|
uintptr_t ret = vmm_get_page(p4, 0);
|
||||||
@ -37,12 +36,7 @@ TEST(get_page_returns_correct_address)
|
|||||||
}
|
}
|
||||||
TEST(get_page_ignores_flags)
|
TEST(get_page_ignores_flags)
|
||||||
{
|
{
|
||||||
p4[0] = (uintptr_t)p3;
|
BUILD_PT(0,0,0);
|
||||||
p4[0] |= PAGE_PRESENT;
|
|
||||||
p3[0] = (uintptr_t)p2;
|
|
||||||
p3[0] |= PAGE_PRESENT;
|
|
||||||
p2[0] = (uintptr_t)p1;
|
|
||||||
p2[0] |= PAGE_PRESENT;
|
|
||||||
p1[0] = 0x1234567890ABC000 | PAGE_PRESENT;
|
p1[0] = 0x1234567890ABC000 | PAGE_PRESENT;
|
||||||
|
|
||||||
uintptr_t ret = vmm_get_page(p4, 0);
|
uintptr_t ret = vmm_get_page(p4, 0);
|
||||||
@ -51,12 +45,7 @@ TEST(get_page_ignores_flags)
|
|||||||
}
|
}
|
||||||
TEST(get_page_works_for_different_address)
|
TEST(get_page_works_for_different_address)
|
||||||
{
|
{
|
||||||
p4[1] = (uintptr_t)p3;
|
BUILD_PT(1,2,3)
|
||||||
p4[1] |= PAGE_PRESENT;
|
|
||||||
p3[2] = (uintptr_t)p2;
|
|
||||||
p3[2] |= PAGE_PRESENT;
|
|
||||||
p2[3] = (uintptr_t)p1;
|
|
||||||
p2[3] |= PAGE_PRESENT;
|
|
||||||
p1[4] = 0x34567890ABCDE000 | PAGE_PRESENT;
|
p1[4] = 0x34567890ABCDE000 | PAGE_PRESENT;
|
||||||
|
|
||||||
uintptr_t ret = vmm_get_page(p4, ADDR1234);
|
uintptr_t ret = vmm_get_page(p4, ADDR1234);
|
||||||
@ -65,12 +54,8 @@ TEST(get_page_works_for_different_address)
|
|||||||
}
|
}
|
||||||
TEST(get_page_fails_if_PTE_not_present)
|
TEST(get_page_fails_if_PTE_not_present)
|
||||||
{
|
{
|
||||||
p4[0] = (uintptr_t)p3;
|
BUILD_PT(0,0,0);
|
||||||
p4[0] |= PAGE_PRESENT;
|
|
||||||
p3[0] = (uintptr_t)p2;
|
|
||||||
p3[0] |= PAGE_PRESENT;
|
|
||||||
p2[0] = (uintptr_t)p1;
|
p2[0] = (uintptr_t)p1;
|
||||||
p2[0] |= 0;
|
|
||||||
p1[0] = 0x1234567890ABC000 | PAGE_PRESENT;
|
p1[0] = 0x1234567890ABC000 | PAGE_PRESENT;
|
||||||
|
|
||||||
uintptr_t ret = vmm_get_page(p4, 0);
|
uintptr_t ret = vmm_get_page(p4, 0);
|
||||||
@ -80,12 +65,7 @@ TEST(get_page_fails_if_PTE_not_present)
|
|||||||
|
|
||||||
TEST(set_page_sets_page)
|
TEST(set_page_sets_page)
|
||||||
{
|
{
|
||||||
p4[0] = (uintptr_t)p3;
|
BUILD_PT(0,0,0);
|
||||||
p4[0] |= PAGE_PRESENT;
|
|
||||||
p3[0] = (uintptr_t)p2;
|
|
||||||
p3[0] |= PAGE_PRESENT;
|
|
||||||
p2[0] = (uintptr_t)p1;
|
|
||||||
p2[0] |= PAGE_PRESENT;
|
|
||||||
|
|
||||||
vmm_set_page(p4, 0, 0x1234567890ABC000, PAGE_PRESENT);
|
vmm_set_page(p4, 0, 0x1234567890ABC000, PAGE_PRESENT);
|
||||||
|
|
||||||
@ -93,12 +73,7 @@ TEST(set_page_sets_page)
|
|||||||
}
|
}
|
||||||
TEST(set_page_returns_success_if_working)
|
TEST(set_page_returns_success_if_working)
|
||||||
{
|
{
|
||||||
p4[0] = (uintptr_t)p3;
|
BUILD_PT(0,0,0);
|
||||||
p4[0] |= PAGE_PRESENT;
|
|
||||||
p3[0] = (uintptr_t)p2;
|
|
||||||
p3[0] |= PAGE_PRESENT;
|
|
||||||
p2[0] = (uintptr_t)p1;
|
|
||||||
p2[0] |= PAGE_PRESENT;
|
|
||||||
|
|
||||||
int retval = vmm_set_page(p4, 0, 0x1234567890ABC000, PAGE_PRESENT);
|
int retval = vmm_set_page(p4, 0, 0x1234567890ABC000, PAGE_PRESENT);
|
||||||
|
|
||||||
@ -106,11 +81,8 @@ TEST(set_page_returns_success_if_working)
|
|||||||
}
|
}
|
||||||
TEST(set_page_fails_if_PT_missing)
|
TEST(set_page_fails_if_PT_missing)
|
||||||
{
|
{
|
||||||
p4[0] = (uintptr_t)p3;
|
BUILD_PT(0,0,0);
|
||||||
p4[0] |= PAGE_PRESENT;
|
|
||||||
p3[0] = (uintptr_t)p2;
|
p3[0] = (uintptr_t)p2;
|
||||||
p2[0] = (uintptr_t)p1;
|
|
||||||
p2[0] |= PAGE_PRESENT;
|
|
||||||
|
|
||||||
int retval = vmm_set_page(p4, 0, 0x1234567890ABC000, PAGE_PRESENT);
|
int retval = vmm_set_page(p4, 0, 0x1234567890ABC000, PAGE_PRESENT);
|
||||||
|
|
||||||
@ -158,12 +130,7 @@ TEST(touch_page_fails_if_out_of_pages)
|
|||||||
|
|
||||||
TEST(free_page_unsets_page)
|
TEST(free_page_unsets_page)
|
||||||
{
|
{
|
||||||
p4[1] = (uintptr_t)p3;
|
BUILD_PT(1,2,3);
|
||||||
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;
|
p1[4] = PAGE_PRESENT;
|
||||||
|
|
||||||
free_page(p4, ADDR1234, 0);
|
free_page(p4, ADDR1234, 0);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user