diff options
Diffstat (limited to 'src/lib/process.zig')
-rw-r--r-- | src/lib/process.zig | 9 |
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); } |