From 3de85be15a2cea29f6cfc9d4923234c71fd395ea Mon Sep 17 00:00:00 2001 From: Yoshinori Sugino Date: Tue, 29 Sep 2020 00:49:53 +0900 Subject: [PATCH] arch/risc-v/src: Branch to up_sigdeliver() with interrupts disabled When executing an MRET instruction, MIE is set to MPIE. In order to branch to up_sigdeliver() with interrupts disabled, we need to change MPIE, not MIE. --- arch/risc-v/src/k210/k210_schedulesigaction.c | 10 +++++----- arch/risc-v/src/litex/litex_schedulesigaction.c | 4 ++-- arch/risc-v/src/rv32im/riscv_schedulesigaction.c | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/arch/risc-v/src/k210/k210_schedulesigaction.c b/arch/risc-v/src/k210/k210_schedulesigaction.c index f17b842cf0..da8711223a 100644 --- a/arch/risc-v/src/k210/k210_schedulesigaction.c +++ b/arch/risc-v/src/k210/k210_schedulesigaction.c @@ -159,7 +159,7 @@ void up_schedule_sigaction(struct tcb_s *tcb, sig_deliver_t sigdeliver) CURRENT_REGS[REG_EPC] = (uintptr_t)up_sigdeliver; int_ctx = CURRENT_REGS[REG_INT_CTX]; - int_ctx &= ~MSTATUS_MIE; + int_ctx &= ~MSTATUS_MPIE; #ifdef CONFIG_BUILD_PROTECTED int_ctx |= MSTATUS_MPPM; #endif @@ -203,7 +203,7 @@ void up_schedule_sigaction(struct tcb_s *tcb, sig_deliver_t sigdeliver) tcb->xcp.regs[REG_EPC] = (uintptr_t)up_sigdeliver; int_ctx = tcb->xcp.regs[REG_INT_CTX]; - int_ctx &= ~MSTATUS_MIE; + int_ctx &= ~MSTATUS_MPIE; tcb->xcp.regs[REG_INT_CTX] = int_ctx; @@ -304,7 +304,7 @@ void up_schedule_sigaction(struct tcb_s *tcb, sig_deliver_t sigdeliver) tcb->xcp.regs[REG_EPC] = (uintptr_t)up_sigdeliver; int_ctx = tcb->xcp.regs[REG_INT_CTX]; - int_ctx &= ~MSTATUS_MIE; + int_ctx &= ~MSTATUS_MPIE; tcb->xcp.regs[REG_INT_CTX] = int_ctx; } @@ -329,7 +329,7 @@ void up_schedule_sigaction(struct tcb_s *tcb, sig_deliver_t sigdeliver) CURRENT_REGS[REG_EPC] = (uintptr_t)up_sigdeliver; int_ctx = CURRENT_REGS[REG_INT_CTX]; - int_ctx &= ~MSTATUS_MIE; + int_ctx &= ~MSTATUS_MPIE; #ifdef CONFIG_BUILD_PROTECTED int_ctx |= MSTATUS_MPPM; #endif @@ -400,7 +400,7 @@ void up_schedule_sigaction(struct tcb_s *tcb, sig_deliver_t sigdeliver) tcb->xcp.regs[REG_EPC] = (uintptr_t)up_sigdeliver; int_ctx = tcb->xcp.regs[REG_INT_CTX]; - int_ctx &= ~MSTATUS_MIE; + int_ctx &= ~MSTATUS_MPIE; tcb->xcp.regs[REG_INT_CTX] = int_ctx; } diff --git a/arch/risc-v/src/litex/litex_schedulesigaction.c b/arch/risc-v/src/litex/litex_schedulesigaction.c index 3a7d7e3729..1aa2cccc19 100644 --- a/arch/risc-v/src/litex/litex_schedulesigaction.c +++ b/arch/risc-v/src/litex/litex_schedulesigaction.c @@ -138,7 +138,7 @@ void up_schedule_sigaction(struct tcb_s *tcb, sig_deliver_t sigdeliver) g_current_regs[REG_EPC] = (uint32_t)up_sigdeliver; int_ctx = g_current_regs[REG_INT_CTX]; - int_ctx &= ~MSTATUS_MIE; + int_ctx &= ~MSTATUS_MPIE; g_current_regs[REG_INT_CTX] = int_ctx; @@ -178,7 +178,7 @@ void up_schedule_sigaction(struct tcb_s *tcb, sig_deliver_t sigdeliver) tcb->xcp.regs[REG_EPC] = (uint32_t)up_sigdeliver; int_ctx = tcb->xcp.regs[REG_INT_CTX]; - int_ctx &= ~MSTATUS_MIE; + int_ctx &= ~MSTATUS_MPIE; tcb->xcp.regs[REG_INT_CTX] = int_ctx; diff --git a/arch/risc-v/src/rv32im/riscv_schedulesigaction.c b/arch/risc-v/src/rv32im/riscv_schedulesigaction.c index 3fce095163..ff92133880 100644 --- a/arch/risc-v/src/rv32im/riscv_schedulesigaction.c +++ b/arch/risc-v/src/rv32im/riscv_schedulesigaction.c @@ -139,7 +139,7 @@ void up_schedule_sigaction(struct tcb_s *tcb, sig_deliver_t sigdeliver) g_current_regs[REG_EPC] = (uint32_t)up_sigdeliver; int_ctx = g_current_regs[REG_INT_CTX]; - int_ctx &= ~MSTATUS_MIE; + int_ctx &= ~MSTATUS_MPIE; g_current_regs[REG_INT_CTX] = int_ctx; @@ -179,7 +179,7 @@ void up_schedule_sigaction(struct tcb_s *tcb, sig_deliver_t sigdeliver) tcb->xcp.regs[REG_EPC] = (uint32_t)up_sigdeliver; int_ctx = tcb->xcp.regs[REG_INT_CTX]; - int_ctx &= ~MSTATUS_MIE; + int_ctx &= ~MSTATUS_MPIE; tcb->xcp.regs[REG_INT_CTX] = int_ctx;