ChangeSet 1.1369.1.4, 2005/04/01 13:27:37-07:00, djm@xxxxxxxxxxxxxxxxxx
ia64: update xen address space for VTi compatibility
domain.c | 6 +++---
patch/linux-2.6.7/entry.S | 3 +--
patch/linux-2.6.7/head.S | 6 +-----
patch/linux-2.6.7/ivt.S | 3 ---
patch/linux-2.6.7/mca_asm.h | 20 ++++++++++++++++++++
patch/linux-2.6.7/minstate.h | 36 ++++++++++++++++++++++++------------
patch/linux-2.6.7/page.h | 4 ----
patch/linux-2.6.7/pal.S | 17 +++++++++++++++++
patch/linux-2.6.7/system.h | 7 +------
tools/mkbuildtree | 6 ++++--
xenasm.S | 2 +-
11 files changed, 72 insertions(+), 38 deletions(-)
diff -Nru a/xen/arch/ia64/domain.c b/xen/arch/ia64/domain.c
--- a/xen/arch/ia64/domain.c 2005-04-01 19:03:16 -05:00
+++ b/xen/arch/ia64/domain.c 2005-04-01 19:03:16 -05:00
@@ -194,9 +194,9 @@
if (!allocate_rid_range(d,DOMAIN_RID_BITS_DEFAULT)) // FIXME
BUG();
// the following will eventually need to be negotiated dynamically
- d->xen_vastart = 0xfffc000000000000;
- d->xen_vaend = 0xfffe000000000000;
- d->shared_info_va = 0xfffd000000000000;
+ d->xen_vastart = 0xf000000000000000;
+ d->xen_vaend = 0xf300000000000000;
+ d->shared_info_va = 0xf100000000000000;
d->breakimm = 0x1000;
// stay on kernel stack because may get interrupts!
// ia64_ret_from_clone (which b0 gets in new_thread) switches
diff -Nru a/xen/arch/ia64/patch/linux-2.6.7/entry.S
b/xen/arch/ia64/patch/linux-2.6.7/entry.S
--- a/xen/arch/ia64/patch/linux-2.6.7/entry.S 2005-04-01 19:03:16 -05:00
+++ b/xen/arch/ia64/patch/linux-2.6.7/entry.S 2005-04-01 19:03:16 -05:00
@@ -1,5 +1,5 @@
---- /home/djm/src/xen/xeno-ia64.bk/xen/linux-2.6.7/arch/ia64/kernel/entry.S
2005-01-23 13:23:36.000000000 -0700
-+++ /home/djm/src/xen/xeno-ia64.bk/xen/arch/ia64/entry.S 2004-12-17
13:47:03.000000000 -0700
+--- ../../linux-2.6.7/arch/ia64/kernel/entry.S 2005-03-24 19:39:56.000000000
-0700
++++ arch/ia64/entry.S 2005-04-01 12:56:01.000000000 -0700
@@ -35,7 +35,9 @@
#include <asm/asmmacro.h>
@@ -46,7 +46,7 @@
mov r27=IA64_KR(CURRENT_STACK)
adds r21=IA64_TASK_THREAD_KSP_OFFSET,in0
- dep r20=0,in0,61,3 // physical address of "current"
-+ dep r20=0,in0,50,14 // physical address of "current"
++ dep r20=0,in0,60,4 // physical address of "current"
;;
st8 [r22]=sp // save kernel stack pointer of old task
shr.u r26=r20,IA64_GRANULE_SHIFT
diff -Nru a/xen/arch/ia64/patch/linux-2.6.7/head.S
b/xen/arch/ia64/patch/linux-2.6.7/head.S
--- a/xen/arch/ia64/patch/linux-2.6.7/head.S 2005-04-01 19:03:16 -05:00
+++ b/xen/arch/ia64/patch/linux-2.6.7/head.S 2005-04-01 19:03:16 -05:00
@@ -1,5 +1,5 @@
---- /home/djm/src/xen/xeno-ia64.bk/xen/linux-2.6.7/arch/ia64/kernel/head.S
2005-01-23 13:23:36.000000000 -0700
-+++ /home/djm/src/xen/xeno-ia64.bk/xen/arch/ia64/head.S 2004-12-17
13:47:03.000000000 -0700
+--- ../../linux-2.6.7/arch/ia64/kernel/head.S 2005-03-24 19:39:56.000000000
-0700
++++ arch/ia64/head.S 2005-04-01 12:56:01.000000000 -0700
@@ -1,3 +1,8 @@
+#ifdef XEN
+#define console_print printf
@@ -14,7 +14,7 @@
;;
or r18=r17,r18
+#ifdef XEN
-+ dep r2=-1,r3,50,14 // IMVA of task
++ dep r2=-1,r3,60,4 // IMVA of task
+#else
dep r2=-1,r3,61,3 // IMVA of task
+#endif
@@ -26,7 +26,7 @@
mov ar.rsc=0x3 // place RSE in eager mode
+#ifdef XEN
-+(isBP) dep r28=-1,r28,50,14 // make address virtual
++(isBP) dep r28=-1,r28,60,4 // make address virtual
+#else
(isBP) dep r28=-1,r28,61,3 // make address virtual
+#endif
@@ -69,8 +69,8 @@
dep r3=0,r3,KERNEL_TR_PAGE_SHIFT,64-KERNEL_TR_PAGE_SHIFT
dep r14=0,r14,KERNEL_TR_PAGE_SHIFT,64-KERNEL_TR_PAGE_SHIFT
+#ifdef XEN
-+ dep r17=-1,r17,50,14
-+ dep sp=-1,sp,50,14
++ dep r17=-1,r17,60,4
++ dep sp=-1,sp,60,4
+#else
dep r17=-1,r17,61,3
dep sp=-1,sp,61,3
diff -Nru a/xen/arch/ia64/patch/linux-2.6.7/ivt.S
b/xen/arch/ia64/patch/linux-2.6.7/ivt.S
--- a/xen/arch/ia64/patch/linux-2.6.7/ivt.S 2005-04-01 19:03:16 -05:00
+++ b/xen/arch/ia64/patch/linux-2.6.7/ivt.S 2005-04-01 19:03:16 -05:00
@@ -1,5 +1,5 @@
--- ../../linux-2.6.7/arch/ia64/kernel/ivt.S 2004-06-15 23:18:59.000000000
-0600
-+++ arch/ia64/ivt.S 2005-03-28 20:16:02.000000000 -0700
++++ arch/ia64/ivt.S 2005-04-01 12:56:01.000000000 -0700
@@ -1,3 +1,21 @@
+
+#ifdef XEN
@@ -99,10 +99,10 @@
+#ifdef XEN
+ ;;
+ // FIXME: inadequate test, this is where we test for Xen address
-+ // note that 0xfffc (cached) and 0xdffc (uncached) addresses
++ // note that 0xf000 (cached) and 0xd000 (uncached) addresses
+ // should be OK. (Though no I/O is done in Xen, EFI needs uncached
+ // addresses and some domain EFI calls are passed through)
-+ tbit.nz p0,p8=r16,50
++ tbit.nz p0,p8=r16,60
+(p8) br.cond.spnt page_fault
+//(p8) br.cond.spnt 0
+ ;;
diff -Nru a/xen/arch/ia64/patch/linux-2.6.7/mca_asm.h
b/xen/arch/ia64/patch/linux-2.6.7/mca_asm.h
--- /dev/null Wed Dec 31 16:00:00 196900
+++ b/xen/arch/ia64/patch/linux-2.6.7/mca_asm.h 2005-04-01 19:03:16 -05:00
@@ -0,0 +1,32 @@
+--- ../../linux-2.6.7/include/asm-ia64/mca_asm.h 2004-06-15
23:20:03.000000000 -0600
++++ include/asm-ia64/mca_asm.h 2005-04-01 12:56:37.000000000 -0700
+@@ -26,8 +26,13 @@
+ * direct mapped to physical addresses.
+ * 1. Lop off bits 61 thru 63 in the virtual address
+ */
++#ifdef XEN
++#define INST_VA_TO_PA(addr)
\
++ dep addr = 0, addr, 60, 4
++#else // XEN
+ #define INST_VA_TO_PA(addr)
\
+ dep addr = 0, addr, 61, 3
++#endif // XEN
+ /*
+ * This macro converts a data virtual address to a physical address
+ * Right now for simulation purposes the virtual addresses are
+@@ -42,9 +47,15 @@
+ * direct mapped to physical addresses.
+ * 1. Put 0x7 in bits 61 thru 63.
+ */
++#ifdef XEN
++#define DATA_PA_TO_VA(addr,temp)
\
++ mov temp = 0xf ;;
\
++ dep addr = temp, addr, 60, 4
++#else // XEN
+ #define DATA_PA_TO_VA(addr,temp)
\
+ mov temp = 0x7 ;;
\
+ dep addr = temp, addr, 61, 3
++#endif // XEN
+
+ /*
+ * This macro jumps to the instruction at the given virtual address
diff -Nru a/xen/arch/ia64/patch/linux-2.6.7/minstate.h
b/xen/arch/ia64/patch/linux-2.6.7/minstate.h
--- a/xen/arch/ia64/patch/linux-2.6.7/minstate.h 2005-04-01 19:03:16
-05:00
+++ b/xen/arch/ia64/patch/linux-2.6.7/minstate.h 2005-04-01 19:03:16
-05:00
@@ -1,14 +1,29 @@
---- /home/djm/src/xen/xeno-ia64.bk/xen/linux-2.6.7/arch/ia64/kernel/minstate.h
2004-06-15 23:19:52.000000000 -0600
-+++ /home/djm/src/xen/xeno-ia64.bk/xen/arch/ia64/minstate.h 2004-12-15
16:36:00.000000000 -0700
-@@ -3,6 +3,11 @@
- #include <asm/cache.h>
+--- ../../linux-2.6.7/arch/ia64/kernel/minstate.h 2004-06-15
23:19:52.000000000 -0600
++++ arch/ia64/minstate.h 2005-04-01 12:56:01.000000000 -0700
+@@ -45,7 +45,7 @@
+ (pKStk) tpa r1=sp; /* compute physical addr of sp
*/ \
+ (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,61,3; /* compute kernel
virtual addr of RBS */ \
++(pUStk) dep r22=-1,r22,60,4; /* compute kernel
virtual addr of RBS */ \
+ ;;
\
+ (pKStk) addl r1=-IA64_PT_REGS_SIZE,r1; /* if in kernel mode,
use sp (r12) */ \
+ (pUStk) mov ar.bspstore=r22; /* switch to kernel RBS
*/ \
+@@ -65,7 +65,7 @@
+ #endif
- #include "entry.h"
-+#ifdef XEN
-+//this can be removed when offsets.h is properly generated
-+#undef IA64_TASK_THREAD_ON_USTACK_OFFSET
-+#define IA64_TASK_THREAD_ON_USTACK_OFFSET 0x34
-+#endif
-
- /*
- * For ivt.s we want to access the stack virtually so we don't have to
disable translation
+ #ifdef MINSTATE_PHYS
+-# define MINSTATE_GET_CURRENT(reg) mov reg=IA64_KR(CURRENT);; dep
reg=0,reg,61,3
++# define MINSTATE_GET_CURRENT(reg) mov reg=IA64_KR(CURRENT);; dep
reg=0,reg,60,4
+ # define MINSTATE_START_SAVE_MIN MINSTATE_START_SAVE_MIN_PHYS
+ # define MINSTATE_END_SAVE_MIN MINSTATE_END_SAVE_MIN_PHYS
+ #endif
+@@ -172,7 +172,7 @@
+ ;;
\
+ .mem.offset 0,0; st8.spill [r16]=r15,16;
\
+ .mem.offset 8,0; st8.spill [r17]=r14,16;
\
+- dep r14=-1,r0,61,3;
\
++ dep r14=-1,r0,60,4;
\
+ ;;
\
+ .mem.offset 0,0; st8.spill [r16]=r2,16;
\
+ .mem.offset 8,0; st8.spill [r17]=r3,16;
\
diff -Nru a/xen/arch/ia64/patch/linux-2.6.7/page.h
b/xen/arch/ia64/patch/linux-2.6.7/page.h
--- a/xen/arch/ia64/patch/linux-2.6.7/page.h 2005-04-01 19:03:16 -05:00
+++ b/xen/arch/ia64/patch/linux-2.6.7/page.h 2005-04-01 19:03:16 -05:00
@@ -1,5 +1,5 @@
--- ../../linux-2.6.7/include/asm-ia64/page.h 2004-06-15 23:18:58.000000000
-0600
-+++ include/asm-ia64/page.h 2005-03-23 14:54:11.000000000 -0700
++++ include/asm-ia64/page.h 2005-04-01 12:56:37.000000000 -0700
@@ -12,6 +12,9 @@
#include <asm/intrinsics.h>
#include <asm/types.h>
@@ -43,8 +43,8 @@
+#ifdef XEN
+typedef union xen_va {
+ struct {
-+ unsigned long off : 50;
-+ unsigned long reg : 14;
++ unsigned long off : 60;
++ unsigned long reg : 4;
+ } f;
+ unsigned long l;
+ void *p;
@@ -67,7 +67,7 @@
#endif /* !STRICT_MM_TYPECHECKS */
+#ifdef XEN
-+#define PAGE_OFFSET 0xfffc000000000000
++#define PAGE_OFFSET 0xf000000000000000
+#else
#define PAGE_OFFSET 0xe000000000000000
+#endif
diff -Nru a/xen/arch/ia64/patch/linux-2.6.7/pal.S
b/xen/arch/ia64/patch/linux-2.6.7/pal.S
--- /dev/null Wed Dec 31 16:00:00 196900
+++ b/xen/arch/ia64/patch/linux-2.6.7/pal.S 2005-04-01 19:03:16 -05:00
@@ -0,0 +1,26 @@
+--- ../../linux-2.6.7/arch/ia64/kernel/pal.S 2004-06-15 23:20:25.000000000
-0600
++++ arch/ia64/pal.S 2005-04-01 12:56:01.000000000 -0700
+@@ -163,7 +163,11 @@
+ adds r8 = 1f-1b,r8 // calculate return address for call
+ ;;
+ mov loc4=ar.rsc // save RSE configuration
++#ifdef XEN
++ dep.z loc2=loc2,0,60 // convert pal entry point to physical
++#else // XEN
+ dep.z loc2=loc2,0,61 // convert pal entry point to physical
++#endif // XEN
+ tpa r8=r8 // convert rp to physical
+ ;;
+ mov b7 = loc2 // install target to branch reg
+@@ -218,7 +222,11 @@
+ mov loc3 = psr // save psr
+ ;;
+ mov loc4=ar.rsc // save RSE configuration
++#ifdef XEN
++ dep.z loc2=loc2,0,60 // convert pal entry point to physical
++#else // XEN
+ dep.z loc2=loc2,0,61 // convert pal entry point to physical
++#endif // XEN
+ ;;
+ mov ar.rsc=0 // put RSE in enforced lazy, LE mode
+ movl r16=PAL_PSR_BITS_TO_CLEAR
diff -Nru a/xen/arch/ia64/patch/linux-2.6.7/system.h
b/xen/arch/ia64/patch/linux-2.6.7/system.h
--- a/xen/arch/ia64/patch/linux-2.6.7/system.h 2005-04-01 19:03:16 -05:00
+++ b/xen/arch/ia64/patch/linux-2.6.7/system.h 2005-04-01 19:03:16 -05:00
@@ -1,15 +1,15 @@
---- ../../linux-2.6.7/include/asm-ia64/system.h 2005-01-31
11:15:23.000000000 -0700
-+++ include/asm-ia64/system.h 2005-03-14 11:31:12.000000000 -0700
+--- ../../linux-2.6.7/include/asm-ia64/system.h 2005-03-24
19:39:56.000000000 -0700
++++ include/asm-ia64/system.h 2005-04-01 12:56:37.000000000 -0700
@@ -24,8 +24,16 @@
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|