aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHimbeer <himbeer@disroot.org>2024-05-13 19:25:34 +0200
committerHimbeer <himbeer@disroot.org>2024-05-13 19:25:34 +0200
commit05a7b65dfd64f9db63c134856c3f50f9ea6cdc94 (patch)
tree4ddb4cdaf258d5886b953dd0add130a20ba0e081 /src
parent8505851375f0e43ee96798ce76ef59158dacb93e (diff)
scheduling: Trigger kernel panic if no process queue is empty
Diffstat (limited to 'src')
-rw-r--r--src/interrupts.zig4
-rw-r--r--src/process.zig4
2 files changed, 6 insertions, 2 deletions
diff --git a/src/interrupts.zig b/src/interrupts.zig
index 2a6bf34..4d12f99 100644
--- a/src/interrupts.zig
+++ b/src/interrupts.zig
@@ -266,12 +266,12 @@ export fn supervisorTrapVector() align(4) callconv(.Naked) noreturn {
);
}
-fn schedule() noreturn {
+fn schedule() !noreturn {
if (process.next()) |next| {
process.switchTo(next);
}
- while (true) asm volatile ("wfi");
+ return process.Error.EmptySchedule;
}
pub fn init() void {
diff --git a/src/process.zig b/src/process.zig
index a6217c6..045d667 100644
--- a/src/process.zig
+++ b/src/process.zig
@@ -13,6 +13,10 @@ const num_stack_pages = 2;
var next_pid: u16 = 1;
var list = std.mem.zeroInit(std.DoublyLinkedList(Info), .{});
+pub const Error = error{
+ EmptySchedule,
+};
+
pub const State = enum(u8) {
waiting,
active,