# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID 2b95125015a59eeb086b3748f9415ac440133b4d
# Parent 5978be010beca73a6b88ae68d2e120c531bb0edd
Remove the unused ia64 patch directory.
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.11/cpumask.h
--- a/xen/arch/ia64/patch/linux-2.6.11/cpumask.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,12 +0,0 @@
---- ../../linux-2.6.11/include/linux/cpumask.h 2005-03-02 00:38:00.000000000
-0700
-+++ include/asm-ia64/linux/cpumask.h 2005-04-28 13:21:20.000000000 -0600
-@@ -342,7 +342,9 @@
- */
-
- extern cpumask_t cpu_possible_map;
-+#ifndef XEN
- extern cpumask_t cpu_online_map;
-+#endif
- extern cpumask_t cpu_present_map;
-
- #if NR_CPUS > 1
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.11/efi.c
--- a/xen/arch/ia64/patch/linux-2.6.11/efi.c Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,50 +0,0 @@
---- ../../linux-2.6.11/arch/ia64/kernel/efi.c 2005-03-02 00:37:47.000000000
-0700
-+++ arch/ia64/efi.c 2005-06-09 06:15:36.000000000 -0600
-@@ -320,6 +320,16 @@
- if (!(md->attribute & EFI_MEMORY_WB))
- continue;
-
-+#ifdef XEN
-+// this works around a problem in the ski bootloader
-+{
-+ extern long running_on_sim;
-+ if (running_on_sim && md->type != EFI_CONVENTIONAL_MEMORY)
-+ continue;
-+}
-+// this is a temporary hack to avoid CONFIG_VIRTUAL_MEM_MAP
-+ if (md->phys_addr >= 0x100000000) continue;
-+#endif
- /*
- * granule_addr is the base of md's first granule.
- * [granule_addr - first_non_wb_addr) is guaranteed to
-@@ -719,6 +729,30 @@
- return 0;
- }
-
-+#ifdef XEN
-+// variation of efi_get_iobase which returns entire memory descriptor
-+efi_memory_desc_t *
-+efi_get_io_md (void)
-+{
-+ void *efi_map_start, *efi_map_end, *p;
-+ efi_memory_desc_t *md;
-+ u64 efi_desc_size;
-+
-+ efi_map_start = __va(ia64_boot_param->efi_memmap);
-+ efi_map_end = efi_map_start + ia64_boot_param->efi_memmap_size;
-+ efi_desc_size = ia64_boot_param->efi_memdesc_size;
-+
-+ for (p = efi_map_start; p < efi_map_end; p += efi_desc_size) {
-+ md = p;
-+ if (md->type == EFI_MEMORY_MAPPED_IO_PORT_SPACE) {
-+ if (md->attribute & EFI_MEMORY_UC)
-+ return md;
-+ }
-+ }
-+ return 0;
-+}
-+#endif
-+
- u32
- efi_mem_type (unsigned long phys_addr)
- {
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.11/entry.S
--- a/xen/arch/ia64/patch/linux-2.6.11/entry.S Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,237 +0,0 @@
---- ../../linux-2.6.11/arch/ia64/kernel/entry.S 2005-03-02
00:37:50.000000000 -0700
-+++ arch/ia64/entry.S 2005-05-23 16:49:23.000000000 -0600
-@@ -46,6 +46,7 @@
-
- #include "minstate.h"
-
-+#ifndef XEN
- /*
- * execve() is special because in case of success, we need to
- * setup a null register window frame.
-@@ -174,6 +175,7 @@
- mov rp=loc0
- br.ret.sptk.many rp
- END(sys_clone)
-+#endif /* !XEN */
-
- /*
- * prev_task <- ia64_switch_to(struct task_struct *next)
-@@ -191,7 +193,11 @@
- movl r25=init_task
- mov r27=IA64_KR(CURRENT_STACK)
- adds r21=IA64_TASK_THREAD_KSP_OFFSET,in0
-+#ifdef XEN
-+ dep r20=0,in0,60,4 // physical address of "next"
-+#else
- dep r20=0,in0,61,3 // physical address of "next"
-+#endif
- ;;
- st8 [r22]=sp // save kernel stack pointer of old task
- shr.u r26=r20,IA64_GRANULE_SHIFT
-@@ -220,6 +226,16 @@
- br.ret.sptk.many rp // boogie on out in new context
-
- .map:
-+#ifdef XEN
-+ // avoid overlapping with kernel TR
-+ movl r25=KERNEL_START
-+ dep r23=0,in0,0,KERNEL_TR_PAGE_SHIFT
-+ ;;
-+ cmp.eq p7,p0=r25,r23
-+ ;;
-+(p7) mov IA64_KR(CURRENT_STACK)=r26 // remember last page we mapped...
-+(p7) br.cond.sptk .done
-+#endif
- rsm psr.ic // interrupts (psr.i) are already
disabled here
- movl r25=PAGE_KERNEL
- ;;
-@@ -376,7 +392,11 @@
- * - b7 holds address to return to
- * - must not touch r8-r11
- */
-+#ifdef XEN
-+GLOBAL_ENTRY(load_switch_stack)
-+#else
- ENTRY(load_switch_stack)
-+#endif
- .prologue
- .altrp b7
-
-@@ -470,6 +490,7 @@
- br.cond.sptk.many b7
- END(load_switch_stack)
-
-+#ifndef XEN
- GLOBAL_ENTRY(__ia64_syscall)
- .regstk 6,0,0,0
- mov r15=in5 // put syscall number in place
-@@ -588,6 +609,7 @@
- }
- .ret4: br.cond.sptk ia64_leave_kernel
- END(ia64_strace_leave_kernel)
-+#endif
-
- GLOBAL_ENTRY(ia64_ret_from_clone)
- PT_REGS_UNWIND_INFO(0)
-@@ -604,6 +626,15 @@
- */
- br.call.sptk.many rp=ia64_invoke_schedule_tail
- }
-+#ifdef XEN
-+ // new domains are cloned but not exec'ed so switch to user mode here
-+ cmp.ne pKStk,pUStk=r0,r0
-+#ifdef CONFIG_VTI
-+ br.cond.spnt ia64_leave_hypervisor
-+#else // CONFIG_VTI
-+ br.cond.spnt ia64_leave_kernel
-+#endif // CONFIG_VTI
-+#else
- .ret8:
- adds r2=TI_FLAGS+IA64_TASK_SIZE,r13
- ;;
-@@ -614,6 +645,7 @@
- ;;
- cmp.ne p6,p0=r2,r0
- (p6) br.cond.spnt .strace_check_retval
-+#endif
- ;; // added stop bits to prevent
r8 dependency
- END(ia64_ret_from_clone)
- // fall through
-@@ -700,19 +732,27 @@
- .work_processed_syscall:
- adds r2=PT(LOADRS)+16,r12
- adds r3=PT(AR_BSPSTORE)+16,r12
-+#ifdef XEN
-+ ;;
-+#else
- adds r18=TI_FLAGS+IA64_TASK_SIZE,r13
- ;;
- (p6) ld4 r31=[r18] // load
current_thread_info()->flags
-+#endif
- ld8 r19=[r2],PT(B6)-PT(LOADRS) // load ar.rsc value for
"loadrs"
- mov b7=r0 // clear b7
- ;;
- ld8 r23=[r3],PT(R11)-PT(AR_BSPSTORE) // load ar.bspstore (may be
garbage)
- ld8 r18=[r2],PT(R9)-PT(B6) // load b6
-+#ifndef XEN
- (p6) and r15=TIF_WORK_MASK,r31 // any work other than
TIF_SYSCALL_TRACE?
-+#endif
- ;;
- mov r16=ar.bsp // M2 get existing backing
store pointer
-+#ifndef XEN
- (p6) cmp4.ne.unc p6,p0=r15, r0 // any special work pending?
- (p6) br.cond.spnt .work_pending_syscall
-+#endif
- ;;
- // start restoring the state saved on the kernel stack (struct pt_regs):
- ld8 r9=[r2],PT(CR_IPSR)-PT(R9)
-@@ -757,7 +797,11 @@
- ;;
- ld8.fill r12=[r2] // restore r12 (sp)
- ld8.fill r15=[r3] // restore r15
-+#ifdef XEN
-+ movl r3=THIS_CPU(ia64_phys_stacked_size_p8)
-+#else
- addl r3=THIS_CPU(ia64_phys_stacked_size_p8),r0
-+#endif
- ;;
- (pUStk) ld4 r3=[r3] // r3 = cpu_data->phys_stacked_size_p8
- (pUStk) st1 [r14]=r17
-@@ -814,9 +858,18 @@
- (pUStk) cmp.eq.unc p6,p0=r0,r0 // p6 <- pUStk
- #endif
- .work_processed_kernel:
-+#ifdef XEN
-+ alloc loc0=ar.pfs,0,1,1,0
-+ adds out0=16,r12
-+ ;;
-+(p6) br.call.sptk.many b0=deliver_pending_interrupt
-+ mov ar.pfs=loc0
-+ mov r31=r0
-+#else
- adds r17=TI_FLAGS+IA64_TASK_SIZE,r13
- ;;
- (p6) ld4 r31=[r17] // load
current_thread_info()->flags
-+#endif
- adds r21=PT(PR)+16,r12
- ;;
-
-@@ -828,17 +881,20 @@
- ld8 r28=[r2],8 // load b6
- adds r29=PT(R24)+16,r12
-
-- ld8.fill r16=[r3],PT(AR_CSD)-PT(R16)
-+ ld8.fill r16=[r3]
- adds r30=PT(AR_CCV)+16,r12
- (p6) and r19=TIF_WORK_MASK,r31 // any work other than
TIF_SYSCALL_TRACE?
- ;;
-+ adds r3=PT(AR_CSD)-PT(R16),r3
- ld8.fill r24=[r29]
- ld8 r15=[r30] // load ar.ccv
- (p6) cmp4.ne.unc p6,p0=r19, r0 // any special work pending?
- ;;
- ld8 r29=[r2],16 // load b7
- ld8 r30=[r3],16 // load ar.csd
-+#ifndef XEN
- (p6) br.cond.spnt .work_pending
-+#endif
- ;;
- ld8 r31=[r2],16 // load ar.ssd
- ld8.fill r8=[r3],16
-@@ -934,7 +990,11 @@
- shr.u r18=r19,16 // get byte size of existing "dirty" partition
- ;;
- mov r16=ar.bsp // get existing backing store pointer
-+#ifdef XEN
-+ movl r17=THIS_CPU(ia64_phys_stacked_size_p8)
-+#else
- addl r17=THIS_CPU(ia64_phys_stacked_size_p8),r0
-+#endif
- ;;
- ld4 r17=[r17] // r17 = cpu_data->phys_stacked_size_p8
- (pKStk) br.cond.dpnt skip_rbs_switch
-@@ -1069,6 +1129,7 @@
- mov pr=r31,-1 // I0
- rfi // B
-
-+#ifndef XEN
- /*
- * On entry:
- * r20 = ¤t->thread_info->pre_count (if CONFIG_PREEMPT)
-@@ -1130,6 +1191,7 @@
- ld8 r8=[r2]
- ld8 r10=[r3]
- br.cond.sptk.many .work_processed_syscall // re-check
-+#endif
-
- END(ia64_leave_kernel)
-
-@@ -1166,6 +1228,7 @@
- br.ret.sptk.many rp
- END(ia64_invoke_schedule_tail)
-
-+#ifndef XEN
- /*
- * Setup stack and call do_notify_resume_user(). Note that pSys and
pNonSys need to
- * be set up by the caller. We declare 8 input registers so the system
call
-@@ -1264,6 +1327,7 @@
- mov ar.unat=r9
- br.many b7
- END(sys_rt_sigreturn)
-+#endif
-
- GLOBAL_ENTRY(ia64_prepare_handle_unaligned)
- .prologue
-@@ -1278,6 +1342,7 @@
- br.cond.sptk.many rp // goes to
ia64_leave_kernel
- END(ia64_prepare_handle_unaligned)
-
-+#ifndef XEN
- //
- // unw_init_running(void (*callback)(info, arg), void *arg)
- //
-@@ -1585,3 +1650,4 @@
- data8 sys_ni_syscall
-
- .org sys_call_table + 8*NR_syscalls // guard against failures to
increase NR_syscalls
-+#endif
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.11/entry.h
--- a/xen/arch/ia64/patch/linux-2.6.11/entry.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,37 +0,0 @@
----
/home/adsharma/disk2/xen-ia64/test3.bk/xen/../../linux-2.6.11/arch/ia64/kernel/entry.h
2005-03-01 23:38:07.000000000 -0800
-+++ /home/adsharma/disk2/xen-ia64/test3.bk/xen/arch/ia64/entry.h
2005-05-18 14:00:53.000000000 -0700
-@@ -7,6 +7,12 @@
- #define PRED_LEAVE_SYSCALL 1 /* TRUE iff leave from syscall */
- #define PRED_KERNEL_STACK 2 /* returning to kernel-stacks? */
- #define PRED_USER_STACK 3 /* returning to user-stacks? */
-+#ifdef CONFIG_VTI
-+#define PRED_EMUL 2 /* Need to save r4-r7 for inst emulation */
-+#define PRED_NON_EMUL 3 /* No need to save r4-r7 for normal path */
-+#define PRED_BN0 6 /* Guest is in bank 0 */
-+#define PRED_BN1 7 /* Guest is in bank 1 */
-+#endif // CONFIG_VTI
- #define PRED_SYSCALL 4 /* inside a system call? */
- #define PRED_NON_SYSCALL 5 /* complement of PRED_SYSCALL */
-
-@@ -17,12 +23,21 @@
- # define pLvSys PASTE(p,PRED_LEAVE_SYSCALL)
- # define pKStk PASTE(p,PRED_KERNEL_STACK)
- # define pUStk PASTE(p,PRED_USER_STACK)
-+#ifdef CONFIG_VTI
-+# define pEml PASTE(p,PRED_EMUL)
-+# define pNonEml PASTE(p,PRED_NON_EMUL)
-+# define pBN0 PASTE(p,PRED_BN0)
-+# define pBN1 PASTE(p,PRED_BN1)
-+#endif // CONFIG_VTI
- # define pSys PASTE(p,PRED_SYSCALL)
- # define pNonSys PASTE(p,PRED_NON_SYSCALL)
- #endif
-
- #define PT(f) (IA64_PT_REGS_##f##_OFFSET)
- #define SW(f) (IA64_SWITCH_STACK_##f##_OFFSET)
-+#ifdef CONFIG_VTI
-+#define VPD(f) (VPD_##f##_START_OFFSET)
-+#endif // CONFIG_VTI
-
- #define PT_REGS_SAVES(off) \
- .unwabi 3, 'i'; \
diff -r 5978be010bec -r 2b95125015a5
xen/arch/ia64/patch/linux-2.6.11/gcc_intrin.h
--- a/xen/arch/ia64/patch/linux-2.6.11/gcc_intrin.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,69 +0,0 @@
----
/home/adsharma/disk2/xen-ia64/test3.bk/xen/../../linux-2.6.11/include/asm-ia64/gcc_intrin.h
2005-03-01 23:38:08.000000000 -0800
-+++ /home/adsharma/disk2/xen-ia64/test3.bk/xen/include/asm-ia64/gcc_intrin.h
2005-05-18 14:00:53.000000000 -0700
-@@ -368,6 +368,66 @@
- #define ia64_mf() asm volatile ("mf" ::: "memory")
- #define ia64_mfa() asm volatile ("mf.a" ::: "memory")
-
-+#ifdef CONFIG_VTI
-+/*
-+ * Flushrs instruction stream.
-+ */
-+#define ia64_flushrs() asm volatile ("flushrs;;":::"memory")
-+
-+#define ia64_loadrs() asm volatile ("loadrs;;":::"memory")
-+
-+#define ia64_get_rsc() \
-+({ \
-+ unsigned long val; \
-+ asm volatile ("mov %0=ar.rsc;;" : "=r"(val) :: "memory"); \
-+ val; \
-+})
-+
-+#define ia64_set_rsc(val) \
-+ asm volatile ("mov ar.rsc=%0;;" :: "r"(val) : "memory")
-+
-+#define ia64_get_bspstore() \
-+({ \
-+ unsigned long val; \
-+ asm volatile ("mov %0=ar.bspstore;;" : "=r"(val) :: "memory"); \
-+ val; \
-+})
-+
-+#define ia64_set_bspstore(val) \
-+ asm volatile ("mov ar.bspstore=%0;;" :: "r"(val) : "memory")
-+
-+#define ia64_get_rnat() \
-+({ \
-+ unsigned long val; \
-+ asm volatile ("mov %0=ar.rnat;" : "=r"(val) :: "memory"); \
-+ val; \
-+})
-+
-+#define ia64_set_rnat(val) \
-+ asm volatile ("mov ar.rnat=%0;;" :: "r"(val) : "memory")
-+
-+#define ia64_ttag(addr)
\
-+({
\
-+ __u64 ia64_intri_res;
\
-+ asm volatile ("ttag %0=%1" : "=r"(ia64_intri_res) : "r" (addr));
\
-+ ia64_intri_res;
\
-+})
-+
-+#define ia64_get_dcr() \
-+({ \
-+ __u64 result; \
-+ asm volatile ("mov %0=cr.dcr" : "=r"(result) : ); \
-+ result; \
-+})
-+
-+#define ia64_set_dcr(val) \
-+({ \
-+ asm volatile ("mov cr.dcr=%0" :: "r"(val) ); \
-+})
-+
-+#endif // CONFIG_VTI
-+
-+
- #define ia64_invala() asm volatile ("invala" ::: "memory")
-
- #define ia64_thash(addr)
\
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.11/hardirq.h
--- a/xen/arch/ia64/patch/linux-2.6.11/hardirq.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,14 +0,0 @@
---- ../../linux-2.6.11/include/linux/hardirq.h 2005-03-02 00:38:00.000000000
-0700
-+++ include/asm-ia64/linux/hardirq.h 2005-04-28 16:34:39.000000000 -0600
-@@ -60,7 +60,11 @@
- */
- #define in_irq() (hardirq_count())
- #define in_softirq() (softirq_count())
-+#ifndef XEN
- #define in_interrupt() (irq_count())
-+#else
-+#define in_interrupt() 0 // FIXME LATER
-+#endif
-
- #if defined(CONFIG_PREEMPT) && !defined(CONFIG_PREEMPT_BKL)
- # define in_atomic() ((preempt_count() & ~PREEMPT_ACTIVE) != kernel_locked())
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.11/head.S
--- a/xen/arch/ia64/patch/linux-2.6.11/head.S Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,120 +0,0 @@
----
/home/adsharma/disk2/xen-ia64/xeno-unstable-rebase.bk/xen/../../linux-2.6.11/arch/ia64/kernel/head.S
2005-03-01 23:38:13.000000000 -0800
-+++ /home/adsharma/disk2/xen-ia64/xeno-unstable-rebase.bk/xen/arch/ia64/head.S
2005-05-18 12:40:50.000000000 -0700
-@@ -76,21 +76,21 @@
- * We initialize all of them to prevent inadvertently assuming
- * something about the state of address translation early in boot.
- */
-- mov r6=((ia64_rid(IA64_REGION_ID_KERNEL, (0<<61)) << 8) | (PAGE_SHIFT
<< 2) | 1)
-+ movl r6=((ia64_rid(IA64_REGION_ID_KERNEL, (0<<61)) << 8) | (PAGE_SHIFT
<< 2) | 1)
- movl r7=(0<<61)
-- mov r8=((ia64_rid(IA64_REGION_ID_KERNEL, (1<<61)) << 8) | (PAGE_SHIFT
<< 2) | 1)
-+ movl r8=((ia64_rid(IA64_REGION_ID_KERNEL, (1<<61)) << 8) | (PAGE_SHIFT
<< 2) | 1)
- movl r9=(1<<61)
-- mov r10=((ia64_rid(IA64_REGION_ID_KERNEL, (2<<61)) << 8) | (PAGE_SHIFT
<< 2) | 1)
-+ movl r10=((ia64_rid(IA64_REGION_ID_KERNEL, (2<<61)) << 8) | (PAGE_SHIFT
<< 2) | 1)
- movl r11=(2<<61)
-- mov r12=((ia64_rid(IA64_REGION_ID_KERNEL, (3<<61)) << 8) | (PAGE_SHIFT
<< 2) | 1)
-+ movl r12=((ia64_rid(IA64_REGION_ID_KERNEL, (3<<61)) << 8) | (PAGE_SHIFT
<< 2) | 1)
- movl r13=(3<<61)
-- mov r14=((ia64_rid(IA64_REGION_ID_KERNEL, (4<<61)) << 8) | (PAGE_SHIFT
<< 2) | 1)
-+ movl r14=((ia64_rid(IA64_REGION_ID_KERNEL, (4<<61)) << 8) | (PAGE_SHIFT
<< 2) | 1)
- movl r15=(4<<61)
-- mov r16=((ia64_rid(IA64_REGION_ID_KERNEL, (5<<61)) << 8) | (PAGE_SHIFT
<< 2) | 1)
-+ movl r16=((ia64_rid(IA64_REGION_ID_KERNEL, (5<<61)) << 8) | (PAGE_SHIFT
<< 2) | 1)
- movl r17=(5<<61)
-- mov r18=((ia64_rid(IA64_REGION_ID_KERNEL, (6<<61)) << 8) |
(IA64_GRANULE_SHIFT << 2))
-+ movl r18=((ia64_rid(IA64_REGION_ID_KERNEL, (6<<61)) << 8) |
(IA64_GRANULE_SHIFT << 2))
- movl r19=(6<<61)
-- mov r20=((ia64_rid(IA64_REGION_ID_KERNEL, (7<<61)) << 8) |
(IA64_GRANULE_SHIFT << 2))
-+ movl r20=((ia64_rid(IA64_REGION_ID_KERNEL, (7<<61)) << 8) |
(IA64_GRANULE_SHIFT << 2))
- movl r21=(7<<61)
- ;;
- mov rr[r7]=r6
-@@ -129,8 +129,13 @@
- /*
- * Switch into virtual mode:
- */
-+#ifdef CONFIG_VTI
-+ movl r16=(IA64_PSR_IT|IA64_PSR_IC|IA64_PSR_DT|IA64_PSR_RT|IA64_PSR_DFH \
-+ |IA64_PSR_DI)
-+#else // CONFIG_VTI
- movl
r16=(IA64_PSR_IT|IA64_PSR_IC|IA64_PSR_DT|IA64_PSR_RT|IA64_PSR_DFH|IA64_PSR_BN \
- |IA64_PSR_DI)
-+#endif // CONFIG_VTI
- ;;
- mov cr.ipsr=r16
- movl r17=1f
-@@ -143,7 +148,11 @@
- 1: // now we are in virtual mode
-
- // set IVT entry point---can't access I/O ports without it
-+#ifdef CONFIG_VTI
-+ movl r3=vmx_ia64_ivt
-+#else // CONFIG_VTI
- movl r3=ia64_ivt
-+#endif // CONFIG_VTI
- ;;
- mov cr.iva=r3
- movl r2=FPSR_DEFAULT
-@@ -187,7 +196,11 @@
- dep r18=0,r3,0,12
- ;;
- or r18=r17,r18
-+#ifdef XEN
-+ dep r2=-1,r3,60,4 // IMVA of task
-+#else
- dep r2=-1,r3,61,3 // IMVA of task
-+#endif
- ;;
- mov r17=rr[r2]
- shr.u r16=r3,IA64_GRANULE_SHIFT
-@@ -207,8 +220,15 @@
-
- .load_current:
- // load the "current" pointer (r13) and ar.k6 with the current task
-+#ifdef CONFIG_VTI
-+ mov r21=r2 // virtual address
-+ ;;
-+ bsw.1
-+ ;;
-+#else // CONFIG_VTI
- mov IA64_KR(CURRENT)=r2 // virtual address
- mov IA64_KR(CURRENT_STACK)=r16
-+#endif // CONFIG_VTI
- mov r13=r2
- /*
- * Reserve space at the top of the stack for "struct pt_regs". Kernel
threads
-@@ -227,7 +247,11 @@
- ;;
- mov ar.rsc=0x3 // place RSE in eager mode
-
-+#ifdef XEN
-+(isBP) dep r28=-1,r28,60,4 // make address virtual
-+#else
- (isBP) dep r28=-1,r28,61,3 // make address virtual
-+#endif
- (isBP) movl r2=ia64_boot_param
- ;;
- (isBP) st8 [r2]=r28 // save the address of the boot param
area passed by the bootloader
-@@ -254,7 +278,9 @@
- br.call.sptk.many b0=console_print
-
- self: hint @pause
-+ ;;
- br.sptk.many self // endless loop
-+ ;;
- END(_start)
-
- GLOBAL_ENTRY(ia64_save_debug_regs)
-@@ -850,7 +876,11 @@
- * intermediate precision so that we can produce a full 64-bit result.
- */
- GLOBAL_ENTRY(sched_clock)
-+#ifdef XEN
-+ movl r8=THIS_CPU(cpu_info) + IA64_CPUINFO_NSEC_PER_CYC_OFFSET
-+#else
- addl r8=THIS_CPU(cpu_info) + IA64_CPUINFO_NSEC_PER_CYC_OFFSET,r0
-+#endif
- mov.m r9=ar.itc // fetch cycle-counter
(35 cyc)
- ;;
- ldf8 f8=[r8]
diff -r 5978be010bec -r 2b95125015a5
xen/arch/ia64/patch/linux-2.6.11/hpsim_ssc.h
--- a/xen/arch/ia64/patch/linux-2.6.11/hpsim_ssc.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,26 +0,0 @@
----
/home/adsharma/disk2/xen-ia64/xeno-unstable-rebase.bk/xen/../../linux-2.6.11/arch/ia64/hp/sim/hpsim_ssc.h
2005-03-01 23:38:17.000000000 -0800
-+++
/home/adsharma/disk2/xen-ia64/xeno-unstable-rebase.bk/xen/include/asm-ia64/hpsim_ssc.h
2005-05-18 12:40:19.000000000 -0700
-@@ -33,4 +33,23 @@
- */
- extern long ia64_ssc (long arg0, long arg1, long arg2, long arg3, int nr);
-
-+#ifdef XEN
-+/* Note: These are declared in linux/arch/ia64/hp/sim/simscsi.c but belong
-+ * in linux/include/asm-ia64/hpsim_ssc.h, hence their addition here */
-+#define SSC_OPEN 50
-+#define SSC_CLOSE 51
-+#define SSC_READ 52
-+#define SSC_WRITE 53
-+#define SSC_GET_COMPLETION 54
-+#define SSC_WAIT_COMPLETION 55
-+
-+#define SSC_WRITE_ACCESS 2
-+#define SSC_READ_ACCESS 1
-+
-+struct ssc_disk_req {
-+ unsigned long addr;
-+ unsigned long len;
-+};
-+#endif
-+
- #endif /* _IA64_PLATFORM_HPSIM_SSC_H */
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.11/ia64regs.h
--- a/xen/arch/ia64/patch/linux-2.6.11/ia64regs.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,38 +0,0 @@
----
/home/adsharma/disk2/xen-ia64/test3.bk/xen/../../linux-2.6.11/include/asm-ia64/ia64regs.h
2005-03-01 23:38:07.000000000 -0800
-+++ /home/adsharma/disk2/xen-ia64/test3.bk/xen/include/asm-ia64/ia64regs.h
2005-05-18 14:00:53.000000000 -0700
-@@ -87,6 +87,35 @@
- #define _IA64_REG_CR_LRR0 4176
- #define _IA64_REG_CR_LRR1 4177
-
-+#ifdef CONFIG_VTI
-+#define IA64_REG_CR_DCR 0
-+#define IA64_REG_CR_ITM 1
-+#define IA64_REG_CR_IVA 2
-+#define IA64_REG_CR_PTA 8
-+#define IA64_REG_CR_IPSR 16
-+#define IA64_REG_CR_ISR 17
-+#define IA64_REG_CR_IIP 19
-+#define IA64_REG_CR_IFA 20
-+#define IA64_REG_CR_ITIR 21
-+#define IA64_REG_CR_IIPA 22
-+#define IA64_REG_CR_IFS 23
-+#define IA64_REG_CR_IIM 24
-+#define IA64_REG_CR_IHA 25
-+#define IA64_REG_CR_LID 64
-+#define IA64_REG_CR_IVR 65
-+#define IA64_REG_CR_TPR 66
-+#define IA64_REG_CR_EOI 67
-+#define IA64_REG_CR_IRR0 68
-+#define IA64_REG_CR_IRR1 69
-+#define IA64_REG_CR_IRR2 70
-+#define IA64_REG_CR_IRR3 71
-+#define IA64_REG_CR_ITV 72
-+#define IA64_REG_CR_PMV 73
-+#define IA64_REG_CR_CMCV 74
-+#define IA64_REG_CR_LRR0 80
-+#define IA64_REG_CR_LRR1 81
-+#endif // CONFIG_VTI
-+
- /* Indirect Registers for getindreg() and setindreg() */
-
- #define _IA64_REG_INDR_CPUID 9000 /* getindreg only */
diff -r 5978be010bec -r 2b95125015a5
xen/arch/ia64/patch/linux-2.6.11/interrupt.h
--- a/xen/arch/ia64/patch/linux-2.6.11/interrupt.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,27 +0,0 @@
----
/home/adsharma/disk2/xen-ia64/xeno-unstable-rebase.bk/xen/../../linux-2.6.11/include/linux/interrupt.h
2005-03-01 23:38:09.000000000 -0800
-+++
/home/adsharma/disk2/xen-ia64/xeno-unstable-rebase.bk/xen/include/asm-ia64/linux/interrupt.h
2005-05-18 12:40:50.000000000 -0700
-@@ -33,6 +33,7 @@
- #define IRQ_HANDLED (1)
- #define IRQ_RETVAL(x) ((x) != 0)
-
-+#ifndef XEN
- struct irqaction {
- irqreturn_t (*handler)(int, void *, struct pt_regs *);
- unsigned long flags;
-@@ -49,6 +50,7 @@
- irqreturn_t (*handler)(int, void *, struct pt_regs *),
- unsigned long, const char *, void *);
- extern void free_irq(unsigned int, void *);
-+#endif
-
-
- #ifdef CONFIG_GENERIC_HARDIRQS
-@@ -121,7 +123,7 @@
- };
-
- asmlinkage void do_softirq(void);
--extern void open_softirq(int nr, void (*action)(struct softirq_action*), void
*data);
-+//extern void open_softirq(int nr, void (*action)(struct softirq_action*),
void *data);
- extern void softirq_init(void);
- #define __raise_softirq_irqoff(nr) do { local_softirq_pending() |= 1UL <<
(nr); } while (0)
- extern void FASTCALL(raise_softirq_irqoff(unsigned int nr));
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.11/io.h
--- a/xen/arch/ia64/patch/linux-2.6.11/io.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,14 +0,0 @@
----
/home/adsharma/disk2/xen-ia64/xeno-unstable-rebase.bk/xen/../../linux-2.6.11/include/asm-ia64/io.h
2005-03-01 23:38:34.000000000 -0800
-+++
/home/adsharma/disk2/xen-ia64/xeno-unstable-rebase.bk/xen/include/asm-ia64/io.h
2005-05-18 12:40:50.000000000 -0700
-@@ -23,7 +23,11 @@
- #define __SLOW_DOWN_IO do { } while (0)
- #define SLOW_DOWN_IO do { } while (0)
-
-+#ifdef XEN
-+#define __IA64_UNCACHED_OFFSET 0xe800000000000000UL
-+#else
- #define __IA64_UNCACHED_OFFSET 0xc000000000000000UL /* region 6 */
-+#endif
-
- /*
- * The legacy I/O space defined by the ia64 architecture supports only 65536
ports, but
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.11/irq_ia64.c
--- a/xen/arch/ia64/patch/linux-2.6.11/irq_ia64.c Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,126 +0,0 @@
----
/home/adsharma/disk2/xen-ia64/xeno-unstable-rebase.bk/xen/../../linux-2.6.11/arch/ia64/kernel/irq_ia64.c
2005-03-01 23:38:07.000000000 -0800
-+++
/home/adsharma/disk2/xen-ia64/xeno-unstable-rebase.bk/xen/arch/ia64/irq_ia64.c
2005-05-18 12:40:51.000000000 -0700
-@@ -106,6 +106,9 @@
- unsigned long saved_tpr;
-
- #if IRQ_DEBUG
-+#ifdef XEN
-+ xen_debug_irq(vector, regs);
-+#endif
- {
- unsigned long bsp, sp;
-
-@@ -148,6 +151,9 @@
- ia64_setreg(_IA64_REG_CR_TPR, vector);
- ia64_srlz_d();
-
-+#ifdef XEN
-+ if (!xen_do_IRQ(vector))
-+#endif
- __do_IRQ(local_vector_to_irq(vector), regs);
-
- /*
-@@ -167,6 +173,103 @@
- irq_exit();
- }
-
-+#ifdef CONFIG_VTI
-+#define vmx_irq_enter() \
-+ add_preempt_count(HARDIRQ_OFFSET);
-+
-+/* Now softirq will be checked when leaving hypervisor, or else
-+ * scheduler irq will be executed too early.
-+ */
-+#define vmx_irq_exit(void) \
-+ sub_preempt_count(HARDIRQ_OFFSET);
-+/*
-+ * That's where the IVT branches when we get an external
-+ * interrupt. This branches to the correct hardware IRQ handler via
-+ * function ptr.
-+ */
-+void
-+vmx_ia64_handle_irq (ia64_vector vector, struct pt_regs *regs)
-+{
-+ unsigned long saved_tpr;
-+ int wake_dom0 = 0;
-+
-+
-+#if IRQ_DEBUG
-+ {
-+ unsigned long bsp, sp;
-+
-+ /*
-+ * Note: if the interrupt happened while executing in
-+ * the context switch routine (ia64_switch_to), we may
-+ * get a spurious stack overflow here. This is
-+ * because the register and the memory stack are not
-+ * switched atomically.
-+ */
-+ bsp = ia64_getreg(_IA64_REG_AR_BSP);
-+ sp = ia64_getreg(_IA64_REG_AR_SP);
-+
-+ if ((sp - bsp) < 1024) {
-+ static unsigned char count;
-+ static long last_time;
-+
-+ if (jiffies - last_time > 5*HZ)
-+ count = 0;
-+ if (++count < 5) {
-+ last_time = jiffies;
-+ printk("ia64_handle_irq: DANGER: less than "
-+ "1KB of free stack space!!\n"
-+ "(bsp=0x%lx, sp=%lx)\n", bsp, sp);
-+ }
-+ }
-+ }
-+#endif /* IRQ_DEBUG */
-+
-+ /*
-+ * Always set TPR to limit maximum interrupt nesting depth to
-+ * 16 (without this, it would be ~240, which could easily lead
-+ * to kernel stack overflows).
-+ */
-+ vmx_irq_enter();
-+ saved_tpr = ia64_getreg(_IA64_REG_CR_TPR);
-+ ia64_srlz_d();
-+ while (vector != IA64_SPURIOUS_INT_VECTOR) {
-+ if (!IS_RESCHEDULE(vector)) {
-+ ia64_setreg(_IA64_REG_CR_TPR, vector);
-+ ia64_srlz_d();
-+
-+ if (vector != IA64_TIMER_VECTOR) {
-+ /* FIXME: Leave IRQ re-route later */
-+ vmx_vcpu_pend_interrupt(dom0->vcpu[0],vector);
-+ wake_dom0 = 1;
-+ }
-+ else { // FIXME: Handle Timer only now
-+ __do_IRQ(local_vector_to_irq(vector), regs);
-+ }
-+
-+ /*
-+ * Disable interrupts and send EOI:
-+ */
-+ local_irq_disable();
-+ ia64_setreg(_IA64_REG_CR_TPR, saved_tpr);
-+ }
-+ else {
-+ printf("Oops: RESCHEDULE IPI absorbed by HV\n");
-+ }
-+ ia64_eoi();
-+ vector = ia64_get_ivr();
-+ }
-+ /*
-+ * This must be done *after* the ia64_eoi(). For example, the keyboard
softirq
-+ * handler needs to be able to wait for further keyboard interrupts,
which can't
-+ * come through until ia64_eoi() has been done.
-+ */
-+ vmx_irq_exit();
-+ if ( wake_dom0 && current != dom0 )
-+ vcpu_wake(dom0->vcpu[0]);
-+}
-+#endif
-+
-+
- #ifdef CONFIG_HOTPLUG_CPU
- /*
- * This function emulates a interrupt processing when a cpu is about to be
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.11/kregs.h
--- a/xen/arch/ia64/patch/linux-2.6.11/kregs.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,66 +0,0 @@
----
/home/adsharma/disk2/xen-ia64/xeno-unstable-rebase.bk/xen/../../linux-2.6.11/include/asm-ia64/kregs.h
2005-03-01 23:37:49.000000000 -0800
-+++
/home/adsharma/disk2/xen-ia64/xeno-unstable-rebase.bk/xen/include/asm-ia64/kregs.h
2005-05-18 12:40:50.000000000 -0700
-@@ -29,8 +29,21 @@
- */
- #define IA64_TR_KERNEL 0 /* itr0, dtr0: maps kernel
image (code & data) */
- #define IA64_TR_PALCODE 1 /* itr1: maps PALcode as
required by EFI */
-+#ifdef CONFIG_VTI
-+#define IA64_TR_XEN_IN_DOM 6 /* itr6, dtr6: Double mapping for xen
image in domain space */
-+#endif // CONFIG_VTI
- #define IA64_TR_PERCPU_DATA 1 /* dtr1: percpu data */
- #define IA64_TR_CURRENT_STACK 2 /* dtr2: maps kernel's memory- &
register-stacks */
-+#ifdef XEN
-+#define IA64_TR_SHARED_INFO 3 /* dtr3: page shared with domain */
-+#define IA64_TR_VHPT 4 /* dtr4: vhpt */
-+#define IA64_TR_ARCH_INFO 5
-+#ifdef CONFIG_VTI
-+#define IA64_TR_VHPT_IN_DOM 5 /* dtr5: Double mapping for vhpt table
in domain space */
-+#define IA64_TR_RR7_SWITCH_STUB 7 /* dtr7: mapping for rr7 switch
stub */
-+#define IA64_TEMP_PHYSICAL 8 /* itr8, dtr8: temp mapping for guest
physical memory 256M */
-+#endif // CONFIG_VTI
-+#endif
-
- /* Processor status register bits: */
- #define IA64_PSR_BE_BIT 1
-@@ -66,6 +78,9 @@
- #define IA64_PSR_ED_BIT 43
- #define IA64_PSR_BN_BIT 44
- #define IA64_PSR_IA_BIT 45
-+#ifdef CONFIG_VTI
-+#define IA64_PSR_VM_BIT 46
-+#endif // CONFIG_VTI
-
- /* A mask of PSR bits that we generally don't want to inherit across a
clone2() or an
- execve(). Only list flags here that need to be cleared/set for BOTH
clone2() and
-@@ -107,6 +122,9 @@
- #define IA64_PSR_ED (__IA64_UL(1) << IA64_PSR_ED_BIT)
- #define IA64_PSR_BN (__IA64_UL(1) << IA64_PSR_BN_BIT)
- #define IA64_PSR_IA (__IA64_UL(1) << IA64_PSR_IA_BIT)
-+#ifdef CONFIG_VTI
-+#define IA64_PSR_VM (__IA64_UL(1) << IA64_PSR_VM_BIT)
-+#endif // CONFIG_VTI
-
- /* User mask bits: */
- #define IA64_PSR_UM (IA64_PSR_BE | IA64_PSR_UP | IA64_PSR_AC | IA64_PSR_MFL
| IA64_PSR_MFH)
-@@ -160,4 +178,21 @@
- #define IA64_ISR_CODE_LFETCH 4
- #define IA64_ISR_CODE_PROBEF 5
-
-+#ifdef XEN
-+/* Interruption Function State */
-+#define IA64_IFS_V_BIT 63
-+#define IA64_IFS_V (__IA64_UL(1) << IA64_IFS_V_BIT)
-+
-+/* Page Table Address */
-+#define IA64_PTA_VE_BIT 0
-+#define IA64_PTA_SIZE_BIT 2
-+#define IA64_PTA_VF_BIT 8
-+#define IA64_PTA_BASE_BIT 15
-+
-+#define IA64_PTA_VE (__IA64_UL(1) << IA64_PTA_VE_BIT)
-+#define IA64_PTA_SIZE (__IA64_UL(0x3f) << IA64_PTA_SIZE_BIT)
-+#define IA64_PTA_VF (__IA64_UL(1) << IA64_PTA_VF_BIT)
-+#define IA64_PTA_BASE (__IA64_UL(0) - ((__IA64_UL(1) << IA64_PTA_BASE_BIT)))
-+#endif
-+
- #endif /* _ASM_IA64_kREGS_H */
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.11/mca_asm.h
--- a/xen/arch/ia64/patch/linux-2.6.11/mca_asm.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,32 +0,0 @@
----
/home/adsharma/disk2/xen-ia64/xeno-unstable-rebase.bk/xen/../../linux-2.6.11/include/asm-ia64/mca_asm.h
2005-03-01 23:38:38.000000000 -0800
-+++
/home/adsharma/disk2/xen-ia64/xeno-unstable-rebase.bk/xen/include/asm-ia64/mca_asm.h
2005-05-18 12:40:19.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
-
- #define GET_THIS_PADDR(reg, var) \
- mov reg = IA64_KR(PER_CPU_DATA);; \
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.11/minstate.h
--- a/xen/arch/ia64/patch/linux-2.6.11/minstate.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,25 +0,0 @@
- minstate.h | 4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
-
-Index: linux-2.6.11-xendiffs/arch/ia64/kernel/minstate.h
-===================================================================
---- linux-2.6.11-xendiffs.orig/arch/ia64/kernel/minstate.h 2005-04-06
22:51:31.170261541 -0500
-+++ linux-2.6.11-xendiffs/arch/ia64/kernel/minstate.h 2005-04-06
22:54:03.210575034 -0500
-@@ -48,7 +48,7 @@
- (pUStk) mov r24=ar.rnat;
\
- (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
*/ \
-@@ -57,7 +57,7 @@
- (pUStk) mov ar.rsc=0x3; /* set eager mode, pl 0, little-endian,
loadrs=0 */ \
-
- #define MINSTATE_END_SAVE_MIN_PHYS
\
-- dep r12=-1,r12,61,3; /* make sp a kernel virtual address */
\
-+ dep r12=-1,r12,60,4; /* make sp a kernel virtual address */
\
- ;;
-
- #ifdef MINSTATE_VIRT
diff -r 5978be010bec -r 2b95125015a5
xen/arch/ia64/patch/linux-2.6.11/mm_contig.c
--- a/xen/arch/ia64/patch/linux-2.6.11/mm_contig.c Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,47 +0,0 @@
---- ../../linux-2.6.11/arch/ia64/mm/contig.c 2005-03-02 00:37:55.000000000
-0700
-+++ arch/ia64/mm_contig.c 2005-04-28 16:13:52.000000000 -0600
-@@ -35,6 +35,7 @@
- *
- * Just walks the pages in the system and describes where they're allocated.
- */
-+#ifndef XEN
- void
- show_mem (void)
- {
-@@ -63,6 +64,7 @@
- printk("%d pages swap cached\n", cached);
- printk("%ld pages in page table cache\n", pgtable_cache_size);
- }
-+#endif
-
- /* physical address where the bootmem map is located */
- unsigned long bootmap_start;
-@@ -140,6 +142,7 @@
- * Walk the EFI memory map and find usable memory for the system, taking
- * into account reserved areas.
- */
-+#ifndef XEN
- void
- find_memory (void)
- {
-@@ -168,6 +171,7 @@
-
- find_initrd();
- }
-+#endif
-
- #ifdef CONFIG_SMP
- /**
-@@ -225,6 +229,7 @@
- * Set up the page tables.
- */
-
-+#ifndef XEN
- void
- paging_init (void)
- {
-@@ -297,3 +302,4 @@
- #endif /* !CONFIG_VIRTUAL_MEM_MAP */
- zero_page_memmap_ptr = virt_to_page(ia64_imva(empty_zero_page));
- }
-+#endif /* !CONFIG_XEN */
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.11/page.h
--- a/xen/arch/ia64/patch/linux-2.6.11/page.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,74 +0,0 @@
----
/home/adsharma/xeno-unstable-ia64-staging.bk/xen/../../linux-2.6.11/include/asm-ia64/page.h
2005-03-01 23:37:48.000000000 -0800
-+++ /home/adsharma/xeno-unstable-ia64-staging.bk/xen/include/asm-ia64/page.h
2005-05-20 09:36:02.000000000 -0700
-@@ -32,6 +32,7 @@
- #define PAGE_ALIGN(addr) (((addr) + PAGE_SIZE - 1) & PAGE_MASK)
-
- #define PERCPU_PAGE_SHIFT 16 /* log2() of max. size of per-CPU area
*/
-+
- #define PERCPU_PAGE_SIZE (__IA64_UL_CONST(1) << PERCPU_PAGE_SHIFT)
-
- #define RGN_MAP_LIMIT ((1UL << (4*PAGE_SHIFT - 12)) - PAGE_SIZE) /* per
region addr limit */
-@@ -95,9 +96,15 @@
- #endif
-
- #ifndef CONFIG_DISCONTIGMEM
-+#ifdef XEN
-+# define pfn_valid(pfn) (0)
-+# define page_to_pfn(_page) ((unsigned long)((_page) - frame_table))
-+# define pfn_to_page(_pfn) (frame_table + (_pfn))
-+#else
- # define pfn_valid(pfn) (((pfn) < max_mapnr) &&
ia64_pfn_valid(pfn))
- # define page_to_pfn(page) ((unsigned long) (page - mem_map))
- # define pfn_to_page(pfn) (mem_map + (pfn))
-+#endif
- #else
- extern struct page *vmem_map;
- extern unsigned long max_low_pfn;
-@@ -109,6 +116,11 @@
- #define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT)
- #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)
-
-+#ifdef XEN
-+#define page_to_virt(_page) phys_to_virt(page_to_phys(_page))
-+#define phys_to_page(kaddr) pfn_to_page(((kaddr) >> PAGE_SHIFT))
-+#endif
-+
- typedef union ia64_va {
- struct {
- unsigned long off : 61; /* intra-region offset */
-@@ -124,8 +136,23 @@
- * expressed in this way to ensure they result in a single "dep"
- * instruction.
- */
-+#ifdef XEN
-+typedef union xen_va {
-+ struct {
-+ unsigned long off : 60;
-+ unsigned long reg : 4;
-+ } f;
-+ unsigned long l;
-+ void *p;
-+} xen_va;
-+
-+// xen/drivers/console.c uses __va in a declaration (should be fixed!)
-+#define __pa(x) ({xen_va _v; _v.l = (long) (x); _v.f.reg = 0;
_v.l;})
-+#define __va(x) ({xen_va _v; _v.l = (long) (x); _v.f.reg = -1;
_v.p;})
-+#else
- #define __pa(x) ({ia64_va _v; _v.l = (long) (x); _v.f.reg = 0;
_v.l;})
- #define __va(x) ({ia64_va _v; _v.l = (long) (x); _v.f.reg = -1;
_v.p;})
-+#endif
-
- #define REGION_NUMBER(x) ({ia64_va _v; _v.l = (long) (x); _v.f.reg;})
- #define REGION_OFFSET(x) ({ia64_va _v; _v.l = (long) (x); _v.f.off;})
-@@ -197,7 +224,11 @@
- # define __pgprot(x) (x)
- #endif /* !STRICT_MM_TYPECHECKS */
-
-+#ifdef XEN
-+#define PAGE_OFFSET __IA64_UL_CONST(0xf000000000000000)
-+#else
- #define PAGE_OFFSET __IA64_UL_CONST(0xe000000000000000)
-+#endif
-
- #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE |
\
- VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC
| \
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.11/pal.S
--- a/xen/arch/ia64/patch/linux-2.6.11/pal.S Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,26 +0,0 @@
----
/home/adsharma/disk2/xen-ia64/xeno-unstable-rebase.bk/xen/../../linux-2.6.11/arch/ia64/kernel/pal.S
2005-03-01 23:38:33.000000000 -0800
-+++ /home/adsharma/disk2/xen-ia64/xeno-unstable-rebase.bk/xen/arch/ia64/pal.S
2005-05-18 12:40:19.000000000 -0700
-@@ -166,7 +166,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
-@@ -225,7 +229,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 -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.11/pal.h
--- a/xen/arch/ia64/patch/linux-2.6.11/pal.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,12 +0,0 @@
----
/home/adsharma/disk2/xen-ia64/test3.bk/xen/../../linux-2.6.11/include/asm-ia64/pal.h
2005-03-01 23:38:13.000000000 -0800
-+++ /home/adsharma/disk2/xen-ia64/test3.bk/xen/include/asm-ia64/pal.h
2005-05-18 14:00:53.000000000 -0700
-@@ -1559,6 +1559,9 @@
- return iprv.status;
- }
-
-+#ifdef CONFIG_VTI
-+#include <asm/vmx_pal.h>
-+#endif // CONFIG_VTI
- #endif /* __ASSEMBLY__ */
-
- #endif /* _ASM_IA64_PAL_H */
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.11/pgalloc.h
--- a/xen/arch/ia64/patch/linux-2.6.11/pgalloc.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,76 +0,0 @@
---- ../../linux-2.6.11/include/asm-ia64/pgalloc.h 2005-03-02
00:37:31.000000000 -0700
-+++ include/asm-ia64/pgalloc.h 2005-06-09 13:40:48.000000000 -0600
-@@ -61,7 +61,12 @@
- pgd_t *pgd = pgd_alloc_one_fast(mm);
-
- if (unlikely(pgd == NULL)) {
-+#ifdef XEN
-+ pgd = (pgd_t *)alloc_xenheap_page();
-+ memset(pgd,0,PAGE_SIZE);
-+#else
- pgd = (pgd_t *)__get_free_page(GFP_KERNEL|__GFP_ZERO);
-+#endif
- }
- return pgd;
- }
-@@ -104,7 +109,12 @@
- static inline pmd_t*
- pmd_alloc_one (struct mm_struct *mm, unsigned long addr)
- {
-+#ifdef XEN
-+ pmd_t *pmd = (pmd_t *)alloc_xenheap_page();
-+ memset(pmd,0,PAGE_SIZE);
-+#else
- pmd_t *pmd = (pmd_t
*)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO);
-+#endif
-
- return pmd;
- }
-@@ -136,7 +146,12 @@
- static inline struct page *
- pte_alloc_one (struct mm_struct *mm, unsigned long addr)
- {
-+#ifdef XEN
-+ struct page *pte = alloc_xenheap_page();
-+ memset(pte,0,PAGE_SIZE);
-+#else
- struct page *pte = alloc_pages(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO, 0);
-+#endif
-
- return pte;
- }
-@@ -144,7 +159,12 @@
- static inline pte_t *
- pte_alloc_one_kernel (struct mm_struct *mm, unsigned long addr)
- {
-+#ifdef XEN
-+ pte_t *pte = (pte_t *)alloc_xenheap_page();
-+ memset(pte,0,PAGE_SIZE);
-+#else
- pte_t *pte = (pte_t
*)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO);
-+#endif
-
- return pte;
- }
-@@ -152,13 +172,21 @@
- static inline void
- pte_free (struct page *pte)
- {
-+#ifdef XEN
-+ free_xenheap_page(pte);
-+#else
- __free_page(pte);
-+#endif
- }
-
- static inline void
- pte_free_kernel (pte_t *pte)
- {
-+#ifdef XEN
-+ free_xenheap_page((unsigned long) pte);
-+#else
- free_page((unsigned long) pte);
-+#endif
- }
-
- #define __pte_free_tlb(tlb, pte) tlb_remove_page((tlb), (pte))
diff -r 5978be010bec -r 2b95125015a5
xen/arch/ia64/patch/linux-2.6.11/processor.h
--- a/xen/arch/ia64/patch/linux-2.6.11/processor.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,37 +0,0 @@
----
/home/adsharma/xeno-unstable-ia64-staging.bk/xen/../../linux-2.6.11/include/asm-ia64/processor.h
2005-03-01 23:37:58.000000000 -0800
-+++
/home/adsharma/xeno-unstable-ia64-staging.bk/xen/include/asm-ia64/processor.h
2005-05-20 09:36:02.000000000 -0700
-@@ -94,7 +94,11 @@
- #ifdef CONFIG_NUMA
- #include <asm/nodedata.h>
- #endif
-+#ifdef XEN
-+#include <asm/xenprocessor.h>
-+#endif
-
-+#ifndef XEN
- /* like above but expressed as bitfields for more efficient access: */
- struct ia64_psr {
- __u64 reserved0 : 1;
-@@ -133,6 +137,7 @@
- __u64 bn : 1;
- __u64 reserved4 : 19;
- };
-+#endif
-
- /*
- * CPU type, hardware bug flags, and per-CPU state. Frequently used
-@@ -408,12 +413,14 @@
- */
-
- /* Return TRUE if task T owns the fph partition of the CPU we're running on.
*/
-+#ifndef XEN
- #define ia64_is_local_fpu_owner(t)
\
- ({
\
- struct task_struct *__ia64_islfo_task = (t);
\
- (__ia64_islfo_task->thread.last_fph_cpu == smp_processor_id()
\
- && __ia64_islfo_task == (struct task_struct *)
ia64_get_kr(IA64_KR_FPU_OWNER)); \
- })
-+#endif
-
- /* Mark task T as owning the fph partition of the CPU we're running on. */
- #define ia64_set_local_fpu_owner(t) do {
\
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.11/ptrace.h
--- a/xen/arch/ia64/patch/linux-2.6.11/ptrace.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,20 +0,0 @@
----
/home/adsharma/disk2/xen-ia64/test3.bk/xen/../../linux-2.6.11/include/asm-ia64/ptrace.h
2005-03-01 23:38:38.000000000 -0800
-+++ /home/adsharma/disk2/xen-ia64/test3.bk/xen/include/asm-ia64/ptrace.h
2005-05-18 14:00:53.000000000 -0700
-@@ -95,6 +95,9 @@
- * (because the memory stack pointer MUST ALWAYS be aligned this way)
- *
- */
-+#ifdef XEN
-+#include <public/arch-ia64.h>
-+#else
- struct pt_regs {
- /* The following registers are saved by SAVE_MIN: */
- unsigned long b6; /* scratch */
-@@ -170,6 +173,7 @@
- struct ia64_fpreg f10; /* scratch */
- struct ia64_fpreg f11; /* scratch */
- };
-+#endif
-
- /*
- * This structure contains the addition registers that need to
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.11/series
--- a/xen/arch/ia64/patch/linux-2.6.11/series Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,40 +0,0 @@
-bootmem.h
-current.h
-efi.c
-efi.h
-entry.S
-gcc_intrin.h
-hardirq.h
-head.S
-hpsim_irq.c
-hpsim_ssc.h
-hw_irq.h
-ide.h
-init_task.c
-init_task.h
-interrupt.h
-io.h
-irq.h
-irq_ia64.c
-ivt.S
-kregs.h
-lds.S
-linuxtime.h
-minstate.h
-mm_bootmem.c
-mm_contig.c
-mmzone.h
-page_alloc.c
-page.h
-processor.h
-sal.h
-setup.c
-slab.c
-slab.h
-system.h
-time.c
-kernel-time.c
-tlb.c
-types.h
-unaligned.c
-wait.h
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.11/setup.c
--- a/xen/arch/ia64/patch/linux-2.6.11/setup.c Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,151 +0,0 @@
---- ../../linux-2.6.11/arch/ia64/kernel/setup.c 2005-03-02
00:37:49.000000000 -0700
-+++ arch/ia64/setup.c 2005-06-03 10:14:24.000000000 -0600
-@@ -51,6 +51,10 @@
- #include <asm/smp.h>
- #include <asm/system.h>
- #include <asm/unistd.h>
-+#ifdef CONFIG_VTI
-+#include <asm/vmx.h>
-+#endif // CONFIG_VTI
-+#include <asm/io.h>
-
- #if defined(CONFIG_SMP) && (IA64_CPU_SIZE > PAGE_SIZE)
- # error "struct cpuinfo_ia64 too big!"
-@@ -127,7 +131,16 @@
- range_end = min(end, rsvd_region[i].start);
-
- if (range_start < range_end)
-+#ifdef XEN
-+ {
-+ /* init_boot_pages requires "ps, pe" */
-+ printk("Init boot pages: 0x%lx -> 0x%lx.\n",
-+ __pa(range_start), __pa(range_end));
-+ (*func)(__pa(range_start), __pa(range_end), 0);
-+ }
-+#else
- call_pernode_memory(__pa(range_start), range_end -
range_start, func);
-+#endif
-
- /* nothing more available in this segment */
- if (range_end == end) return 0;
-@@ -185,7 +198,12 @@
- n++;
-
- rsvd_region[n].start = (unsigned long) ia64_imva((void *)KERNEL_START);
-+#ifdef XEN
-+ /* Reserve xen image/bitmap/xen-heap */
-+ rsvd_region[n].end = rsvd_region[n].start + xenheap_size;
-+#else
- rsvd_region[n].end = (unsigned long) ia64_imva(_end);
-+#endif
- n++;
-
- #ifdef CONFIG_BLK_DEV_INITRD
-@@ -299,17 +317,25 @@
- }
-
- void __init
-+#ifdef XEN
-+early_setup_arch (char **cmdline_p)
-+#else
- setup_arch (char **cmdline_p)
-+#endif
- {
- unw_init();
-
- ia64_patch_vtop((u64) __start___vtop_patchlist, (u64)
__end___vtop_patchlist);
-
- *cmdline_p = __va(ia64_boot_param->command_line);
-+#ifdef XEN
-+ efi_init();
-+#else
- strlcpy(saved_command_line, *cmdline_p, COMMAND_LINE_SIZE);
-
- efi_init();
- io_port_init();
-+#endif
-
- #ifdef CONFIG_IA64_GENERIC
- {
-@@ -336,6 +362,11 @@
- }
- #endif
-
-+#ifdef XEN
-+ early_cmdline_parse(cmdline_p);
-+ cmdline_parse(*cmdline_p);
-+#undef CONFIG_ACPI_BOOT
-+#endif
- if (early_console_setup(*cmdline_p) == 0)
- mark_bsp_online();
-
-@@ -351,8 +382,18 @@
- # endif
- #endif /* CONFIG_APCI_BOOT */
-
-+#ifndef XEN
- find_memory();
-+#else
-+ io_port_init();
-+}
-
-+void __init
-+late_setup_arch (char **cmdline_p)
-+{
-+#undef CONFIG_ACPI_BOOT
-+ acpi_table_init();
-+#endif
- /* process SAL system table: */
- ia64_sal_init(efi.sal_systab);
-
-@@ -360,6 +401,10 @@
- cpu_physical_id(0) = hard_smp_processor_id();
- #endif
-
-+#ifdef CONFIG_VTI
-+ identify_vmx_feature();
-+#endif // CONFIG_VTI
-+
- cpu_init(); /* initialize the bootstrap CPU */
-
- #ifdef CONFIG_ACPI_BOOT
-@@ -492,12 +537,14 @@
- {
- }
-
-+#ifndef XEN
- struct seq_operations cpuinfo_op = {
- .start = c_start,
- .next = c_next,
- .stop = c_stop,
- .show = show_cpuinfo
- };
-+#endif
-
- void
- identify_cpu (struct cpuinfo_ia64 *c)
-@@ -551,6 +598,12 @@
- }
- c->unimpl_va_mask = ~((7L<<61) | ((1L << (impl_va_msb + 1)) - 1));
- c->unimpl_pa_mask = ~((1L<<63) | ((1L << phys_addr_size) - 1));
-+
-+#ifdef CONFIG_VTI
-+ /* If vmx feature is on, do necessary initialization for vmx */
-+ if (vmx_enabled)
-+ vmx_init_env();
-+#endif
- }
-
- void
-@@ -659,7 +712,11 @@
- | IA64_DCR_DA | IA64_DCR_DD |
IA64_DCR_LC));
- atomic_inc(&init_mm.mm_count);
- current->active_mm = &init_mm;
-+#ifdef XEN
-+ if (current->domain->arch.mm)
-+#else
- if (current->mm)
-+#endif
- BUG();
-
- ia64_mmu_init(ia64_imva(cpu_data));
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.11/sn_sal.h
--- a/xen/arch/ia64/patch/linux-2.6.11/sn_sal.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,33 +0,0 @@
---- /data/lwork/attica1/edwardsg/linux-2.6.11/include/asm-ia64/sn/sn_sal.h
2005-03-02 01:38:33 -06:00
-+++ include/asm-ia64/sn/sn_sal.h 2005-06-01 14:31:47 -05:00
-@@ -123,6 +123,7 @@
- #define SALRET_ERROR (-3)
-
-
-+#ifndef XEN
- /**
- * sn_sal_rev_major - get the major SGI SAL revision number
- *
-@@ -226,6 +227,7 @@ ia64_sn_get_klconfig_addr(nasid_t nasid)
- }
- return ret_stuff.v0 ? __va(ret_stuff.v0) : NULL;
- }
-+#endif /* !XEN */
-
- /*
- * Returns the next console character.
-@@ -304,6 +306,7 @@ ia64_sn_console_putb(const char *buf, in
- return (u64)0;
- }
-
-+#ifndef XEN
- /*
- * Print a platform error record
- */
-@@ -987,5 +990,5 @@ ia64_sn_hwperf_op(nasid_t nasid, u64 opc
- *v0 = (int) rv.v0;
- return (int) rv.status;
- }
--
-+#endif /* !XEN */
- #endif /* _ASM_IA64_SN_SN_SAL_H */
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.11/system.h
--- a/xen/arch/ia64/patch/linux-2.6.11/system.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,38 +0,0 @@
----
/home/adsharma/xeno-unstable-ia64-staging.bk/xen/../../linux-2.6.11/include/asm-ia64/system.h
2005-03-01 23:38:07.000000000 -0800
-+++ /home/adsharma/xeno-unstable-ia64-staging.bk/xen/include/asm-ia64/system.h
2005-05-20 09:36:02.000000000 -0700
-@@ -18,14 +18,19 @@
- #include <asm/page.h>
- #include <asm/pal.h>
- #include <asm/percpu.h>
-+#ifdef XEN
-+#include <asm/xensystem.h>
-+#endif
-
- #define GATE_ADDR __IA64_UL_CONST(0xa000000000000000)
- /*
- * 0xa000000000000000+2*PERCPU_PAGE_SIZE
- * - 0xa000000000000000+3*PERCPU_PAGE_SIZE remain unmapped (guard page)
- */
-+#ifndef XEN
- #define KERNEL_START __IA64_UL_CONST(0xa000000100000000)
- #define PERCPU_ADDR (-PERCPU_PAGE_SIZE)
-+#endif
-
- #ifndef __ASSEMBLY__
-
-@@ -218,6 +223,7 @@
- # define PERFMON_IS_SYSWIDE() (0)
- #endif
-
-+#ifndef XEN
- #define IA64_HAS_EXTRA_STATE(t)
\
- ((t)->thread.flags & (IA64_THREAD_DBG_VALID|IA64_THREAD_PM_VALID)
\
- || IS_IA32_PROCESS(ia64_task_regs(t)) || PERFMON_IS_SYSWIDE())
-@@ -230,6 +236,7 @@
- ia64_psr(ia64_task_regs(next))->dfh = !ia64_is_local_fpu_owner(next);
\
- (last) = ia64_switch_to((next));
\
- } while (0)
-+#endif
-
- #ifdef CONFIG_SMP
- /*
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.11/time.c
--- a/xen/arch/ia64/patch/linux-2.6.11/time.c Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,56 +0,0 @@
---- ../../linux-2.6.11/arch/ia64/kernel/time.c 2005-03-02 00:37:50.000000000
-0700
-+++ arch/ia64/time.c 2005-05-02 11:19:29.000000000 -0600
-@@ -29,6 +29,9 @@
- #include <asm/sal.h>
- #include <asm/sections.h>
- #include <asm/system.h>
-+#ifdef XEN
-+#include <linux/jiffies.h> // not included by xen/sched.h
-+#endif
-
- extern unsigned long wall_jiffies;
-
-@@ -45,6 +48,7 @@
-
- #endif
-
-+#ifndef XEN
- static struct time_interpolator itc_interpolator = {
- .shift = 16,
- .mask = 0xffffffffffffffffLL,
-@@ -110,6 +114,7 @@
- } while (time_after_eq(ia64_get_itc(), new_itm));
- return IRQ_HANDLED;
- }
-+#endif
-
- /*
- * Encapsulate access to the itm structure for SMP.
-@@ -212,6 +217,7 @@
- + itc_freq/2)/itc_freq;
-
- if (!(sal_platform_features & IA64_SAL_PLATFORM_FEATURE_ITC_DRIFT)) {
-+#ifndef XEN
- itc_interpolator.frequency = local_cpu_data->itc_freq;
- itc_interpolator.drift = itc_drift;
- #ifdef CONFIG_SMP
-@@ -228,12 +234,14 @@
- if (!nojitter) itc_interpolator.jitter = 1;
- #endif
- register_time_interpolator(&itc_interpolator);
-+#endif
- }
-
- /* Setup the CPU local timer tick */
- ia64_cpu_local_tick();
- }
-
-+#ifndef XEN
- static struct irqaction timer_irqaction = {
- .handler = timer_interrupt,
- .flags = SA_INTERRUPT,
-@@ -253,3 +261,4 @@
- */
- set_normalized_timespec(&wall_to_monotonic, -xtime.tv_sec,
-xtime.tv_nsec);
- }
-+#endif
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.11/tlb.c
--- a/xen/arch/ia64/patch/linux-2.6.11/tlb.c Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,38 +0,0 @@
---- ../../linux-2.6.11/arch/ia64/mm/tlb.c 2005-03-02 00:38:38.000000000
-0700
-+++ arch/ia64/tlb.c 2005-05-02 10:23:09.000000000 -0600
-@@ -43,6 +43,9 @@
- void
- wrap_mmu_context (struct mm_struct *mm)
- {
-+#ifdef XEN
-+printf("wrap_mmu_context: called, not implemented\n");
-+#else
- unsigned long tsk_context, max_ctx = ia64_ctx.max_ctx;
- struct task_struct *tsk;
- int i;
-@@ -83,6 +86,7 @@
- put_cpu();
- }
- local_flush_tlb_all();
-+#endif
- }
-
- void
-@@ -132,6 +136,9 @@
- void
- flush_tlb_range (struct vm_area_struct *vma, unsigned long start, unsigned
long end)
- {
-+#ifdef XEN
-+printf("flush_tlb_range: called, not implemented\n");
-+#else
- struct mm_struct *mm = vma->vm_mm;
- unsigned long size = end - start;
- unsigned long nbits;
-@@ -163,6 +170,7 @@
- # endif
-
- ia64_srlz_i(); /* srlz.i implies srlz.d */
-+#endif
- }
- EXPORT_SYMBOL(flush_tlb_range);
-
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.11/types.h
--- a/xen/arch/ia64/patch/linux-2.6.11/types.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,44 +0,0 @@
---- ../../linux-2.6.11/include/asm-ia64/types.h 2005-03-04
10:26:30.000000000 -0700
-+++ include/asm-ia64/types.h 2005-04-11 15:23:49.000000000 -0600
-@@ -1,5 +1,12 @@
- #ifndef _ASM_IA64_TYPES_H
- #define _ASM_IA64_TYPES_H
-+#ifdef XEN
-+#ifndef __ASSEMBLY__
-+typedef unsigned long ssize_t;
-+typedef unsigned long size_t;
-+typedef long long loff_t;
-+#endif
-+#endif
-
- /*
- * This file is never included by application software unless explicitly
requested (e.g.,
-@@ -61,6 +68,28 @@
- typedef __s64 s64;
- typedef __u64 u64;
-
-+#ifdef XEN
-+/*
-+ * Below are truly Linux-specific types that should never collide with
-+ * any application/library that wants linux/types.h.
-+ */
-+
-+#ifdef __CHECKER__
-+#define __bitwise __attribute__((bitwise))
-+#else
-+#define __bitwise
-+#endif
-+
-+typedef __u16 __bitwise __le16;
-+typedef __u16 __bitwise __be16;
-+typedef __u32 __bitwise __le32;
-+typedef __u32 __bitwise __be32;
-+#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
-+typedef __u64 __bitwise __le64;
-+typedef __u64 __bitwise __be64;
-+#endif
-+#endif
-+
- #define BITS_PER_LONG 64
-
- /* DMA addresses are 64-bits wide, in general. */
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.11/uaccess.h
--- a/xen/arch/ia64/patch/linux-2.6.11/uaccess.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,41 +0,0 @@
---- ../../linux-2.6.11/include/asm-ia64/uaccess.h 2005-03-02
00:37:53.000000000 -0700
-+++ include/asm-ia64/uaccess.h 2005-06-21 21:53:20.000000000 -0600
-@@ -32,6 +32,10 @@
- * David Mosberger-Tang <davidm@xxxxxxxxxx>
- */
-
-+#ifdef CONFIG_VTI
-+#include <asm/vmx_uaccess.h>
-+#else // CONFIG_VTI
-+
- #include <linux/compiler.h>
- #include <linux/errno.h>
- #include <linux/sched.h>
-@@ -60,6 +64,11 @@
- * address TASK_SIZE is never valid. We also need to make sure that the
address doesn't
- * point inside the virtually mapped linear page table.
- */
-+#ifdef XEN
-+/* VT-i reserves bit 60 for the VMM; guest addresses have bit 60 = bit 59 */
-+#define IS_VMM_ADDRESS(addr) ((((addr) >> 60) ^ ((addr) >> 59)) & 1)
-+#define __access_ok(addr, size, segment) (!IS_VMM_ADDRESS((unsigned
long)(addr)))
-+#else
- #define __access_ok(addr, size, segment)
\
- ({
\
- __chk_user_ptr(addr);
\
-@@ -67,6 +76,7 @@
- && ((segment).seg == KERNEL_DS.seg
\
- || likely(REGION_OFFSET((unsigned long) (addr)) <
RGN_MAP_LIMIT))); \
- })
-+#endif
- #define access_ok(type, addr, size) __access_ok((addr), (size), get_fs())
-
- static inline int
-@@ -343,6 +353,7 @@
- __su_ret; \
- })
-
-+#endif // CONFIG_VTI
- /* Generic code can't deal with the location-relative format that we use for
compactness. */
- #define ARCH_HAS_SORT_EXTABLE
- #define ARCH_HAS_SEARCH_EXTABLE
diff -r 5978be010bec -r 2b95125015a5
xen/arch/ia64/patch/linux-2.6.11/unaligned.c
--- a/xen/arch/ia64/patch/linux-2.6.11/unaligned.c Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,227 +0,0 @@
----
/home/adsharma/disk2/xen-ia64/xeno-unstable-rebase.bk/xen/../../linux-2.6.11/arch/ia64/kernel/unaligned.c
2005-03-01 23:38:25.000000000 -0800
-+++
/home/adsharma/disk2/xen-ia64/xeno-unstable-rebase.bk/xen/arch/ia64/unaligned.c
2005-05-18 12:40:50.000000000 -0700
-@@ -201,7 +201,11 @@
-
- RPT(r1), RPT(r2), RPT(r3),
-
-+#ifdef CONFIG_VTI
-+ RPT(r4), RPT(r5), RPT(r6), RPT(r7),
-+#else //CONFIG_VTI
- RSW(r4), RSW(r5), RSW(r6), RSW(r7),
-+#endif //CONFIG_VTI
-
- RPT(r8), RPT(r9), RPT(r10), RPT(r11),
- RPT(r12), RPT(r13), RPT(r14), RPT(r15),
-@@ -291,6 +295,121 @@
- return reg;
- }
-
-+#ifdef CONFIG_VTI
-+static void
-+set_rse_reg (struct pt_regs *regs, unsigned long r1, unsigned long val,
unsigned long nat)
-+{
-+ struct switch_stack *sw = (struct switch_stack *) regs - 1;
-+ unsigned long *bsp, *bspstore, *addr, *rnat_addr, *ubs_end;
-+ unsigned long *kbs = (void *) current + IA64_RBS_OFFSET;
-+ unsigned long rnats, nat_mask;
-+ unsigned long old_rsc,new_rsc;
-+ unsigned long on_kbs,rnat;
-+ long sof = (regs->cr_ifs) & 0x7f;
-+ long sor = 8 * ((regs->cr_ifs >> 14) & 0xf);
-+ long rrb_gr = (regs->cr_ifs >> 18) & 0x7f;
-+ long ridx = r1 - 32;
-+
-+ if (ridx >= sof) {
-+ /* this should never happen, as the "rsvd register fault" has
higher priority */
-+ DPRINT("ignoring write to r%lu; only %lu registers are
allocated!\n", r1, sof);
-+ return;
-+ }
-+
-+ if (ridx < sor)
-+ ridx = rotate_reg(sor, rrb_gr, ridx);
-+
-+ old_rsc=ia64_get_rsc();
-+ new_rsc=old_rsc&(~0x3);
-+ ia64_set_rsc(new_rsc);
-+
-+ bspstore = ia64_get_bspstore();
-+ bsp =kbs + (regs->loadrs >> 19);//16+3
-+
-+ addr = ia64_rse_skip_regs(bsp, -sof + ridx);
-+ nat_mask = 1UL << ia64_rse_slot_num(addr);
-+ rnat_addr = ia64_rse_rnat_addr(addr);
-+
-+ if(addr >= bspstore){
-+
-+ ia64_flushrs ();
-+ ia64_mf ();
-+ *addr = val;
-+ bspstore = ia64_get_bspstore();
-+ rnat = ia64_get_rnat ();
-+ if(bspstore < rnat_addr){
-+ rnat=rnat&(~nat_mask);
-+ }else{
-+ *rnat_addr = (*rnat_addr)&(~nat_mask);
-+ }
-+ ia64_mf();
-+ ia64_loadrs();
-+ ia64_set_rnat(rnat);
-+ }else{
-+
-+ rnat = ia64_get_rnat ();
-+ *addr = val;
-+ if(bspstore < rnat_addr){
-+ rnat=rnat&(~nat_mask);
-+ }else{
-+ *rnat_addr = (*rnat_addr)&(~nat_mask);
-+ }
-+ ia64_set_bspstore (bspstore);
-+ ia64_set_rnat(rnat);
-+ }
-+ ia64_set_rsc(old_rsc);
-+}
-+
-+
-+static void
-+get_rse_reg (struct pt_regs *regs, unsigned long r1, unsigned long *val,
unsigned long *nat)
-+{
-+ struct switch_stack *sw = (struct switch_stack *) regs - 1;
-+ unsigned long *bsp, *addr, *rnat_addr, *ubs_end, *bspstore;
-+ unsigned long *kbs = (void *) current + IA64_RBS_OFFSET;
-+ unsigned long rnats, nat_mask;
-+ unsigned long on_kbs;
-+ unsigned long old_rsc, new_rsc;
-+ long sof = (regs->cr_ifs) & 0x7f;
-+ long sor = 8 * ((regs->cr_ifs >> 14) & 0xf);
-+ long rrb_gr = (regs->cr_ifs >> 18) & 0x7f;
-+ long ridx = r1 - 32;
-+
-+ if (ridx >= sof) {
-+ /* read of out-of-frame register returns an undefined value; 0
in our case. */
-+ DPRINT("ignoring read from r%lu; only %lu registers are
allocated!\n", r1, sof);
-+ panic("wrong stack register number");
-+ }
-+
-+ if (ridx < sor)
-+ ridx = rotate_reg(sor, rrb_gr, ridx);
-+
-+ old_rsc=ia64_get_rsc();
-+ new_rsc=old_rsc&(~(0x3));
-+ ia64_set_rsc(new_rsc);
-+
-+ bspstore = ia64_get_bspstore();
-+ bsp =kbs + (regs->loadrs >> 19); //16+3;
-+
-+ addr = ia64_rse_skip_regs(bsp, -sof + ridx);
-+ nat_mask = 1UL << ia64_rse_slot_num(addr);
-+ rnat_addr = ia64_rse_rnat_addr(addr);
-+
-+ if(addr >= bspstore){
-+
-+ ia64_flushrs ();
-+ ia64_mf ();
-+ bspstore = ia64_get_bspstore();
-+ }
-+ *val=*addr;
-+ if(bspstore < rnat_addr){
-+ *nat=!!(ia64_get_rnat()&nat_mask);
-+ }else{
-+ *nat = !!((*rnat_addr)&nat_mask);
-+ }
-+ ia64_set_rsc(old_rsc);
-+}
-+#else // CONFIG_VTI
- static void
- set_rse_reg (struct pt_regs *regs, unsigned long r1, unsigned long val, int
nat)
- {
-@@ -435,9 +554,14 @@
- *nat = 0;
- return;
- }
-+#endif // CONFIG_VTI
-
-
-+#ifdef XEN
-+void
-+#else
- static void
-+#endif
- setreg (unsigned long regnum, unsigned long val, int nat, struct pt_regs
*regs)
- {
- struct switch_stack *sw = (struct switch_stack *) regs - 1;
-@@ -466,7 +590,11 @@
- unat = &sw->ar_unat;
- } else {
- addr = (unsigned long)regs;
-+#ifdef CONFIG_VTI
-+ unat = ®s->eml_unat;
-+#else //CONFIG_VTI
- unat = &sw->caller_unat;
-+#endif //CONFIG_VTI
- }
- DPRINT("tmp_base=%lx switch_stack=%s offset=%d\n",
- addr, unat==&sw->ar_unat ? "yes":"no", GR_OFFS(regnum));
-@@ -522,7 +650,11 @@
- */
- if (regnum >= IA64_FIRST_ROTATING_FR) {
- ia64_sync_fph(current);
-+#ifdef XEN
-+ current->arch._thread.fph[fph_index(regs, regnum)] = *fpval;
-+#else
- current->thread.fph[fph_index(regs, regnum)] = *fpval;
-+#endif
- } else {
- /*
- * pt_regs or switch_stack ?
-@@ -581,7 +713,11 @@
- */
- if (regnum >= IA64_FIRST_ROTATING_FR) {
- ia64_flush_fph(current);
-+#ifdef XEN
-+ *fpval = current->arch._thread.fph[fph_index(regs, regnum)];
-+#else
- *fpval = current->thread.fph[fph_index(regs, regnum)];
-+#endif
- } else {
- /*
- * f0 = 0.0, f1= 1.0. Those registers are constant and are thus
-@@ -611,7 +747,11 @@
- }
-
-
-+#ifdef XEN
-+void
-+#else
- static void
-+#endif
- getreg (unsigned long regnum, unsigned long *val, int *nat, struct pt_regs
*regs)
- {
- struct switch_stack *sw = (struct switch_stack *) regs - 1;
-@@ -640,7 +780,11 @@
- unat = &sw->ar_unat;
- } else {
- addr = (unsigned long)regs;
-+#ifdef CONFIG_VTI
-+ unat = ®s->eml_unat;;
-+#else //CONFIG_VTI
- unat = &sw->caller_unat;
-+#endif //CONFIG_VTI
- }
-
- DPRINT("addr_base=%lx offset=0x%x\n", addr, GR_OFFS(regnum));
-@@ -1294,6 +1438,9 @@
- void
- ia64_handle_unaligned (unsigned long ifa, struct pt_regs *regs)
- {
-+#ifdef XEN
-+printk("ia64_handle_unaligned: called, not working yet\n");
-+#else
- struct ia64_psr *ipsr = ia64_psr(regs);
- mm_segment_t old_fs = get_fs();
- unsigned long bundle[2];
-@@ -1502,4 +1649,5 @@
- si.si_imm = 0;
- force_sig_info(SIGBUS, &si, current);
- goto done;
-+#endif
- }
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/bootmem.h
--- a/xen/arch/ia64/patch/linux-2.6.7/bootmem.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,12 +0,0 @@
---- /home/djm/src/xen/xeno-ia64.bk/xen/linux-2.6.7/include/linux/bootmem.h
2004-06-15 23:19:52.000000000 -0600
-+++ /home/djm/src/xen/xeno-ia64.bk/xen/include/asm-ia64/linux/bootmem.h
2004-08-25 19:28:13.000000000 -0600
-@@ -41,7 +41,9 @@
- extern void __init free_bootmem (unsigned long addr, unsigned long size);
- extern void * __init __alloc_bootmem (unsigned long size, unsigned long
align, unsigned long goal);
- #ifndef CONFIG_HAVE_ARCH_BOOTMEM_NODE
-+#ifndef XEN
- extern void __init reserve_bootmem (unsigned long addr, unsigned long size);
-+#endif
- #define alloc_bootmem(x) \
- __alloc_bootmem((x), SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS))
- #define alloc_bootmem_low(x) \
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/current.h
--- a/xen/arch/ia64/patch/linux-2.6.7/current.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,17 +0,0 @@
---- /home/djm/src/xen/xeno-ia64.bk/xen/linux-2.6.7/include/asm-ia64/current.h
2004-06-15 23:19:52.000000000 -0600
-+++ /home/djm/src/xen/xeno-ia64.bk/xen/include/asm-ia64/current.h
2004-08-25 19:28:12.000000000 -0600
-@@ -12,6 +12,14 @@
- * In kernel mode, thread pointer (r13) is used to point to the current task
- * structure.
- */
-+#ifdef XEN
-+struct domain;
-+#define get_current() ((struct vcpu *) ia64_getreg(_IA64_REG_TP))
-+#define current get_current()
-+//#define set_current(d) ia64_setreg(_IA64_REG_TP,(void *)d);
-+#define set_current(d) (ia64_r13 = (void *)d)
-+#else
- #define current ((struct task_struct *) ia64_getreg(_IA64_REG_TP))
-+#endif
-
- #endif /* _ASM_IA64_CURRENT_H */
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/efi.c
--- a/xen/arch/ia64/patch/linux-2.6.7/efi.c Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,85 +0,0 @@
---- /home/djm/src/xen/xeno-ia64.bk/xen/linux-2.6.7/arch/ia64/kernel/efi.c
2004-06-15 23:18:55.000000000 -0600
-+++ /home/djm/src/xen/xeno-ia64.bk/xen/arch/ia64/efi.c 2004-12-17
13:47:03.000000000 -0700
-@@ -25,6 +25,9 @@
- #include <linux/types.h>
- #include <linux/time.h>
- #include <linux/efi.h>
-+#ifdef XEN
-+#include <xen/sched.h>
-+#endif
-
- #include <asm/io.h>
- #include <asm/kregs.h>
-@@ -49,7 +52,10 @@
- {
\
- struct ia64_fpreg fr[6];
\
- efi_status_t ret;
\
-+ efi_time_cap_t *atc = NULL;
\
-
\
-+ if (tc)
\
-+ atc = adjust_arg(tc);
\
- ia64_save_scratch_fpregs(fr);
\
- ret = efi_call_##prefix((efi_get_time_t *) __va(runtime->get_time),
adjust_arg(tm), \
- adjust_arg(tc));
\
-@@ -201,6 +207,7 @@
- if ((*efi.get_time)(&tm, 0) != EFI_SUCCESS)
- return;
-
-+ dummy();
- ts->tv_sec = mktime(tm.year, tm.month, tm.day, tm.hour, tm.minute,
tm.second);
- ts->tv_nsec = tm.nanosecond;
- }
-@@ -303,6 +310,10 @@
- if (!(md->attribute & EFI_MEMORY_WB))
- continue;
-
-+#ifdef XEN
-+// this is a temporary hack to avoid CONFIG_VIRTUAL_MEM_MAP
-+ if (md->phys_addr >= 0x100000000) continue;
-+#endif
- /*
- * granule_addr is the base of md's first granule.
- * [granule_addr - first_non_wb_addr) is guaranteed to
-@@ -456,9 +467,11 @@
-
- cpu = smp_processor_id();
-
-+#ifndef XEN
- /* insert this TR into our list for MCA recovery purposes */
- ia64_mca_tlb_list[cpu].pal_base = vaddr & mask;
- ia64_mca_tlb_list[cpu].pal_paddr =
pte_val(mk_pte_phys(md->phys_addr, PAGE_KERNEL));
-+#endif
- }
- }
-
-@@ -680,6 +693,30 @@
- return 0;
- }
-
-+#ifdef XEN
-+// variation of efi_get_iobase which returns entire memory descriptor
-+efi_memory_desc_t *
-+efi_get_io_md (void)
-+{
-+ void *efi_map_start, *efi_map_end, *p;
-+ efi_memory_desc_t *md;
-+ u64 efi_desc_size;
-+
-+ efi_map_start = __va(ia64_boot_param->efi_memmap);
-+ efi_map_end = efi_map_start + ia64_boot_param->efi_memmap_size;
-+ efi_desc_size = ia64_boot_param->efi_memdesc_size;
-+
-+ for (p = efi_map_start; p < efi_map_end; p += efi_desc_size) {
-+ md = p;
-+ if (md->type == EFI_MEMORY_MAPPED_IO_PORT_SPACE) {
-+ if (md->attribute & EFI_MEMORY_UC)
-+ return md;
-+ }
-+ }
-+ return 0;
-+}
-+#endif
-+
- u32
- efi_mem_type (unsigned long phys_addr)
- {
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/efi.h
--- a/xen/arch/ia64/patch/linux-2.6.7/efi.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,13 +0,0 @@
---- /home/djm/src/xen/xeno-ia64.bk/xen/linux-2.6.7/include/linux/efi.h
2004-06-15 23:20:03.000000000 -0600
-+++ /home/djm/src/xen/xeno-ia64.bk/xen/include/asm-ia64/linux/efi.h
2004-08-25 19:28:13.000000000 -0600
-@@ -15,8 +15,10 @@
- #include <linux/string.h>
- #include <linux/time.h>
- #include <linux/types.h>
-+#ifndef XEN
- #include <linux/proc_fs.h>
- #include <linux/rtc.h>
-+#endif
- #include <linux/ioport.h>
-
- #include <asm/page.h>
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/entry.S
--- a/xen/arch/ia64/patch/linux-2.6.7/entry.S Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,195 +0,0 @@
---- ../../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>
- #include <asm/cache.h>
-+#ifndef XEN
- #include <asm/errno.h>
-+#endif
- #include <asm/kregs.h>
- #include <asm/offsets.h>
- #include <asm/pgtable.h>
-@@ -46,6 +48,23 @@
-
- #include "minstate.h"
-
-+#ifdef XEN
-+#define sys_execve 0
-+#define do_fork 0
-+#define syscall_trace 0
-+#define schedule 0
-+#define do_notify_resume_user 0
-+#define ia64_rt_sigsuspend 0
-+#define ia64_rt_sigreturn 0
-+#define ia64_handle_unaligned 0
-+#define errno 0
-+#define sys_ni_syscall 0
-+#define unw_init_frame_info 0
-+#define sys_call_table 0
-+#endif
-+
-+ /*
-+
- /*
- * execve() is special because in case of success, we need to
- * setup a null register window frame.
-@@ -178,11 +197,14 @@
- DO_SAVE_SWITCH_STACK
- .body
-
-+#ifdef XEN
-+//#undef IA64_TASK_THREAD_KSP_OFFSET
-+//#define IA64_TASK_THREAD_KSP_OFFSET 0x38
- adds r22=IA64_TASK_THREAD_KSP_OFFSET,r13
- movl r25=init_task
- 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,60,4 // physical address of "current"
- ;;
- st8 [r22]=sp // save kernel stack pointer of old task
- shr.u r26=r20,IA64_GRANULE_SHIFT
-@@ -194,6 +216,22 @@
- (p6) cmp.eq p7,p6=r26,r27
- (p6) br.cond.dpnt .map
- ;;
-+#else
-+ adds r22=IA64_TASK_THREAD_KSP_OFFSET,r13
-+ mov r27=IA64_KR(CURRENT_STACK)
-+ dep r20=0,in0,61,3 // physical address of "current"
-+ ;;
-+ st8 [r22]=sp // save kernel stack pointer of old task
-+ shr.u r26=r20,IA64_GRANULE_SHIFT
-+ adds r21=IA64_TASK_THREAD_KSP_OFFSET,in0
-+ ;;
-+ /*
-+ * If we've already mapped this task's page, we can skip doing it again.
-+ */
-+ cmp.eq p7,p6=r26,r27
-+(p6) br.cond.dpnt .map
-+ ;;
-+#endif
- .done:
- (p6) ssm psr.ic // if we we had to map, renable the
psr.ic bit FIRST!!!
- ;;
-@@ -211,6 +249,16 @@
- br.ret.sptk.many rp // boogie on out in new context
-
- .map:
-+#ifdef XEN
-+ // avoid overlapping with kernel TR
-+ movl r25=KERNEL_START
-+ dep r23=0,in0,0,KERNEL_TR_PAGE_SHIFT
-+ ;;
-+ cmp.eq p7,p0=r25,r23
-+ ;;
-+(p7) mov IA64_KR(CURRENT_STACK)=r26 // remember last page we mapped...
-+(p7) br.cond.sptk .done
-+#endif
- rsm psr.ic // interrupts (psr.i) are already
disabled here
- movl r25=PAGE_KERNEL
- ;;
-@@ -367,7 +415,11 @@
- * - b7 holds address to return to
- * - must not touch r8-r11
- */
-+#ifdef XEN
-+GLOBAL_ENTRY(load_switch_stack)
-+#else
- ENTRY(load_switch_stack)
-+#endif
- .prologue
- .altrp b7
-
-@@ -595,6 +647,11 @@
- */
- br.call.sptk.many rp=ia64_invoke_schedule_tail
- }
-+#ifdef XEN
-+ // new domains are cloned but not exec'ed so switch to user mode here
-+ cmp.ne pKStk,pUStk=r0,r0
-+ br.cond.spnt ia64_leave_kernel
-+#else
- .ret8:
- adds r2=TI_FLAGS+IA64_TASK_SIZE,r13
- ;;
-@@ -603,6 +660,7 @@
- mov r8=0
- tbit.nz p6,p0=r2,TIF_SYSCALL_TRACE
- (p6) br.cond.spnt .strace_check_retval
-+#endif
- ;; // added stop bits to prevent
r8 dependency
- END(ia64_ret_from_clone)
- // fall through
-@@ -684,9 +742,14 @@
- #endif /* CONFIG_PREEMPT */
- adds r16=PT(LOADRS)+16,r12
- adds r17=PT(AR_BSPSTORE)+16,r12
-+#ifdef XEN
-+ mov r31=r0
-+ ;;
-+#else
- adds r18=TI_FLAGS+IA64_TASK_SIZE,r13
- ;;
- (p6) ld4 r31=[r18] // load
current_thread_info()->flags
-+#endif
- ld8 r19=[r16],PT(B6)-PT(LOADRS) // load ar.rsc value for
"loadrs"
- nop.i 0
- ;;
-@@ -745,7 +808,11 @@
- mov b7=r0 // clear b7
- ;;
- (pUStk) st1 [r14]=r3
-+#ifdef XEN
-+ movl r17=THIS_CPU(ia64_phys_stacked_size_p8)
-+#else
- addl r17=THIS_CPU(ia64_phys_stacked_size_p8),r0
-+#endif
- ;;
- mov r16=ar.bsp // get existing backing store pointer
- srlz.i // ensure interruption collection is off
-@@ -796,9 +863,18 @@
- ;;
- (p6) cmp.eq.unc p6,p0=r21,r0 // p6 <- p6 && (r21 == 0)
- #endif /* CONFIG_PREEMPT */
-+#ifdef XEN
-+ alloc loc0=ar.pfs,0,1,1,0
-+ adds out0=16,r12
-+ ;;
-+(p6) br.call.sptk.many b0=deliver_pending_interrupt
-+ mov ar.pfs=loc0
-+ mov r31=r0
-+#else
- adds r17=TI_FLAGS+IA64_TASK_SIZE,r13
- ;;
- (p6) ld4 r31=[r17] // load
current_thread_info()->flags
-+#endif
- adds r21=PT(PR)+16,r12
- ;;
-
-@@ -912,7 +988,11 @@
- shr.u r18=r19,16 // get byte size of existing "dirty" partition
- ;;
- mov r16=ar.bsp // get existing backing store pointer
-+#ifdef XEN
-+ movl r17=THIS_CPU(ia64_phys_stacked_size_p8)
-+#else
- addl r17=THIS_CPU(ia64_phys_stacked_size_p8),r0
-+#endif
- ;;
- ld4 r17=[r17] // r17 = cpu_data->phys_stacked_size_p8
- (pKStk) br.cond.dpnt skip_rbs_switch
-@@ -1264,6 +1344,7 @@
- br.ret.sptk.many rp
- END(unw_init_running)
-
-+#ifndef XEN
- .rodata
- .align 8
- .globl sys_call_table
-@@ -1526,3 +1607,4 @@
- data8 sys_ni_syscall
-
- .org sys_call_table + 8*NR_syscalls // guard against failures to
increase NR_syscalls
-+#endif
diff -r 5978be010bec -r 2b95125015a5
xen/arch/ia64/patch/linux-2.6.7/gcc_intrin.h
--- a/xen/arch/ia64/patch/linux-2.6.7/gcc_intrin.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,20 +0,0 @@
----
/home/djm/src/xen/xeno-ia64.bk/xen/linux-2.6.7/include/asm-ia64/gcc_intrin.h
2005-01-23 13:23:36.000000000 -0700
-+++ /home/djm/src/xen/xeno-ia64.bk/xen/include/asm-ia64/gcc_intrin.h
2004-08-25 19:28:13.000000000 -0600
-@@ -92,6 +92,9 @@
-
- #define ia64_hint_pause 0
-
-+#ifdef XEN
-+#define ia64_hint(mode) 0
-+#else
- #define ia64_hint(mode) \
- ({ \
- switch (mode) { \
-@@ -100,6 +103,7 @@
- break; \
- } \
- })
-+#endif
-
-
- /* Integer values for mux1 instruction */
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/hardirq.h
--- a/xen/arch/ia64/patch/linux-2.6.7/hardirq.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,22 +0,0 @@
---- /home/djm/src/xen/xeno-ia64.bk/xen/linux-2.6.7/include/asm-ia64/hardirq.h
2004-06-15 23:19:02.000000000 -0600
-+++ /home/djm/src/xen/xeno-ia64.bk/xen/include/asm-ia64/hardirq.h
2004-12-17 13:47:03.000000000 -0700
-@@ -81,10 +81,19 @@
- */
- #define in_irq() (hardirq_count())
- #define in_softirq() (softirq_count())
-+#ifdef XEN
- #define in_interrupt() (irq_count())
-+#else
-+#define in_interrupt() 0 // FIXME LATER
-+#endif
-
-+#ifdef XEN
-+#define hardirq_trylock(cpu) (!in_interrupt())
-+#define hardirq_endlock(cpu) do { } while (0)
-+#else
- #define hardirq_trylock() (!in_interrupt())
- #define hardirq_endlock() do { } while (0)
-+#endif
-
- #ifdef CONFIG_PREEMPT
- # include <linux/smp_lock.h>
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/head.S
--- a/xen/arch/ia64/patch/linux-2.6.7/head.S Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,93 +0,0 @@
---- ../../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
-+#define kernel_thread_helper 0
-+#define sys_exit 0
-+#endif
- /*
- * Here is where the ball gets rolling as far as the kernel is concerned.
- * When control is transferred to _start, the bootload has already
-@@ -166,7 +171,11 @@
- dep r18=0,r3,0,12
- ;;
- or r18=r17,r18
-+#ifdef XEN
-+ dep r2=-1,r3,60,4 // IMVA of task
-+#else
- dep r2=-1,r3,61,3 // IMVA of task
-+#endif
- ;;
- mov r17=rr[r2]
- ;;
-@@ -205,7 +214,11 @@
- ;;
- mov ar.rsc=0x3 // place RSE in eager mode
-
-+#ifdef XEN
-+(isBP) dep r28=-1,r28,60,4 // make address virtual
-+#else
- (isBP) dep r28=-1,r28,61,3 // make address virtual
-+#endif
- (isBP) movl r2=ia64_boot_param
- ;;
- (isBP) st8 [r2]=r28 // save the address of the boot param
area passed by the bootloader
-@@ -238,14 +251,30 @@
- br.call.sptk.many rp=sys_fw_init
- .ret1:
- #endif
-+#ifdef XEN
-+ alloc r2=ar.pfs,8,0,2,0
-+ ;;
-+#define fake_mbi_magic 0
-+#define MULTIBOOT_INFO_SIZE 1024
-+ .rodata
-+fake_mbi:
-+ .skip MULTIBOOT_INFO_SIZE
-+ .previous
-+ movl out0=fake_mbi
-+ ;;
-+ br.call.sptk.many rp=cmain
-+#else
- br.call.sptk.many rp=start_kernel
-+#endif
- .ret2: addl r3=@ltoff(halt_msg),gp
- ;;
- alloc r2=ar.pfs,8,0,2,0
- ;;
- ld8 out0=[r3]
- br.call.sptk.many b0=console_print
-+ ;;
- self: br.sptk.many self // endless loop
-+ ;;
- END(_start)
-
- GLOBAL_ENTRY(ia64_save_debug_regs)
-@@ -781,8 +810,13 @@
- movl r18=KERNEL_START
- 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,60,4
-+ dep sp=-1,sp,60,4
-+#else
- dep r17=-1,r17,61,3
- dep sp=-1,sp,61,3
-+#endif
- ;;
- or r3=r3,r18
- or r14=r14,r18
-@@ -838,7 +872,12 @@
- * intermediate precision so that we can produce a full 64-bit result.
- */
- GLOBAL_ENTRY(sched_clock)
-+#ifdef XEN
-+ break 0;; // FIX IA64_CPUINFO_NSEC_PER_CYC_OFFSET
-+ //movl r8=THIS_CPU(cpu_info) + IA64_CPUINFO_NSEC_PER_CYC_OFFSET
-+#else
- addl r8=THIS_CPU(cpu_info) + IA64_CPUINFO_NSEC_PER_CYC_OFFSET,r0
-+#endif
- mov.m r9=ar.itc // fetch cycle-counter
(35 cyc)
- ;;
- ldf8 f8=[r8]
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/hpsim_irq.c
--- a/xen/arch/ia64/patch/linux-2.6.7/hpsim_irq.c Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,36 +0,0 @@
----
/home/djm/src/xen/xeno-ia64.bk/xen/linux-2.6.7/arch/ia64/hp/sim/hpsim_irq.c
2004-06-15 23:20:26.000000000 -0600
-+++ /home/djm/src/xen/xeno-ia64.bk/xen/arch/ia64/hpsim_irq.c 2004-11-01
17:54:15.000000000 -0700
-@@ -9,7 +9,17 @@
- #include <linux/kernel.h>
- #include <linux/sched.h>
- #include <linux/irq.h>
-+#ifdef XEN
-+#include <asm/hw_irq.h>
-+#endif
-
-+#if 1
-+void __init
-+hpsim_irq_init (void)
-+{
-+ printf("*** hpsim_irq_init called: NOT NEEDED?!?!?\n");
-+}
-+#else
- static unsigned int
- hpsim_irq_startup (unsigned int irq)
- {
-@@ -19,6 +29,10 @@
- static void
- hpsim_irq_noop (unsigned int irq)
- {
-+#if 1
-+printf("hpsim_irq_noop: irq=%d\n",irq);
-+while(irq);
-+#endif
- }
-
- static struct hw_interrupt_type irq_type_hp_sim = {
-@@ -44,3 +58,4 @@
- idesc->handler = &irq_type_hp_sim;
- }
- }
-+#endif
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/hpsim_ssc.h
--- a/xen/arch/ia64/patch/linux-2.6.7/hpsim_ssc.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,26 +0,0 @@
----
/home/djm/src/xen/xeno-ia64.bk/xen/linux-2.6.7/arch/ia64/hp/sim/hpsim_ssc.h
2004-06-15 23:19:43.000000000 -0600
-+++ /home/djm/src/xen/xeno-ia64.bk/xen/include/asm-ia64/hpsim_ssc.h
2004-08-29 01:04:23.000000000 -0600
-@@ -33,4 +33,23 @@
- */
- extern long ia64_ssc (long arg0, long arg1, long arg2, long arg3, int nr);
-
-+#ifdef XEN
-+/* Note: These are declared in linux/arch/ia64/hp/sim/simscsi.c but belong
-+ * in linux/include/asm-ia64/hpsim_ssc.h, hence their addition here */
-+#define SSC_OPEN 50
-+#define SSC_CLOSE 51
-+#define SSC_READ 52
-+#define SSC_WRITE 53
-+#define SSC_GET_COMPLETION 54
-+#define SSC_WAIT_COMPLETION 55
-+
-+#define SSC_WRITE_ACCESS 2
-+#define SSC_READ_ACCESS 1
-+
-+struct ssc_disk_req {
-+ unsigned long addr;
-+ unsigned long len;
-+};
-+#endif
-+
- #endif /* _IA64_PLATFORM_HPSIM_SSC_H */
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/hw_irq.h
--- a/xen/arch/ia64/patch/linux-2.6.7/hw_irq.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,24 +0,0 @@
---- /home/djm/src/xen/xeno-ia64.bk/xen/linux-2.6.7/include/asm-ia64/hw_irq.h
2004-06-15 23:19:22.000000000 -0600
-+++ /home/djm/src/xen/xeno-ia64.bk/xen/include/asm-ia64/hw_irq.h
2004-08-27 09:07:38.000000000 -0600
-@@ -9,7 +9,9 @@
- #include <linux/interrupt.h>
- #include <linux/sched.h>
- #include <linux/types.h>
-+#ifndef XEN
- #include <linux/profile.h>
-+#endif
-
- #include <asm/machvec.h>
- #include <asm/ptrace.h>
-@@ -96,7 +98,11 @@
- * Default implementations for the irq-descriptor API:
- */
-
-+#ifdef XEN
-+#define _irq_desc irq_desc
-+#else
- extern irq_desc_t _irq_desc[NR_IRQS];
-+#endif
-
- #ifndef CONFIG_IA64_GENERIC
- static inline irq_desc_t *
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/ide.h
--- a/xen/arch/ia64/patch/linux-2.6.7/ide.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,35 +0,0 @@
---- /home/djm/src/xen/xeno-ia64.bk/xen/linux-2.6.7/include/asm-ia64/ide.h
2004-06-15 23:19:36.000000000 -0600
-+++ /home/djm/src/xen/xeno-ia64.bk/xen/include/asm-ia64/ide.h 2004-08-25
19:28:13.000000000 -0600
-@@ -64,6 +64,32 @@
- #define ide_init_default_irq(base) ide_default_irq(base)
- #endif
-
-+#ifdef XEN
-+// this is moved to linux/ide.h in newer versions of linux
-+typedef union {
-+ unsigned all : 8; /* all of the bits together */
-+ struct {
-+ unsigned head : 4; /* always zeros here */
-+ unsigned unit : 1; /* drive select number, 0 or 1
*/
-+ unsigned bit5 : 1; /* always 1 */
-+ unsigned lba : 1; /* using LBA instead of CHS */
-+ unsigned bit7 : 1; /* always 1 */
-+ } b;
-+} select_t;
-+
-+typedef union {
-+ unsigned all : 8; /* all of the bits together */
-+ struct {
-+ unsigned bit0 : 1;
-+ unsigned nIEN : 1; /* device INTRQ to host */
-+ unsigned SRST : 1; /* host soft reset bit */
-+ unsigned bit3 : 1; /* ATA-2 thingy */
-+ unsigned reserved456 : 3;
-+ unsigned HOB : 1; /* 48-bit address ordering */
-+ } b;
-+} control_t;
-+#endif
-+
- #include <asm-generic/ide_iops.h>
-
- #endif /* __KERNEL__ */
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/init_task.c
--- a/xen/arch/ia64/patch/linux-2.6.7/init_task.c Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,35 +0,0 @@
----
/home/djm/src/xen/xeno-ia64.bk/xen/linux-2.6.7/arch/ia64/kernel/init_task.c
2004-06-15 23:20:26.000000000 -0600
-+++ /home/djm/src/xen/xeno-ia64.bk/xen/arch/ia64/init_task.c 2004-08-27
00:06:35.000000000 -0600
-@@ -15,10 +15,12 @@
- #include <asm/uaccess.h>
- #include <asm/pgtable.h>
-
-+#ifndef XEN
- static struct fs_struct init_fs = INIT_FS;
- static struct files_struct init_files = INIT_FILES;
- static struct signal_struct init_signals = INIT_SIGNALS(init_signals);
- static struct sighand_struct init_sighand = INIT_SIGHAND(init_sighand);
-+#endif
- struct mm_struct init_mm = INIT_MM(init_mm);
-
- EXPORT_SYMBOL(init_mm);
-@@ -33,13 +35,19 @@
-
- union {
- struct {
-+#ifdef XEN
-+ struct domain task;
-+#else
- struct task_struct task;
- struct thread_info thread_info;
-+#endif
- } s;
- unsigned long stack[KERNEL_STACK_SIZE/sizeof (unsigned long)];
- } init_task_mem asm ("init_task") __attribute__((section(".data.init_task")))
= {{
- .task = INIT_TASK(init_task_mem.s.task),
-+#ifndef XEN
- .thread_info = INIT_THREAD_INFO(init_task_mem.s.task)
-+#endif
- }};
-
- EXPORT_SYMBOL(init_task);
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/init_task.h
--- a/xen/arch/ia64/patch/linux-2.6.7/init_task.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,53 +0,0 @@
---- /home/djm/src/xen/xeno-ia64.bk/xen/linux-2.6.7/include/linux/init_task.h
2004-06-15 23:18:57.000000000 -0600
-+++ /home/djm/src/xen/xeno-ia64.bk/xen/include/asm-ia64/linux/init_task.h
2004-11-15 17:06:20.000000000 -0700
-@@ -31,6 +31,18 @@
- .max_reqs = ~0U, \
- }
-
-+#ifdef XEN
-+#define INIT_MM(name) \
-+{ \
-+ .mm_rb = RB_ROOT, \
-+ .pgd = swapper_pg_dir, \
-+ .mm_users = ATOMIC_INIT(2), \
-+ .mm_count = ATOMIC_INIT(1), \
-+ .page_table_lock = SPIN_LOCK_UNLOCKED, \
-+ .mmlist = LIST_HEAD_INIT(name.mmlist), \
-+ .cpu_vm_mask = CPU_MASK_ALL, \
-+}
-+#else
- #define INIT_MM(name) \
- { \
- .mm_rb = RB_ROOT, \
-@@ -43,6 +55,7 @@
- .cpu_vm_mask = CPU_MASK_ALL, \
- .default_kioctx = INIT_KIOCTX(name.default_kioctx, name), \
- }
-+#endif
-
- #define INIT_SIGNALS(sig) { \
- .count = ATOMIC_INIT(1), \
-@@ -64,6 +77,15 @@
- * INIT_TASK is used to set up the first task table, touch at
- * your own risk!. Base=0, limit=0x1fffff (=2MB)
- */
-+#ifdef XEN
-+#define INIT_TASK(tsk) \
-+{ \
-+ /*processor: 0,*/ \
-+ /*domain_id: IDLE_DOMAIN_ID,*/ \
-+ /*domain_flags: DOMF_idle_domain,*/ \
-+ refcnt: ATOMIC_INIT(1) \
-+}
-+#else
- #define INIT_TASK(tsk) \
- { \
- .state = 0, \
-@@ -113,6 +135,7 @@
- .switch_lock = SPIN_LOCK_UNLOCKED, \
- .journal_info = NULL, \
- }
-+#endif
-
-
-
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/interrupt.h
--- a/xen/arch/ia64/patch/linux-2.6.7/interrupt.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,18 +0,0 @@
---- /home/djm/src/xen/xeno-ia64.bk/xen/linux-2.6.7/include/linux/interrupt.h
2004-06-15 23:19:29.000000000 -0600
-+++ /home/djm/src/xen/xeno-ia64.bk/xen/include/asm-ia64/linux/interrupt.h
2004-08-25 19:28:13.000000000 -0600
-@@ -32,6 +32,7 @@
- #define IRQ_HANDLED (1)
- #define IRQ_RETVAL(x) ((x) != 0)
-
-+#ifndef XEN
- struct irqaction {
- irqreturn_t (*handler)(int, void *, struct pt_regs *);
- unsigned long flags;
-@@ -46,6 +47,7 @@
- irqreturn_t (*handler)(int, void *, struct pt_regs *),
- unsigned long, const char *, void *);
- extern void free_irq(unsigned int, void *);
-+#endif
-
- /*
- * Temporary defines for UP kernels, until all code gets fixed.
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/io.h
--- a/xen/arch/ia64/patch/linux-2.6.7/io.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,14 +0,0 @@
---- /home/djm/src/xen/xeno-ia64.bk/xen/linux-2.6.7/include/asm-ia64/io.h
2004-06-15 23:18:57.000000000 -0600
-+++ /home/djm/src/xen/xeno-ia64.bk/xen/include/asm-ia64/io.h 2004-11-05
16:53:36.000000000 -0700
-@@ -23,7 +23,11 @@
- #define __SLOW_DOWN_IO do { } while (0)
- #define SLOW_DOWN_IO do { } while (0)
-
-+#ifdef XEN
-+#define __IA64_UNCACHED_OFFSET 0xdffc000000000000 /* region 6 */
-+#else
- #define __IA64_UNCACHED_OFFSET 0xc000000000000000 /* region 6 */
-+#endif
-
- /*
- * The legacy I/O space defined by the ia64 architecture supports only 65536
ports, but
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/irq.h
--- a/xen/arch/ia64/patch/linux-2.6.7/irq.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,18 +0,0 @@
---- /home/djm/src/xen/xeno-ia64.bk/xen/linux-2.6.7/include/asm-ia64/irq.h
2005-01-23 13:23:36.000000000 -0700
-+++ /home/djm/src/xen/xeno-ia64.bk/xen/include/asm-ia64/irq.h 2004-08-25
19:28:13.000000000 -0600
-@@ -30,6 +30,15 @@
- extern void enable_irq (unsigned int);
- extern void set_irq_affinity_info (unsigned int irq, int dest, int redir);
-
-+#ifdef XEN
-+// dup'ed from signal.h to avoid changes to includes
-+#define SA_NOPROFILE 0x02000000
-+#define SA_SHIRQ 0x04000000
-+#define SA_RESTART 0x10000000
-+#define SA_INTERRUPT 0x20000000
-+#define SA_SAMPLE_RANDOM SA_RESTART
-+#endif
-+
- #ifdef CONFIG_SMP
- extern void move_irq(int irq);
- #else
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/irq_ia64.c
--- a/xen/arch/ia64/patch/linux-2.6.7/irq_ia64.c Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,82 +0,0 @@
---- /home/djm/linux-2.6.7/arch/ia64/kernel/irq_ia64.c 2004-06-15
23:19:13.000000000 -0600
-+++ arch/ia64/irq_ia64.c 2005-02-17 13:17:16.000000000 -0700
-@@ -17,18 +17,26 @@
- #include <linux/config.h>
- #include <linux/module.h>
-
-+#ifndef XEN
- #include <linux/jiffies.h>
-+#endif
- #include <linux/errno.h>
- #include <linux/init.h>
- #include <linux/interrupt.h>
- #include <linux/ioport.h>
-+#ifndef XEN
- #include <linux/kernel_stat.h>
-+#endif
- #include <linux/slab.h>
-+#ifndef XEN
- #include <linux/ptrace.h>
- #include <linux/random.h> /* for rand_initialize_irq() */
- #include <linux/signal.h>
-+#endif
- #include <linux/smp.h>
-+#ifndef XEN
- #include <linux/smp_lock.h>
-+#endif
- #include <linux/threads.h>
-
- #include <asm/bitops.h>
-@@ -101,6 +109,24 @@
- ia64_handle_irq (ia64_vector vector, struct pt_regs *regs)
- {
- unsigned long saved_tpr;
-+#if 0
-+//FIXME: For debug only, can be removed
-+ static char firstirq = 1;
-+ static char firsttime[256];
-+ static char firstpend[256];
-+ if (firstirq) {
-+ int i;
-+ for (i=0;i<256;i++) firsttime[i] = 1;
-+ for (i=0;i<256;i++) firstpend[i] = 1;
-+ firstirq = 0;
-+ }
-+ if (firsttime[vector]) {
-+ printf("**** (entry) First received int on vector=%d,itc=%lx\n",
-+ (unsigned long) vector, ia64_get_itc());
-+ firsttime[vector] = 0;
-+ }
-+#endif
-+
-
- #if IRQ_DEBUG
- {
-@@ -145,6 +171,27 @@
- ia64_setreg(_IA64_REG_CR_TPR, vector);
- ia64_srlz_d();
-
-+#ifdef XEN
-+ if (vector != 0xef) {
-+ extern void vcpu_pend_interrupt(void *, int);
-+#if 0
-+ if (firsttime[vector]) {
-+ printf("**** (iterate) First received int on
vector=%d,itc=%lx\n",
-+ (unsigned long) vector, ia64_get_itc());
-+ firsttime[vector] = 0;
-+ }
-+ if (firstpend[vector]) {
-+ printf("**** First pended int on vector=%d,itc=%lx\n",
-+ (unsigned long) vector,ia64_get_itc());
-+ firstpend[vector] = 0;
-+ }
-+#endif
-+ //FIXME: TEMPORARY HACK!!!!
-+ vcpu_pend_interrupt(dom0->vcpu[0],vector);
-+ vcpu_wake(dom0->vcpu[0]);
-+ }
-+ else
-+#endif
- do_IRQ(local_vector_to_irq(vector), regs);
-
- /*
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/ivt.S
--- a/xen/arch/ia64/patch/linux-2.6.7/ivt.S Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,528 +0,0 @@
---- ../../linux-2.6.7/arch/ia64/kernel/ivt.S 2004-06-15 23:18:59.000000000
-0600
-+++ arch/ia64/ivt.S 2005-04-01 12:56:01.000000000 -0700
-@@ -1,3 +1,21 @@
-+
-+#ifdef XEN
-+//#define CONFIG_DISABLE_VHPT // FIXME: change when VHPT is enabled??
-+// these are all hacked out for now as the entire IVT
-+// will eventually be replaced... just want to use it
-+// for startup code to handle TLB misses
-+//#define ia64_leave_kernel 0
-+//#define ia64_ret_from_syscall 0
-+//#define ia64_handle_irq 0
-+//#define ia64_fault 0
-+#define ia64_illegal_op_fault 0
-+#define ia64_prepare_handle_unaligned 0
-+#define ia64_bad_break 0
-+#define ia64_trace_syscall 0
-+#define sys_call_table 0
-+#define sys_ni_syscall 0
-+#include <asm/vhpt.h>
-+#endif
- /*
- * arch/ia64/kernel/ivt.S
- *
-@@ -76,6 +94,13 @@
- mov r19=n;; /* prepare to save predicates */
\
- br.sptk.many dispatch_to_fault_handler
-
-+#ifdef XEN
-+#define REFLECT(n)
\
-+ mov r31=pr;
\
-+ mov r19=n;; /* prepare to save predicates */
\
-+ br.sptk.many dispatch_reflection
-+#endif
-+
- .section .text.ivt,"ax"
-
- .align 32768 // align on 32KB boundary
-@@ -213,6 +238,13 @@
- // 0x0400 Entry 1 (size 64 bundles) ITLB (21)
- ENTRY(itlb_miss)
- DBG_FAULT(1)
-+#ifdef XEN
-+ VHPT_CCHAIN_LOOKUP(itlb_miss,i)
-+#ifdef VHPT_GLOBAL
-+ br.cond.sptk page_fault
-+ ;;
-+#endif
-+#endif
- /*
- * The ITLB handler accesses the L3 PTE via the virtually mapped linear
- * page table. If a nested TLB miss occurs, we switch into physical
-@@ -257,6 +289,13 @@
- // 0x0800 Entry 2 (size 64 bundles) DTLB (9,48)
- ENTRY(dtlb_miss)
- DBG_FAULT(2)
-+#ifdef XEN
-+ VHPT_CCHAIN_LOOKUP(dtlb_miss,d)
-+#ifdef VHPT_GLOBAL
-+ br.cond.sptk page_fault
-+ ;;
-+#endif
-+#endif
- /*
- * The DTLB handler accesses the L3 PTE via the virtually mapped linear
- * page table. If a nested TLB miss occurs, we switch into physical
-@@ -301,6 +340,13 @@
- // 0x0c00 Entry 3 (size 64 bundles) Alt ITLB (19)
- ENTRY(alt_itlb_miss)
- DBG_FAULT(3)
-+#ifdef XEN
-+//#ifdef VHPT_GLOBAL
-+// VHPT_CCHAIN_LOOKUP(alt_itlb_miss,i)
-+// br.cond.sptk page_fault
-+// ;;
-+//#endif
-+#endif
- mov r16=cr.ifa // get address that caused the TLB miss
- movl r17=PAGE_KERNEL
- mov r21=cr.ipsr
-@@ -339,6 +385,13 @@
- // 0x1000 Entry 4 (size 64 bundles) Alt DTLB (7,46)
- ENTRY(alt_dtlb_miss)
- DBG_FAULT(4)
-+#ifdef XEN
-+//#ifdef VHPT_GLOBAL
-+// VHPT_CCHAIN_LOOKUP(alt_dtlb_miss,d)
-+// br.cond.sptk page_fault
-+// ;;
-+//#endif
-+#endif
- mov r16=cr.ifa // get address that caused the TLB miss
- movl r17=PAGE_KERNEL
- mov r20=cr.isr
-@@ -368,6 +421,17 @@
- cmp.ne p8,p0=r0,r23
- (p9) cmp.eq.or.andcm p6,p7=IA64_ISR_CODE_LFETCH,r22 // check isr.code field
- (p8) br.cond.spnt page_fault
-+#ifdef XEN
-+ ;;
-+ // FIXME: inadequate test, this is where we test for Xen address
-+ // 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,60
-+(p8) br.cond.spnt page_fault
-+//(p8) br.cond.spnt 0
-+ ;;
-+#endif
-
- dep r21=-1,r21,IA64_PSR_ED_BIT,1
- or r19=r19,r17 // insert PTE control bits into r19
-@@ -448,6 +512,9 @@
-
/////////////////////////////////////////////////////////////////////////////////////////
- // 0x1800 Entry 6 (size 64 bundles) Instruction Key Miss (24)
- ENTRY(ikey_miss)
-+#ifdef XEN
-+ REFLECT(6)
-+#endif
- DBG_FAULT(6)
- FAULT(6)
- END(ikey_miss)
-@@ -460,9 +527,16 @@
- srlz.i
- ;;
- SAVE_MIN_WITH_COVER
-+#ifdef XEN
-+ alloc r15=ar.pfs,0,0,4,0
-+ mov out0=cr.ifa
-+ mov out1=cr.isr
-+ mov out3=cr.itir
-+#else
- alloc r15=ar.pfs,0,0,3,0
- mov out0=cr.ifa
- mov out1=cr.isr
-+#endif
- adds r3=8,r2 // set up second base pointer
- ;;
- ssm psr.ic | PSR_DEFAULT_BITS
-@@ -483,6 +557,9 @@
-
/////////////////////////////////////////////////////////////////////////////////////////
- // 0x1c00 Entry 7 (size 64 bundles) Data Key Miss (12,51)
- ENTRY(dkey_miss)
-+#ifdef XEN
-+ REFLECT(7)
-+#endif
- DBG_FAULT(7)
- FAULT(7)
- END(dkey_miss)
-@@ -491,6 +568,9 @@
-
/////////////////////////////////////////////////////////////////////////////////////////
- // 0x2000 Entry 8 (size 64 bundles) Dirty-bit (54)
- ENTRY(dirty_bit)
-+#ifdef XEN
-+ REFLECT(8)
-+#endif
- DBG_FAULT(8)
- /*
- * What we do here is to simply turn on the dirty bit in the PTE. We
need to
-@@ -553,6 +633,9 @@
-
/////////////////////////////////////////////////////////////////////////////////////////
- // 0x2400 Entry 9 (size 64 bundles) Instruction Access-bit (27)
- ENTRY(iaccess_bit)
-+#ifdef XEN
-+ REFLECT(9)
-+#endif
- DBG_FAULT(9)
- // Like Entry 8, except for instruction access
- mov r16=cr.ifa // get the address that caused
the fault
-@@ -618,6 +701,9 @@
-
/////////////////////////////////////////////////////////////////////////////////////////
- // 0x2800 Entry 10 (size 64 bundles) Data Access-bit (15,55)
- ENTRY(daccess_bit)
-+#ifdef XEN
-+ REFLECT(10)
-+#endif
- DBG_FAULT(10)
- // Like Entry 8, except for data access
- mov r16=cr.ifa // get the address that caused
the fault
-@@ -686,6 +772,16 @@
- * to prevent leaking bits from kernel to user level.
- */
- DBG_FAULT(11)
-+#ifdef XEN
-+ mov r16=cr.isr
-+ mov r17=cr.iim
-+ mov r31=pr
-+ ;;
-+ cmp.eq p7,p0=r0,r17 // is this a psuedo-cover?
-+ // FIXME: may also need to check slot==2?
-+(p7) br.sptk.many dispatch_privop_fault
-+ br.sptk.many dispatch_break_fault
-+#endif
- mov r16=IA64_KR(CURRENT) // r16 = current task; 12 cycle
read lat.
- mov r17=cr.iim
- mov r18=__IA64_BREAK_SYSCALL
-@@ -696,7 +792,9 @@
- mov r27=ar.rsc
- mov r26=ar.pfs
- mov r28=cr.iip
-+#ifndef XEN
- mov r31=pr // prepare to save predicates
-+#endif
- mov r20=r1
- ;;
- adds r16=IA64_TASK_THREAD_ON_USTACK_OFFSET,r16
-@@ -792,6 +890,36 @@
- DBG_FAULT(13)
- FAULT(13)
-
-+#ifdef XEN
-+ // There is no particular reason for this code to be here, other than
that
-+ // there happens to be space here that would go unused otherwise. If
this
-+ // fault ever gets "unreserved", simply moved the following code to a
more
-+ // suitable spot...
-+
-+ENTRY(dispatch_break_fault)
-+ SAVE_MIN_WITH_COVER
-+ ;;
-+ alloc r14=ar.pfs,0,0,4,0 // now it's safe (must be first in insn group!)
-+ mov out0=cr.ifa
-+ adds out1=16,sp
-+ mov out2=cr.isr // FIXME: pity to make this slow access twice
-+ mov out3=cr.iim // FIXME: pity to make this slow access twice
-+
-+ ssm psr.ic | PSR_DEFAULT_BITS
-+ ;;
-+ srlz.i // guarantee that interruption
collection is on
-+ ;;
-+(p15) ssm psr.i // restore psr.i
-+ adds r3=8,r2 // set up second base pointer
-+ ;;
-+ SAVE_REST
-+ movl r14=ia64_leave_kernel
-+ ;;
-+ mov rp=r14
-+ br.sptk.many ia64_prepare_handle_break
-+END(dispatch_break_fault)
-+#endif
-+
- .org ia64_ivt+0x3800
-
/////////////////////////////////////////////////////////////////////////////////////////
- // 0x3800 Entry 14 (size 64 bundles) Reserved
-@@ -842,9 +970,11 @@
- * - ar.fpsr: set to kernel settings
- */
- GLOBAL_ENTRY(ia64_syscall_setup)
-+#ifndef XEN
- #if PT(B6) != 0
- # error This code assumes that b6 is the first field in pt_regs.
- #endif
-+#endif
- st8 [r1]=r19 // save b6
- add r16=PT(CR_IPSR),r1 // initialize first base pointer
- add r17=PT(R11),r1 // initialize second base
pointer
-@@ -974,6 +1104,37 @@
- DBG_FAULT(16)
- FAULT(16)
-
-+#ifdef XEN
-+ // There is no particular reason for this code to be here, other than
that
-+ // there happens to be space here that would go unused otherwise. If
this
-+ // fault ever gets "unreserved", simply moved the following code to a
more
-+ // suitable spot...
-+
-+ENTRY(dispatch_privop_fault)
-+ SAVE_MIN_WITH_COVER
-+ ;;
-+ alloc r14=ar.pfs,0,0,4,0 // now it's safe (must be first
in insn group!)
-+ mov out0=cr.ifa
-+ adds out1=16,sp
-+ mov out2=cr.isr // FIXME: pity to make this slow access twice
-+ mov out3=cr.itir
-+
-+ ssm psr.ic | PSR_DEFAULT_BITS
-+ ;;
-+ srlz.i // guarantee that interruption
collection is on
-+ ;;
-+(p15) ssm psr.i // restore psr.i
-+ adds r3=8,r2 // set up second base pointer
-+ ;;
-+ SAVE_REST
-+ movl r14=ia64_leave_kernel
-+ ;;
-+ mov rp=r14
-+ br.sptk.many ia64_prepare_handle_privop
-+END(dispatch_privop_fault)
-+#endif
-+
-+
- .org ia64_ivt+0x4400
-
/////////////////////////////////////////////////////////////////////////////////////////
- // 0x4400 Entry 17 (size 64 bundles) Reserved
-@@ -1090,6 +1251,9 @@
-
/////////////////////////////////////////////////////////////////////////////////////////
- // 0x5000 Entry 20 (size 16 bundles) Page Not Present (10,22,49)
- ENTRY(page_not_present)
-+#ifdef XEN
-+ REFLECT(20)
-+#endif
- DBG_FAULT(20)
- mov r16=cr.ifa
- rsm psr.dt
-@@ -1110,6 +1274,9 @@
-
/////////////////////////////////////////////////////////////////////////////////////////
- // 0x5100 Entry 21 (size 16 bundles) Key Permission (13,25,52)
- ENTRY(key_permission)
-+#ifdef XEN
-+ REFLECT(21)
-+#endif
- DBG_FAULT(21)
- mov r16=cr.ifa
- rsm psr.dt
-@@ -1123,6 +1290,9 @@
-
/////////////////////////////////////////////////////////////////////////////////////////
- // 0x5200 Entry 22 (size 16 bundles) Instruction Access Rights (26)
- ENTRY(iaccess_rights)
-+#ifdef XEN
-+ REFLECT(22)
-+#endif
- DBG_FAULT(22)
- mov r16=cr.ifa
- rsm psr.dt
-@@ -1136,6 +1306,9 @@
-
/////////////////////////////////////////////////////////////////////////////////////////
- // 0x5300 Entry 23 (size 16 bundles) Data Access Rights (14,53)
- ENTRY(daccess_rights)
-+#ifdef XEN
-+ REFLECT(23)
-+#endif
- DBG_FAULT(23)
- mov r16=cr.ifa
- rsm psr.dt
-@@ -1153,8 +1326,13 @@
- mov r16=cr.isr
- mov r31=pr
- ;;
-+#ifdef XEN
-+ cmp4.ge p6,p0=0x20,r16
-+(p6) br.sptk.many dispatch_privop_fault
-+#else
- cmp4.eq p6,p0=0,r16
- (p6) br.sptk.many dispatch_illegal_op_fault
-+#endif
- ;;
- mov r19=24 // fault number
- br.sptk.many dispatch_to_fault_handler
-@@ -1164,6 +1342,9 @@
-
/////////////////////////////////////////////////////////////////////////////////////////
- // 0x5500 Entry 25 (size 16 bundles) Disabled FP-Register (35)
- ENTRY(disabled_fp_reg)
-+#ifdef XEN
-+ REFLECT(25)
-+#endif
- DBG_FAULT(25)
- rsm psr.dfh // ensure we can access fph
- ;;
-@@ -1177,6 +1358,9 @@
-
/////////////////////////////////////////////////////////////////////////////////////////
- // 0x5600 Entry 26 (size 16 bundles) Nat Consumption (11,23,37,50)
- ENTRY(nat_consumption)
-+#ifdef XEN
-+ REFLECT(26)
-+#endif
- DBG_FAULT(26)
- FAULT(26)
- END(nat_consumption)
-@@ -1185,6 +1369,10 @@
-
/////////////////////////////////////////////////////////////////////////////////////////
- // 0x5700 Entry 27 (size 16 bundles) Speculation (40)
- ENTRY(speculation_vector)
-+#ifdef XEN
-+ // this probably need not reflect...
-+ REFLECT(27)
-+#endif
- DBG_FAULT(27)
- /*
- * A [f]chk.[as] instruction needs to take the branch to the recovery
code but
-@@ -1228,6 +1416,9 @@
-
/////////////////////////////////////////////////////////////////////////////////////////
- // 0x5900 Entry 29 (size 16 bundles) Debug (16,28,56)
- ENTRY(debug_vector)
-+#ifdef XEN
-+ REFLECT(29)
-+#endif
- DBG_FAULT(29)
- FAULT(29)
- END(debug_vector)
-@@ -1236,6 +1427,9 @@
-
/////////////////////////////////////////////////////////////////////////////////////////
- // 0x5a00 Entry 30 (size 16 bundles) Unaligned Reference (57)
- ENTRY(unaligned_access)
-+#ifdef XEN
-+ REFLECT(30)
-+#endif
- DBG_FAULT(30)
- mov r16=cr.ipsr
- mov r31=pr // prepare to save predicates
-@@ -1247,6 +1441,9 @@
-
/////////////////////////////////////////////////////////////////////////////////////////
- // 0x5b00 Entry 31 (size 16 bundles) Unsupported Data Reference (57)
- ENTRY(unsupported_data_reference)
-+#ifdef XEN
-+ REFLECT(31)
-+#endif
- DBG_FAULT(31)
- FAULT(31)
- END(unsupported_data_reference)
-@@ -1255,6 +1452,9 @@
-
/////////////////////////////////////////////////////////////////////////////////////////
- // 0x5c00 Entry 32 (size 16 bundles) Floating-Point Fault (64)
- ENTRY(floating_point_fault)
-+#ifdef XEN
-+ REFLECT(32)
-+#endif
- DBG_FAULT(32)
- FAULT(32)
- END(floating_point_fault)
-@@ -1263,6 +1463,9 @@
-
/////////////////////////////////////////////////////////////////////////////////////////
- // 0x5d00 Entry 33 (size 16 bundles) Floating Point Trap (66)
- ENTRY(floating_point_trap)
-+#ifdef XEN
-+ REFLECT(33)
-+#endif
- DBG_FAULT(33)
- FAULT(33)
- END(floating_point_trap)
-@@ -1271,6 +1474,9 @@
-
/////////////////////////////////////////////////////////////////////////////////////////
- // 0x5e00 Entry 34 (size 16 bundles) Lower Privilege Transfer Trap (66)
- ENTRY(lower_privilege_trap)
-+#ifdef XEN
-+ REFLECT(34)
-+#endif
- DBG_FAULT(34)
- FAULT(34)
- END(lower_privilege_trap)
-@@ -1279,6 +1485,9 @@
-
/////////////////////////////////////////////////////////////////////////////////////////
- // 0x5f00 Entry 35 (size 16 bundles) Taken Branch Trap (68)
- ENTRY(taken_branch_trap)
-+#ifdef XEN
-+ REFLECT(35)
-+#endif
- DBG_FAULT(35)
- FAULT(35)
- END(taken_branch_trap)
-@@ -1287,6 +1496,9 @@
-
/////////////////////////////////////////////////////////////////////////////////////////
- // 0x6000 Entry 36 (size 16 bundles) Single Step Trap (69)
- ENTRY(single_step_trap)
-+#ifdef XEN
-+ REFLECT(36)
-+#endif
- DBG_FAULT(36)
- FAULT(36)
- END(single_step_trap)
-@@ -1343,6 +1555,9 @@
-
/////////////////////////////////////////////////////////////////////////////////////////
- // 0x6900 Entry 45 (size 16 bundles) IA-32 Exeception
(17,18,29,41,42,43,44,58,60,61,62,72,73,75,76,77)
- ENTRY(ia32_exception)
-+#ifdef XEN
-+ REFLECT(45)
-+#endif
- DBG_FAULT(45)
- FAULT(45)
- END(ia32_exception)
-@@ -1351,6 +1566,9 @@
-
/////////////////////////////////////////////////////////////////////////////////////////
- // 0x6a00 Entry 46 (size 16 bundles) IA-32 Intercept (30,31,59,70,71)
- ENTRY(ia32_intercept)
-+#ifdef XEN
-+ REFLECT(46)
-+#endif
- DBG_FAULT(46)
- #ifdef CONFIG_IA32_SUPPORT
- mov r31=pr
-@@ -1381,6 +1599,9 @@
-
/////////////////////////////////////////////////////////////////////////////////////////
- // 0x6b00 Entry 47 (size 16 bundles) IA-32 Interrupt (74)
- ENTRY(ia32_interrupt)
-+#ifdef XEN
-+ REFLECT(47)
-+#endif
- DBG_FAULT(47)
- #ifdef CONFIG_IA32_SUPPORT
- mov r31=pr
-@@ -1510,6 +1731,39 @@
- DBG_FAULT(67)
- FAULT(67)
-
-+#ifdef XEN
-+ .org ia64_ivt+0x8000
-+ENTRY(dispatch_reflection)
-+ /*
-+ * Input:
-+ * psr.ic: off
-+ * r19: intr type (offset into ivt, see ia64_int.h)
-+ * r31: contains saved predicates (pr)
-+ */
-+ SAVE_MIN_WITH_COVER_R19
-+ alloc r14=ar.pfs,0,0,5,0
-+ mov out4=r15
-+ mov out0=cr.ifa
-+ adds out1=16,sp
-+ mov out2=cr.isr
-+ mov out3=cr.iim
-+// mov out3=cr.itir
-+
-+ ssm psr.ic | PSR_DEFAULT_BITS
-+ ;;
-+ srlz.i // guarantee that interruption
collection is on
-+ ;;
-+(p15) ssm psr.i // restore psr.i
-+ adds r3=8,r2 // set up second base pointer
-+ ;;
-+ SAVE_REST
-+ movl r14=ia64_leave_kernel
-+ ;;
-+ mov rp=r14
-+ br.sptk.many ia64_prepare_handle_reflection
-+END(dispatch_reflection)
-+#endif
-+
- #ifdef CONFIG_IA32_SUPPORT
-
- /*
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/kregs.h
--- a/xen/arch/ia64/patch/linux-2.6.7/kregs.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,13 +0,0 @@
---- /home/djm/src/xen/xeno-ia64.bk/xen/linux-2.6.7/include/asm-ia64/kregs.h
2004-06-15 23:19:01.000000000 -0600
-+++ /home/djm/src/xen/xeno-ia64.bk/xen/include/asm-ia64/kregs.h
2004-09-17 18:27:22.000000000 -0600
-@@ -30,6 +30,10 @@
- #define IA64_TR_PALCODE 1 /* itr1: maps PALcode as
required by EFI */
- #define IA64_TR_PERCPU_DATA 1 /* dtr1: percpu data */
- #define IA64_TR_CURRENT_STACK 2 /* dtr2: maps kernel's memory- &
register-stacks */
-+#ifdef XEN
-+#define IA64_TR_SHARED_INFO 3 /* dtr3: page shared with domain */
-+#define IA64_TR_VHPT 4 /* dtr4: vhpt */
-+#endif
-
- /* Processor status register bits: */
- #define IA64_PSR_BE_BIT 1
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/lds.S
--- a/xen/arch/ia64/patch/linux-2.6.7/lds.S Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,17 +0,0 @@
----
/home/djm/src/xen/xeno-ia64.bk/xen/linux-2.6.7/arch/ia64/kernel/vmlinux.lds.S
2004-06-15 23:19:52.000000000 -0600
-+++ /home/djm/src/xen/xeno-ia64.bk/xen/arch/ia64/xen.lds.S 2004-08-25
19:28:12.000000000 -0600
-@@ -11,12 +11,14 @@
- OUTPUT_FORMAT("elf64-ia64-little")
- OUTPUT_ARCH(ia64)
- ENTRY(phys_start)
-+#ifndef XEN
- jiffies = jiffies_64;
- PHDRS {
- code PT_LOAD;
- percpu PT_LOAD;
- data PT_LOAD;
- }
-+#endif
- SECTIONS
- {
- /* Sections to be discarded */
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/linuxtime.h
--- a/xen/arch/ia64/patch/linux-2.6.7/linuxtime.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,34 +0,0 @@
---- /home/djm/src/xen/xeno-ia64.bk/xen/linux-2.6.7/include/linux/time.h
2004-06-15 23:19:37.000000000 -0600
-+++ /home/djm/src/xen/xeno-ia64.bk/xen/include/xen/linuxtime.h 2004-11-15
17:42:04.000000000 -0700
-@@ -1,6 +1,11 @@
- #ifndef _LINUX_TIME_H
- #define _LINUX_TIME_H
-
-+#ifdef XEN
-+typedef s64 time_t;
-+typedef s64 suseconds_t;
-+#endif
-+
- #include <asm/param.h>
- #include <linux/types.h>
-
-@@ -25,7 +30,9 @@
- #ifdef __KERNEL__
-
- #include <linux/spinlock.h>
-+#ifndef XEN
- #include <linux/seqlock.h>
-+#endif
- #include <linux/timex.h>
- #include <asm/div64.h>
- #ifndef div_long_long_rem
-@@ -322,7 +329,9 @@
-
- extern struct timespec xtime;
- extern struct timespec wall_to_monotonic;
-+#ifndef XEN
- extern seqlock_t xtime_lock;
-+#endif
-
- static inline unsigned long get_seconds(void)
- {
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/mca_asm.h
--- a/xen/arch/ia64/patch/linux-2.6.7/mca_asm.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,32 +0,0 @@
---- ../../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 -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/minstate.h
--- a/xen/arch/ia64/patch/linux-2.6.7/minstate.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,29 +0,0 @@
---- ../../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
-
- #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 -r 5978be010bec -r 2b95125015a5
xen/arch/ia64/patch/linux-2.6.7/mm_bootmem.c
--- a/xen/arch/ia64/patch/linux-2.6.7/mm_bootmem.c Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,92 +0,0 @@
---- /home/djm/src/xen/xeno-ia64.bk/xen/linux-2.6.7/mm/bootmem.c
2004-06-15 23:19:09.000000000 -0600
-+++ /home/djm/src/xen/xeno-ia64.bk/xen/arch/ia64/mm_bootmem.c 2004-12-17
13:47:03.000000000 -0700
-@@ -10,7 +10,9 @@
- */
-
- #include <linux/mm.h>
-+#ifndef XEN
- #include <linux/kernel_stat.h>
-+#endif
- #include <linux/swap.h>
- #include <linux/interrupt.h>
- #include <linux/init.h>
-@@ -55,6 +57,9 @@
- bdata->node_bootmem_map = phys_to_virt(mapstart << PAGE_SHIFT);
- bdata->node_boot_start = (start << PAGE_SHIFT);
- bdata->node_low_pfn = end;
-+#ifdef XEN
-+//printk("init_bootmem_core:
mapstart=%lx,start=%lx,end=%lx,bdata->node_bootmem_map=%lx,bdata->node_boot_start=%lx,bdata->node_low_pfn=%lx\n",mapstart,start,end,bdata->node_bootmem_map,bdata->node_boot_start,bdata->node_low_pfn);
-+#endif
-
- /*
- * Initially all pages are reserved - setup_arch() has to
-@@ -146,6 +151,9 @@
- unsigned long i, start = 0, incr, eidx;
- void *ret;
-
-+#ifdef XEN
-+//printf("__alloc_bootmem_core(%lx,%lx,%lx,%lx)
called\n",bdata,size,align,goal);
-+#endif
- if(!size) {
- printk("__alloc_bootmem_core(): zero-sized request\n");
- BUG();
-@@ -153,6 +161,9 @@
- BUG_ON(align & (align-1));
-
- eidx = bdata->node_low_pfn - (bdata->node_boot_start >> PAGE_SHIFT);
-+#ifdef XEN
-+//printf("__alloc_bootmem_core: eidx=%lx\n",eidx);
-+#endif
- offset = 0;
- if (align &&
- (bdata->node_boot_start & (align - 1UL)) != 0)
-@@ -182,6 +193,9 @@
- unsigned long j;
- i = find_next_zero_bit(bdata->node_bootmem_map, eidx, i);
- i = ALIGN(i, incr);
-+#ifdef XEN
-+//if (i >= eidx) goto fail_block;
-+#endif
- if (test_bit(i, bdata->node_bootmem_map))
- continue;
- for (j = i + 1; j < i + areasize; ++j) {
-@@ -203,6 +217,9 @@
- return NULL;
-
- found:
-+#ifdef XEN
-+//printf("__alloc_bootmem_core: start=%lx\n",start);
-+#endif
- bdata->last_success = start << PAGE_SHIFT;
- BUG_ON(start >= eidx);
-
-@@ -262,6 +279,9 @@
- page = virt_to_page(phys_to_virt(bdata->node_boot_start));
- idx = bdata->node_low_pfn - (bdata->node_boot_start >> PAGE_SHIFT);
- map = bdata->node_bootmem_map;
-+#ifdef XEN
-+//printk("free_all_bootmem_core: bdata=%lx, bdata->node_boot_start=%lx,
bdata->node_low_pfn=%lx,
bdata->node_bootmem_map=%lx\n",bdata,bdata->node_boot_start,bdata->node_low_pfn,bdata->node_bootmem_map);
-+#endif
- for (i = 0; i < idx; ) {
- unsigned long v = ~map[i / BITS_PER_LONG];
- if (v) {
-@@ -285,6 +305,9 @@
- * Now free the allocator bitmap itself, it's not
- * needed anymore:
- */
-+#ifdef XEN
-+//printk("About to free the allocator bitmap itself\n");
-+#endif
- page = virt_to_page(bdata->node_bootmem_map);
- count = 0;
- for (i = 0; i < ((bdata->node_low_pfn-(bdata->node_boot_start >>
PAGE_SHIFT))/8 + PAGE_SIZE-1)/PAGE_SIZE; i++,page++) {
-@@ -327,6 +350,9 @@
- return(init_bootmem_core(&contig_page_data, start, 0, pages));
- }
-
-+#ifdef XEN
-+#undef reserve_bootmem
-+#endif
- #ifndef CONFIG_HAVE_ARCH_BOOTMEM_NODE
- void __init reserve_bootmem (unsigned long addr, unsigned long size)
- {
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/mm_contig.c
--- a/xen/arch/ia64/patch/linux-2.6.7/mm_contig.c Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,216 +0,0 @@
---- ../../linux-2.6.7/arch/ia64/mm/contig.c 2004-06-15 23:19:12.000000000
-0600
-+++ arch/ia64/mm_contig.c 2005-03-23 14:54:06.000000000 -0700
-@@ -15,11 +15,21 @@
- * memory.
- */
- #include <linux/config.h>
-+#ifdef XEN
-+#include <xen/sched.h>
-+#endif
- #include <linux/bootmem.h>
- #include <linux/efi.h>
- #include <linux/mm.h>
- #include <linux/swap.h>
-
-+#ifdef XEN
-+#undef reserve_bootmem
-+extern struct page *zero_page_memmap_ptr;
-+struct page *mem_map;
-+#define MAX_DMA_ADDRESS ~0UL // FIXME???
-+#endif
-+
- #include <asm/meminit.h>
- #include <asm/pgalloc.h>
- #include <asm/pgtable.h>
-@@ -37,30 +47,7 @@
- void
- show_mem (void)
- {
-- int i, total = 0, reserved = 0;
-- int shared = 0, cached = 0;
--
-- printk("Mem-info:\n");
-- show_free_areas();
--
-- printk("Free swap: %6dkB\n", nr_swap_pages<<(PAGE_SHIFT-10));
-- i = max_mapnr;
-- while (i-- > 0) {
-- if (!pfn_valid(i))
-- continue;
-- total++;
-- if (PageReserved(mem_map+i))
-- reserved++;
-- else if (PageSwapCache(mem_map+i))
-- cached++;
-- else if (page_count(mem_map + i))
-- shared += page_count(mem_map + i) - 1;
-- }
-- printk("%d pages of RAM\n", total);
-- printk("%d reserved pages\n", reserved);
-- printk("%d pages shared\n", shared);
-- printk("%d pages swap cached\n", cached);
-- printk("%ld pages in page table cache\n", pgtable_cache_size);
-+ printk("Dummy show_mem\n");
- }
-
- /* physical address where the bootmem map is located */
-@@ -80,6 +67,9 @@
- {
- unsigned long *max_pfnp = arg, pfn;
-
-+#ifdef XEN
-+//printf("find_max_pfn: start=%lx, end=%lx, *arg=%lx\n",start,end,*(unsigned
long *)arg);
-+#endif
- pfn = (PAGE_ALIGN(end - 1) - PAGE_OFFSET) >> PAGE_SHIFT;
- if (pfn > *max_pfnp)
- *max_pfnp = pfn;
-@@ -133,41 +123,6 @@
- return 0;
- }
-
--/**
-- * find_memory - setup memory map
-- *
-- * Walk the EFI memory map and find usable memory for the system, taking
-- * into account reserved areas.
-- */
--void
--find_memory (void)
--{
-- unsigned long bootmap_size;
--
-- reserve_memory();
--
-- /* first find highest page frame number */
-- max_pfn = 0;
-- efi_memmap_walk(find_max_pfn, &max_pfn);
--
-- /* how many bytes to cover all the pages */
-- bootmap_size = bootmem_bootmap_pages(max_pfn) << PAGE_SHIFT;
--
-- /* look for a location to hold the bootmap */
-- bootmap_start = ~0UL;
-- efi_memmap_walk(find_bootmap_location, &bootmap_size);
-- if (bootmap_start == ~0UL)
-- panic("Cannot find %ld bytes for bootmap\n", bootmap_size);
--
-- bootmap_size = init_bootmem(bootmap_start >> PAGE_SHIFT, max_pfn);
--
-- /* Free all available memory, then mark bootmem-map as being in use. */
-- efi_memmap_walk(filter_rsvd_memory, free_bootmem);
-- reserve_bootmem(bootmap_start, bootmap_size);
--
-- find_initrd();
--}
--
- #ifdef CONFIG_SMP
- /**
- * per_cpu_init - setup per-cpu variables
-@@ -227,73 +182,42 @@
- void
- paging_init (void)
- {
-- unsigned long max_dma;
-- unsigned long zones_size[MAX_NR_ZONES];
--#ifdef CONFIG_VIRTUAL_MEM_MAP
-- unsigned long zholes_size[MAX_NR_ZONES];
-- unsigned long max_gap;
--#endif
--
-- /* initialize mem_map[] */
-+ struct pfn_info *pg;
-+ /* Allocate and map the machine-to-phys table */
-+ if ((pg = alloc_domheap_pages(NULL, 10)) == NULL)
-+ panic("Not enough memory to bootstrap Xen.\n");
-+ memset(page_to_virt(pg), 0x55, 16UL << 20);
-
-- memset(zones_size, 0, sizeof(zones_size));
-+ /* Other mapping setup */
-
-- num_physpages = 0;
-- efi_memmap_walk(count_pages, &num_physpages);
-
-- max_dma = virt_to_phys((void *) MAX_DMA_ADDRESS) >> PAGE_SHIFT;
--
--#ifdef CONFIG_VIRTUAL_MEM_MAP
-- memset(zholes_size, 0, sizeof(zholes_size));
--
-- num_dma_physpages = 0;
-- efi_memmap_walk(count_dma_pages, &num_dma_physpages);
--
-- if (max_low_pfn < max_dma) {
-- zones_size[ZONE_DMA] = max_low_pfn;
-- zholes_size[ZONE_DMA] = max_low_pfn - num_dma_physpages;
-- } else {
-- zones_size[ZONE_DMA] = max_dma;
-- zholes_size[ZONE_DMA] = max_dma - num_dma_physpages;
-- if (num_physpages > num_dma_physpages) {
-- zones_size[ZONE_NORMAL] = max_low_pfn - max_dma;
-- zholes_size[ZONE_NORMAL] =
-- ((max_low_pfn - max_dma) -
-- (num_physpages - num_dma_physpages));
-- }
-- }
--
-- max_gap = 0;
-- efi_memmap_walk(find_largest_hole, (u64 *)&max_gap);
-- if (max_gap < LARGE_GAP) {
-- vmem_map = (struct page *) 0;
-- free_area_init_node(0, &contig_page_data, NULL, zones_size, 0,
-- zholes_size);
-- mem_map = contig_page_data.node_mem_map;
-- } else {
-- unsigned long map_size;
--
-- /* allocate virtual_mem_map */
--
-- map_size = PAGE_ALIGN(max_low_pfn * sizeof(struct page));
-- vmalloc_end -= map_size;
-- vmem_map = (struct page *) vmalloc_end;
-- efi_memmap_walk(create_mem_map_page_table, 0);
--
-- free_area_init_node(0, &contig_page_data, vmem_map, zones_size,
-- 0, zholes_size);
--
-- mem_map = contig_page_data.node_mem_map;
-- printk("Virtual mem_map starts at 0x%p\n", mem_map);
-- }
--#else /* !CONFIG_VIRTUAL_MEM_MAP */
-- if (max_low_pfn < max_dma)
-- zones_size[ZONE_DMA] = max_low_pfn;
-- else {
-- zones_size[ZONE_DMA] = max_dma;
-- zones_size[ZONE_NORMAL] = max_low_pfn - max_dma;
-- }
-- free_area_init(zones_size);
--#endif /* !CONFIG_VIRTUAL_MEM_MAP */
- zero_page_memmap_ptr = virt_to_page(ia64_imva(empty_zero_page));
- }
-+
-+struct pfn_info *frame_table;
-+unsigned long frame_table_size;
-+unsigned long max_page;
-+
-+/* FIXME: postpone support to machines with big holes between physical
memorys.
-+ * Current hack allows only efi memdesc upto 4G place. (See efi.c)
-+ */
-+#ifndef CONFIG_VIRTUAL_MEM_MAP
-+#define FT_ALIGN_SIZE (16UL << 20)
-+void __init init_frametable(void)
-+{
-+ unsigned long i, p;
-+ frame_table_size = max_page * sizeof(struct pfn_info);
-+ frame_table_size = (frame_table_size + PAGE_SIZE - 1) & PAGE_MASK;
-+
-+ /* Request continuous trunk from boot allocator, since HV
-+ * address is identity mapped */
-+ p = alloc_boot_pages(frame_table_size>>PAGE_SHIFT,
FT_ALIGN_SIZE>>PAGE_SHIFT) << PAGE_SHIFT;
-+ if (p == 0)
-+ panic("Not enough memory for frame table.\n");
-+
-+ frame_table = __va(p);
-+ memset(frame_table, 0, frame_table_size);
-+ printk("size of frame_table: %lukB\n",
-+ frame_table_size >> 10);
-+}
-+#endif
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/mmzone.h
--- a/xen/arch/ia64/patch/linux-2.6.7/mmzone.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,14 +0,0 @@
---- /home/djm/src/xen/xeno-ia64.bk/xen/linux-2.6.7/include/linux/mmzone.h
2004-06-15 23:19:36.000000000 -0600
-+++ /home/djm/src/xen/xeno-ia64.bk/xen/include/asm-ia64/linux/mmzone.h
2004-08-25 19:28:13.000000000 -0600
-@@ -185,7 +185,11 @@
- char *name;
- unsigned long spanned_pages; /* total size, including holes
*/
- unsigned long present_pages; /* amount of memory (excluding
holes) */
-+#ifdef XEN
-+};
-+#else
- } ____cacheline_maxaligned_in_smp;
-+#endif
-
-
- /*
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/page.h
--- a/xen/arch/ia64/patch/linux-2.6.7/page.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,84 +0,0 @@
---- ../../linux-2.6.7/include/asm-ia64/page.h 2004-06-15 23:18:58.000000000
-0600
-+++ 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>
-
-+#ifndef __ASSEMBLY__
-+#include <asm/flushtlb.h>
-+#endif
- /*
- * PAGE_SHIFT determines the actual kernel page size.
- */
-@@ -84,14 +87,22 @@
- #endif
-
- #ifndef CONFIG_DISCONTIGMEM
-+#ifdef XEN
-+#define pfn_valid(pfn) (0)
-+#else
- #define pfn_valid(pfn) (((pfn) < max_mapnr) &&
ia64_pfn_valid(pfn))
--#define page_to_pfn(page) ((unsigned long) (page - mem_map))
--#define pfn_to_page(pfn) (mem_map + (pfn))
-+#endif
- #endif /* CONFIG_DISCONTIGMEM */
-
--#define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT)
-+#define page_to_pfn(_page) ((unsigned long)((_page) - frame_table))
-+#define page_to_virt(_page) phys_to_virt(page_to_phys(_page))
-+
-+#define page_to_phys(_page) (page_to_pfn(_page) << PAGE_SHIFT)
- #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)
-
-+#define pfn_to_page(_pfn) (frame_table + (_pfn))
-+#define phys_to_page(kaddr) pfn_to_page(((kaddr) >> PAGE_SHIFT))
-+
- typedef union ia64_va {
- struct {
- unsigned long off : 61; /* intra-region offset */
-@@ -107,8 +118,25 @@
- * expressed in this way to ensure they result in a single "dep"
- * instruction.
- */
-+#ifdef XEN
-+typedef union xen_va {
-+ struct {
-+ unsigned long off : 60;
-+ unsigned long reg : 4;
-+ } f;
-+ unsigned long l;
-+ void *p;
-+} xen_va;
-+
-+// xen/drivers/console.c uses __va in a declaration (should be fixed!)
-+#define __pa(x) ({xen_va _v; _v.l = (long) (x); _v.f.reg = 0;
_v.l;})
-+#define __va(x) ({xen_va _v; _v.l = (long) (x); _v.f.reg = -1;
_v.p;})
-+//# define __pa(x) ((unsigned long)(((unsigned long)x) - PAGE_OFFSET))
-+//# define __va(x) ((void *)((char *)(x) + PAGE_OFFSET))
-+#else
- #define __pa(x) ({ia64_va _v; _v.l = (long) (x); _v.f.reg = 0;
_v.l;})
- #define __va(x) ({ia64_va _v; _v.l = (long) (x); _v.f.reg = -1;
_v.p;})
-+#endif
-
- #define REGION_NUMBER(x) ({ia64_va _v; _v.l = (long) (x); _v.f.reg;})
- #define REGION_OFFSET(x) ({ia64_va _v; _v.l = (long) (x); _v.f.off;})
-@@ -180,11 +208,19 @@
- # define __pgprot(x) (x)
- #endif /* !STRICT_MM_TYPECHECKS */
-
-+#ifdef XEN
-+#define PAGE_OFFSET 0xf000000000000000
-+#else
- #define PAGE_OFFSET 0xe000000000000000
-+#endif
-
- #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE |
\
- VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC
| \
- (((current->thread.flags &
IA64_THREAD_XSTACK) != 0) \
- ? VM_EXEC : 0))
-
-+#ifdef XEN
-+#define __flush_tlb() do {} while(0);
-+#endif
-+
- #endif /* _ASM_IA64_PAGE_H */
diff -r 5978be010bec -r 2b95125015a5
xen/arch/ia64/patch/linux-2.6.7/page_alloc.c
--- a/xen/arch/ia64/patch/linux-2.6.7/page_alloc.c Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,305 +0,0 @@
---- /home/djm/src/xen/xeno-ia64.bk/xen/linux-2.6.7/mm/page_alloc.c
2004-06-15 23:18:57.000000000 -0600
-+++ /home/djm/src/xen/xeno-ia64.bk/xen/arch/ia64/page_alloc.c 2004-12-17
13:47:03.000000000 -0700
-@@ -19,20 +19,28 @@
- #include <linux/mm.h>
- #include <linux/swap.h>
- #include <linux/interrupt.h>
-+#ifndef XEN
- #include <linux/pagemap.h>
-+#endif
- #include <linux/bootmem.h>
- #include <linux/compiler.h>
- #include <linux/module.h>
-+#ifndef XEN
- #include <linux/suspend.h>
- #include <linux/pagevec.h>
- #include <linux/blkdev.h>
-+#endif
- #include <linux/slab.h>
-+#ifndef XEN
- #include <linux/notifier.h>
-+#endif
- #include <linux/topology.h>
-+#ifndef XEN
- #include <linux/sysctl.h>
- #include <linux/cpu.h>
-
- #include <asm/tlbflush.h>
-+#endif
-
- DECLARE_BITMAP(node_online_map, MAX_NUMNODES);
- struct pglist_data *pgdat_list;
-@@ -71,6 +79,9 @@
-
- static void bad_page(const char *function, struct page *page)
- {
-+#ifdef XEN
-+printk("bad_page: called but disabled\n");
-+#else
- printk(KERN_EMERG "Bad page state at %s (in process '%s', page %p)\n",
- function, current->comm, page);
- printk(KERN_EMERG "flags:0x%08lx mapping:%p mapcount:%d count:%d\n",
-@@ -91,6 +102,7 @@
- set_page_count(page, 0);
- page->mapping = NULL;
- page->mapcount = 0;
-+#endif
- }
-
- #ifndef CONFIG_HUGETLB_PAGE
-@@ -218,6 +230,7 @@
-
- static inline void free_pages_check(const char *function, struct page *page)
- {
-+#ifndef XEN
- if ( page_mapped(page) ||
- page->mapping != NULL ||
- page_count(page) != 0 ||
-@@ -233,6 +246,7 @@
- 1 << PG_swapcache |
- 1 << PG_writeback )))
- bad_page(function, page);
-+#endif
- if (PageDirty(page))
- ClearPageDirty(page);
- }
-@@ -276,6 +290,9 @@
-
- void __free_pages_ok(struct page *page, unsigned int order)
- {
-+#ifdef XEN
-+printk("__free_pages_ok: called but disabled\n");
-+#else
- LIST_HEAD(list);
- int i;
-
-@@ -285,6 +302,7 @@
- list_add(&page->lru, &list);
- kernel_map_pages(page, 1<<order, 0);
- free_pages_bulk(page_zone(page), 1, &list, order);
-+#endif
- }
-
- #define MARK_USED(index, order, area) \
-@@ -330,6 +348,7 @@
- */
- static void prep_new_page(struct page *page, int order)
- {
-+#ifndef XEN
- if (page->mapping || page_mapped(page) ||
- (page->flags & (
- 1 << PG_private |
-@@ -343,11 +362,14 @@
- 1 << PG_swapcache |
- 1 << PG_writeback )))
- bad_page(__FUNCTION__, page);
-+#endif
-
- page->flags &= ~(1 << PG_uptodate | 1 << PG_error |
- 1 << PG_referenced | 1 << PG_arch_1 |
- 1 << PG_checked | 1 << PG_mappedtodisk);
-+#ifndef XEN
- page->private = 0;
-+#endif
- set_page_refs(page, order);
- }
-
-@@ -590,13 +612,17 @@
- unsigned long min;
- struct zone **zones;
- struct page *page;
-+#ifndef XEN
- struct reclaim_state reclaim_state;
-+#endif
- struct task_struct *p = current;
- int i;
- int alloc_type;
- int do_retry;
-
-+#ifndef XEN
- might_sleep_if(wait);
-+#endif
-
- zones = zonelist->zones; /* the list of zones suitable for gfp_mask */
- if (zones[0] == NULL) /* no zones in the zonelist */
-@@ -610,12 +636,14 @@
-
- min = (1<<order) + z->protection[alloc_type];
-
-+#ifndef XEN
- /*
- * We let real-time tasks dip their real-time paws a little
- * deeper into reserves.
- */
- if (rt_task(p))
- min -= z->pages_low >> 1;
-+#endif
-
- if (z->free_pages >= min ||
- (!wait && z->free_pages >= z->pages_high)) {
-@@ -627,9 +655,11 @@
- }
- }
-
-+#ifndef XEN
- /* we're somewhat low on memory, failed to find what we needed */
- for (i = 0; zones[i] != NULL; i++)
- wakeup_kswapd(zones[i]);
-+#endif
-
- /* Go through the zonelist again, taking __GFP_HIGH into account */
- for (i = 0; zones[i] != NULL; i++) {
-@@ -639,8 +669,10 @@
-
- if (gfp_mask & __GFP_HIGH)
- min -= z->pages_low >> 2;
-+#ifndef XEN
- if (rt_task(p))
- min -= z->pages_low >> 1;
-+#endif
-
- if (z->free_pages >= min ||
- (!wait && z->free_pages >= z->pages_high)) {
-@@ -654,6 +686,7 @@
-
- /* here we're in the low on memory slow path */
-
-+#ifndef XEN
- rebalance:
- if ((p->flags & (PF_MEMALLOC | PF_MEMDIE)) && !in_interrupt()) {
- /* go through the zonelist yet again, ignoring mins */
-@@ -681,6 +714,7 @@
-
- p->reclaim_state = NULL;
- p->flags &= ~PF_MEMALLOC;
-+#endif
-
- /* go through the zonelist yet one more time */
- for (i = 0; zones[i] != NULL; i++) {
-@@ -698,6 +732,11 @@
- }
- }
-
-+#ifdef XEN
-+printk(KERN_WARNING "%s: page allocation failure."
-+ " order:%d, mode:0x%x\n",
-+ "(xen tasks have no comm)", order, gfp_mask);
-+#else
- /*
- * Don't let big-order allocations loop unless the caller explicitly
- * requests that. Wait for some write requests to complete then retry.
-@@ -724,6 +763,7 @@
- p->comm, order, gfp_mask);
- dump_stack();
- }
-+#endif
- return NULL;
- got_pg:
- kernel_map_pages(page, 1 << order, 1);
-@@ -808,6 +848,7 @@
-
- EXPORT_SYMBOL(get_zeroed_page);
-
-+#ifndef XEN
- void __pagevec_free(struct pagevec *pvec)
- {
- int i = pagevec_count(pvec);
-@@ -815,10 +856,15 @@
- while (--i >= 0)
- free_hot_cold_page(pvec->pages[i], pvec->cold);
- }
-+#endif
-
- fastcall void __free_pages(struct page *page, unsigned int order)
- {
-+#ifdef XEN
-+ if (!PageReserved(page)) {
-+#else
- if (!PageReserved(page) && put_page_testzero(page)) {
-+#endif
- if (order == 0)
- free_hot_page(page);
- else
-@@ -914,6 +960,13 @@
- return nr_free_zone_pages(GFP_HIGHUSER & GFP_ZONEMASK);
- }
-
-+#ifdef XEN
-+unsigned int nr_free_highpages (void)
-+{
-+printf("nr_free_highpages: called but not implemented\n");
-+}
-+#endif
-+
- #ifdef CONFIG_HIGHMEM
- unsigned int nr_free_highpages (void)
- {
-@@ -1022,6 +1075,7 @@
-
- void si_meminfo(struct sysinfo *val)
- {
-+#ifndef XEN
- val->totalram = totalram_pages;
- val->sharedram = 0;
- val->freeram = nr_free_pages();
-@@ -1034,6 +1088,7 @@
- val->freehigh = 0;
- #endif
- val->mem_unit = PAGE_SIZE;
-+#endif
- }
-
- EXPORT_SYMBOL(si_meminfo);
-@@ -1165,7 +1220,9 @@
- printk("= %lukB\n", K(total));
- }
-
-+#ifndef XEN
- show_swap_cache_info();
-+#endif
- }
-
- /*
-@@ -1530,6 +1587,9 @@
- zone->wait_table_size = wait_table_size(size);
- zone->wait_table_bits =
- wait_table_bits(zone->wait_table_size);
-+#ifdef XEN
-+//printf("free_area_init_core-1: calling
alloc_bootmem_node(%lx,%lx)\n",pgdat,zone->wait_table_size *
sizeof(wait_queue_head_t));
-+#endif
- zone->wait_table = (wait_queue_head_t *)
- alloc_bootmem_node(pgdat, zone->wait_table_size
- * sizeof(wait_queue_head_t));
-@@ -1584,6 +1644,9 @@
- */
- bitmap_size = (size-1) >> (i+4);
- bitmap_size = LONG_ALIGN(bitmap_size+1);
-+#ifdef XEN
-+//printf("free_area_init_core-2: calling
alloc_bootmem_node(%lx,%lx)\n",pgdat, bitmap_size);
-+#endif
- zone->free_area[i].map =
- (unsigned long *) alloc_bootmem_node(pgdat,
bitmap_size);
- }
-@@ -1601,6 +1664,9 @@
- calculate_zone_totalpages(pgdat, zones_size, zholes_size);
- if (!node_mem_map) {
- size = (pgdat->node_spanned_pages + 1) * sizeof(struct page);
-+#ifdef XEN
-+//printf("free_area_init_node: calling
alloc_bootmem_node(%lx,%lx)\n",pgdat,size);
-+#endif
- node_mem_map = alloc_bootmem_node(pgdat, size);
- }
- pgdat->node_mem_map = node_mem_map;
-@@ -1784,6 +1850,7 @@
-
- #endif /* CONFIG_PROC_FS */
-
-+#ifndef XEN
- #ifdef CONFIG_HOTPLUG_CPU
- static int page_alloc_cpu_notify(struct notifier_block *self,
- unsigned long action, void *hcpu)
-@@ -2011,3 +2078,4 @@
- setup_per_zone_protection();
- return 0;
- }
-+#endif
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/pal.S
--- a/xen/arch/ia64/patch/linux-2.6.7/pal.S Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,26 +0,0 @@
---- ../../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 -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/pgalloc.h
--- a/xen/arch/ia64/patch/linux-2.6.7/pgalloc.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,65 +0,0 @@
---- ../../linux-2.6.7/include/asm-ia64/pgalloc.h 2004-06-15
23:18:54.000000000 -0600
-+++ include/asm-ia64/pgalloc.h 2005-03-23 14:54:11.000000000 -0700
-@@ -34,6 +34,10 @@
- #define pmd_quicklist (local_cpu_data->pmd_quick)
- #define pgtable_cache_size (local_cpu_data->pgtable_cache_sz)
-
-+/* FIXME: Later 3 level page table should be over, to create
-+ * new interface upon xen memory allocator. To simplify first
-+ * effort moving to xen allocator, use xenheap pages temporarily.
-+ */
- static inline pgd_t*
- pgd_alloc_one_fast (struct mm_struct *mm)
- {
-@@ -55,7 +59,7 @@
- pgd_t *pgd = pgd_alloc_one_fast(mm);
-
- if (unlikely(pgd == NULL)) {
-- pgd = (pgd_t *)__get_free_page(GFP_KERNEL);
-+ pgd = (pgd_t *)alloc_xenheap_page();
- if (likely(pgd != NULL))
- clear_page(pgd);
- }
-@@ -93,7 +97,7 @@
- static inline pmd_t*
- pmd_alloc_one (struct mm_struct *mm, unsigned long addr)
- {
-- pmd_t *pmd = (pmd_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT);
-+ pmd_t *pmd = (pmd_t *)alloc_xenheap_page();
-
- if (likely(pmd != NULL))
- clear_page(pmd);
-@@ -125,7 +129,7 @@
- static inline struct page *
- pte_alloc_one (struct mm_struct *mm, unsigned long addr)
- {
-- struct page *pte = alloc_pages(GFP_KERNEL|__GFP_REPEAT, 0);
-+ struct page *pte = alloc_xenheap_page();
-
- if (likely(pte != NULL))
- clear_page(page_address(pte));
-@@ -135,7 +139,7 @@
- static inline pte_t *
- pte_alloc_one_kernel (struct mm_struct *mm, unsigned long addr)
- {
-- pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT);
-+ pte_t *pte = (pte_t *)alloc_xenheap_page();
-
- if (likely(pte != NULL))
- clear_page(pte);
-@@ -145,13 +149,13 @@
- static inline void
- pte_free (struct page *pte)
- {
-- __free_page(pte);
-+ free_xenheap_page(pte);
- }
-
- static inline void
- pte_free_kernel (pte_t *pte)
- {
-- free_page((unsigned long) pte);
-+ free_xenheap_page((unsigned long) pte);
- }
-
- #define __pte_free_tlb(tlb, pte) tlb_remove_page((tlb), (pte))
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/processor.h
--- a/xen/arch/ia64/patch/linux-2.6.7/processor.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,19 +0,0 @@
----
/home/djm/src/xen/xeno-ia64.bk/xen/linux-2.6.7/include/asm-ia64/processor.h
2005-01-23 13:23:36.000000000 -0700
-+++ /home/djm/src/xen/xeno-ia64.bk/xen/include/asm-ia64/processor.h
2004-08-25 19:28:13.000000000 -0600
-@@ -406,12 +406,16 @@
- */
-
- /* Return TRUE if task T owns the fph partition of the CPU we're running on.
*/
-+#ifdef XEN
-+#define ia64_is_local_fpu_owner(t) 0
-+#else
- #define ia64_is_local_fpu_owner(t)
\
- ({
\
- struct task_struct *__ia64_islfo_task = (t);
\
- (__ia64_islfo_task->thread.last_fph_cpu == smp_processor_id()
\
- && __ia64_islfo_task == (struct task_struct *)
ia64_get_kr(IA64_KR_FPU_OWNER)); \
- })
-+#endif
-
- /* Mark task T as owning the fph partition of the CPU we're running on. */
- #define ia64_set_local_fpu_owner(t) do {
\
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/sal.h
--- a/xen/arch/ia64/patch/linux-2.6.7/sal.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,26 +0,0 @@
---- /home/djm/src/xen/xeno-ia64.bk/xen/linux-2.6.7/include/asm-ia64/sal.h
2004-06-15 23:20:04.000000000 -0600
-+++ /home/djm/src/xen/xeno-ia64.bk/xen/include/asm-ia64/sal.h 2004-10-27
13:55:23.000000000 -0600
-@@ -646,7 +646,23 @@
- {
- struct ia64_sal_retval isrv;
-
-+//#ifdef XEN
-+#if 0
-+ unsigned long *x = (unsigned long *)ia64_sal;
-+ unsigned long *inst = (unsigned long *)*x;
-+ unsigned long __ia64_sc_flags;
-+ struct ia64_fpreg __ia64_sc_fr[6];
-+printf("ia64_sal_freq_base: about to save_scratch_fpregs\n");
-+ ia64_save_scratch_fpregs(__ia64_sc_fr);
-+ spin_lock_irqsave(&sal_lock, __ia64_sc_flags);
-+printf("ia64_sal_freq_base: about to call, ia64_sal=%p, ia64_sal[0]=%p,
ia64_sal[1]=%p\n",x,x[0],x[1]);
-+printf("first inst=%p,%p\n",inst[0],inst[1]);
-+ isrv = (*ia64_sal)(SAL_FREQ_BASE, which, 0, 0, 0, 0, 0, 0);
-+ spin_unlock_irqrestore(&sal_lock, __ia64_sc_flags);
-+ ia64_load_scratch_fpregs(__ia64_sc_fr);
-+#else
- SAL_CALL(isrv, SAL_FREQ_BASE, which, 0, 0, 0, 0, 0, 0);
-+#endif
- *ticks_per_second = isrv.v0;
- *drift_info = isrv.v1;
- return isrv.status;
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/setup.c
--- a/xen/arch/ia64/patch/linux-2.6.7/setup.c Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,203 +0,0 @@
---- ../../linux-2.6.7/arch/ia64/kernel/setup.c 2004-06-15 23:18:58.000000000
-0600
-+++ arch/ia64/setup.c 2005-04-04 22:31:09.000000000 -0600
-@@ -21,6 +21,9 @@
- #include <linux/init.h>
-
- #include <linux/acpi.h>
-+#ifdef XEN
-+#include <xen/sched.h>
-+#endif
- #include <linux/bootmem.h>
- #include <linux/console.h>
- #include <linux/delay.h>
-@@ -30,13 +33,17 @@
- #include <linux/seq_file.h>
- #include <linux/string.h>
- #include <linux/threads.h>
-+#ifndef XEN
- #include <linux/tty.h>
- #include <linux/serial.h>
- #include <linux/serial_core.h>
-+#endif
- #include <linux/efi.h>
- #include <linux/initrd.h>
-
-+#ifndef XEN
- #include <asm/ia32.h>
-+#endif
- #include <asm/machvec.h>
- #include <asm/mca.h>
- #include <asm/meminit.h>
-@@ -50,6 +57,11 @@
- #include <asm/smp.h>
- #include <asm/system.h>
- #include <asm/unistd.h>
-+#ifdef XEN
-+#include <linux/mm.h>
-+#include <asm/mmu_context.h>
-+extern unsigned long loops_per_jiffy; // from linux/init/main.c
-+#endif
-
- #if defined(CONFIG_SMP) && (IA64_CPU_SIZE > PAGE_SIZE)
- # error "struct cpuinfo_ia64 too big!"
-@@ -65,7 +77,9 @@
- DEFINE_PER_CPU(unsigned long, ia64_phys_stacked_size_p8);
- unsigned long ia64_cycles_per_usec;
- struct ia64_boot_param *ia64_boot_param;
-+#ifndef XEN
- struct screen_info screen_info;
-+#endif
-
- unsigned long ia64_max_cacheline_size;
- unsigned long ia64_iobase; /* virtual address for I/O accesses */
-@@ -98,7 +112,6 @@
- struct rsvd_region rsvd_region[IA64_MAX_RSVD_REGIONS + 1];
- int num_rsvd_regions;
-
--
- /*
- * Filter incoming memory segments based on the primitive map created from
the boot
- * parameters. Segments contained in the map are removed from the memory
ranges. A
-@@ -128,9 +141,12 @@
- for (i = 0; i < num_rsvd_regions; ++i) {
- range_start = max(start, prev_start);
- range_end = min(end, rsvd_region[i].start);
--
-- if (range_start < range_end)
-- call_pernode_memory(__pa(range_start), range_end -
range_start, func);
-+ /* init_boot_pages requires "ps, pe" */
-+ if (range_start < range_end) {
-+ printk("Init boot pages: 0x%lx -> 0x%lx.\n",
-+ __pa(range_start), __pa(range_end));
-+ (*func)(__pa(range_start), __pa(range_end), 0);
-+ }
-
- /* nothing more available in this segment */
- if (range_end == end) return 0;
-@@ -187,17 +203,17 @@
- + strlen(__va(ia64_boot_param->command_line)) +
1);
- n++;
-
-+ /* Reserve xen image/bitmap/xen-heap */
- rsvd_region[n].start = (unsigned long) ia64_imva((void *)KERNEL_START);
-- rsvd_region[n].end = (unsigned long) ia64_imva(_end);
-+ rsvd_region[n].end = rsvd_region[n].start + xenheap_size;
- n++;
-
--#ifdef CONFIG_BLK_DEV_INITRD
-+ /* This is actually dom0 image */
- if (ia64_boot_param->initrd_start) {
- rsvd_region[n].start = (unsigned
long)__va(ia64_boot_param->initrd_start);
- rsvd_region[n].end = rsvd_region[n].start +
ia64_boot_param->initrd_size;
- n++;
- }
--#endif
-
- /* end of memory marker */
- rsvd_region[n].start = ~0UL;
-@@ -207,6 +223,16 @@
- num_rsvd_regions = n;
-
- sort_regions(rsvd_region, num_rsvd_regions);
-+
-+ {
-+ int i;
-+ printk("Reserved regions: \n");
-+ for (i = 0; i < num_rsvd_regions; i++)
-+ printk(" [%d] -> [0x%lx, 0x%lx]\n",
-+ i,
-+ rsvd_region[i].start,
-+ rsvd_region[i].end);
-+ }
- }
-
- /**
-@@ -280,23 +306,26 @@
- }
- #endif
-
-+#ifdef XEN
- void __init
--setup_arch (char **cmdline_p)
-+early_setup_arch(char **cmdline_p)
- {
- unw_init();
--
-- ia64_patch_vtop((u64) __start___vtop_patchlist, (u64)
__end___vtop_patchlist);
--
-+
- *cmdline_p = __va(ia64_boot_param->command_line);
- strlcpy(saved_command_line, *cmdline_p, sizeof(saved_command_line));
--
-+ cmdline_parse(*cmdline_p);
-+
- efi_init();
-- io_port_init();
--
-+
- #ifdef CONFIG_IA64_GENERIC
- machvec_init(acpi_get_sysname());
- #endif
-
-+#ifdef XEN
-+#undef CONFIG_ACPI_BOOT
-+#endif
-+
- #ifdef CONFIG_ACPI_BOOT
- /* Initialize the ACPI boot-time table parser */
- acpi_table_init();
-@@ -308,9 +337,13 @@
- smp_build_cpu_map(); /* happens, e.g., with the Ski simulator */
- # endif
- #endif /* CONFIG_APCI_BOOT */
-+ io_port_init();
-+}
-+#endif
-
-- find_memory();
--
-+void __init
-+setup_arch (void)
-+{
- /* process SAL system table: */
- ia64_sal_init(efi.sal_systab);
-
-@@ -353,7 +386,6 @@
- /* enable IA-64 Machine Check Abort Handling */
- ia64_mca_init();
-
-- platform_setup(cmdline_p);
- paging_init();
- }
-
-@@ -413,6 +445,9 @@
- sprintf(cp, " 0x%lx", mask);
- }
-
-+#ifdef XEN
-+#define seq_printf(a,b...) printf(b)
-+#endif
- seq_printf(m,
- "processor : %d\n"
- "vendor : %s\n"
-@@ -616,7 +651,11 @@
- | IA64_DCR_DA | IA64_DCR_DD |
IA64_DCR_LC));
- atomic_inc(&init_mm.mm_count);
- current->active_mm = &init_mm;
-+#ifdef XEN
-+ if (current->domain->arch.mm)
-+#else
- if (current->mm)
-+#endif
- BUG();
-
- ia64_mmu_init(ia64_imva(cpu_data));
-@@ -667,6 +706,8 @@
- void
- check_bugs (void)
- {
-+#ifndef XEN
- ia64_patch_mckinley_e9((unsigned long) __start___mckinley_e9_bundles,
- (unsigned long) __end___mckinley_e9_bundles);
-+#endif
- }
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/slab.c
--- a/xen/arch/ia64/patch/linux-2.6.7/slab.c Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,139 +0,0 @@
---- /home/djm/src/xen/xeno-ia64.bk/xen/linux-2.6.7/mm/slab.c 2004-06-15
23:19:44.000000000 -0600
-+++ /home/djm/src/xen/xeno-ia64.bk/xen/arch/ia64/slab.c 2004-12-17
13:47:03.000000000 -0700
-@@ -86,15 +86,30 @@
- #include <linux/init.h>
- #include <linux/compiler.h>
- #include <linux/seq_file.h>
-+#ifndef XEN
- #include <linux/notifier.h>
- #include <linux/kallsyms.h>
- #include <linux/cpu.h>
- #include <linux/sysctl.h>
- #include <linux/module.h>
-+#endif
-
- #include <asm/uaccess.h>
- #include <asm/cacheflush.h>
-+#ifndef XEN
- #include <asm/tlbflush.h>
-+#endif
-+
-+#ifdef XEN
-+#define lock_cpu_hotplug() do { } while (0)
-+#define unlock_cpu_hotplug() do { } while (0)
-+#define might_sleep_if(x) do { } while (0)
-+#define dump_stack() do { } while (0)
-+#define start_cpu_timer(cpu) do { } while (0)
-+static inline void __down(struct semaphore *sem) { }
-+static inline void __up(struct semaphore *sem) { }
-+static inline void might_sleep(void) { }
-+#endif
-
- /*
- * DEBUG - 1 for kmem_cache_create() to honour; SLAB_DEBUG_INITIAL,
-@@ -530,7 +545,9 @@
- FULL
- } g_cpucache_up;
-
-+#ifndef XEN
- static DEFINE_PER_CPU(struct timer_list, reap_timers);
-+#endif
-
- static void reap_timer_fnc(unsigned long data);
- static void free_block(kmem_cache_t* cachep, void** objpp, int len);
-@@ -588,6 +605,7 @@
- * Add the CPU number into the expiry time to minimize the possibility of the
- * CPUs getting into lockstep and contending for the global cache chain lock.
- */
-+#ifndef XEN
- static void __devinit start_cpu_timer(int cpu)
- {
- struct timer_list *rt = &per_cpu(reap_timers, cpu);
-@@ -600,6 +618,7 @@
- add_timer_on(rt, cpu);
- }
- }
-+#endif
-
- #ifdef CONFIG_HOTPLUG_CPU
- static void stop_cpu_timer(int cpu)
-@@ -634,6 +653,7 @@
- return nc;
- }
-
-+#ifndef XEN
- static int __devinit cpuup_callback(struct notifier_block *nfb,
- unsigned long action,
- void *hcpu)
-@@ -693,6 +713,7 @@
- }
-
- static struct notifier_block cpucache_notifier = { &cpuup_callback, NULL, 0 };
-+#endif
-
- /* Initialisation.
- * Called after the gfp() functions have been enabled, and before smp_init().
-@@ -805,10 +826,14 @@
- /* Done! */
- g_cpucache_up = FULL;
-
-+#ifdef XEN
-+printk("kmem_cache_init: some parts commented out, ignored\n");
-+#else
- /* Register a cpu startup notifier callback
- * that initializes ac_data for all new cpus
- */
- register_cpu_notifier(&cpucache_notifier);
-+#endif
-
-
- /* The reap timers are started later, with a module init call:
-@@ -886,8 +911,10 @@
- page++;
- }
- sub_page_state(nr_slab, nr_freed);
-+#ifndef XEN
- if (current->reclaim_state)
- current->reclaim_state->reclaimed_slab += nr_freed;
-+#endif
- free_pages((unsigned long)addr, cachep->gfporder);
- if (cachep->flags & SLAB_RECLAIM_ACCOUNT)
- atomic_sub(1<<cachep->gfporder, &slab_reclaim_pages);
-@@ -1363,8 +1390,10 @@
- + cachep->num;
- }
-
-+#ifndef XEN
- cachep->lists.next_reap = jiffies + REAPTIMEOUT_LIST3 +
- ((unsigned
long)cachep)%REAPTIMEOUT_LIST3;
-+#endif
-
- /* Need the semaphore to access the chain. */
- down(&cache_chain_sem);
-@@ -2237,8 +2266,10 @@
-
- if (unlikely(addr < min_addr))
- goto out;
-+#ifndef XEN
- if (unlikely(addr > (unsigned long)high_memory - size))
- goto out;
-+#endif
- if (unlikely(addr & align_mask))
- goto out;
- if (unlikely(!kern_addr_valid(addr)))
-@@ -2769,6 +2800,7 @@
- */
- static void reap_timer_fnc(unsigned long cpu)
- {
-+#ifndef XEN
- struct timer_list *rt = &__get_cpu_var(reap_timers);
-
- /* CPU hotplug can drag us off cpu: don't run on wrong CPU */
-@@ -2776,6 +2808,7 @@
- cache_reap();
- mod_timer(rt, jiffies + REAPTIMEOUT_CPUC + cpu);
- }
-+#endif
- }
-
- #ifdef CONFIG_PROC_FS
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/slab.h
--- a/xen/arch/ia64/patch/linux-2.6.7/slab.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,14 +0,0 @@
---- /home/djm/src/xen/xeno-ia64.bk/xen/linux-2.6.7/include/linux/slab.h
2004-06-15 23:20:26.000000000 -0600
-+++ /home/djm/src/xen/xeno-ia64.bk/xen/include/asm-ia64/slab.h 2004-08-25
19:28:13.000000000 -0600
-@@ -83,7 +83,11 @@
- goto found; \
- else \
- i++;
-+#ifdef XEN
-+#include <linux/kmalloc_sizes.h>
-+#else
- #include "kmalloc_sizes.h"
-+#endif
- #undef CACHE
- {
- extern void __you_cannot_kmalloc_that_much(void);
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/swiotlb.c
--- a/xen/arch/ia64/patch/linux-2.6.7/swiotlb.c Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,47 +0,0 @@
---- ../../linux-2.6.7/arch/ia64/lib/swiotlb.c 2004-06-15 23:19:43.000000000
-0600
-+++ arch/ia64/lib/swiotlb.c 2005-03-23 14:54:05.000000000 -0700
-@@ -100,7 +100,11 @@
- /*
- * Get IO TLB memory from the low pages
- */
-- io_tlb_start = alloc_bootmem_low_pages(io_tlb_nslabs * (1 <<
IO_TLB_SHIFT));
-+ /* FIXME: Do we really need swiotlb in HV? If all memory trunks
-+ * presented to guest as <4G, are actually <4G in machine range,
-+ * no DMA intevention from HV...
-+ */
-+ io_tlb_start = alloc_xenheap_pages(get_order(io_tlb_nslabs * (1 <<
IO_TLB_SHIFT)));
- if (!io_tlb_start)
- BUG();
- io_tlb_end = io_tlb_start + io_tlb_nslabs * (1 << IO_TLB_SHIFT);
-@@ -110,11 +114,11 @@
- * to find contiguous free memory regions of size up to IO_TLB_SEGSIZE
- * between io_tlb_start and io_tlb_end.
- */
-- io_tlb_list = alloc_bootmem(io_tlb_nslabs * sizeof(int));
-+ io_tlb_list = alloc_xenheap_pages(get_order(io_tlb_nslabs *
sizeof(int)));
- for (i = 0; i < io_tlb_nslabs; i++)
- io_tlb_list[i] = IO_TLB_SEGSIZE - OFFSET(i, IO_TLB_SEGSIZE);
- io_tlb_index = 0;
-- io_tlb_orig_addr = alloc_bootmem(io_tlb_nslabs * sizeof(char *));
-+ io_tlb_orig_addr = alloc_xenheap_pages(get_order(io_tlb_nslabs *
sizeof(char *)));
-
- printk(KERN_INFO "Placing software IO TLB between 0x%p - 0x%p\n",
- (void *) io_tlb_start, (void *) io_tlb_end);
-@@ -279,7 +283,7 @@
- /* XXX fix me: the DMA API should pass us an explicit DMA mask instead:
*/
- flags |= GFP_DMA;
-
-- ret = (void *)__get_free_pages(flags, get_order(size));
-+ ret = (void *)alloc_xenheap_pages(get_order(size));
- if (!ret)
- return NULL;
-
-@@ -294,7 +298,7 @@
- void
- swiotlb_free_coherent (struct device *hwdev, size_t size, void *vaddr,
dma_addr_t dma_handle)
- {
-- free_pages((unsigned long) vaddr, get_order(size));
-+ free_xenheap_pages((unsigned long) vaddr, get_order(size));
- }
-
- /*
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/system.h
--- a/xen/arch/ia64/patch/linux-2.6.7/system.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,43 +0,0 @@
---- ../../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 @@
- * 0xa000000000000000+2*PERCPU_PAGE_SIZE
- * - 0xa000000000000000+3*PERCPU_PAGE_SIZE remain unmapped (guard page)
- */
-+#ifdef XEN
-+//#define KERNEL_START 0xf000000100000000
-+#define KERNEL_START 0xf000000004000000
-+#define PERCPU_ADDR 0xf100000000000000-PERCPU_PAGE_SIZE
-+#define SHAREDINFO_ADDR 0xf100000000000000
-+#define VHPT_ADDR 0xf200000000000000
-+#else
- #define KERNEL_START 0xa000000100000000
- #define PERCPU_ADDR (-PERCPU_PAGE_SIZE)
-+#endif
-
- #ifndef __ASSEMBLY__
-
-@@ -218,9 +226,13 @@
- # define PERFMON_IS_SYSWIDE() (0)
- #endif
-
-+#ifdef XEN
-+#define IA64_HAS_EXTRA_STATE(t) 0
-+#else
- #define IA64_HAS_EXTRA_STATE(t)
\
- ((t)->thread.flags & (IA64_THREAD_DBG_VALID|IA64_THREAD_PM_VALID)
\
- || IS_IA32_PROCESS(ia64_task_regs(t)) || PERFMON_IS_SYSWIDE())
-+#endif
-
- #define __switch_to(prev,next,last) do {
\
- if (IA64_HAS_EXTRA_STATE(prev))
\
-@@ -249,6 +261,9 @@
- #else
- # define switch_to(prev,next,last) __switch_to(prev, next, last)
- #endif
-+//#ifdef XEN
-+//#undef switch_to
-+//#endif
-
- /*
- * On IA-64, we don't want to hold the runqueue's lock during the low-level
context-switch,
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/time.c
--- a/xen/arch/ia64/patch/linux-2.6.7/time.c Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,338 +0,0 @@
---- ../../linux-2.6.7/arch/ia64/kernel/time.c 2004-06-15 23:19:01.000000000
-0600
-+++ arch/ia64/time.c 2005-03-14 17:27:11.000000000 -0700
-@@ -10,16 +10,22 @@
- */
- #include <linux/config.h>
-
-+#ifndef XEN
- #include <linux/cpu.h>
-+#endif
- #include <linux/init.h>
- #include <linux/kernel.h>
- #include <linux/module.h>
-+#ifndef XEN
- #include <linux/profile.h>
-+#endif
- #include <linux/sched.h>
- #include <linux/time.h>
- #include <linux/interrupt.h>
- #include <linux/efi.h>
-+#ifndef XEN
- #include <linux/profile.h>
-+#endif
- #include <linux/timex.h>
-
- #include <asm/machvec.h>
-@@ -29,6 +35,9 @@
- #include <asm/sal.h>
- #include <asm/sections.h>
- #include <asm/system.h>
-+#ifdef XEN
-+#include <asm/ia64_int.h>
-+#endif
-
- extern unsigned long wall_jiffies;
-
-@@ -45,6 +54,59 @@
-
- #endif
-
-+#ifdef XEN
-+volatile unsigned long last_nsec_offset;
-+extern rwlock_t xtime_lock;
-+unsigned long cpu_khz; /* Detected as we calibrate the TSC */
-+static s_time_t stime_irq; /* System time at last 'time update'
*/
-+
-+static inline u64 get_time_delta(void)
-+{
-+ return ia64_get_itc();
-+}
-+
-+s_time_t get_s_time(void)
-+{
-+ s_time_t now;
-+ unsigned long flags;
-+
-+ read_lock_irqsave(&xtime_lock, flags);
-+
-+ now = stime_irq + get_time_delta();
-+
-+ /* Ensure that the returned system time is monotonically increasing. */
-+ {
-+ static s_time_t prev_now = 0;
-+ if ( unlikely(now < prev_now) )
-+ now = prev_now;
-+ prev_now = now;
-+ }
-+
-+ read_unlock_irqrestore(&xtime_lock, flags);
-+
-+ return now;
-+}
-+
-+void update_dom_time(struct vcpu *v)
-+{
-+// FIXME: implement this?
-+// printf("update_dom_time: called, not implemented, skipping\n");
-+ return;
-+}
-+
-+/* Set clock to <secs,usecs> after 00:00:00 UTC, 1 January, 1970. */
-+void do_settime(unsigned long secs, unsigned long usecs, u64 system_time_base)
-+{
-+// FIXME: Should this be do_settimeofday (from linux)???
-+ printf("do_settime: called, not implemented, stopping\n");
-+ dummy();
-+}
-+#endif
-+
-+#if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */
-+#endif /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */
-+
-+#ifndef XEN
- static void
- itc_reset (void)
- {
-@@ -80,12 +142,15 @@
- return (elapsed_cycles*local_cpu_data->nsec_per_cyc) >>
IA64_NSEC_PER_CYC_SHIFT;
- }
-
-+#ifndef XEN
- static struct time_interpolator itc_interpolator = {
- .get_offset = itc_get_offset,
- .update = itc_update,
- .reset = itc_reset
- };
-+#endif
-
-+#ifndef XEN
- int
- do_settimeofday (struct timespec *tv)
- {
-@@ -95,7 +160,9 @@
- if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC)
- return -EINVAL;
-
-+#ifdef TURN_ME_OFF_FOR_NOW_IA64_XEN
- write_seqlock_irq(&xtime_lock);
-+#endif
- {
- /*
- * This is revolting. We need to set "xtime" correctly.
However, the value
-@@ -117,12 +184,15 @@
- time_esterror = NTP_PHASE_LIMIT;
- time_interpolator_reset();
- }
-+#ifdef TURN_ME_OFF_FOR_NOW_IA64_XEN
- write_sequnlock_irq(&xtime_lock);
-+#endif
- clock_was_set();
- return 0;
- }
-
- EXPORT_SYMBOL(do_settimeofday);
-+#endif
-
- void
- do_gettimeofday (struct timeval *tv)
-@@ -185,6 +255,7 @@
- }
-
- EXPORT_SYMBOL(do_gettimeofday);
-+#endif
-
- /*
- * The profiling function is SMP safe. (nothing can mess
-@@ -195,6 +266,9 @@
- static inline void
- ia64_do_profile (struct pt_regs * regs)
- {
-+#ifdef XEN
-+}
-+#else
- unsigned long ip, slot;
- extern cpumask_t prof_cpu_mask;
-
-@@ -231,24 +305,89 @@
- ip = prof_len-1;
- atomic_inc((atomic_t *)&prof_buffer[ip]);
- }
-+#endif
-+
-+#ifdef XEN
-+unsigned long domain0_ready = 0; // FIXME (see below)
-+#define typecheck(a,b) 1
-+/* FROM linux/include/linux/jiffies.h */
-+/*
-+ * These inlines deal with timer wrapping correctly. You are
-+ * strongly encouraged to use them
-+ * 1. Because people otherwise forget
-+ * 2. Because if the timer wrap changes in future you won't have to
-+ * alter your driver code.
-+ *
-+ * time_after(a,b) returns true if the time a is after time b.
-+ *
-+ * Do this with "<0" and ">=0" to only test the sign of the result. A
-+ * good compiler would generate better code (and a really good compiler
-+ * wouldn't care). Gcc is currently neither.
-+ */
-+#define time_after(a,b) \
-+ (typecheck(unsigned long, a) && \
-+ typecheck(unsigned long, b) && \
-+ ((long)(b) - (long)(a) < 0))
-+#define time_before(a,b) time_after(b,a)
-+
-+#define time_after_eq(a,b) \
-+ (typecheck(unsigned long, a) && \
-+ typecheck(unsigned long, b) && \
-+ ((long)(a) - (long)(b) >= 0))
-+#define time_before_eq(a,b) time_after_eq(b,a)
-+#endif
-
- static irqreturn_t
- timer_interrupt (int irq, void *dev_id, struct pt_regs *regs)
- {
- unsigned long new_itm;
-
-+#ifndef XEN
- if (unlikely(cpu_is_offline(smp_processor_id()))) {
- return IRQ_HANDLED;
- }
-+#endif
-+#ifdef XEN
-+ if (current->domain == dom0) {
-+ // FIXME: there's gotta be a better way of doing this...
-+ // We have to ensure that domain0 is launched before we
-+ // call vcpu_timer_expired on it
-+ //domain0_ready = 1; // moved to xensetup.c
-+ }
-+ if (domain0_ready && vcpu_timer_expired(dom0->vcpu[0])) {
-+ vcpu_pend_timer(dom0->vcpu[0]);
-+ //vcpu_set_next_timer(dom0->vcpu[0]);
-+ vcpu_wake(dom0->vcpu[0]);
-+ }
-+ if (!is_idle_task(current->domain) && current->domain != dom0) {
-+ if (vcpu_timer_expired(current)) {
-+ vcpu_pend_timer(current);
-+ // ensure another timer interrupt happens even if
domain doesn't
-+ vcpu_set_next_timer(current);
-+ vcpu_wake(current);
-+ }
-+ }
-+ raise_actimer_softirq();
-+#endif
-
-+#ifndef XEN
- platform_timer_interrupt(irq, dev_id, regs);
-+#endif
-
- new_itm = local_cpu_data->itm_next;
-
- if (!time_after(ia64_get_itc(), new_itm))
-+#ifdef XEN
-+ return;
-+#else
- printk(KERN_ERR "Oops: timer tick before it's due
(itc=%lx,itm=%lx)\n",
- ia64_get_itc(), new_itm);
-+#endif
-
-+#ifdef XEN
-+// printf("GOT TO HERE!!!!!!!!!!!\n");
-+ //while(1);
-+#endif
- ia64_do_profile(regs);
-
- while (1) {
-@@ -269,10 +408,16 @@
- * another CPU. We need to avoid to SMP race by
acquiring the
- * xtime_lock.
- */
-+#ifdef TURN_ME_OFF_FOR_NOW_IA64_XEN
- write_seqlock(&xtime_lock);
-+#endif
-+#ifdef TURN_ME_OFF_FOR_NOW_IA64_XEN
- do_timer(regs);
-+#endif
- local_cpu_data->itm_next = new_itm;
-+#ifdef TURN_ME_OFF_FOR_NOW_IA64_XEN
- write_sequnlock(&xtime_lock);
-+#endif
- } else
- local_cpu_data->itm_next = new_itm;
-
-@@ -292,7 +437,12 @@
- */
- while (!time_after(new_itm, ia64_get_itc() +
local_cpu_data->itm_delta/2))
- new_itm += local_cpu_data->itm_delta;
-+//#ifdef XEN
-+// vcpu_set_next_timer(current);
-+//#else
-+//printf("***** timer_interrupt: Setting itm to %lx\n",new_itm);
- ia64_set_itm(new_itm);
-+//#endif
- /* double check, in case we got hit by a (slow) PMI: */
- } while (time_after_eq(ia64_get_itc(), new_itm));
- return IRQ_HANDLED;
-@@ -307,6 +457,7 @@
- int cpu = smp_processor_id();
- unsigned long shift = 0, delta;
-
-+printf("ia64_cpu_local_tick: about to call ia64_set_itv\n");
- /* arrange for the cycle counter to generate a timer interrupt: */
- ia64_set_itv(IA64_TIMER_VECTOR);
-
-@@ -320,6 +471,7 @@
- shift = (2*(cpu - hi) + 1) * delta/hi/2;
- }
- local_cpu_data->itm_next = ia64_get_itc() + delta + shift;
-+printf("***** ia64_cpu_local_tick: Setting itm to
%lx\n",local_cpu_data->itm_next);
- ia64_set_itm(local_cpu_data->itm_next);
- }
-
-@@ -335,6 +487,7 @@
- * frequency and then a PAL call to determine the frequency ratio
between the ITC
- * and the base frequency.
- */
-+
- status = ia64_sal_freq_base(SAL_FREQ_BASE_PLATFORM,
- &platform_base_freq, &platform_base_drift);
- if (status != 0) {
-@@ -384,9 +537,11 @@
- + itc_freq/2)/itc_freq;
-
- if (!(sal_platform_features & IA64_SAL_PLATFORM_FEATURE_ITC_DRIFT)) {
-+#ifndef XEN
- itc_interpolator.frequency = local_cpu_data->itc_freq;
- itc_interpolator.drift = itc_drift;
- register_time_interpolator(&itc_interpolator);
-+#endif
- }
-
- /* Setup the CPU local timer tick */
-@@ -395,7 +550,9 @@
-
- static struct irqaction timer_irqaction = {
- .handler = timer_interrupt,
-+#ifndef XEN
- .flags = SA_INTERRUPT,
-+#endif
- .name = "timer"
- };
-
-@@ -403,12 +560,16 @@
- time_init (void)
- {
- register_percpu_irq(IA64_TIMER_VECTOR, &timer_irqaction);
-+#ifndef XEN
- efi_gettimeofday(&xtime);
-+#endif
- ia64_init_itm();
-
-+#ifndef XEN
- /*
- * Initialize wall_to_monotonic such that adding it to xtime will yield
zero, the
- * tv_nsec field must be normalized (i.e., 0 <= nsec < NSEC_PER_SEC).
- */
- set_normalized_timespec(&wall_to_monotonic, -xtime.tv_sec,
-xtime.tv_nsec);
-+#endif
- }
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/tlb.c
--- a/xen/arch/ia64/patch/linux-2.6.7/tlb.c Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,48 +0,0 @@
---- /home/djm/src/xen/xeno-ia64.bk/xen/linux-2.6.7/arch/ia64/mm/tlb.c
2004-06-15 23:19:43.000000000 -0600
-+++ /home/djm/src/xen/xeno-ia64.bk/xen/arch/ia64/tlb.c 2004-08-25
19:28:12.000000000 -0600
-@@ -21,7 +21,9 @@
- #include <asm/mmu_context.h>
- #include <asm/pgalloc.h>
- #include <asm/pal.h>
-+#ifndef XEN
- #include <asm/tlbflush.h>
-+#endif
-
- static struct {
- unsigned long mask; /* mask of supported purge page-sizes */
-@@ -43,6 +45,9 @@
- void
- wrap_mmu_context (struct mm_struct *mm)
- {
-+#ifdef XEN
-+printf("wrap_mmu_context: called, not implemented\n");
-+#else
- unsigned long tsk_context, max_ctx = ia64_ctx.max_ctx;
- struct task_struct *tsk;
- int i;
-@@ -83,6 +88,7 @@
- put_cpu();
- }
- local_flush_tlb_all();
-+#endif
- }
-
- void
-@@ -132,6 +138,9 @@
- void
- flush_tlb_range (struct vm_area_struct *vma, unsigned long start, unsigned
long end)
- {
-+#ifdef XEN
-+printf("flush_tlb_range: called, not implemented\n");
-+#else
- struct mm_struct *mm = vma->vm_mm;
- unsigned long size = end - start;
- unsigned long nbits;
-@@ -163,6 +172,7 @@
- # endif
-
- ia64_srlz_i(); /* srlz.i implies srlz.d */
-+#endif
- }
- EXPORT_SYMBOL(flush_tlb_range);
-
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/types.h
--- a/xen/arch/ia64/patch/linux-2.6.7/types.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,15 +0,0 @@
---- /home/djm/src/xen/xeno-ia64.bk/xen/linux-2.6.7/include/asm-ia64/types.h
2004-06-15 23:19:01.000000000 -0600
-+++ /home/djm/src/xen/xeno-ia64.bk/xen/include/asm-ia64/types.h
2004-11-11 17:08:30.000000000 -0700
-@@ -1,5 +1,12 @@
- #ifndef _ASM_IA64_TYPES_H
- #define _ASM_IA64_TYPES_H
-+#ifdef XEN
-+#ifndef __ASSEMBLY__
-+typedef unsigned long ssize_t;
-+typedef unsigned long size_t;
-+typedef long long loff_t;
-+#endif
-+#endif
-
- /*
- * This file is never included by application software unless explicitly
requested (e.g.,
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/unaligned.c
--- a/xen/arch/ia64/patch/linux-2.6.7/unaligned.c Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,97 +0,0 @@
----
/home/djm/src/xen/xeno-ia64.bk/xen/linux-2.6.7/arch/ia64/kernel/unaligned.c
2004-06-15 23:20:03.000000000 -0600
-+++ /home/djm/src/xen/xeno-ia64.bk/xen/arch/ia64/unaligned.c 2004-08-25
19:28:12.000000000 -0600
-@@ -15,8 +15,10 @@
- */
- #include <linux/kernel.h>
- #include <linux/sched.h>
-+#ifndef XEN
- #include <linux/smp_lock.h>
- #include <linux/tty.h>
-+#endif
-
- #include <asm/intrinsics.h>
- #include <asm/processor.h>
-@@ -24,7 +26,16 @@
- #include <asm/uaccess.h>
- #include <asm/unaligned.h>
-
-+#ifdef XEN
-+#define ia64_peek(x...) printk("ia64_peek: called, not implemented\n")
-+#define ia64_poke(x...) printk("ia64_poke: called, not implemented\n")
-+#define ia64_sync_fph(x...) printk("ia64_sync_fph: called, not
implemented\n")
-+#define ia64_flush_fph(x...) printk("ia64_flush_fph: called, not
implemented\n")
-+#define die_if_kernel(x...) printk("die_if_kernel: called, not
implemented\n")
-+#define jiffies 0
-+#else
- extern void die_if_kernel(char *str, struct pt_regs *regs, long err)
__attribute__ ((noreturn));
-+#endif
-
- #undef DEBUG_UNALIGNED_TRAP
-
-@@ -437,7 +448,11 @@
- }
-
-
-+#ifdef XEN
-+void
-+#else
- static void
-+#endif
- setreg (unsigned long regnum, unsigned long val, int nat, struct pt_regs
*regs)
- {
- struct switch_stack *sw = (struct switch_stack *) regs - 1;
-@@ -611,7 +626,11 @@
- }
-
-
-+#ifdef XEN
-+void
-+#else
- static void
-+#endif
- getreg (unsigned long regnum, unsigned long *val, int *nat, struct pt_regs
*regs)
- {
- struct switch_stack *sw = (struct switch_stack *) regs - 1;
-@@ -1298,7 +1317,9 @@
- mm_segment_t old_fs = get_fs();
- unsigned long bundle[2];
- unsigned long opcode;
-+#ifndef XEN
- struct siginfo si;
-+#endif
- const struct exception_table_entry *eh = NULL;
- union {
- unsigned long l;
-@@ -1317,6 +1338,9 @@
- * user-level unaligned accesses. Otherwise, a clever program could
trick this
- * handler into reading an arbitrary kernel addresses...
- */
-+#ifdef XEN
-+printk("ia64_handle_unaligned: called, not working yet\n");
-+#else
- if (!user_mode(regs))
- eh = search_exception_tables(regs->cr_iip + ia64_psr(regs)->ri);
- if (user_mode(regs) || eh) {
-@@ -1353,6 +1377,7 @@
-
- if (__copy_from_user(bundle, (void *) regs->cr_iip, 16))
- goto failure;
-+#endif
-
- /*
- * extract the instruction from the bundle given the slot number
-@@ -1493,6 +1518,7 @@
- /* NOT_REACHED */
- }
- force_sigbus:
-+#ifndef XEN
- si.si_signo = SIGBUS;
- si.si_errno = 0;
- si.si_code = BUS_ADRALN;
-@@ -1501,5 +1527,6 @@
- si.si_isr = 0;
- si.si_imm = 0;
- force_sig_info(SIGBUS, &si, current);
-+#endif
- goto done;
- }
diff -r 5978be010bec -r 2b95125015a5 xen/arch/ia64/patch/linux-2.6.7/wait.h
--- a/xen/arch/ia64/patch/linux-2.6.7/wait.h Fri Aug 26 11:02:14 2005
+++ /dev/null Fri Aug 26 13:06:49 2005
@@ -1,26 +0,0 @@
---- /home/djm/src/xen/xeno-ia64.bk/xen/linux-2.6.7/include/linux/wait.h
2004-06-15 23:19:31.000000000 -0600
-+++ /home/djm/src/xen/xeno-ia64.bk/xen/include/asm-ia64/linux/wait.h
2004-08-25 19:28:13.000000000 -0600
-@@ -104,10 +104,15 @@
- list_del(&old->task_list);
- }
-
-+#ifdef XEN
-+void FASTCALL(__wake_up(struct task_struct *p));
-+#else
- void FASTCALL(__wake_up(wait_queue_head_t *q, unsigned int mode, int nr, void
*key));
-+#endif
- extern void FASTCALL(__wake_up_locked(wait_queue_head_t *q, unsigned int
mode));
- extern void FASTCALL(__wake_up_sync(wait_queue_head_t *q, unsigned int mode,
int nr));
-
-+#ifndef XEN
- #define wake_up(x) __wake_up(x, TASK_UNINTERRUPTIBLE |
TASK_INTERRUPTIBLE, 1, NULL)
- #define wake_up_nr(x, nr) __wake_up(x, TASK_UNINTERRUPTIBLE |
TASK_INTERRUPTIBLE, nr, NULL)
- #define wake_up_all(x) __wake_up(x,
TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE, 0, NULL)
-@@ -117,6 +122,7 @@
- #define wake_up_interruptible_all(x) __wake_up(x, TASK_INTERRUPTIBLE, 0,
NULL)
- #define wake_up_locked(x) __wake_up_locked((x),
TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE)
- #define wake_up_interruptible_sync(x)
__wake_up_sync((x),TASK_INTERRUPTIBLE, 1)
-+#endif
-
- #define __wait_event(wq, condition) \
- do { \
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|