diff options
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, |