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

[Xen-changelog] [IA64] RSE incomplete cfm



# HG changeset patch
# User awilliam@xxxxxxxxxxx
# Node ID 707737b66f587df491bdc82991c18d816e3d0f2f
# Parent  ee97d247a3b74a441373b3529aeac317f44cd221
[IA64] RSE incomplete cfm

In theory, after Guest executes "cover", incomplete frame changes to complete 
frame. So Guest should set INCOMPL to 0 just after "cover". At least before
guest psr.ic and psr.i are turned on.

Previously, only when Guest executes "rfi", INCOMPL is set to 0. The window 
between "cover" and "rfi" causes trouble in below scenario.

1. Application A calls system call.

2. In OS breaks handler entry, INCOMPL is 0. Due to its system call, 
   Linux kernel doesn't execute "cover".

3. Before returning to Application A, schedule happens, Application B begins
   to run.

4. A TLB miss happens on the context of B, this may make INCOMPL 1, before 
   Returning to B, (that means "rfi" is not executed, and INCOMPL is still 1)
  schedule happens again. A resumes to run with INCOMPL 1 (this is incorrect 
now).

5. As mentioned before, this is system call, "cover" is executed in 
   ia64_leave_kernel path.  Because INCOMPL is 1, this "cover" is not actually
   executed, but this "cover" should be executed.

5. Thus application A's frame is destroyed. Issue appears.

From: Anthony Xu <anthony.xu@xxxxxxxxx>
Signed-off-by: Alex Williamson <alex.williamson@xxxxxx>
---
 linux-2.6-xen-sparse/arch/ia64/xen/xenminstate.h |    2 ++
 1 files changed, 2 insertions(+)

diff -r ee97d247a3b7 -r 707737b66f58 
linux-2.6-xen-sparse/arch/ia64/xen/xenminstate.h
--- a/linux-2.6-xen-sparse/arch/ia64/xen/xenminstate.h  Mon May 08 13:08:37 
2006 -0600
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/xenminstate.h  Mon May 08 13:41:18 
2006 -0600
@@ -155,6 +155,8 @@
        ;;                                                                      
                \
        ld4 r30=[r8];                                                           
                \
        ;;                                                                      
                \
+       /* set XSI_INCOMPL_REGFR 0 */                                           
                \
+       st4 [r8]=r0;                                                            
                \
        cmp.eq  p6,p7=r30,r0;                                                   
                \
        ;; /* not sure if this stop bit is necessary */                         
                \
 (p6)   adds r8=XSI_PRECOVER_IFS-XSI_INCOMPL_REGFR,r8;                          
                \

_______________________________________________
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®.