Skip to content

Commit

Permalink
arm64: KVM: Allow the main HYP code to use the init hyp stub implemen…
Browse files Browse the repository at this point in the history
…tation

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: Catalin Marinas <[email protected]>
Reviewed-by: James Morse <[email protected]>
Signed-off-by: Marc Zyngier <[email protected]>
Signed-off-by: Christoffer Dall <[email protected]>
  • Loading branch information
Marc Zyngier authored and Christoffer Dall committed Apr 9, 2017
1 parent 82529d9 commit 5fbe9a5
Showing 1 changed file with 19 additions and 5 deletions.
24 changes: 19 additions & 5 deletions arch/arm64/kvm/hyp/hyp-entry.S
Original file line number Diff line number Diff line change
Expand Up @@ -87,10 +87,24 @@ alternative_endif
/* Here, we're pretty sure the host called HVC. */
ldp x0, x1, [sp], #16

cmp x0, #HVC_GET_VECTORS
b.ne 1f
mrs x0, vbar_el2
b 2f
/* Check for a stub HVC call */
cmp x0, #HVC_STUB_HCALL_NR
b.hs 1f

/*
* 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:
/*
Expand All @@ -99,7 +113,7 @@ alternative_endif
kern_hyp_va x0
do_el2_call

2: eret
eret

el1_trap:
/*
Expand Down

0 comments on commit 5fbe9a5

Please sign in to comment.