Browse Source

KVM: ia64: Fix: Use correct calling convention for PAL_VPS_RESUME_HANDLER

PAL_VPS_RESUME_HANDLER should use r26 to hold vac fields according to SDM.

Signed-off-by: Xiantao Zhang <xiantao.zhang@intel.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
Xiantao Zhang 16 years ago
parent
commit
ce50b91d0f
1 changed files with 7 additions and 4 deletions
  1. 7 4
      arch/ia64/kvm/optvfault.S

+ 7 - 4
arch/ia64/kvm/optvfault.S

@@ -107,10 +107,10 @@ END(kvm_vps_resume_normal)
 GLOBAL_ENTRY(kvm_vps_resume_handler)
 GLOBAL_ENTRY(kvm_vps_resume_handler)
 	movl r30 = PAL_VPS_RESUME_HANDLER
 	movl r30 = PAL_VPS_RESUME_HANDLER
 	;;
 	;;
-	ld8 r27=[r25]
+	ld8 r26=[r25]
 	shr r17=r17,IA64_ISR_IR_BIT
 	shr r17=r17,IA64_ISR_IR_BIT
 	;;
 	;;
-	dep r27=r17,r27,63,1   // bit 63 of r27 indicate whether enable CFLE
+	dep r26=r17,r26,63,1   // bit 63 of r26 indicate whether enable CFLE
 	mov pr=r23,-2
 	mov pr=r23,-2
 	br.sptk.many kvm_vps_entry
 	br.sptk.many kvm_vps_entry
 END(kvm_vps_resume_handler)
 END(kvm_vps_resume_handler)
@@ -894,12 +894,15 @@ ENTRY(kvm_resume_to_guest)
 	;;
 	;;
 	ld8 r19=[r19]
 	ld8 r19=[r19]
 	mov b0=r29
 	mov b0=r29
-	cmp.ne p6,p7 = r0,r0
+	mov r27=cr.isr
 	;;
 	;;
-	tbit.z p6,p7 = r19,IA64_PSR_IC_BIT		// p1=vpsr.ic
+	tbit.z p6,p7 = r19,IA64_PSR_IC_BIT		// p7=vpsr.ic
+	shr r27=r27,IA64_ISR_IR_BIT
 	;;
 	;;
 	(p6) ld8 r26=[r25]
 	(p6) ld8 r26=[r25]
 	(p7) mov b0=r28
 	(p7) mov b0=r28
+	;;
+	(p6) dep r26=r27,r26,63,1
 	mov pr=r31,-2
 	mov pr=r31,-2
 	br.sptk.many b0             // call pal service
 	br.sptk.many b0             // call pal service
 	;;
 	;;