# 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
|