summaryrefslogtreecommitdiffstats
path: root/proc/init.c
diff options
context:
space:
mode:
authorJon Santmyer <jon@jonsantmyer.com>2026-10-04 10:49:41 -0400
committerJon Santmyer <jon@jonsantmyer.com>2026-10-04 10:49:41 -0400
commit8d48bbd9746228b63bafa5f92b621998d7d8f3d3 (patch)
treefbaba69059c2e28d5098da4c9be357c38e406626 /proc/init.c
parent465cba0c00bfc5d89bf10ce353b0adf40bdc098d (diff)
downloadjove-kernel-8d48bbd9746228b63bafa5f92b621998d7d8f3d3.tar.gz
jove-kernel-8d48bbd9746228b63bafa5f92b621998d7d8f3d3.tar.bz2
jove-kernel-8d48bbd9746228b63bafa5f92b621998d7d8f3d3.zip
move init fully to proc. remove init pages prealloc. prepare for scheduling
Diffstat (limited to 'proc/init.c')
-rw-r--r--proc/init.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/proc/init.c b/proc/init.c
new file mode 100644
index 0000000..65299f4
--- /dev/null
+++ b/proc/init.c
@@ -0,0 +1,34 @@
+#include "init.h"
+#include "hal/memory.h"
+#include "panic/panic.h"
+
+objpath_part_t s_last_untyped = 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) {
+ 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--;
+ continue;
+ }
+
+ jove_owned_obj_t frame = { 0 };
+ jove_owned_obj_t *untyped = objdir_getlocal(untyped_dir, s_last_untyped);
+
+ if(untyped_split(untyped, &frame, 0x1000) < 0) {
+ kpanic("%s: Failed to split last untyped.\n", __func__);
+ }
+
+ obj_release(untyped);
+ obj_release(untyped_dir);
+ return frame;
+ }
+ kpanic("%s: Kernel is out of memory!\n", __func__);
+}