Commit 6bebcecb authored by Marc Zyngier's avatar Marc Zyngier Committed by Christoffer Dall

ARM: 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.
Tested-by: default avatarKeerthy <j-keerthy@ti.com>
Acked-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
Acked-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
Signed-off-by: default avatarChristoffer Dall <cdall@linaro.org>
parent 5d224aa7
...@@ -126,11 +126,30 @@ hyp_hvc: ...@@ -126,11 +126,30 @@ hyp_hvc:
*/ */
pop {r0, r1, r2} pop {r0, r1, r2}
/* Check for __hyp_get_vectors */ /*
cmp r0, #HVC_GET_VECTORS * Check if we have a kernel function, which is guaranteed to be
mrceq p15, 4, r0, c12, c0, 0 @ get HVBAR * bigger than the maximum hyp stub hypercall
beq 1f */
cmp r0, #HVC_STUB_HCALL_NR
bhs 1f
/*
* Not a kernel function, treat it as a stub hypercall.
* Compute the physical address for __kvm_handle_stub_hvc
* (as the code lives in the idmaped page) and branch there.
* We hijack ip (r12) as a tmp register.
*/
push {r1}
ldr r1, =kimage_voffset
ldr r1, [r1]
ldr ip, =__kvm_handle_stub_hvc
sub ip, ip, r1
THUMB( add ip, ip, #1)
pop {r1}
bx ip
1:
push {lr} push {lr}
mov lr, r0 mov lr, r0
...@@ -142,7 +161,7 @@ THUMB( orr lr, #1) ...@@ -142,7 +161,7 @@ THUMB( orr lr, #1)
blx lr @ Call the HYP function blx lr @ Call the HYP function
pop {lr} pop {lr}
1: eret eret
guest_trap: guest_trap:
load_vcpu r0 @ Load VCPU pointer to r0 load_vcpu r0 @ Load VCPU pointer to r0
......
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