for risc-v, don't store irq mask in trapframe
[akaros.git] / kern / arch / riscv / entry.S
index 6ffdabc..4707db5 100644 (file)
@@ -34,7 +34,7 @@ save_kernel_tf_asm:
 
   # set EPC to this function's return address
   STORE  ra,33*REGBYTES(a0)
-
+  ret
   .end  save_kernel_tf_asm
 
   .text
@@ -72,7 +72,11 @@ save_tf:  # write the trap frame onto the stack
 env_pop_tf:  # write the trap frame onto the stack
   # restore gprs
   LOAD  t0,32*REGBYTES(a0)  # restore sr (should disable interrupts)
-  mtpcr  t0,ASM_CR(PCR_SR)
+  mfpcr t1, ASM_CR(PCR_SR)
+  andi  t1, t1, ~(SR_PS | SR_EF | SR_U64)
+  andi  t0, t0, SR_PS | SR_EF | SR_U64
+  or    t0, t0, t1
+  mtpcr t0, ASM_CR(PCR_SR)
 
   LOAD  x1,1*REGBYTES(a0)
   mtpcr  x1,ASM_CR(PCR_K0)
@@ -136,6 +140,7 @@ trap_entry:
   sll   x1, x1, LOG_REGBYTES
   add   x2, x2, x1
   LOAD  x2, 0(x2)
+  add   x2, x2, -SIZEOF_TRAPFRAME_T
 
 1:# save gprs
   STORE  x3,3*REGBYTES(x2)