# HG changeset patch
# User yamahata@xxxxxxxxxxxxx
# Date 1198815001 -32400
# Node ID 96e207574e536b5ac029e2a1c57ca20ad879a72f
# Parent 2767d660e895dd4a62930d26b698f86affbe2256
Don't pin xenheap down. Now it's unnecessary.
PATCHNAME: dont_pin_down_xenheap
Signed-off-by: Isaku Yamahata <yamahata@xxxxxxxxxxxxx>
diff -r 2767d660e895 -r 96e207574e53 xen/arch/ia64/linux-xen/entry.S
--- a/xen/arch/ia64/linux-xen/entry.S Tue Dec 25 21:10:59 2007 +0900
+++ b/xen/arch/ia64/linux-xen/entry.S Fri Dec 28 13:10:01 2007 +0900
@@ -256,33 +256,6 @@ GLOBAL_ENTRY(ia64_switch_to)
br.ret.sptk.many rp // boogie on out in new context
.map:
-#ifdef XEN
- // in0: next in virtual address which must be in
- // the xen identity mapping area.
- // r20: physical address of next
- // r22: ksp offset: used: don't overwrite. will be used later
- // r24: = THIS_CPU(cpu_kr)+IA64_KR_CURRENT_STACK_OFFSET
- // r26: (physical address of next) >> IA64_GRANULE_SHIFT
- //
- // r8: return value
- // r13: thread pointer
- // r21: thread pointer for VTi domain ??? can be removed?
-
- // avoid overlapping with xenheap TR
- mov r28=ip // get kernel tr area
- ;;
- tpa r27=r28 // convert to physical address
- ;;
- dep r25=0,r27,0,KERNEL_TR_PAGE_SHIFT
- dep r23=0,r20,0,KERNEL_TR_PAGE_SHIFT
- ;;
- cmp.eq p7,p6=r25,r23
- mov r28=-1
- ;;
-(p7) st8 [r24]=r28 // remember we don't map stack.
-(p7) br.cond.sptk .done
- ;;
-#endif
rsm psr.ic // interrupts (psr.i) are already
disabled here
movl r25=PAGE_KERNEL
#ifdef XEN
diff -r 2767d660e895 -r 96e207574e53 xen/arch/ia64/linux-xen/head.S
--- a/xen/arch/ia64/linux-xen/head.S Tue Dec 25 21:10:59 2007 +0900
+++ b/xen/arch/ia64/linux-xen/head.S Fri Dec 28 13:10:01 2007 +0900
@@ -263,16 +263,6 @@ start_ap:
itr.d dtr[r16]=r18
;;
srlz.i
- ;;
- /* XEN HEAP is identity mapped */
- mov r16 = IA64_TR_XEN_HEAP_REGS
- dep r17 = -1, r2, 60, 4
- ;;
- mov cr.ifa = r17
- ;;
- itr.d dtr[r16]=r18
- ;;
- srlz.i
/*
* Switch into virtual mode:
@@ -335,20 +325,7 @@ 1: // now we are in virtual mode
;;
tpa r3=r2 // r3 == phys addr of task struct
mov r16=-1
-#ifdef XEN
- ;;
- dep r2=-1,r3,60,4 // IMVA of task
- // XEN: check overlap with XENHEAP
- mov r17=ip
- ;;
- tpa r17=r17
- ;;
- dep r17=0,r17,0,KERNEL_TR_PAGE_SHIFT
- dep r18=0,r3,0,KERNEL_TR_PAGE_SHIFT
- ;;
- cmp.eq p4,p0=r17,r18
-(p4) br.cond.dpnt .load_current
-#else
+#ifndef XEN
(isBP) br.cond.dpnt .load_current // BP stack is on region 5 --- no need to
map it
#endif
@@ -360,7 +337,9 @@ 1: // now we are in virtual mode
dep r18=0,r3,0,12
;;
or r18=r17,r18
-#ifndef XEN
+#ifdef XEN
+ dep r2=-1,r3,60,4 // IMVA of task
+#else
dep r2=-1,r3,61,3 // IMVA of task
#endif
;;
diff -r 2767d660e895 -r 96e207574e53 xen/arch/ia64/linux-xen/mca_asm.S
--- a/xen/arch/ia64/linux-xen/mca_asm.S Tue Dec 25 21:10:59 2007 +0900
+++ b/xen/arch/ia64/linux-xen/mca_asm.S Fri Dec 28 13:10:01 2007 +0900
@@ -279,19 +279,6 @@ 4:
;;
srlz.d
;;
-#ifdef XEN
- /* xen heap is identity mapped */
- mov r19=ip
- ;;
- dep r17=0,r19,0,KERNEL_TR_PAGE_SHIFT
- ;;
- dep r17=-1,r17,60,4
- ;;
- ptr.d r17,r18
- ;;
- srlz.d
- ;;
-#endif
// 2. Purge DTR for PERCPU data.
movl r16=PERCPU_ADDR
mov r18=PERCPU_PAGE_SHIFT<<2
@@ -427,18 +414,6 @@ ia64_reload_tr:
srlz.i
srlz.d
;;
-#ifdef XEN
- /* xen heap is identity mapped */
- mov r16=IA64_TR_XEN_HEAP_REGS
- dep r17=-1,r17,60,4
- ;;
- mov cr.ifa=r17
- ;;
- itr.d dtr[r16]=r18
- ;;
- srlz.d
- ;;
-#endif
// 2. Reload DTR register for PERCPU data.
GET_THIS_PADDR(r2, ia64_mca_per_cpu_pte)
;;
@@ -475,29 +450,12 @@ ia64_reload_tr:
;;
// 4. Reload DTR for stack.
#ifdef XEN
- // avoid overlapping with xenheap TR
- mov r17=ip
- ;;
- dep r17=0,r17,0,KERNEL_TR_PAGE_SHIFT
- ;;
- shr.u r17=r17,IA64_GRANULE_SHIFT
- ;;
// Kernel registers are saved in a per_cpu cpu_kr_ia64_t
// to allow the kernel registers themselves to be used by domains.
GET_THIS_PADDR(r2, cpu_kr);;
add r2=IA64_KR_CURRENT_STACK_OFFSET,r2
;;
ld8 r16=[r2]
- ;;
-#if KERNEL_TR_PAGE_SHIFT < IA64_GRANULE_SHIFT
-# error "KERNEL_TR_PAGE_SHIFT < IA64_GRANULE_SHIFT shouldn't happen"
-#endif
-#if KERNEL_TR_PAGE_SHIFT > IA64_GRANULE_SHIFT
- dep r18=0,r16,0,KERNEL_TR_PAGE_SHIFT-IA64_GRANULE_SHIFT
- ;;
-#endif
- cmp.eq p7,p0=r17,r18
-(p7) br.cond.sptk .reload_vhpt
#else
mov r16=IA64_KR(CURRENT_STACK)
#endif
@@ -524,16 +482,6 @@ ia64_reload_tr:
// 5. VHPT
#if VHPT_ENABLED
GET_VA_VCPU_VHPT_MADDR(r2,r3);;
- dep r3=0,r2,0,KERNEL_TR_PAGE_SHIFT
- ;;
- dep r3=0,r3,60,4 // physical address of
- // va_vhpt & ~(KERNEL_TR_PAGE_SHIFT - 1)
- ;;
- shr.u r3=r3,IA64_GRANULE_SHIFT
- ;;
- cmp.eq p7,p0=r3,r17
-(p7) br.cond.sptk .overlap_vhpt
- ;;
// avoid overlapping with stack TR
shr.u r17=r2,IA64_GRANULE_SHIFT
diff -r 2767d660e895 -r 96e207574e53 xen/arch/ia64/vmx/vmx_entry.S
--- a/xen/arch/ia64/vmx/vmx_entry.S Tue Dec 25 21:10:59 2007 +0900
+++ b/xen/arch/ia64/vmx/vmx_entry.S Fri Dec 28 13:10:01 2007 +0900
@@ -686,26 +686,10 @@ 1:
;;
itr.d dtr[r16]=r24
;;
- /* xen heap is also identity mapped */
- mov r16 = IA64_TR_XEN_HEAP_REGS
- dep r17=-1,r3,60,4
- ;;
- ptr.d r17, r18
- ;;
- mov cr.ifa=r17
- ;;
- itr.d dtr[r16]=r24
- ;;
// re-pin mapping for stack (current)
- // unless overlaps with IA64_TR_XEN_HEAP_REGS
mov r26=IA64_GRANULE_SHIFT<<2
dep r21=0,r13,60,4 // physical address of "current"
- ;;
- dep r3=0,r21,0,KERNEL_TR_PAGE_SHIFT
- ;;
- cmp.eq p7,p0=r2,r3
-(p7) br.cond.sptk .stack_overlaps
;;
ptr.d r13,r26
or r23=r21,r25 // construct PA | page properties
@@ -714,7 +698,6 @@ 1:
mov r18=IA64_TR_CURRENT_STACK
;;
itr.d dtr[r18]=r23 // wire in new mapping...
-.stack_overlaps:
// re-pin mappings for per-cpu data
movl r22 = PERCPU_ADDR
@@ -732,16 +715,13 @@ 1:
;;
// re-pin mappings for guest_vhpt
- // unless overlaps with IA64_TR_XEN_HEAP_REGS or IA64_TR_CURRENT_STACK
- dep r18=0,loc5,0,KERNEL_TR_PAGE_SHIFT
+ // unless overlaps with IA64_TR_CURRENT_STACK
// r21 = (current physical addr) & (IA64_GRANULE_SIZE - 1)
dep r21=0,r21,0,IA64_GRANULE_SHIFT
// r17 = (guest_vhpt physical addr) & (IA64_GRANULE_SIZE - 1)
dep r17=0,loc5,0,IA64_GRANULE_SHIFT
;;
- cmp.eq p6,p0=r18,r2 // check overlap with xen heap
cmp.eq p7,p0=r17,r21 // check overlap with current stack
-(p6) br.cond.sptk .vhpt_overlaps
(p7) br.cond.sptk .vhpt_overlaps
mov r24=IA64_TR_VHPT
;;
@@ -773,18 +753,11 @@ 1:
// r16, r19, r20 are used by
// ia64_switch_mode_phys()/ia64_switch_mode_virt()
// re-pin mappings for privregs
- // r2 = ia64_tpa(ip) & (KERNEL_TR_PAGE_SIZE - 1)
// r21 = (current physical addr) & (IA64_GRANULE_SIZE - 1)
// r17 = (guest_vhpt physical addr) & (IA64_GRANULE_SIZE - 1)
-
- // r24 = (privregs physical addr) & (KERNEL_TR_PAGE_SIZE - 1)
// loc6 = (((pal phys addr) & (IA64_GRANULE_SIZE - 1) << 2)) |
PAGE_KERNEL
// loc7 = (privregs physical addr) & (IA64_GRANULE_SIZE - 1)
- dep r24 = 0,loc7,0,KERNEL_TR_PAGE_SHIFT
- ;;
- cmp.ne p6,p0=r24,r2 // check overlap with xen heap
- ;;
-(p6) cmp.ne.unc p7,p0=r21,loc7 // check overlap with current stack
+ cmp.ne.unc p7,p0=r21,loc7 // check overlap with current stack
;;
(p7) cmp.ne.unc p8,p0=r17,loc7 // check overlap with guest_vhpt
;;
@@ -805,7 +778,6 @@ 1:
;;
(p8) itr.d dtr[r24]=loc7 // wire in new mapping...
;;
-.privregs_overlaps:
// done, switch back to virtual and return
mov r16=loc4 // r16= original psr
diff -r 2767d660e895 -r 96e207574e53 xen/arch/ia64/vmx/vmx_init.c
--- a/xen/arch/ia64/vmx/vmx_init.c Tue Dec 25 21:10:59 2007 +0900
+++ b/xen/arch/ia64/vmx/vmx_init.c Fri Dec 28 13:10:01 2007 +0900
@@ -210,13 +210,6 @@ __vmx_vpd_pin(struct vcpu* v)
unsigned long privregs = (unsigned long)v->arch.privregs;
u64 psr;
- // check overlapping with xenheap
- if ((privregs &
- ~(KERNEL_TR_PAGE_SIZE - 1)) ==
- ((unsigned long)__va(ia64_tpa(current_text_addr())) &
- ~(KERNEL_TR_PAGE_SIZE - 1)))
- return;
-
privregs &= ~(IA64_GRANULE_SIZE - 1);
// check overlapping with current stack
diff -r 2767d660e895 -r 96e207574e53 xen/arch/ia64/xen/xenasm.S
--- a/xen/arch/ia64/xen/xenasm.S Tue Dec 25 21:10:59 2007 +0900
+++ b/xen/arch/ia64/xen/xenasm.S Fri Dec 28 13:10:01 2007 +0900
@@ -93,22 +93,8 @@ 1:
;;
itr.d dtr[r16]=r18
;;
- /* xen heap is also identity mapped */
- mov r16 = IA64_TR_XEN_HEAP_REGS
- dep r17=-1,loc6,60,4
- ;;
- ptr.d r17,r24
- ;;
- mov cr.ifa=r17
- ;;
- itr.d dtr[r16]=r18
- ;;
+
// re-pin mappings for stack (current)
- // unless overlaps with IA64_TR_XEN_HEAP_REGS
- dep r18=0,r13,0,KERNEL_TR_PAGE_SHIFT
- ;;
- cmp.eq p7,p0=r17,r18
-(p7) br.cond.sptk .stack_overlaps
mov r25=IA64_GRANULE_SHIFT<<2
dep r21=0,r13,60,4 // physical address of "current"
;;
@@ -121,7 +107,6 @@ 1:
itr.d dtr[r21]=r23 // wire in new mapping...
// Per-cpu
-.stack_overlaps:
mov r24=PERCPU_PAGE_SHIFT<<2
movl r22=PERCPU_ADDR
;;
@@ -138,14 +123,11 @@ 1:
#if IA64_GRANULE_SHIFT < VHPT_SIZE_LOG2
#error "it must be that VHPT_SIZE_LOG2 <= IA64_GRANULE_SHIFT"
#endif
- // unless overlaps with KERNEL_TR and IA64_TR_CURRENT_STACK
- dep r14=0,in4,0,KERNEL_TR_PAGE_SHIFT
+ // unless overlaps with IA64_TR_CURRENT_STACK
dep r15=0,in4,0,IA64_GRANULE_SHIFT
dep r21=0,r13,0,IA64_GRANULE_SHIFT
;;
- cmp.eq p7,p0=r17,r14
cmp.eq p8,p0=r15,r21
-(p7) br.cond.sptk .vhpt_overlaps
(p8) br.cond.sptk .vhpt_overlaps
mov r21=IA64_TR_VHPT
dep r22=0,r15,60,4 // physical address of
diff -r 2767d660e895 -r 96e207574e53 xen/arch/ia64/xen/xensetup.c
--- a/xen/arch/ia64/xen/xensetup.c Tue Dec 25 21:10:59 2007 +0900
+++ b/xen/arch/ia64/xen/xensetup.c Fri Dec 28 13:10:01 2007 +0900
@@ -328,7 +328,7 @@ void __init start_kernel(void)
}
printk("Xen command line: %s\n", saved_command_line);
- /* xenheap should be in same TR-covered range with xen image */
+
xenheap_phys_end = xen_pstart + xenheap_size;
printk("xen image pstart: 0x%lx, xenheap pend: 0x%lx\n",
xen_pstart, xenheap_phys_end);
diff -r 2767d660e895 -r 96e207574e53 xen/include/asm-ia64/xenkregs.h
--- a/xen/include/asm-ia64/xenkregs.h Tue Dec 25 21:10:59 2007 +0900
+++ b/xen/include/asm-ia64/xenkregs.h Fri Dec 28 13:10:01 2007 +0900
@@ -4,10 +4,9 @@
/*
* Translation registers:
*/
-#define IA64_TR_XEN_HEAP_REGS 3 /* dtr3: xen heap identity mapped regs
*/
+#define IA64_TR_MAPPED_REGS 3 /* dtr3: vcpu mapped regs */
#define IA64_TR_SHARED_INFO 4 /* dtr4: page shared with domain */
-#define IA64_TR_MAPPED_REGS 5 /* dtr5: vcpu mapped regs */
-#define IA64_TR_VHPT 6 /* dtr6: vhpt */
+#define IA64_TR_VHPT 5 /* dtr5: vhpt */
#define IA64_TR_VPD 2 /* itr2: vpd */
16705_96e207574e53_dont_pin_down_xenheap.patch
Description: Text Data
_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel
|