[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH -next v7 2/7] arm64: entry: Refactor the entry and exit for exceptions from EL1
On 2025/8/5 23:06, Ada Couprie Diaz wrote: > Hi, > > On 29/07/2025 02:54, Jinjie Ruan wrote: > >> The generic entry code uses irqentry_state_t to track lockdep and RCU >> state across exception entry and return. For historical reasons, arm64 >> embeds similar fields within its pt_regs structure. >> >> In preparation for moving arm64 over to the generic entry code, pull >> these fields out of arm64's pt_regs, and use a separate structure, >> matching the style of the generic entry code. >> >> No functional changes. > As far as I understand and checked, we used the two fields > in an exclusive fashion, so there is indeed no functional change. >> Suggested-by: Mark Rutland <mark.rutland@xxxxxxx> >> Signed-off-by: Jinjie Ruan <ruanjinjie@xxxxxxxxxx> >> --- >> [...] >> diff --git a/arch/arm64/kernel/entry-common.c >> b/arch/arm64/kernel/entry-common.c >> index 8e798f46ad28..97e0741abde1 100644 >> --- a/arch/arm64/kernel/entry-common.c >> +++ b/arch/arm64/kernel/entry-common.c >> [...] >> @@ -475,73 +497,81 @@ UNHANDLED(el1t, 64, error) >> static void noinstr el1_abort(struct pt_regs *regs, unsigned long esr) >> { >> unsigned long far = read_sysreg(far_el1); >> + arm64_irqentry_state_t state; >> - enter_from_kernel_mode(regs); >> + state = enter_from_kernel_mode(regs); > Nit: There is some inconsistencies with some functions splitting state's > definition > and declaration (like el1_abort here), while some others do it on the > same line > (el1_undef() below for example). > In some cases it is welcome as the entry function is called after some > other work, > but here for example it doesn't seem to be beneficial ? Both methods can keep the modifications to `enter_from_kernel_mode()` on the same line as the original code, which will facilitate code review. I think it is also fine to do it on the same line here, which can reduce one line code, which method is better may be a matter of personal opinion. >> local_daif_inherit(regs); >> do_mem_abort(far, esr, regs); >> local_daif_mask(); >> - exit_to_kernel_mode(regs); >> + exit_to_kernel_mode(regs, state); >> } >> static void noinstr el1_pc(struct pt_regs *regs, unsigned long esr) >> { >> unsigned long far = read_sysreg(far_el1); >> + arm64_irqentry_state_t state; >> - enter_from_kernel_mode(regs); >> + state = enter_from_kernel_mode(regs); >> local_daif_inherit(regs); >> do_sp_pc_abort(far, esr, regs); >> local_daif_mask(); >> - exit_to_kernel_mode(regs); >> + exit_to_kernel_mode(regs, state); >> } >> static void noinstr el1_undef(struct pt_regs *regs, unsigned long >> esr) >> { >> - enter_from_kernel_mode(regs); >> + arm64_irqentry_state_t state = enter_from_kernel_mode(regs); >> + >> local_daif_inherit(regs); >> do_el1_undef(regs, esr); >> local_daif_mask(); >> - exit_to_kernel_mode(regs); >> + exit_to_kernel_mode(regs, state); >> } >> >> [...] > Other than the small nit: > Reviewed-by: Ada Couprie Diaz <ada.coupriediaz@xxxxxxx> > >
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |