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

[Xen-changelog] [xen-unstable] [IA64] Fix MINSTATE_START/END_SAVE_MIN_PHYS for INIT handler



# HG changeset patch
# User awilliam@xxxxxxxxxxx
# Node ID 446402805fd9d50482c8be15479a682c362b518e
# Parent  be1b7896c203bfa33858d2e6de3d37905181c895
[IA64] Fix MINSTATE_START/END_SAVE_MIN_PHYS for INIT handler

- THIS_CPU(ia64_mca_data)  have physcal address of each cpu's ia64_mca_cpu.
  I computed address of init_stack by using it.
- from dep r12=-1,r12,61,3; to dep r12=-1,r12,60,4;
  to computed xen virtual address.

Signed-off-by: Akio Takebe <takebe_akio@xxxxxxxxxxxxxx>
---
 xen/arch/ia64/linux-xen/minstate.h |   29 +++++++++++++++++++++++++++--
 1 files changed, 27 insertions(+), 2 deletions(-)

diff -r be1b7896c203 -r 446402805fd9 xen/arch/ia64/linux-xen/minstate.h
--- a/xen/arch/ia64/linux-xen/minstate.h        Thu Jul 06 10:23:34 2006 -0600
+++ b/xen/arch/ia64/linux-xen/minstate.h        Thu Jul 06 10:32:26 2006 -0600
@@ -36,7 +36,31 @@
  * For mca_asm.S we want to access the stack physically since the state is 
saved before we
  * go virtual and don't want to destroy the iip or ipsr.
  */
-#define MINSTATE_START_SAVE_MIN_PHYS                                           
                \
+#ifdef XEN
+# define MINSTATE_START_SAVE_MIN_PHYS                                          
                \
+(pKStk)        movl r3=THIS_CPU(ia64_mca_data);;                               
                        \
+(pKStk)        tpa r3 = r3;;                                                   
                        \
+(pKStk)        ld8 r3 = [r3];;                                                 
                        \
+(pKStk)        addl r3=IA64_MCA_CPU_INIT_STACK_OFFSET,r3;;                     
                        \
+(pKStk)        addl r1=IA64_STK_OFFSET-IA64_PT_REGS_SIZE,r3;                   
                        \
+(pUStk)        mov ar.rsc=0;           /* set enforced lazy mode, pl 0, 
little-endian, loadrs=0 */     \
+(pUStk)        addl r22=IA64_RBS_OFFSET,r1;            /* compute base of 
register backing store */    \
+       ;;                                                                      
                \
+(pUStk)        mov r24=ar.rnat;                                                
                        \
+(pUStk)        addl r1=IA64_STK_OFFSET-IA64_PT_REGS_SIZE,r1;   /* compute base 
of memory stack */      \
+(pUStk)        mov r23=ar.bspstore;                            /* save 
ar.bspstore */                  \
+(pUStk)        dep r22=-1,r22,60,4;                    /* compute Xen virtual 
addr of RBS */   \
+       ;;                                                                      
                \
+(pUStk)        mov ar.bspstore=r22;                    /* switch to Xen RBS */ 
                \
+       ;;                                                                      
                \
+(pUStk)        mov r18=ar.bsp;                                                 
                        \
+(pUStk)        mov ar.rsc=0x3;  /* set eager mode, pl 0, little-endian, 
loadrs=0 */                    \
+
+# define MINSTATE_END_SAVE_MIN_PHYS                                            
                \
+       dep r12=-1,r12,60,4;        /* make sp a Xen virtual address */         
        \
+       ;;
+#else
+# define MINSTATE_START_SAVE_MIN_PHYS                                          
                \
 (pKStk) mov r3=IA64_KR(PER_CPU_DATA);;                                         
                \
 (pKStk) addl r3=THIS_CPU(ia64_mca_data),r3;;                                   
                \
 (pKStk) ld8 r3 = [r3];;                                                        
                        \
@@ -55,9 +79,10 @@
 (pUStk)        mov r18=ar.bsp;                                                 
                        \
 (pUStk)        mov ar.rsc=0x3;         /* set eager mode, pl 0, little-endian, 
loadrs=0 */             \
 
-#define MINSTATE_END_SAVE_MIN_PHYS                                             
                \
+# define MINSTATE_END_SAVE_MIN_PHYS                                            
                \
        dep r12=-1,r12,61,3;            /* make sp a kernel virtual address */  
                \
        ;;
+#endif /* XEN */
 
 #ifdef MINSTATE_VIRT
 #ifdef XEN

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