[PATCH v1] lib: sbi_illegal_insn: Fix FENCE.TSO emulation infinite trap loop

Anup Patel anup at brainfault.org
Sun Aug 21 20:31:11 PDT 2022


On Fri, Aug 12, 2022 at 7:25 PM Rahul Pathak <rpathak at ventanamicro.com> wrote:
>
> In case of missing "FENCE.TSO" instruction implementation,
> opensbi can emulate the "FENCE.TSO" with "FENCE RW,RW", but
> mepc was not incremented to continue from the next instruction
> causing infinite trap.
>
> Fixes: cb8271c8 ("lib: sbi_illegal_insn: Add emulation for fence.tso")
> Signed-off-by: Rahul Pathak <rpathak at ventanamicro.com>
> Reviewed-by: Andrew Jones <ajones at ventanamicro.com>

Applied this patch to the riscv/opensbi repo.

Thanks,
Anup

> ---
>  lib/sbi/sbi_illegal_insn.c | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/lib/sbi/sbi_illegal_insn.c b/lib/sbi/sbi_illegal_insn.c
> index 84c04f8..53e9320 100644
> --- a/lib/sbi/sbi_illegal_insn.c
> +++ b/lib/sbi/sbi_illegal_insn.c
> @@ -39,6 +39,7 @@ static int misc_mem_opcode_insn(ulong insn, struct sbi_trap_regs *regs)
>         /* Errata workaround: emulate `fence.tso` as `fence rw, rw`. */
>         if ((insn & INSN_MASK_FENCE_TSO) == INSN_MATCH_FENCE_TSO) {
>                 smp_mb();
> +               regs->mepc += 4;
>                 return 0;
>         }
>
> --
> 2.34.1
>



More information about the opensbi mailing list