diff options
author | Himbeer <himbeer@disroot.org> | 2024-07-04 13:13:09 +0200 |
---|---|---|
committer | Himbeer <himbeer@disroot.org> | 2024-07-04 13:13:24 +0200 |
commit | 5cec5fc15406d9f0d29294d5aacc5bfd9da17577 (patch) | |
tree | dde1bc74858135240d87ca43845322a749b4b3f9 /src/lib/interrupts.zig | |
parent | 680558985053f99a018190ff84c1851b22cf6665 (diff) |
interrupts: Send the process being interrupted back into waiting state
Diffstat (limited to 'src/lib/interrupts.zig')
-rw-r--r-- | src/lib/interrupts.zig | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/lib/interrupts.zig b/src/lib/interrupts.zig index 3b1884d..3a012c3 100644 --- a/src/lib/interrupts.zig +++ b/src/lib/interrupts.zig @@ -140,6 +140,9 @@ export fn handleTrap(epc: usize, tval: usize, cause_bits: usize, frame: *trap.Fr }, } } else { + const proc = &process.list.last.?.data; + proc.state = .waiting; + switch (@as(SyncCause, @enumFromInt(cause.num))) { .illegal_instruction => { std.debug.panic("Hart {d}: Illegal instruction, EPC = 0x{x:0>16}", .{ frame.hart_id, epc }); @@ -154,7 +157,6 @@ export fn handleTrap(epc: usize, tval: usize, cause_bits: usize, frame: *trap.Fr std.debug.panic("Hart {d}: Store/AMO access fault: EPC = 0x{x:0>16}, TVAL = 0x{x:0>16}", .{ frame.hart_id, epc, tval }); }, .ecall => { - const proc = &process.list.last.?.data; syscall.handler(proc, frame) catch |err| switch (err) { syscall.Error.UnknownSyscall => { const a7 = frame.general_purpose_registers[17]; |