diff options
Diffstat (limited to 'arch/arm/kvm/interrupts.S')
| -rw-r--r-- | arch/arm/kvm/interrupts.S | 11 | 
1 files changed, 10 insertions, 1 deletions
diff --git a/arch/arm/kvm/interrupts.S b/arch/arm/kvm/interrupts.S index ddc15539bad2..0d68d4073068 100644 --- a/arch/arm/kvm/interrupts.S +++ b/arch/arm/kvm/interrupts.S @@ -220,6 +220,10 @@ after_vfp_restore:   * in Hyp mode (see init_hyp_mode in arch/arm/kvm/arm.c).  Return values are   * passed in r0 and r1.   * + * A function pointer with a value of 0xffffffff has a special meaning, + * and is used to implement __hyp_get_vectors in the same way as in + * arch/arm/kernel/hyp_stub.S. + *   * The calling convention follows the standard AAPCS:   *   r0 - r3: caller save   *   r12:     caller save @@ -363,6 +367,11 @@ hyp_hvc:  host_switch_to_hyp:  	pop	{r0, r1, r2} +	/* Check for __hyp_get_vectors */ +	cmp	r0, #-1 +	mrceq	p15, 4, r0, c12, c0, 0	@ get HVBAR +	beq	1f +  	push	{lr}  	mrs	lr, SPSR  	push	{lr} @@ -378,7 +387,7 @@ THUMB(	orr	lr, #1)  	pop	{lr}  	msr	SPSR_csxf, lr  	pop	{lr} -	eret +1:	eret  guest_trap:  	load_vcpu			@ Load VCPU pointer to r0  | 
