[PATCH v3 11/20] arm64: entry: move bad_mode() to entry-common.c

Will Deacon will at kernel.org
Fri Jun 4 09:57:55 PDT 2021


On Tue, May 25, 2021 at 07:32:53PM +0100, Mark Rutland wrote:
> In subsequent patches we'll rework the way bad_mode is called by
> exception entry code. In preparation for this, let's move bad_mode()
> itself into entry-common.c.
> 
> Let's also mark it as noinstr (e.g. to prevent it being kprobed), and
> let's also make the `handler` array a local variable, as this is only
> use by bad_mode(), and will be removed entirely in a subsequent patch.
> 
> There should be no functional change as a result of this patch.
> 
> Signed-off-by: Mark Rutland <mark.rutland at arm.com>
> Reviewed-by: Joey Gouly <joey.gouly at arm.com>
> Cc: Catalin Marinas <catalin.marinas at arm.com>
> Cc: James Morse <james.morse at arm.com>
> Cc: Marc Zyngier <maz at kernel.org>
> Cc: Will Deacon <will at kernel.org>
> ---
>  arch/arm64/kernel/entry-common.c | 27 +++++++++++++++++++++++++++
>  arch/arm64/kernel/traps.c        | 25 -------------------------
>  2 files changed, 27 insertions(+), 25 deletions(-)
> 
> diff --git a/arch/arm64/kernel/entry-common.c b/arch/arm64/kernel/entry-common.c
> index 9c0ed05b98c4..25531a0b547e 100644
> --- a/arch/arm64/kernel/entry-common.c
> +++ b/arch/arm64/kernel/entry-common.c
> @@ -22,6 +22,7 @@
>  #include <asm/processor.h>
>  #include <asm/stacktrace.h>
>  #include <asm/sysreg.h>
> +#include <asm/system_misc.h>
>  
>  /*
>   * This is intended to match the logic in irqentry_enter(), handling the kernel
> @@ -159,6 +160,32 @@ static void do_interrupt_handler(struct pt_regs *regs,
>  extern void (*handle_arch_irq)(struct pt_regs *);
>  extern void (*handle_arch_fiq)(struct pt_regs *);
>  
> +/*
> + * bad_mode handles the impossible case in the exception vector. This is always
> + * fatal.
> + */
> +asmlinkage void noinstr bad_mode(struct pt_regs *regs, int reason, unsigned int esr)
> +{
> +	const char *handler[] = {
> +		"Synchronous Abort",
> +		"IRQ",
> +		"FIQ",
> +		"Error"
> +	};

If you're rejigging this array anyway, maybe initialising it as:

	[BAD_SYNC]	= "Synchronous Abort",
	[BAD_IRQ]	= ...

might make it even clearer. Up to you.

Will



More information about the linux-arm-kernel mailing list