diff options
author | Anup Patel <apatel@ventanamicro.com> | 2024-03-11 15:54:56 +0530 |
---|---|---|
committer | Anup Patel <anup@brainfault.org> | 2024-03-19 11:31:31 +0530 |
commit | f414cf931eaf41c28d2750928108321d5006b178 (patch) | |
tree | 4b765c678bd933522cc9d58b6ab7d46736e87856 | |
parent | fea33a933498a34f2375d6ac53d9d932d373eefa (diff) | |
download | opensbi-f414cf931eaf41c28d2750928108321d5006b178.zip opensbi-f414cf931eaf41c28d2750928108321d5006b178.tar.gz opensbi-f414cf931eaf41c28d2750928108321d5006b178.tar.bz2 |
lib: sbi: Simplify parameters of sbi_illegal_insn_handler()
The struct sbi_trap_context already has the information needed by
sbi_illegal_insn_handler() so directly pass struct sbi_trap_context
pointer to this function.
Signed-off-by: Anup Patel <apatel@ventanamicro.com>
Reviewed-by: Samuel Holland <samuel.holland@sifive.com>
Tested-by: Samuel Holland <samuel.holland@sifive.com>
-rw-r--r-- | include/sbi/sbi_illegal_insn.h | 4 | ||||
-rw-r--r-- | lib/sbi/sbi_illegal_insn.c | 7 | ||||
-rw-r--r-- | lib/sbi/sbi_trap.c | 2 |
3 files changed, 7 insertions, 6 deletions
diff --git a/include/sbi/sbi_illegal_insn.h b/include/sbi/sbi_illegal_insn.h index 0397935..7be72ac 100644 --- a/include/sbi/sbi_illegal_insn.h +++ b/include/sbi/sbi_illegal_insn.h @@ -12,8 +12,8 @@ #include <sbi/sbi_types.h> -struct sbi_trap_regs; +struct sbi_trap_context; -int sbi_illegal_insn_handler(ulong insn, struct sbi_trap_regs *regs); +int sbi_illegal_insn_handler(struct sbi_trap_context *tcntx); #endif diff --git a/lib/sbi/sbi_illegal_insn.c b/lib/sbi/sbi_illegal_insn.c index dd0b3c1..ed6f111 100644 --- a/lib/sbi/sbi_illegal_insn.c +++ b/lib/sbi/sbi_illegal_insn.c @@ -136,8 +136,10 @@ static const illegal_insn_func illegal_insn_table[32] = { truly_illegal_insn /* 31 */ }; -int sbi_illegal_insn_handler(ulong insn, struct sbi_trap_regs *regs) +int sbi_illegal_insn_handler(struct sbi_trap_context *tcntx) { + struct sbi_trap_regs *regs = &tcntx->regs; + ulong insn = tcntx->trap.tval; struct sbi_trap_info uptrap; /* @@ -154,9 +156,8 @@ int sbi_illegal_insn_handler(ulong insn, struct sbi_trap_regs *regs) sbi_pmu_ctr_incr_fw(SBI_PMU_FW_ILLEGAL_INSN); if (unlikely((insn & 3) != 3)) { insn = sbi_get_insn(regs->mepc, &uptrap); - if (uptrap.cause) { + if (uptrap.cause) return sbi_trap_redirect(regs, &uptrap); - } if ((insn & 3) != 3) return truly_illegal_insn(insn, regs); } diff --git a/lib/sbi/sbi_trap.c b/lib/sbi/sbi_trap.c index a2afb0a..4e691df 100644 --- a/lib/sbi/sbi_trap.c +++ b/lib/sbi/sbi_trap.c @@ -285,7 +285,7 @@ struct sbi_trap_context *sbi_trap_handler(struct sbi_trap_context *tcntx) switch (mcause) { case CAUSE_ILLEGAL_INSTRUCTION: - rc = sbi_illegal_insn_handler(tcntx->trap.tval, regs); + rc = sbi_illegal_insn_handler(tcntx); msg = "illegal instruction handler failed"; break; case CAUSE_MISALIGNED_LOAD: |