From 3a4136c225b7285e96b55552d62cdf73f747537d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Lov=C3=A9n?= Date: Thu, 4 Jan 2018 00:36:59 +0100 Subject: [PATCH] PMM -- calloc function for getting cleared pages --- src/kernel/include/memory.h | 1 + src/kernel/memory/pmm.c | 7 +++++++ src/kernel/memory/vmm.c | 6 +++--- src/kernel/memory/vmm.tt | 4 ++-- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/kernel/include/memory.h b/src/kernel/include/memory.h index e22f554..7ec8b0f 100644 --- a/src/kernel/include/memory.h +++ b/src/kernel/include/memory.h @@ -33,6 +33,7 @@ size_t strlen(const char *s); void pmm_free(uintptr_t page); uintptr_t pmm_alloc(); +uintptr_t pmm_calloc(); 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); diff --git a/src/kernel/memory/pmm.c b/src/kernel/memory/pmm.c index f979351..78cd3f8 100644 --- a/src/kernel/memory/pmm.c +++ b/src/kernel/memory/pmm.c @@ -16,3 +16,10 @@ uintptr_t pmm_alloc() page = (uintptr_t)(page?V2P(page):0); return page; } + +uintptr_t pmm_calloc() +{ + uintptr_t page = pmm_alloc(); + memset(P2V(page), 0, 0x1000); + return page; +} diff --git a/src/kernel/memory/vmm.c b/src/kernel/memory/vmm.c index 11c03e0..f67c1a6 100644 --- a/src/kernel/memory/vmm.c +++ b/src/kernel/memory/vmm.c @@ -77,19 +77,19 @@ int touch_page(void *P4, uintptr_t addr, uint16_t flags) flags ^= PAGE_HUGE*huge; if((!P4e(P4, addr).present) - && (!(P4e(P4, addr).value = pmm_alloc()))) + && (!(P4e(P4, addr).value = pmm_calloc()))) return -1; P4e(P4, addr).value |= flags | PAGE_PRESENT; if((!P3e(P4, addr).present) - && (!(P3e(P4, addr).value = pmm_alloc()))) + && (!(P3e(P4, addr).value = pmm_calloc()))) return -1; P3e(P4, addr).value |= flags | PAGE_PRESENT; if(huge) return 0; if((!P2e(P4, addr).present) - && (!(P2e(P4, addr).value = pmm_alloc()))) + && (!(P2e(P4, addr).value = pmm_calloc()))) return -1; P2e(P4, addr).value |= flags | PAGE_PRESENT; diff --git a/src/kernel/memory/vmm.tt b/src/kernel/memory/vmm.tt index 0af9e90..3d292e8 100644 --- a/src/kernel/memory/vmm.tt +++ b/src/kernel/memory/vmm.tt @@ -119,7 +119,7 @@ TEST(set_page_does_not_overwrite_4kb_pages_with_2mb) ASSERT_NEQ_INT(retval, 0); } -uintptr_t pmm_alloc() +uintptr_t pmm_calloc() { uintptr_t *pages[] = {p3, p2, p1}; static int counter=0; @@ -153,7 +153,7 @@ TEST(touch_page_sets_flags) } TEST(touch_page_fails_if_out_of_pages) { - pmm_alloc(); + pmm_calloc(); int retval = touch_page(p4, 0, 0); ASSERT_NEQ_INT(retval, 0); }