aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordjm@kirby.fc.hp.com <djm@kirby.fc.hp.com>2005-09-21 13:41:25 -0600
committerdjm@kirby.fc.hp.com <djm@kirby.fc.hp.com>2005-09-21 13:41:25 -0600
commitf83ba4d543cbd71903b187acbc3c4696b8958864 (patch)
tree3de8b22055d9c7e1cdbcf5025ac83cd2a4c65560
parent5a5ab092d4db6a9a938430a292a1dd100ad8125d (diff)
downloadxen-f83ba4d543cbd71903b187acbc3c4696b8958864.tar.gz
xen-f83ba4d543cbd71903b187acbc3c4696b8958864.tar.bz2
xen-f83ba4d543cbd71903b187acbc3c4696b8958864.zip
Remove paravirtualization of ar.kr registers (may need hyperprivop for
mov_to_kr later) Signed-off by: Dan Magenheimer <dan.magenheimer@hp.com>
-rw-r--r--linux-2.6-xen-sparse/arch/ia64/xen/xenentry.S24
-rw-r--r--linux-2.6-xen-sparse/arch/ia64/xen/xenivt.S17
-rw-r--r--linux-2.6-xen-sparse/arch/ia64/xen/xenminstate.h8
-rw-r--r--linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h10
4 files changed, 6 insertions, 53 deletions
diff --git a/linux-2.6-xen-sparse/arch/ia64/xen/xenentry.S b/linux-2.6-xen-sparse/arch/ia64/xen/xenentry.S
index cdc0e85b03..18d3fb35ce 100644
--- a/linux-2.6-xen-sparse/arch/ia64/xen/xenentry.S
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/xenentry.S
@@ -53,13 +53,7 @@ GLOBAL_ENTRY(ia64_switch_to)
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 @@ GLOBAL_ENTRY(ia64_switch_to)
(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 @@ GLOBAL_ENTRY(ia64_switch_to)
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
- mov IA64_KR(CURRENT_STACK)=r26 // remember last page we mapped...
#endif
+ mov IA64_KR(CURRENT_STACK)=r26 // remember last page we mapped...
;;
itr.d dtr[r25]=r23 // wire in new mapping...
br.cond.sptk .done
@@ -573,14 +558,7 @@ GLOBAL_ENTRY(ia64_leave_kernel)
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 --git a/linux-2.6-xen-sparse/arch/ia64/xen/xenivt.S b/linux-2.6-xen-sparse/arch/ia64/xen/xenivt.S
index 435d9955e4..a747e5c7c2 100644
--- a/linux-2.6-xen-sparse/arch/ia64/xen/xenivt.S
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/xenivt.S
@@ -123,13 +123,7 @@ ENTRY(vhpt_miss)
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 @@ ENTRY(nested_dtlb_miss)
#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 @@ ENTRY(break_fault)
* 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 @@ ENTRY(break_fault)
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.
mov r17=cr.iim
mov r18=__IA64_BREAK_SYSCALL
mov r21=ar.fpsr
diff --git a/linux-2.6-xen-sparse/arch/ia64/xen/xenminstate.h b/linux-2.6-xen-sparse/arch/ia64/xen/xenminstate.h
index 39ace54786..c6df57e9be 100644
--- a/linux-2.6-xen-sparse/arch/ia64/xen/xenminstate.h
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/xenminstate.h
@@ -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 --git a/linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h b/linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h
index d4a44490e0..083672d1fd 100644
--- a/linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h
+++ b/linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h
@@ -93,9 +93,8 @@ extern void xen_set_eflag(unsigned long); /* see xen_ia64_setreg */
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 @@ extern unsigned long xen_get_rr(unsigned long index);
__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() : \