diff options
author | Himbeer <himbeer@disroot.org> | 2024-05-13 19:25:34 +0200 |
---|---|---|
committer | Himbeer <himbeer@disroot.org> | 2024-05-13 19:25:34 +0200 |
commit | 05a7b65dfd64f9db63c134856c3f50f9ea6cdc94 (patch) | |
tree | 4ddb4cdaf258d5886b953dd0add130a20ba0e081 /src | |
parent | 8505851375f0e43ee96798ce76ef59158dacb93e (diff) |
scheduling: Trigger kernel panic if no process queue is empty
Diffstat (limited to 'src')
-rw-r--r-- | src/interrupts.zig | 4 | ||||
-rw-r--r-- | src/process.zig | 4 |
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, |