[PATCH 18/21] arm64: entry: Split up kernel_ventry macro into separate helper macros
Will Deacon
will at kernel.org
Mon Sep 7 09:42:43 PDT 2026
Handling entry from EL0, EL1h and EL1t in the 'kernel_ventry' assembly
macro is getting a bit unwieldy as the control flow becomes increasingly
dependent on the macro arguments.
Split 'kernel_ventry' into three leaf helper macros for EL0, EL1h and
EL1t, which are then dispatched by simple wrappers.
Signed-off-by: Will Deacon <will at kernel.org>
---
arch/arm64/kernel/entry.S | 29 +++++++++++++++++++----------
1 file changed, 19 insertions(+), 10 deletions(-)
diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S
index b4df2f23ebe7..38f9327e6a0a 100644
--- a/arch/arm64/kernel/entry.S
+++ b/arch/arm64/kernel/entry.S
@@ -36,10 +36,7 @@
.endr
.endm
- .macro kernel_ventry, el:req, ht:req, regsize:req, label:req
- .align 7
-.Lventry_start\@:
- .if \el == 0
+ .macro kernel_ventry_el0, ht:req, regsize:req, label:req
/*
* This must be the first instruction of the EL0 vector entries. It is
* skipped by the trampoline vectors, to trigger the cleanup.
@@ -52,8 +49,10 @@
.endif
.Lskip_tramp_vectors_cleanup\@:
sub sp, sp, #PT_REGS_SIZE
- .else /* \el == 1 */
- .ifc \ht, h
+ b el0\ht\()_\regsize\()_\label
+ .endm
+
+ .macro kernel_ventry_el1h, regsize:req, label:req
sub sp, sp, #PT_REGS_SIZE
/*
@@ -66,13 +65,23 @@
tbnz x0, #THREAD_SHIFT, __bad_stack
sub x0, sp, x0 // x0'' = sp' - x0' = (sp + x0) - sp = x0
sub sp, sp, x0 // sp'' = sp' - x0 = (sp + x0) - x0 = sp
- .else /* EL1t */
+ b el1h_\regsize\()_\label
+ .endm
+
+ .macro kernel_ventry_el1t, regsize:req, label:req
msr spsel, #0 // Stay on the overflow stack
sub sp, sp, #PT_REGS_SIZE
- .endif
- .endif
+ b el1t_\regsize\()_\label
+ .endm
- b el\el\ht\()_\regsize\()_\label
+ .macro kernel_ventry, el:req, ht:req, regsize:req, label:req
+ .align 7
+.Lventry_start\@:
+ .if \el == 0
+ kernel_ventry_el0 \ht, \regsize, \label
+ .else
+ kernel_ventry_el1\ht \regsize, \label
+ .endif
.org .Lventry_start\@ + 128 // Did we overflow the ventry slot?
.endm
--
2.55.0.979.g7e5102b832-goog
More information about the linux-arm-kernel
mailing list