From b6d09dd04a5661bc039362cd043e86645782e610 Mon Sep 17 00:00:00 2001 From: Andrew Waterman Date: Fri, 14 Dec 2012 16:08:19 -0800 Subject: [PATCH] for risc-v, don't store irq mask in trapframe --- kern/arch/riscv/entry.S | 6 +++++- kern/arch/riscv/process.c | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/kern/arch/riscv/entry.S b/kern/arch/riscv/entry.S index 5a824bd..4707db5 100644 --- a/kern/arch/riscv/entry.S +++ b/kern/arch/riscv/entry.S @@ -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) diff --git a/kern/arch/riscv/process.c b/kern/arch/riscv/process.c index a80667e..1bd28e8 100644 --- a/kern/arch/riscv/process.c +++ b/kern/arch/riscv/process.c @@ -14,7 +14,7 @@ void proc_init_trapframe(trapframe_t *tf, uint32_t vcoreid, memset(tf, 0, sizeof(*tf)); tf->gpr[30] = stack_top-64; - tf->sr = SR_S | (mfpcr(PCR_SR) & SR_IM) | SR_S64 | SR_U64 | SR_VM; + tf->sr = SR_U64; tf->epc = entryp; @@ -25,7 +25,7 @@ void proc_init_trapframe(trapframe_t *tf, uint32_t vcoreid, void proc_secure_trapframe(struct trapframe *tf) { - tf->sr = SR_S | (mfpcr(PCR_SR) & SR_IM) | SR_S64 | SR_U64 | SR_VM; + tf->sr = SR_U64; } /* Called when we are currently running an address space on our core and want to -- 2.7.4