# HG changeset patch # User yamahata@xxxxxxxxxxxxx # Date 1154582085 -32400 # Node ID 5f10de6f42f4c7736dfa52dc4c91d0277fe06e31 # Parent f9929422e6eb4aee7f1d3c5f0fbaed64422deac4 fix vDSO paravirtualization. sometimes it fails to clear event mask. It results in domain's unstability. And one typo. PATCHNAME: fix_vdso_paravirtualization Signed-off-by: Isaku Yamahata diff -r f9929422e6eb -r 5f10de6f42f4 linux-2.6-xen-sparse/arch/ia64/kernel/gate.S --- a/linux-2.6-xen-sparse/arch/ia64/kernel/gate.S Thu Aug 03 14:06:22 2006 +0900 +++ b/linux-2.6-xen-sparse/arch/ia64/kernel/gate.S Thu Aug 03 14:14:45 2006 +0900 @@ -130,7 +130,7 @@ GLOBAL_ENTRY(__kernel_syscall_via_epc) // r20 = 1 // r22 = &vcpu->evtchn_mask // r23 = &vpsr.ic - // r24 = vcpu->pending_interruption + // r24 = &vcpu->pending_interruption // r25 = tmp // r28 = &running_on_xen // r30 = running_on_xen diff -r f9929422e6eb -r 5f10de6f42f4 linux-2.6-xen-sparse/arch/ia64/xen/hypercall.S --- a/linux-2.6-xen-sparse/arch/ia64/xen/hypercall.S Thu Aug 03 14:06:22 2006 +0900 +++ b/linux-2.6-xen-sparse/arch/ia64/xen/hypercall.S Thu Aug 03 14:14:45 2006 +0900 @@ -379,30 +379,35 @@ GLOBAL_ENTRY(xen_get_psr) ;; END(xen_get_psr) + // see xen_ssm_i() in privop.h + // r22 = &vcpu->evtchn_mask + // r23 = &vpsr.ic + // r24 = &vcpu->pending_interruption + // r25 = tmp + // r31 = tmp + // p11 = tmp + // p14 = tmp +#define XEN_SET_PSR_I \ + ld4 r31=[r22]; \ + ld4 r25=[r24]; \ + ;; \ + st4 [r22]=r0; \ + cmp.ne.unc p14,p0=r0,r31; \ + ;; \ +(p14) cmp.ne.unc p11,p0=r0,r25; \ + ;; \ +(p11) st4 [r22]=r20; \ +(p11) st4 [r23]=r0; \ +(p11) XEN_HYPER_SSM_I; + GLOBAL_ENTRY(xen_ssm_i_0) - st4 [r22]=r20 - ld4 r25=[r24] - ;; - cmp.ne.unc p11,p0=r0, r25 - ;; -(p11) st4 [r22]=r0 -(p11) st4 [r23]=r0 -(p11) XEN_HYPER_SSM_I - + XEN_SET_PSR_I brl.cond.sptk .vdso_ssm_i_0_ret ;; END(xen_ssm_i_0) GLOBAL_ENTRY(xen_ssm_i_1) - st4 [r22]=r20 - ld4 r25=[r24] - ;; - cmp.ne.unc p11,p0=r0, r25 - ;; -(p11) st4 [r22]=r0 -(p11) st4 [r23]=r0 -(p11) XEN_HYPER_SSM_I - ;; + XEN_SET_PSR_I brl.cond.sptk .vdso_ssm_i_1_ret ;; END(xen_ssm_i_1)