diff options
| author | Jon Santmyer <jon@jonsantmyer.com> | 2026-10-07 17:37:26 -0400 |
|---|---|---|
| committer | Jon Santmyer <jon@jonsantmyer.com> | 2026-10-07 17:37:26 -0400 |
| commit | 434ddcd907832b1febc7d70e4faa52109c7eb3bd (patch) | |
| tree | 00c1ade91f9806d831f10e6006732b294e73f613 /proc/init.c | |
| parent | 8d48bbd9746228b63bafa5f92b621998d7d8f3d3 (diff) | |
| download | jove-kernel-434ddcd907832b1febc7d70e4faa52109c7eb3bd.tar.gz jove-kernel-434ddcd907832b1febc7d70e4faa52109c7eb3bd.tar.bz2 jove-kernel-434ddcd907832b1febc7d70e4faa52109c7eb3bd.zip | |
add memory region object for better memory managment
Diffstat (limited to 'proc/init.c')
| -rw-r--r-- | proc/init.c | 21 |
1 files changed, 11 insertions, 10 deletions
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__); |
