]> git.baikalelectronics.ru Git - kernel.git/commitdiff
KVM: arm64: Add function to enter host from KVM nVHE hyp code
authorDavid Brazdil <dbrazdil@google.com>
Wed, 2 Dec 2020 18:41:16 +0000 (18:41 +0000)
committerMarc Zyngier <maz@kernel.org>
Fri, 4 Dec 2020 10:08:35 +0000 (10:08 +0000)
All nVHE hyp code is currently executed as handlers of host's HVCs. This
will change as nVHE starts intercepting host's PSCI CPU_ON SMCs. The
newly booted CPU will need to initialize EL2 state and then enter the
host. Add __host_enter function that branches into the existing
host state-restoring code after the trap handler would have returned.

Signed-off-by: David Brazdil <dbrazdil@google.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20201202184122.26046-21-dbrazdil@google.com
arch/arm64/kvm/hyp/nvhe/host.S

index 2b56f0bdf874392a244bcf45e6f0e592869b70e7..a820dfdc9c25d427de46236c0335754323b0bc1a 100644 (file)
@@ -39,6 +39,7 @@ SYM_FUNC_START(__host_exit)
        bl      handle_trap
 
        /* Restore host regs x0-x17 */
+__host_enter_restore_full:
        ldp     x0, x1,   [x29, #CPU_XREG_OFFSET(0)]
        ldp     x2, x3,   [x29, #CPU_XREG_OFFSET(2)]
        ldp     x4, x5,   [x29, #CPU_XREG_OFFSET(4)]
@@ -61,6 +62,14 @@ __host_enter_without_restoring:
        sb
 SYM_FUNC_END(__host_exit)
 
+/*
+ * void __noreturn __host_enter(struct kvm_cpu_context *host_ctxt);
+ */
+SYM_FUNC_START(__host_enter)
+       mov     x29, x0
+       b       __host_enter_restore_full
+SYM_FUNC_END(__host_enter)
+
 /*
  * void __noreturn __hyp_do_panic(bool restore_host, u64 spsr, u64 elr, u64 par);
  */