[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
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. 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 lineSuggested-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); (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 ? 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 |