Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+24 −5
Original line number Diff line number Diff line
@@ -126,11 +126,30 @@ hyp_hvc:
	 */
	pop	{r0, r1, r2}

	/* Check for __hyp_get_vectors */
	cmp	r0, #HVC_GET_VECTORS
	mrceq	p15, 4, r0, c12, c0, 0	@ get HVBAR
	beq	1f
	/*
	 * Check if we have a kernel function, which is guaranteed to be
	 * bigger than the maximum hyp stub hypercall
	 */
	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}

	mov	lr, r0
@@ -142,7 +161,7 @@ THUMB( orr lr, #1)
	blx	lr			@ Call the HYP function

	pop	{lr}
1:	eret
	eret

guest_trap:
	load_vcpu r0			@ Load VCPU pointer to r0