summaryrefslogtreecommitdiff
path: root/src/sys/os
diff options
context:
space:
mode:
authorIan Moffett <ian@osmora.org>2025-10-15 19:02:52 -0400
committerIan Moffett <ian@osmora.org>2025-10-15 19:04:01 -0400
commit810b5c49ebfb3398a8d9a89dedba6b97cb8688b1 (patch)
treee95d4dc0b10f2552a654eefab0ee7c8f933aaeb7 /src/sys/os
parentc3817dc16c1deab64756e4a9fcf8f7be91aaa12f (diff)
kern/amd64: Introduce kernel threads
Introduces kernel threads. by using the proc_ktd() function, one can spawn a CPL 0 running thread to the desired code. Signed-off-by: Ian Moffett <ian@osmora.org>
Diffstat (limited to 'src/sys/os')
-rw-r--r--src/sys/os/os_proc.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/sys/os/os_proc.c b/src/sys/os/os_proc.c
index 582c077..a8f49d7 100644
--- a/src/sys/os/os_proc.c
+++ b/src/sys/os/os_proc.c
@@ -393,6 +393,36 @@ proc_spawn(const char *path, struct penv_blk *envbp)
return proc->pid;
}
+int
+proc_ktd(struct proc **procp_res, void(*fn)(void *))
+{
+ struct proc *proc;
+ struct pcore *core;
+
+ if (procp_res == NULL || fn == NULL) {
+ return -EINVAL;
+ }
+
+ proc = kalloc(sizeof(*proc));
+ if (proc == NULL) {
+ return -ENOMEM;
+ }
+
+ core = cpu_sched();
+ if (core == NULL) {
+ kfree(proc);
+ return -EIO;
+ }
+
+ proc_init(proc, SPAWN_KTD);
+ md_set_ip(proc, (uintptr_t)fn);
+ sched_enq(&core->scq, proc);
+
+ *procp_res = proc;
+ TAILQ_INSERT_TAIL(&procq, proc, lup_link);
+ return 0;
+}
+
/*
* ARG0: Pathname to spawn
* ARG1: Process environment block