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

[Xen-ia64-devel] [PATCH] fix xen_ssm_i()



# HG changeset patch
# User yamahata@xxxxxxxxxxxxx
# Date 1185765493 -32400
# Node ID a28df3d821260d96b234f7133353be347bd4b140
# Parent  b0bf9ba32bfe341af07da97d57572659c920fd30
fix xen_ssm_i(). otherwise interruption may not be delivered.
PATCHNAME: fix_xen_ssm_i

Signed-off-by: Isaku Yamahata <yamahata@xxxxxxxxxxxxx>

diff -r b0bf9ba32bfe -r a28df3d82126 arch/ia64/kernel/gate.S
--- a/arch/ia64/kernel/gate.S   Fri Jul 27 08:15:50 2007 -0600
+++ b/arch/ia64/kernel/gate.S   Mon Jul 30 12:18:13 2007 +0900
@@ -149,16 +149,16 @@ GLOBAL_ENTRY(__kernel_syscall_via_epc)
 (p6)   tbit.z.unc p8,p0=r18,0                  // I0 (dual-issues with "mov 
b7=r18"!)
 #ifdef CONFIG_XEN_IA64_VDSO_PARAVIRT
        
-#define XEN_SET_PSR_I(pr)              \
-(pr)   ld1 r31=[r22];                  \
-(pr)   ld1 r25=[r24];                  \
-       ;;                              \
-(pr)   st1 [r22]=r0;                   \
-(pr)   cmp.ne.unc p14,p0=r0,r31;       \
-       ;;                              \
+#define XEN_SET_PSR_I(pred)            \
+(pred) ld1 r31=[r22];                  \
+       ;; ;                            \
+(pred) st1 [r22]=r0;                   \
+(pred) cmp.ne.unc p14,p0=r0,r31;       \
+       ;; ;                            \
+(p14)  ld1 r25=[r24];                  \
+       ;; ;                            \
 (p14)  cmp.ne.unc p11,p0=r0,r25;       \
-       ;;                              \
-(p11)  st1 [r22]=r20;                  \
+       ;; ;                            \
 (p11)  XEN_HYPER_SSM_I;
 
        ;; 
diff -r b0bf9ba32bfe -r a28df3d82126 include/asm-ia64/xen/privop.h
--- a/include/asm-ia64/xen/privop.h     Fri Jul 27 08:15:50 2007 -0600
+++ b/include/asm-ia64/xen/privop.h     Mon Jul 30 12:18:13 2007 +0900
@@ -238,12 +238,10 @@ extern void xen_set_eflag(unsigned long)
 #define xen_ssm_i()                                                    \
 ({                                                                     \
        int old = xen_get_virtual_psr_i();                              \
-       if (!old) {                                                     \
-               if (xen_get_virtual_pend())                             \
-                       xen_hyper_ssm_i();                              \
-               else                                                    \
-                       xen_set_virtual_psr_i(1);                       \
-       }                                                               \
+       xen_set_virtual_psr_i(1);                                       \
+       barrier();                                                      \
+       if (!old && xen_get_virtual_pend())                             \
+               xen_hyper_ssm_i();                                      \
 })
 
 #define xen_ia64_intrin_local_irq_restore(x)                           \

-- 
yamahata

Attachment: 158_a28df3d82126_fix_xen_ssm_i.patch
Description: Text Data

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

 


Rackspace

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