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

[Xen-changelog] Remove paravirtualization of ar.kr registers (may need hyperprivop for



# HG changeset patch
# User djm@xxxxxxxxxxxxxxx
# Node ID c83307a81602ab4e3fa8b4c07aa6ee97b9742bca
# Parent  32eea7354dcbf0a41bfadf29e55867aad20897ae
Remove paravirtualization of ar.kr registers (may need hyperprivop for
mov_to_kr later)
Signed-off by: Dan Magenheimer <dan.magenheimer@xxxxxx>

diff -r 32eea7354dcb -r c83307a81602 
linux-2.6-xen-sparse/arch/ia64/xen/xenentry.S
--- a/linux-2.6-xen-sparse/arch/ia64/xen/xenentry.S     Wed Sep 21 16:25:47 2005
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/xenentry.S     Wed Sep 21 19:41:25 2005
@@ -53,13 +53,7 @@
 
        adds r22=IA64_TASK_THREAD_KSP_OFFSET,r13
        movl r25=init_task
-#ifdef CONFIG_XEN
-       movl r27=XSI_KR0+(IA64_KR_CURRENT_STACK*8)
-       ;;
-       ld8 r27=[r27]
-#else
        mov r27=IA64_KR(CURRENT_STACK)
-#endif
        adds r21=IA64_TASK_THREAD_KSP_OFFSET,in0
        dep r20=0,in0,61,3              // physical address of "next"
        ;;
@@ -86,13 +80,7 @@
 (p6)   srlz.d
 #endif
        ld8 sp=[r21]                    // load kernel stack pointer of new task
-#ifdef CONFIG_XEN
-       movl r8=XSI_KR0+(IA64_KR_CURRENT*8)
-       ;;
-       st8 [r8]=in0
-#else
        mov IA64_KR(CURRENT)=in0        // update "current" application register
-#endif
        mov r8=r13                      // return pointer to previously running 
task
        mov r13=in0                     // set "current" pointer
        ;;
@@ -127,16 +115,13 @@
        st8 [r8]=in0                     // VA of next task...
        ;;
        mov r25=IA64_TR_CURRENT_STACK
-       movl r8=XSI_KR0+(IA64_KR_CURRENT_STACK*8)
-       ;;
-       st8 [r8]=r26
 #else
        mov cr.itir=r25
        mov cr.ifa=in0                  // VA of next task...
        ;;
        mov r25=IA64_TR_CURRENT_STACK
+#endif
        mov IA64_KR(CURRENT_STACK)=r26  // remember last page we mapped...
-#endif
        ;;
        itr.d dtr[r25]=r23              // wire in new mapping...
        br.cond.sptk .done
@@ -573,14 +558,7 @@
        bsw.0                   // switch back to bank 0 (no stop bit required 
beforehand...)
 #endif
        ;;
-#ifdef CONFIG_XEN
-(pUStk)        movl r18=XSI_KR0+(IA64_KR_CURRENT*8)
-       ;;
-(pUStk)        ld8 r18=[r18]
-       ;;
-#else
 (pUStk)        mov r18=IA64_KR(CURRENT)// M2 (12 cycle read latency)
-#endif
        adds r16=PT(CR_IPSR)+16,r12
        adds r17=PT(CR_IIP)+16,r12
 
diff -r 32eea7354dcb -r c83307a81602 linux-2.6-xen-sparse/arch/ia64/xen/xenivt.S
--- a/linux-2.6-xen-sparse/arch/ia64/xen/xenivt.S       Wed Sep 21 16:25:47 2005
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/xenivt.S       Wed Sep 21 19:41:25 2005
@@ -123,13 +123,7 @@
        rsm psr.dt                              // use physical addressing for 
data
 #endif
        mov r31=pr                              // save the predicate registers
-#ifdef CONFIG_XEN
-       movl r19=XSI_KR0+(IA64_KR_PT_BASE*8)    // get the page table base 
address
-       ;;
-       ld8 r19=[r19]
-#else
        mov r19=IA64_KR(PT_BASE)                // get page table base address
-#endif
        shl r21=r16,3                           // shift bit 60 into sign bit
        shr.u r17=r16,61                        // get the region number into 
r17
        ;;
@@ -573,13 +567,7 @@
 #else
        rsm psr.dt                              // switch to using physical 
data addressing
 #endif
-#ifdef CONFIG_XEN
-       movl r19=XSI_KR0+(IA64_KR_PT_BASE*8)    // get the page table base 
address
-       ;;
-       ld8 r19=[r19]
-#else
        mov r19=IA64_KR(PT_BASE)                // get the page table base 
address
-#endif
        shl r21=r16,3                           // shift bit 60 into sign bit
        ;;
        shr.u r17=r16,61                        // get the region number into 
r17
@@ -968,6 +956,7 @@
         * to prevent leaking bits from kernel to user level.
         */
        DBG_FAULT(11)
+       mov r16=IA64_KR(CURRENT)                // r16 = current task; 12 cycle 
read lat.
 #ifdef CONFIG_XEN
        movl r31=XSI_IPSR
        ;;
@@ -983,11 +972,7 @@
        mov r27=ar.rsc
        mov r26=ar.pfs
        ;;
-       adds r31=(XSI_KR0+(IA64_KR_CURRENT*8))-XSI_IIM,r31
-       ;;
-       ld8 r16=[r31]                           // r16 = current task
-#else
-       mov r16=IA64_KR(CURRENT)                // r16 = current task; 12 cycle 
read lat.
+#else
        mov r17=cr.iim
        mov r18=__IA64_BREAK_SYSCALL
        mov r21=ar.fpsr
diff -r 32eea7354dcb -r c83307a81602 
linux-2.6-xen-sparse/arch/ia64/xen/xenminstate.h
--- a/linux-2.6-xen-sparse/arch/ia64/xen/xenminstate.h  Wed Sep 21 16:25:47 2005
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/xenminstate.h  Wed Sep 21 19:41:25 2005
@@ -104,9 +104,7 @@
  */
 #ifdef CONFIG_XEN
 #define DO_SAVE_MIN(COVER,SAVE_IFS,EXTRA)                                      
                \
-       /*MINSTATE_GET_CURRENT(r16);    /* M (or M;;I) */                       
                \
-       movl r16=XSI_KR0+(IA64_KR_CURRENT*8);;                                  
                \
-       ld8 r16=[r16];;                                                         
                \
+       MINSTATE_GET_CURRENT(r16);      /* M (or M;;I) */                       
                \
        mov r27=ar.rsc;                 /* M */                                 
                \
        mov r20=r1;                     /* A */                                 
                \
        mov r25=ar.unat;                /* M */                                 
                \
@@ -194,9 +192,7 @@
        ;;                                                                      
                \
 .mem.offset 0,0; st8.spill [r16]=r13,16;                                       
                \
 .mem.offset 8,0; st8.spill [r17]=r21,16;       /* save ar.fpsr */              
                \
-       /* mov r13=IA64_KR(CURRENT);    /* establish `current' */               
                \
-       movl r21=XSI_KR0+(IA64_KR_CURRENT*8);;                                  
                \
-       ld8 r13=[r21];;                                                         
                \
+       mov r13=IA64_KR(CURRENT);       /* establish `current' */               
                \
        ;;                                                                      
                \
 .mem.offset 0,0; st8.spill [r16]=r15,16;                                       
                \
 .mem.offset 8,0; st8.spill [r17]=r14,16;                                       
                \
diff -r 32eea7354dcb -r c83307a81602 
linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h
--- a/linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h        Wed Sep 21 
16:25:47 2005
+++ b/linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h        Wed Sep 21 
19:41:25 2005
@@ -93,9 +93,8 @@
        XEN_HYPER_SSM_I;                                                \
 })
 
-/* kernel register paravirtualization may soon go away */
-#define xen_get_kr(regnum) (((unsigned long *)(XSI_KR0))[regnum])
-#define xen_set_kr(regnum,val) ((((unsigned long *)(XSI_KR0))[regnum]) = val)
+// for now, just use privop.  may use hyperprivop later
+#define xen_set_kr(regnum,val) (__ia64_setreg(regnum,val))
 
 /* turning off interrupts can be paravirtualized simply by writing
  * to a memory-mapped virtual psr.i bit (implemented as a 16-bit bool) */
@@ -168,11 +167,6 @@
        __u64 ia64_intri_res;                                           \
                                                                        \
        switch(regnum) {                                                \
-       case _IA64_REG_AR_KR0 ... _IA64_REG_AR_KR7:                     \
-               ia64_intri_res = (running_on_xen) ?                     \
-                       xen_get_kr((regnum-_IA64_REG_AR_KR0)) :         \
-                       __ia64_getreg(regnum);                          \
-               break;                                                  \
        case _IA64_REG_CR_IVR:                                          \
                ia64_intri_res = (running_on_xen) ?                     \
                        xen_get_ivr() :                                 \

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