diff options
| author | Samuel Holland <[email protected]> | 2021-08-14 08:41:47 -0500 |
|---|---|---|
| committer | Anup Patel <[email protected]> | 2021-08-20 09:47:40 +0530 |
| commit | ee274377b2a0f26400281a2ccb00b6e15c3f5716 (patch) | |
| tree | 41db4de2d04ecd57c05fd9030d9386674d80c57a | |
| parent | 33eac764f22ba4d0a22980ff4f130eadb9502a2f (diff) | |
lib: sbi_trap: Restore redirect for access faults
commit 764a17d852a8 ("lib: sbi: Implement firmware counters") added
switch cases for CAUSE_LOAD_ACCESS and CAUSE_STORE_ACCESS. This caused
them to stop being redirected to U or S mode, as that is handled in the
default switch case. As a result, an error in userspace could cause the
system to hang. Fix this by allowing the acces fault case to fall
through to the default case.
Fixes: 764a17d852a8 ("lib: sbi: Implement firmware counters")
Signed-off-by: Samuel Holland <[email protected]>
Reviewed-by: Atish Patra <[email protected]>
Reviewed-by: Bin Meng <[email protected]>
| -rw-r--r-- | lib/sbi/sbi_trap.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/lib/sbi/sbi_trap.c b/lib/sbi/sbi_trap.c index 5781fea2..8d20e04a 100644 --- a/lib/sbi/sbi_trap.c +++ b/lib/sbi/sbi_trap.c @@ -259,11 +259,10 @@ struct sbi_trap_regs *sbi_trap_handler(struct sbi_trap_regs *regs) msg = "ecall handler failed"; break; case CAUSE_LOAD_ACCESS: - sbi_pmu_ctr_incr_fw(SBI_PMU_FW_ACCESS_LOAD); - break; case CAUSE_STORE_ACCESS: - sbi_pmu_ctr_incr_fw(SBI_PMU_FW_ACCESS_STORE); - break; + sbi_pmu_ctr_incr_fw(mcause == CAUSE_LOAD_ACCESS ? + SBI_PMU_FW_ACCESS_LOAD : SBI_PMU_FW_ACCESS_STORE); + /* fallthrough */ default: /* If the trap came from S or U mode, redirect it there */ trap.epc = regs->mepc; |
