[PATCH] firware: optimize the exception exit code
Anup Patel
Anup.Patel at wdc.com
Thu Apr 1 06:35:14 BST 2021
> -----Original Message-----
> From: Anup Patel
> Sent: 31 March 2021 10:29
> To: wxjstz at 126.com; opensbi at lists.infradead.org
> Subject: RE: [PATCH] firware: optimize the exception exit code
>
>
>
> > -----Original Message-----
> > From: wxjstz at 126.com <wxjstz at 126.com>
> > Sent: 30 March 2021 17:38
> > To: opensbi at lists.infradead.org
> > Cc: Anup Patel <Anup.Patel at wdc.com>; Xiang W <wxjstz at 126.com>
> > Subject: [PATCH] firware: optimize the exception exit code
> >
> > From: Xiang W <wxjstz at 126.com>
> >
> > There are two copies of the same abnormal exit code, this patch
> > deletes one
> >
> > Signed-off-by: Xiang W <wxjstz at 126.com>
>
> Looks good to me.
>
> Reviewed-by: Anup Patel <anup.patel at wdc.com>
Applied this patch to the riscv/opensbi repo.
Thanks,
Anup
>
> Regards,
> Anup
>
> > ---
> > firmware/fw_base.S | 24 ++----------------------
> > include/sbi/sbi_trap.h | 2 +-
> > lib/sbi/sbi_trap.c | 5 +++--
> > 3 files changed, 6 insertions(+), 25 deletions(-)
> >
> > diff --git a/firmware/fw_base.S b/firmware/fw_base.S index
> > 2ce3851..c897ed0 100644
> > --- a/firmware/fw_base.S
> > +++ b/firmware/fw_base.S
> > @@ -711,6 +711,7 @@ fw_platform_init:
> > .section .entry, "ax", %progbits
> > .align 3
> > .globl _trap_handler
> > + .globl _trap_exit
> > _trap_handler:
> > TRAP_SAVE_AND_SETUP_SP_T0
> >
> > @@ -720,17 +721,6 @@ _trap_handler:
> >
> > TRAP_CALL_C_ROUTINE
> >
> > - TRAP_RESTORE_GENERAL_REGS_EXCEPT_SP_T0
> > -
> > - TRAP_RESTORE_MEPC_MSTATUS 0
> > -
> > - TRAP_RESTORE_SP_T0
> > -
> > - mret
> > -
> > - .section .entry, "ax", %progbits
> > - .align 3
> > - .globl _trap_exit
> > _trap_exit:
> > add sp, a0, zero
> >
> > @@ -746,6 +736,7 @@ _trap_exit:
> > .section .entry, "ax", %progbits
> > .align 3
> > .globl _trap_handler_rv32_hyp
> > + .globl _trap_exit_rv32_hyp
> > _trap_handler_rv32_hyp:
> > TRAP_SAVE_AND_SETUP_SP_T0
> >
> > @@ -755,17 +746,6 @@ _trap_handler_rv32_hyp:
> >
> > TRAP_CALL_C_ROUTINE
> >
> > - TRAP_RESTORE_GENERAL_REGS_EXCEPT_SP_T0
> > -
> > - TRAP_RESTORE_MEPC_MSTATUS 1
> > -
> > - TRAP_RESTORE_SP_T0
> > -
> > - mret
> > -
> > - .section .entry, "ax", %progbits
> > - .align 3
> > - .globl _trap_exit_rv32_hyp
> > _trap_exit_rv32_hyp:
> > add sp, a0, zero
> >
> > diff --git a/include/sbi/sbi_trap.h b/include/sbi/sbi_trap.h index
> > 070d000..0ed10df 100644
> > --- a/include/sbi/sbi_trap.h
> > +++ b/include/sbi/sbi_trap.h
> > @@ -205,7 +205,7 @@ struct sbi_trap_info { int
> > sbi_trap_redirect(struct sbi_trap_regs *regs,
> > struct sbi_trap_info *trap);
> >
> > -void sbi_trap_handler(struct sbi_trap_regs *regs);
> > +struct sbi_trap_regs* sbi_trap_handler(struct sbi_trap_regs *regs);
> >
> > void __noreturn sbi_trap_exit(const struct sbi_trap_regs *regs);
> >
> > diff --git a/lib/sbi/sbi_trap.c b/lib/sbi/sbi_trap.c index
> > b7349d2..07d5acb
> > 100644
> > --- a/lib/sbi/sbi_trap.c
> > +++ b/lib/sbi/sbi_trap.c
> > @@ -210,7 +210,7 @@ int sbi_trap_redirect(struct sbi_trap_regs *regs,
> > *
> > * @param regs pointer to register state
> > */
> > -void sbi_trap_handler(struct sbi_trap_regs *regs)
> > +struct sbi_trap_regs* sbi_trap_handler(struct sbi_trap_regs *regs)
> > {
> > int rc = SBI_ENOTSUPP;
> > const char *msg = "trap handler failed"; @@ -236,7 +236,7 @@ void
> > sbi_trap_handler(struct sbi_trap_regs *regs)
> > msg = "unhandled external interrupt";
> > goto trap_error;
> > };
> > - return;
> > + return regs;
> > }
> >
> > switch (mcause) {
> > @@ -271,6 +271,7 @@ void sbi_trap_handler(struct sbi_trap_regs *regs)
> > trap_error:
> > if (rc)
> > sbi_trap_error(msg, rc, mcause, mtval, mtval2, mtinst, regs);
> > + return regs;
> > }
> >
> > typedef void (*trap_exit_t)(const struct sbi_trap_regs *regs);
> > --
> > 2.20.1
More information about the opensbi
mailing list