From 434ddcd907832b1febc7d70e4faa52109c7eb3bd Mon Sep 17 00:00:00 2001 From: Jon Santmyer Date: Wed, 7 Oct 2026 17:37:26 -0400 Subject: add memory region object for better memory managment --- proc/init.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) (limited to 'proc/init.c') diff --git a/proc/init.c b/proc/init.c index 65299f4..4389187 100644 --- a/proc/init.c +++ b/proc/init.c @@ -2,32 +2,33 @@ #include "hal/memory.h" #include "panic/panic.h" -objpath_part_t s_last_untyped = JOVE_OBJDIR_ENTRIES-1; +objpath_part_t s_last_region = JOVE_OBJDIR_ENTRIES-1; jove_owned_obj_t init_pop_alloc(void) { - jove_owned_obj_t *untyped_dir = objdir_trygetlocal(_rootdir_obj, ROOTDIR_UNTYPED_I); - if(untyped_dir == 0) { + jove_owned_obj_t *freemem_dir = objdir_trygetlocal(_rootdir_obj, ROOTDIR_FREEMEMORY_I); + if(freemem_dir == 0) { kpanic("Untyped directory is locked!\n"); } int cycles = 0; while(cycles++ < 512) { - if(objdir_peeklocal(untyped_dir, s_last_untyped).type != JOVE_OBJ_UNTYPED) { - s_last_untyped--; + if(objdir_peeklocal(freemem_dir, s_last_region).type != JOVE_OBJ_REGION) { + s_last_region--; continue; } jove_owned_obj_t frame = { 0 }; - jove_owned_obj_t *untyped = objdir_getlocal(untyped_dir, s_last_untyped); + jove_owned_obj_t *region = objdir_getlocal(freemem_dir, s_last_region); - if(untyped_split(untyped, &frame, 0x1000) < 0) { - kpanic("%s: Failed to split last untyped.\n", __func__); + if(region_alloc(region, &frame) < 0) { + obj_release(region); + continue; } - obj_release(untyped); - obj_release(untyped_dir); + obj_release(region); + obj_release(freemem_dir); return frame; } kpanic("%s: Kernel is out of memory!\n", __func__); -- cgit v1.2.3