diff options
| author | Rahul Pathak <[email protected]> | 2022-08-12 19:24:42 +0530 |
|---|---|---|
| committer | Anup Patel <[email protected]> | 2022-08-22 08:57:23 +0530 |
| commit | 111afc12306e4368fa112f97d31ea802c4561294 (patch) | |
| tree | b0b9ea6547e3464f23724bcf00913518d4497a2e | |
| parent | a69eb6cc65a16f26455bfb5b7cab768ac891bc1d (diff) | |
lib: sbi_illegal_insn: Fix FENCE.TSO emulation infinite trap loop
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 <[email protected]>
Reviewed-by: Andrew Jones <[email protected]>
Reviewed-by: Xiang W <[email protected]>
Reviewed-by: Samuel Holland <[email protected]>
| -rw-r--r-- | lib/sbi/sbi_illegal_insn.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/lib/sbi/sbi_illegal_insn.c b/lib/sbi/sbi_illegal_insn.c index ecd35084..9691bce9 100644 --- a/lib/sbi/sbi_illegal_insn.c +++ b/lib/sbi/sbi_illegal_insn.c @@ -40,6 +40,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; } |
