[PATCH] lib: sbi_trap: Restore redirect for access faults

Atish Patra atishp at atishpatra.org
Mon Aug 16 17:06:37 PDT 2021


On Sat, Aug 14, 2021 at 6:42 AM Samuel Holland <samuel at sholland.org> wrote:
>
> 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.

Thanks for catching this.

>
> Signed-off-by: Samuel Holland <samuel at sholland.org>
> ---
>  lib/sbi/sbi_trap.c | 7 +++----
>  1 file changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/lib/sbi/sbi_trap.c b/lib/sbi/sbi_trap.c
> index 5781fea..8d20e04 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;
> --
> 2.31.1
>
>
> --
> opensbi mailing list
> opensbi at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi


Reviewed-by: Atish Patra <atish.patra at wdc.com>

-- 
Regards,
Atish



More information about the opensbi mailing list