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: Keerthy <j-keerthy@ti.com> Acked-by: Russell King <rmk+kernel@armlinux.org.uk> Acked-by: Catalin Marinas <catalin.marinas@arm.com> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com> Signed-off-by: Christoffer Dall <cdall@linaro.org>
This commit is contained in:
parent
5d224aa7d4
commit
6bebcecb6c
|
@ -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)
|
||||||
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
|
||||||
|
|
Loading…
Reference in New Issue