[PATCH v3 14/20] arm64: entry: handle all vectors with C
Will Deacon
will at kernel.org
Fri Jun 4 10:13:09 PDT 2021
On Tue, May 25, 2021 at 07:32:56PM +0100, Mark Rutland wrote:
> We have 16 architectural exception vectors, and depending on kernel
> configuration we handle 8 or 12 of these with C code, and we handle 8 or
> 4 of these as sepcial cases in the entry assembly.
>
> It would be nicer if the entry assembly were uniform for all exceptions,
> and we deferred any specific handling of the exceptions to C code. This
> way the entry assembly can be more easily templated without ifdeffery or
> special cases, and it's easier to modify the handling of these cases in
> future (e.g. to dump additional registers other context).
>
> This patch reworks the entry code so that we always have a C handler for
> every architectural exception vector, with the entry assembly being
> completely uniform. We now have to handle exceptions from EL1t and EL1h,
> and also have to handle exceptions from AArch32 even when the kernel is
> built without CONFIG_COMPAT. To make this clear and to simplify
> templating, we rename the top-level exception handlers with a consistent
> naming scheme:
>
> asm: <el+sp>_<regsize>_<type>
> c: <el+sp>_<regsize>_<type>_handler
>
> .. where:
>
> <el+sp> is `el1t`, `el1h`, or `el0t`
> <regsize> is `64` or `32`
> <type> is `sync`, `irq`, `fiq`, or `error`
>
> ... e.g.
>
> asm: el1h_64_sync
> c: el1h_64_sync_handler
>
> ... with lower-level handlers simply using "el1" and "compat" as today.
>
> For unexpected exceptions, this information is passed to
> panic_unandled(), so it can report the specific vector an unexpected
panic_unandled()? Cor blimey, guv'nor!
> diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S
> index b4e9860a2227..d9a2625168aa 100644
> --- a/arch/arm64/kernel/entry.S
> +++ b/arch/arm64/kernel/entry.S
> @@ -45,16 +45,7 @@
> .endr
> .endm
>
> -/*
> - * Bad Abort numbers
> - *-----------------
> - */
> -#define BAD_SYNC 0
> -#define BAD_IRQ 1
> -#define BAD_FIQ 2
> -#define BAD_ERROR 3
> -
> - .macro kernel_ventry, el:req, regsize:req, label:req
> + .macro kernel_ventry, el:req, ht, regsize:req, label:req
Might as well have ht:req given that you did it for the others earlier on?
> - .macro entry_handler el:req, regsize:req, label:req
> + .macro entry_handler el:req, ht, regsize:req, label:req
Same here.
Will
More information about the linux-arm-kernel
mailing list