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

[Xen-changelog] [xen-unstable] [IA64] fix vDSO paravirtualization.



# HG changeset patch
# User awilliam@xxxxxxxxxxx
# Node ID 147144f9ec51c5963c878af8acc5bb9830b04608
# Parent  47a5dfd1bcd6203c5c57fc01fc32c94e332ccbb3
[IA64] fix vDSO paravirtualization.

sometimes it fails to clear event mask. It results in domain's unstability.
And one typo.

Signed-off-by: Isaku Yamahata <yamahata@xxxxxxxxxxxxx>
---
 linux-2.6-xen-sparse/arch/ia64/kernel/gate.S   |    2 -
 linux-2.6-xen-sparse/arch/ia64/xen/hypercall.S |   41 ++++++++++++++-----------
 2 files changed, 24 insertions(+), 19 deletions(-)

diff -r 47a5dfd1bcd6 -r 147144f9ec51 
linux-2.6-xen-sparse/arch/ia64/kernel/gate.S
--- a/linux-2.6-xen-sparse/arch/ia64/kernel/gate.S      Thu Aug 03 11:05:59 
2006 -0600
+++ b/linux-2.6-xen-sparse/arch/ia64/kernel/gate.S      Thu Aug 03 11:10:53 
2006 -0600
@@ -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 47a5dfd1bcd6 -r 147144f9ec51 
linux-2.6-xen-sparse/arch/ia64/xen/hypercall.S
--- a/linux-2.6-xen-sparse/arch/ia64/xen/hypercall.S    Thu Aug 03 11:05:59 
2006 -0600
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/hypercall.S    Thu Aug 03 11:10:53 
2006 -0600
@@ -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)

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.