Commit a5b43a87 authored by Mark Rutland's avatar Mark Rutland Committed by Will Deacon

arm64: entry: template the entry asm functions

Now that the majority of the exception triage logic has been converted
to C, the entry assembly functions all have a uniform structure.

Let's generate them all with an assembly macro to reduce the amount of
code and to ensure they all remain in sync if we make changes in future.

There should be no functional change as a result of this patch.
Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
Acked-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
Acked-by: default avatarMarc Zyngier <maz@kernel.org>
Reviewed-by: default avatarJoey Gouly <joey.gouly@arm.com>
Cc: James Morse <james.morse@arm.com>
Cc: Will Deacon <will@kernel.org>
Link: https://lore.kernel.org/r/20210607094624.34689-14-mark.rutland@arm.comSigned-off-by: default avatarWill Deacon <will@kernel.org>
parent ca0c2647
......@@ -604,102 +604,43 @@ SYM_CODE_START_LOCAL(el1_error_invalid)
inv_entry 1, BAD_ERROR
SYM_CODE_END(el1_error_invalid)
/*
* EL1 mode handlers.
*/
SYM_CODE_START_LOCAL(el1_sync)
kernel_entry 1
mov x0, sp
bl el1_sync_handler
b ret_to_kernel
SYM_CODE_END(el1_sync)
SYM_CODE_START_LOCAL(el1_irq)
kernel_entry 1
mov x0, sp
bl el1_irq_handler
b ret_to_kernel
SYM_CODE_END(el1_irq)
SYM_CODE_START_LOCAL(el1_fiq)
kernel_entry 1
mov x0, sp
bl el1_fiq_handler
b ret_to_kernel
SYM_CODE_END(el1_fiq)
SYM_CODE_START_LOCAL(el1_error)
kernel_entry 1
.macro entry_handler el:req, regsize:req, label:req
SYM_CODE_START_LOCAL(el\el\()_\label)
kernel_entry \el, \regsize
mov x0, sp
bl el1_error_handler
bl el\el\()_\label\()_handler
.if \el == 0
b ret_to_user
.else
b ret_to_kernel
SYM_CODE_END(el1_error)
SYM_CODE_START_LOCAL(ret_to_kernel)
kernel_exit 1
SYM_CODE_END(ret_to_kernel)
.endif
SYM_CODE_END(el\el\()_\label)
.endm
/*
* EL0 mode handlers.
* Early exception handlers
*/
SYM_CODE_START_LOCAL(el0_sync)
kernel_entry 0
mov x0, sp
bl el0_sync_handler
b ret_to_user
SYM_CODE_END(el0_sync)
entry_handler 1, 64, sync
entry_handler 1, 64, irq
entry_handler 1, 64, fiq
entry_handler 1, 64, error
SYM_CODE_START_LOCAL(el0_irq)
kernel_entry 0
mov x0, sp
bl el0_irq_handler
b ret_to_user
SYM_CODE_END(el0_irq)
SYM_CODE_START_LOCAL(el0_fiq)
kernel_entry 0
mov x0, sp
bl el0_fiq_handler
b ret_to_user
SYM_CODE_END(el0_fiq)
SYM_CODE_START_LOCAL(el0_error)
kernel_entry 0
mov x0, sp
bl el0_error_handler
b ret_to_user
SYM_CODE_END(el0_error)
entry_handler 0, 64, sync
entry_handler 0, 64, irq
entry_handler 0, 64, fiq
entry_handler 0, 64, error
#ifdef CONFIG_COMPAT
SYM_CODE_START_LOCAL(el0_sync_compat)
kernel_entry 0, 32
mov x0, sp
bl el0_sync_compat_handler
b ret_to_user
SYM_CODE_END(el0_sync_compat)
SYM_CODE_START_LOCAL(el0_irq_compat)
kernel_entry 0, 32
mov x0, sp
bl el0_irq_compat_handler
b ret_to_user
SYM_CODE_END(el0_irq_compat)
SYM_CODE_START_LOCAL(el0_fiq_compat)
kernel_entry 0, 32
mov x0, sp
bl el0_fiq_compat_handler
b ret_to_user
SYM_CODE_END(el0_fiq_compat)
SYM_CODE_START_LOCAL(el0_error_compat)
kernel_entry 0, 32
mov x0, sp
bl el0_error_compat_handler
b ret_to_user
SYM_CODE_END(el0_error_compat)
entry_handler 0, 32, sync_compat
entry_handler 0, 32, irq_compat
entry_handler 0, 32, fiq_compat
entry_handler 0, 32, error_compat
#endif
SYM_CODE_START_LOCAL(ret_to_kernel)
kernel_exit 1
SYM_CODE_END(ret_to_kernel)
/*
* "slow" syscall return path.
*/
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment