mirror of
https://github.com/riscv-software-src/opensbi.git
synced 2026-06-17 16:41:19 +01:00
lib: sbi_trap_v_ldst: Redirect unhandled traps
When SBI is built with a compiler that doesn't support vector, the
misaligned vector load/store emulation is not built in, the handlers are
just stubs.
Currently the stubs just return 0, causing sbi_trap_emulate_load() to
return without incrementing mepc, meaning the instruction will just
fault again, an infinite loop.
Fix the stubs to use sbi_trap_redirect(), which forwards the trap to the
previous mode, allowing it to be handled there.
Fixes: c2acc5e5 ("lib: sbi_misaligned_ldst: Add handling of vector load/store")
Signed-off-by: Michael Ellerman <mpe@kernel.org>
Reviewed-by: Anup Patel <anup@brainfault.org>
Link: https://lore.kernel.org/r/20260530-trap-redirect-v1-1-45d4d333d8c9@kernel.org
Signed-off-by: Anup Patel <anup@brainfault.org>
This commit is contained in:
committed by
Anup Patel
parent
dec9141a77
commit
1157eb37e2
@@ -334,11 +334,13 @@ int sbi_misaligned_v_st_emulator(int wlen, union sbi_ldst_data in_val,
|
||||
int sbi_misaligned_v_ld_emulator(int rlen, union sbi_ldst_data *out_val,
|
||||
struct sbi_trap_context *tcntx)
|
||||
{
|
||||
return 0;
|
||||
/* Unable to emulate, send trap to previous mode. */
|
||||
return sbi_trap_redirect(&tcntx->regs, &tcntx->trap);
|
||||
}
|
||||
int sbi_misaligned_v_st_emulator(int wlen, union sbi_ldst_data in_val,
|
||||
struct sbi_trap_context *tcntx)
|
||||
{
|
||||
return 0;
|
||||
/* Unable to emulate, send trap to previous mode. */
|
||||
return sbi_trap_redirect(&tcntx->regs, &tcntx->trap);
|
||||
}
|
||||
#endif /* OPENSBI_CC_SUPPORT_VECTOR */
|
||||
|
||||
Reference in New Issue
Block a user