[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] Remove the unused ia64 patch directory.
# 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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |