diff options
author | James Morse <james.morse@arm.com> | 2016-04-27 18:47:02 +0200 |
---|---|---|
committer | Will Deacon <will.deacon@arm.com> | 2016-04-28 13:05:46 +0200 |
commit | 00a44cdaba0900c63a003e0c431f506f49376a90 (patch) | |
tree | 98dbb48f951a2ecab7a0ee09e89bf09a4d754a36 /arch/arm64/kernel/hyp-stub.S | |
parent | arm64: Cleanup SCTLR flags (diff) | |
download | linux-00a44cdaba0900c63a003e0c431f506f49376a90.tar.xz linux-00a44cdaba0900c63a003e0c431f506f49376a90.zip |
arm64: kvm: Move lr save/restore from do_el2_call into EL1
Today the 'hvc' calling KVM or the hyp-stub is expected to preserve all
registers. KVM saves/restores the registers it needs on the EL2 stack using
do_el2_call(). The hyp-stub has no stack, later patches need to be able to
be able to clobber the link register.
Move the link register save/restore to the the call sites.
Signed-off-by: James Morse <james.morse@arm.com>
Acked-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Diffstat (limited to 'arch/arm64/kernel/hyp-stub.S')
-rw-r--r-- | arch/arm64/kernel/hyp-stub.S | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/arch/arm64/kernel/hyp-stub.S b/arch/arm64/kernel/hyp-stub.S index a272f335c289..7eab8acbbbd9 100644 --- a/arch/arm64/kernel/hyp-stub.S +++ b/arch/arm64/kernel/hyp-stub.S @@ -101,10 +101,16 @@ ENDPROC(\label) */ ENTRY(__hyp_get_vectors) + str lr, [sp, #-16]! mov x0, xzr - // fall through -ENTRY(__hyp_set_vectors) hvc #0 + ldr lr, [sp], #16 ret ENDPROC(__hyp_get_vectors) + +ENTRY(__hyp_set_vectors) + str lr, [sp, #-16]! + hvc #0 + ldr lr, [sp], #16 + ret ENDPROC(__hyp_set_vectors) |