summaryrefslogtreecommitdiff
path: root/kernel/src/scheduler/scheduler.c
diff options
context:
space:
mode:
authorAleksa Vuckovic <aleksa@vuckovic.cc>2023-03-02 20:30:55 +0100
committerAleksa Vuckovic <aleksa@vuckovic.cc>2023-03-02 20:30:55 +0100
commitfbc2cc52c8a38c3c63a34f5547ba7c4209a667ac (patch)
tree985e3b96308123dc1771abfc30e9fe4f8daac5f4 /kernel/src/scheduler/scheduler.c
parent1e1c00c09991846257af4c8e50a177178355d986 (diff)
scheduling usermode processes & code refactoring
Diffstat (limited to 'kernel/src/scheduler/scheduler.c')
-rw-r--r--kernel/src/scheduler/scheduler.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/kernel/src/scheduler/scheduler.c b/kernel/src/scheduler/scheduler.c
index 91e5ddd..28e2cae 100644
--- a/kernel/src/scheduler/scheduler.c
+++ b/kernel/src/scheduler/scheduler.c
@@ -7,19 +7,27 @@
#include <libk/stdio.h>
#include <panic.h>
#include <regs.h>
+#include <userspace.h>
+#include <apic.h>
mutex_t scheduler_lock;
uint32_t sched_init = 0;
__attribute__((noreturn)) void init_scheduler()
{
+ uint32_t argc;
+ uint64_t *argv;
+
INIT_LIST(process_queue.list);
init_mutex(&scheduler_lock);
- uint64_t argc = 6;
- uint64_t *argv = (uint64_t *)kalloc(sizeof(uint64_t) * 6);
- memset(argv, 0, sizeof(uint64_t) * 6);
- init_process(0, (uint64_t)idle_thread2, argc, argv);
- curr_process = init_process(0, (uint64_t)idle_thread, argc, argv);
+
+ argc = 1;
+ argv = (uint64_t *)kalloc(argc * sizeof(uint64_t));
+ memset(argv, 0, sizeof(uint64_t) * argc);
+ init_process(0, (uint64_t)idle_thread, argc, argv);
+ curr_process = init_process(0, (uint64_t)init_ap_cpus, argc, argv);
+ init_process(3, (uint64_t)begin_userspace, argc, argv);
+
sched_init = 1;
restore_context_from_rsp(curr_process->rsp);
}