lib: sbi_illegal_insn: Fix FENCE.TSO emulation infinite trap loop
PATCH 1/1 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.
--- lib/sbi/sbi_illegal_insn.c | 1 + 1 file changed, 1 insertion(+)
lib/sbi/sbi_illegal_insn.c +1 -0
@@ -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 ; }
Signature · 1 line
2.34.1
PATCH 1/1 lib: sbi_illegal_insn: Fix FENCE.TSO emulation infinite trap loop
? 2022-08-12???? 19:24 +0530?Rahul Pathak???
Quoted 8 lines
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]>
Look good to me.
Quoted 20 lines
---
?lib/sbi/sbi_illegal_insn.c | 1 +
?1 file changed, 1 insertion(+)lib/sbi/sbi_illegal_insn.c +0
-0@@ -39,6 +39,7 @@ static int misc_mem_opcode_insn(ulong insn, struct sbi_trap_regs *regs)????????/* Errata workaround: emulate
fence.tsoasfence rw, rw. */ ????????if ((insn &INSN_MASK_FENCE_TSO) ==INSN_MATCH_FENCE_TSO) { ????????????????smp_mb();
+???????????????regs->mepc += 4;
????????????????return 0;
????????}
?Signature · 1 line
2.34.1
PATCH 1/1 lib: sbi_illegal_insn: Fix FENCE.TSO emulation infinite trap loop
In reply to Rahul PathakQuoted 8 lines · Rahul Pathak
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]>
Thanks for catching this!
Anup Patel
AppliedPATCH 1/1 lib: sbi_illegal_insn: Fix FENCE.TSO emulation infinite trap loop
In reply to Rahul PathakQuoted 9 lines · Rahul Pathak
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]>
Applied this patch to the riscv/opensbi repo.
Thanks,
Anup
Quoted 19 lines
--- lib/sbi/sbi_illegal_insn.c | 1 + 1 file changed, 1 insertion(+)lib/sbi/sbi_illegal_insn.c +1
-1@@ -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