aboutsummaryrefslogtreecommitdiff
path: root/src/lib/process.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/process.zig')
-rw-r--r--src/lib/process.zig9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/lib/process.zig b/src/lib/process.zig
index e07c6a4..c227fdb 100644
--- a/src/lib/process.zig
+++ b/src/lib/process.zig
@@ -93,12 +93,15 @@ pub fn next() ?*Info {
pub fn switchTo(proc: *Info) noreturn {
proc.state = .active;
- instructions.sscratch.write(@intFromPtr(&proc.trap_frame));
-
var sstatus = instructions.sstatus.read();
sstatus.previous_privilege = .user;
+ sstatus.user_interrupt_enable = 0;
+ sstatus.supervisor_interrupt_enable = 0;
+ sstatus.user_prior_interrupt_enable = 1;
+ sstatus.supervisor_prior_interrupt_enable = 1;
instructions.sstatus.write(sstatus);
+ instructions.sscratch.write(@intFromPtr(&proc.trap_frame));
instructions.sepc.write(proc.pc);
instructions.satp.write(proc.satp());
@@ -163,5 +166,5 @@ pub fn demo(allocator: std.mem.Allocator) !noreturn {
list.prepend(proc_node);
try time.interruptInMillis(schedule_interval_millis);
- try switchTo(&proc_node.data);
+ switchTo(&proc_node.data);
}