[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