From 6cf1d26dab3cdefeaa221a0e5499f87e0a2cc7eb Mon Sep 17 00:00:00 2001 From: Himbeer Date: Tue, 14 May 2024 10:01:41 +0200 Subject: process: Update state when trapping or context switching --- src/interrupts.zig | 1 + src/process.zig | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/interrupts.zig b/src/interrupts.zig index 9d47934..eb42ff1 100644 --- a/src/interrupts.zig +++ b/src/interrupts.zig @@ -130,6 +130,7 @@ export fn handleTrap(epc: usize, tval: usize, cause_bits: usize, hart_id: usize, // before returning into it. process.list.last.?.data.pc = epc; + process.list.last.?.data.state = .waiting; schedule() catch |err| { std.debug.panic("Hart {d}: Unable to schedule next process: {any}", .{ hart_id, err }); diff --git a/src/process.zig b/src/process.zig index 690f4f3..13281e3 100644 --- a/src/process.zig +++ b/src/process.zig @@ -92,7 +92,9 @@ pub fn next() ?*Info { return null; } -pub fn switchTo(proc: *const Info) noreturn { +pub fn switchTo(proc: *Info) noreturn { + proc.state = .active; + instructions.setSscratch(@intFromPtr(&proc.trap_frame)); asm volatile ( -- cgit v1.2.3