Commit 5fbe9a59 authored by Marc Zyngier's avatar Marc Zyngier Committed by Christoffer Dall

arm64: KVM: Allow the main HYP code to use the init hyp stub implementation

We now have a full hyp-stub implementation in the KVM init code,
but the main KVM code only supports HVC_GET_VECTORS, which is not
enough.

Instead of reinventing the wheel, let's reuse the init implementation
by branching to the idmap page when called with a hyp-stub hypercall.
Acked-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
Reviewed-by: default avatarJames Morse <james.morse@arm.com>
Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
Signed-off-by: default avatarChristoffer Dall <cdall@linaro.org>
parent 82529d9b
...@@ -87,10 +87,24 @@ alternative_endif ...@@ -87,10 +87,24 @@ alternative_endif
/* Here, we're pretty sure the host called HVC. */ /* Here, we're pretty sure the host called HVC. */
ldp x0, x1, [sp], #16 ldp x0, x1, [sp], #16
cmp x0, #HVC_GET_VECTORS /* Check for a stub HVC call */
b.ne 1f cmp x0, #HVC_STUB_HCALL_NR
mrs x0, vbar_el2 b.hs 1f
b 2f
/*
* Compute the idmap address of __kvm_handle_stub_hvc and
* jump there. Since we use kimage_voffset, do not use the
* HYP VA for __kvm_handle_stub_hvc, but the kernel VA instead
* (by loading it from the constant pool).
*
* Preserve x0-x4, which may contain stub parameters.
*/
ldr x5, =__kvm_handle_stub_hvc
ldr_l x6, kimage_voffset
/* x5 = __pa(x5) */
sub x5, x5, x6
br x5
1: 1:
/* /*
...@@ -99,7 +113,7 @@ alternative_endif ...@@ -99,7 +113,7 @@ alternative_endif
kern_hyp_va x0 kern_hyp_va x0
do_el2_call do_el2_call
2: eret eret
el1_trap: el1_trap:
/* /*
......
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