From 6200bd2d95ad6ff9a65f8b97b9335353e3a52c5e Mon Sep 17 00:00:00 2001 From: dzwdz Date: Sat, 17 Jul 2021 19:58:02 +0200 Subject: detect the highest used memory address, and only allocate pages above it --- src/kernel/mem.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'src/kernel/mem.c') diff --git a/src/kernel/mem.c b/src/kernel/mem.c index d002050..b455b25 100644 --- a/src/kernel/mem.c +++ b/src/kernel/mem.c @@ -1,11 +1,20 @@ #include #include +#include -extern void *_bss_end; static void *highest_page; -void mem_init() { - highest_page = &_bss_end; +void mem_init(struct kmain_info *info) { + // finds the highest used page, and starts allocating pages above it + extern char _bss_end; + void *highest = &_bss_end; + size_t page_mask = PAGE_SIZE - 1; + + if (highest < info->init.at + info->init.size) + highest = info->init.at + info->init.size; + + // align up to PAGE_SIZE + highest_page = (void*)(((uintptr_t)highest + page_mask) & ~page_mask); } void *page_alloc(size_t pages) { -- cgit v1.2.3