[PATCH 1/2] KVM: ARM: Cleanup _kvm_va_t_pa

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Co-written with Marc Zyngier (in pair - yeah!) this is just better.

Signed-off-by: Marc Zyngier <marc.zyngier@xxxxxxx>
Signed-off-by: Christoffer Dall <c.dall@xxxxxxxxxxxxxxxxxxxxxx>
---
 arch/arm/kvm/interrupts.S |   32 +++++++++++++-------------------
 1 file changed, 13 insertions(+), 19 deletions(-)

diff --git a/arch/arm/kvm/interrupts.S b/arch/arm/kvm/interrupts.S
index 1c8d627..28ecf22 100644
--- a/arch/arm/kvm/interrupts.S
+++ b/arch/arm/kvm/interrupts.S
@@ -602,36 +602,30 @@ after_vfp_restore:
 	bx	lr			@ return to IOCTL
 
 @ Arguments:
-@  r0: pointer to vcpu struct
+@  r0: pointer to kvm struct
 @  r1: virtual address to map (rounded to page)
-@  r2: 1 = P1 (read) mapping, 0 = P0 (read) mapping.
+@  r2: 1 = PL1 (read) mapping, 0 = PL0 (read) mapping.
 @ Returns 64 bit PAR value.
 ENTRY(__kvm_va_to_pa)
-	hvc	#0			@ switch to hyp-mode
+	hvc	#0			@ Switch to Hyp mode
+	push	{r4, r5}
 
-	push	{r4-r12}
+	add	r0, r0, #KVM_VTTBR
+	ldrd	r4, r5, [r0]
+	mcrr	p15, 6, r4, r5, c2	@ Write VTTBR
 
-	@ Fold flag into r1, easier than using stack.
 	cmp	r2, #0
-	movne	r2, #1
-	orr	r1, r1, r2
-
-	@ This swaps too many registers, but we're in the slow path anyway.
-	read_cp15_state
-	write_cp15_state 1, r0
-
-	ands	r2, r1, #1
-	bic	r1, r1, r2
 	mcrne	p15, 0, r1, c7, c8, 0	@ VA to PA, ATS1CPR
 	mcreq	p15, 0, r1, c7, c8, 2	@ VA to PA, ATS1CUR
 	isb
+	mrrc	p15, 0, r0, r1, c7	@ PAR
 
-	@ Restore host state.
-	read_cp15_state 1, r0
-	write_cp15_state
+	mov	r4, #0
+	mov	r5, #0
+	mcrr	p15, 6, r4, r5, c2	@ Back to VMID #0
+	isb
 
-	mrrc	p15, 0, r0, r1, c7	@ PAR
-	pop	{r4-r12}
+	pop	{r4, r5}
 	hvc	#0			@ Back to SVC
 	bx	lr
 
-- 
1.7.9.5

_______________________________________________
kvmarm mailing list
kvmarm@xxxxxxxxxxxxxxxxxxxxx
https://lists.cs.columbia.edu/cucslists/listinfo/kvmarm


[Index of Archives]     [Linux KVM]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux