[PATCH 12/21] KVM: arm64: Preserve handler/thread bit of EL1 mode in __finalise_el2()
Will Deacon
will at kernel.org
Mon Sep 7 09:42:37 PDT 2026
__finalise_el2() unconditionally returns to EL2h when VHE is being used.
In preparation for handling callers from both EL1h and EL1t, preserve
the handler/thread bit of the calling mode when rewriting the exception
level in the SPSR.
Signed-off-by: Will Deacon <will at kernel.org>
---
arch/arm64/include/uapi/asm/ptrace.h | 1 +
arch/arm64/kernel/hyp-stub.S | 7 ++++---
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/arch/arm64/include/uapi/asm/ptrace.h b/arch/arm64/include/uapi/asm/ptrace.h
index 15649a253a57..25d9d9a0a6f7 100644
--- a/arch/arm64/include/uapi/asm/ptrace.h
+++ b/arch/arm64/include/uapi/asm/ptrace.h
@@ -37,6 +37,7 @@
#define PSR_MODE_EL3t 0x0000000c
#define PSR_MODE_EL3h 0x0000000d
#define PSR_MODE_MASK 0x0000000f
+#define PSR_MODE_h_BIT 0x00000001
/* AArch32 CPSR bits */
#define PSR_MODE32_BIT 0x00000010
diff --git a/arch/arm64/kernel/hyp-stub.S b/arch/arm64/kernel/hyp-stub.S
index 37c6976e44a4..f61778cccd3c 100644
--- a/arch/arm64/kernel/hyp-stub.S
+++ b/arch/arm64/kernel/hyp-stub.S
@@ -149,10 +149,11 @@ SYM_CODE_START_LOCAL(__finalise_el2)
isb
- // Hack the exception return to stay at EL2
+ // Hack the exception return to stay at EL2 ...
mrs x0, spsr_el1
- and x0, x0, #~PSR_MODE_MASK
- mov x1, #PSR_MODE_EL2h
+ // ... preserving the 'h' bit so we don't swizzle SP.
+ and x0, x0, #(~PSR_MODE_MASK | PSR_MODE_h_BIT)
+ mov x1, #PSR_MODE_EL2t
orr x0, x0, x1
msr spsr_el1, x0
--
2.55.0.979.g7e5102b832-goog
More information about the linux-arm-kernel
mailing list