diff --git a/kernel/src/arch/riscv/irq.rs b/kernel/src/arch/riscv/irq.rs index 28961081d..7958908e2 100644 --- a/kernel/src/arch/riscv/irq.rs +++ b/kernel/src/arch/riscv/irq.rs @@ -18,14 +18,17 @@ extern "C" { fn flush_mmu(); } +// use RAM-based backing so this variable is automatically saved on suspend +static mut SIM_BACKING: usize = 0; /// Disable external interrupts pub fn disable_all_irqs() { - unsafe { sie::clear_sext() }; + unsafe{SIM_BACKING = sim::read()}; + sim::write(0x0); } /// Enable external interrupts pub fn enable_all_irqs() { - unsafe { sie::set_sext() }; + sim::write(unsafe{SIM_BACKING}); } pub fn enable_irq(irq_no: usize) {