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

Mark Rutland mark.rutland at arm.com
Fri Jun 4 10:42:16 PDT 2021


On Fri, Jun 04, 2021 at 05:57:55PM +0100, Will Deacon wrote:
> 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.

Since I'm removing the BAD_* definitions (and the array) in a latter
patch, I'd prefer to leave this as-is here so that this clearly has no
functional change.

Thanks,
Mark.



More information about the linux-arm-kernel mailing list