From f81e5cd8b0d046bf10dea5c874f330d11fd46ba9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Lov=C3=A9n?= Date: Mon, 1 Jan 2018 23:53:18 +0100 Subject: [PATCH] VMM - get_page gets 2mb pages --- src/kernel/memory/vmm.c | 5 ++++- src/kernel/memory/vmm.tt | 9 +++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/kernel/memory/vmm.c b/src/kernel/memory/vmm.c index 0415511..280e5b4 100644 --- a/src/kernel/memory/vmm.c +++ b/src/kernel/memory/vmm.c @@ -39,7 +39,10 @@ int page_exists(void *P4, uintptr_t addr) uintptr_t vmm_get_page(void *P4, uintptr_t addr) { if(page_exists(P4, addr)) - return P1e(P4, addr).value; + if(P2e(P4, addr).huge) + return P2e(P4, addr).value; + else + return P1e(P4, addr).value; else return -1; } diff --git a/src/kernel/memory/vmm.tt b/src/kernel/memory/vmm.tt index 21773a1..ca774a4 100644 --- a/src/kernel/memory/vmm.tt +++ b/src/kernel/memory/vmm.tt @@ -62,6 +62,15 @@ TEST(get_page_fails_if_PTE_not_present) ASSERT_EQ_PTR(ret, -1); } +TEST(get_page_gets_2mb_pages) +{ + p4[1] = (uintptr_t)p3; p4[1] |= PAGE_PRESENT; + p3[2] = (uintptr_t)p2; p3[2] |= PAGE_PRESENT; + p2[3] = 0x1234567890A00000 | PAGE_HUGE | PAGE_PRESENT; + + uintptr_t ret = vmm_get_page(p4, ADDR1234); + ASSERT_EQ_PTR(ret, 0x1234567890A00000 | PAGE_HUGE | PAGE_PRESENT); +} TEST(set_page_sets_page) {