ia64/xen-unstable

changeset 8743:3b9c2c410b14

Revert ia64 changes from previous checkin.

Signed-off-by: Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
author cl349@firebug.cl.cam.ac.uk
date Thu Feb 02 19:21:18 2006 +0000 (2006-02-02)
parents 2494b4e00cbb
children cc63196c0d2f
files linux-2.6-xen-sparse/arch/ia64/Kconfig linux-2.6-xen-sparse/arch/ia64/Makefile linux-2.6-xen-sparse/arch/ia64/kernel/entry.S linux-2.6-xen-sparse/arch/ia64/kernel/head.S linux-2.6-xen-sparse/arch/ia64/kernel/setup.c linux-2.6-xen-sparse/arch/ia64/xen-mkbuildtree-pre linux-2.6-xen-sparse/arch/ia64/xen/drivers/evtchn_ia64.c linux-2.6-xen-sparse/arch/ia64/xen/xenentry.S linux-2.6-xen-sparse/arch/ia64/xen/xenivt.S
line diff
     1.1 --- a/linux-2.6-xen-sparse/arch/ia64/Kconfig	Thu Feb 02 19:16:38 2006 +0000
     1.2 +++ b/linux-2.6-xen-sparse/arch/ia64/Kconfig	Thu Feb 02 19:21:18 2006 +0000
     1.3 @@ -26,6 +26,10 @@ config MMU
     1.4  	bool
     1.5  	default y
     1.6  
     1.7 +config SWIOTLB
     1.8 +       bool
     1.9 +       default y
    1.10 +
    1.11  config RWSEM_XCHGADD_ALGORITHM
    1.12  	bool
    1.13  	default y
    1.14 @@ -97,16 +101,23 @@ config SCHED_NO_NO_OMIT_FRAME_POINTER
    1.15  	bool
    1.16  	default y
    1.17  
    1.18 +config IA64_UNCACHED_ALLOCATOR
    1.19 +	bool
    1.20 +	select GENERIC_ALLOCATOR
    1.21 +
    1.22 +config DMA_IS_DMA32
    1.23 +	bool
    1.24 +	default y
    1.25 +
    1.26  choice
    1.27  	prompt "System type"
    1.28  	default IA64_GENERIC
    1.29  
    1.30  config IA64_GENERIC
    1.31  	bool "generic"
    1.32 +	select ACPI
    1.33  	select NUMA
    1.34  	select ACPI_NUMA
    1.35 -	select VIRTUAL_MEM_MAP
    1.36 -	select DISCONTIGMEM
    1.37  	help
    1.38  	  This selects the system type of your hardware.  A "generic" kernel
    1.39  	  will run on any supported IA-64 system.  However, if you configure
    1.40 @@ -204,6 +215,21 @@ config IA64_PAGE_SIZE_64KB
    1.41  
    1.42  endchoice
    1.43  
    1.44 +choice
    1.45 +	prompt "Page Table Levels"
    1.46 +	default PGTABLE_3
    1.47 +
    1.48 +config PGTABLE_3
    1.49 +	bool "3 Levels"
    1.50 +
    1.51 +config PGTABLE_4
    1.52 +	depends on !IA64_PAGE_SIZE_64KB
    1.53 +	bool "4 Levels"
    1.54 +
    1.55 +endchoice
    1.56 +
    1.57 +source kernel/Kconfig.hz
    1.58 +
    1.59  config IA64_BRL_EMU
    1.60  	bool
    1.61  	depends on ITANIUM
    1.62 @@ -216,40 +242,6 @@ config IA64_L1_CACHE_SHIFT
    1.63  	default "6" if ITANIUM
    1.64  
    1.65  # align cache-sensitive data to 64 bytes
    1.66 -config NUMA
    1.67 -	bool "NUMA support"
    1.68 -	depends on !IA64_HP_SIM
    1.69 -	default y if IA64_SGI_SN2
    1.70 -	select ACPI_NUMA
    1.71 -	help
    1.72 -	  Say Y to compile the kernel to support NUMA (Non-Uniform Memory
    1.73 -	  Access).  This option is for configuring high-end multiprocessor
    1.74 -	  server systems.  If in doubt, say N.
    1.75 -
    1.76 -config VIRTUAL_MEM_MAP
    1.77 -	bool "Virtual mem map"
    1.78 -	default y if !IA64_HP_SIM
    1.79 -	help
    1.80 -	  Say Y to compile the kernel with support for a virtual mem map.
    1.81 -	  This code also only takes effect if a memory hole of greater than
    1.82 -	  1 Gb is found during boot.  You must turn this option on if you
    1.83 -	  require the DISCONTIGMEM option for your machine. If you are
    1.84 -	  unsure, say Y.
    1.85 -
    1.86 -config HOLES_IN_ZONE
    1.87 -	bool
    1.88 -	default y if VIRTUAL_MEM_MAP
    1.89 -
    1.90 -config DISCONTIGMEM
    1.91 -	bool "Discontiguous memory support"
    1.92 -	depends on (IA64_DIG || IA64_SGI_SN2 || IA64_GENERIC || IA64_HP_ZX1 || IA64_HP_ZX1_SWIOTLB) && NUMA && VIRTUAL_MEM_MAP
    1.93 -	default y if (IA64_SGI_SN2 || IA64_GENERIC) && NUMA
    1.94 -	help
    1.95 -	  Say Y to support efficient handling of discontiguous physical memory,
    1.96 -	  for architectures which are either NUMA (Non-Uniform Memory Access)
    1.97 -	  or have huge holes in the physical address space for other reasons.
    1.98 -	  See <file:Documentation/vm/numa> for more.
    1.99 -
   1.100  config IA64_CYCLONE
   1.101  	bool "Cyclone (EXA) Time Source support"
   1.102  	help
   1.103 @@ -261,16 +253,10 @@ config IOSAPIC
   1.104  	depends on !IA64_HP_SIM
   1.105  	default y
   1.106  
   1.107 -config IA64_SGI_SN_SIM
   1.108 -	bool "SGI Medusa Simulator Support"
   1.109 -	depends on IA64_SGI_SN2
   1.110 -	help
   1.111 -	  If you are compiling a kernel that will run under SGI's IA-64
   1.112 -	  simulator (Medusa) then say Y, otherwise say N.
   1.113 -
   1.114  config IA64_SGI_SN_XP
   1.115  	tristate "Support communication between SGI SSIs"
   1.116 -	depends on MSPEC
   1.117 +	depends on IA64_GENERIC || IA64_SGI_SN2
   1.118 +	select IA64_UNCACHED_ALLOCATOR
   1.119  	help
   1.120  	  An SGI machine can be divided into multiple Single System
   1.121  	  Images which act independently of each other and have
   1.122 @@ -279,8 +265,10 @@ config IA64_SGI_SN_XP
   1.123  	  based on a network adapter and DMA messaging.
   1.124  
   1.125  config FORCE_MAX_ZONEORDER
   1.126 -	int
   1.127 -	default "18"
   1.128 +	int "MAX_ORDER (11 - 17)"  if !HUGETLB_PAGE
   1.129 +	range 11 17  if !HUGETLB_PAGE
   1.130 +	default "17" if HUGETLB_PAGE
   1.131 +	default "11"
   1.132  
   1.133  config SMP
   1.134  	bool "Symmetric multi-processing support"
   1.135 @@ -301,8 +289,8 @@ config SMP
   1.136  	  If you don't know what to do here, say N.
   1.137  
   1.138  config NR_CPUS
   1.139 -	int "Maximum number of CPUs (2-512)"
   1.140 -	range 2 512
   1.141 +	int "Maximum number of CPUs (2-1024)"
   1.142 +	range 2 1024
   1.143  	depends on SMP
   1.144  	default "64"
   1.145  	help
   1.146 @@ -343,10 +331,59 @@ config PREEMPT
   1.147            Say Y here if you are building a kernel for a desktop, embedded
   1.148            or real-time system.  Say N if you are unsure.
   1.149  
   1.150 -config HAVE_DEC_LOCK
   1.151 +source "mm/Kconfig"
   1.152 +
   1.153 +config ARCH_SELECT_MEMORY_MODEL
   1.154 +	def_bool y
   1.155 +
   1.156 +config ARCH_DISCONTIGMEM_ENABLE
   1.157 +	def_bool y
   1.158 +	help
   1.159 +	  Say Y to support efficient handling of discontiguous physical memory,
   1.160 +	  for architectures which are either NUMA (Non-Uniform Memory Access)
   1.161 +	  or have huge holes in the physical address space for other reasons.
   1.162 + 	  See <file:Documentation/vm/numa> for more.
   1.163 +
   1.164 +config ARCH_FLATMEM_ENABLE
   1.165 +	def_bool y
   1.166 +
   1.167 +config ARCH_SPARSEMEM_ENABLE
   1.168 +	def_bool y
   1.169 +	depends on ARCH_DISCONTIGMEM_ENABLE
   1.170 +
   1.171 +config ARCH_DISCONTIGMEM_DEFAULT
   1.172 +	def_bool y if (IA64_SGI_SN2 || IA64_GENERIC || IA64_HP_ZX1 || IA64_HP_ZX1_SWIOTLB)
   1.173 +	depends on ARCH_DISCONTIGMEM_ENABLE
   1.174 +
   1.175 +config NUMA
   1.176 +	bool "NUMA support"
   1.177 +	depends on !IA64_HP_SIM && !FLATMEM
   1.178 +	default y if IA64_SGI_SN2
   1.179 +	help
   1.180 +	  Say Y to compile the kernel to support NUMA (Non-Uniform Memory
   1.181 +	  Access).  This option is for configuring high-end multiprocessor
   1.182 +	  server systems.  If in doubt, say N.
   1.183 +
   1.184 +# VIRTUAL_MEM_MAP and FLAT_NODE_MEM_MAP are functionally equivalent.
   1.185 +# VIRTUAL_MEM_MAP has been retained for historical reasons.
   1.186 +config VIRTUAL_MEM_MAP
   1.187 +	bool "Virtual mem map"
   1.188 +	depends on !SPARSEMEM
   1.189 +	default y if !IA64_HP_SIM
   1.190 +	help
   1.191 +	  Say Y to compile the kernel with support for a virtual mem map.
   1.192 +	  This code also only takes effect if a memory hole of greater than
   1.193 +	  1 Gb is found during boot.  You must turn this option on if you
   1.194 +	  require the DISCONTIGMEM option for your machine. If you are
   1.195 +	  unsure, say Y.
   1.196 +
   1.197 +config HOLES_IN_ZONE
   1.198  	bool
   1.199 -	depends on (SMP || PREEMPT)
   1.200 -	default y
   1.201 +	default y if VIRTUAL_MEM_MAP
   1.202 +
   1.203 +config HAVE_ARCH_EARLY_PFN_TO_NID
   1.204 +	def_bool y
   1.205 +	depends on NEED_MULTIPLE_NODES
   1.206  
   1.207  config IA32_SUPPORT
   1.208  	bool "Support for Linux/x86 binaries"
   1.209 @@ -384,11 +421,6 @@ config IA64_PALINFO
   1.210  	  To use this option, you have to ensure that the "/proc file system
   1.211  	  support" (CONFIG_PROC_FS) is enabled, too.
   1.212  
   1.213 -config ACPI_DEALLOCATE_IRQ
   1.214 -	bool
   1.215 -	depends on IOSAPIC && EXPERIMENTAL
   1.216 -	default y
   1.217 -
   1.218  source "drivers/firmware/Kconfig"
   1.219  
   1.220  source "fs/Kconfig.binfmt"
   1.221 @@ -397,36 +429,14 @@ endmenu
   1.222  
   1.223  menu "Power management and ACPI"
   1.224  
   1.225 -config PM
   1.226 -	bool "Power Management support"
   1.227 -	depends on !IA64_HP_SIM
   1.228 -	default y
   1.229 -	help
   1.230 -	  "Power Management" means that parts of your computer are shut
   1.231 -	  off or put into a power conserving "sleep" mode if they are not
   1.232 -	  being used.  There are two competing standards for doing this: APM
   1.233 -	  and ACPI.  If you want to use either one, say Y here and then also
   1.234 -	  to the requisite support below.
   1.235 -
   1.236 -	  Power Management is most important for battery powered laptop
   1.237 -	  computers; if you have a laptop, check out the Linux Laptop home
   1.238 -	  page on the WWW at <http://www.linux-on-laptops.com/> and the
   1.239 -	  Battery Powered Linux mini-HOWTO, available from
   1.240 -	  <http://www.tldp.org/docs.html#howto>.
   1.241 -
   1.242 -	  Note that, even if you say N here, Linux on the x86 architecture
   1.243 -	  will issue the hlt instruction if nothing is to be done, thereby
   1.244 -	  sending the processor to sleep and saving power.
   1.245 -
   1.246 -config ACPI
   1.247 -	bool
   1.248 -	depends on !IA64_HP_SIM
   1.249 -	default y
   1.250 -
   1.251 -if !IA64_HP_SIM
   1.252 +source "kernel/power/Kconfig"
   1.253  
   1.254  source "drivers/acpi/Kconfig"
   1.255  
   1.256 +if PM
   1.257 +
   1.258 +source "arch/ia64/kernel/cpufreq/Kconfig"
   1.259 +
   1.260  endif
   1.261  
   1.262  endmenu
   1.263 @@ -438,15 +448,8 @@ menu "Bus options (PCI, PCMCIA)"
   1.264  config PCI
   1.265  	bool "PCI support"
   1.266  	help
   1.267 -	  Find out whether you have a PCI motherboard. PCI is the name of a
   1.268 -	  bus system, i.e. the way the CPU talks to the other stuff inside
   1.269 -	  your box. Other bus systems are ISA, EISA, MicroChannel (MCA) or
   1.270 -	  VESA. If you have PCI, say Y, otherwise N.
   1.271 -
   1.272 -	  The PCI-HOWTO, available from
   1.273 -	  <http://www.tldp.org/docs.html#howto>, contains valuable
   1.274 -	  information about which PCI hardware does work under Linux and which
   1.275 -	  doesn't.
   1.276 +	  Real IA-64 machines all have PCI/PCI-X/PCI Express busses.  Say Y
   1.277 +	  here unless you are using a simulator without PCI support.
   1.278  
   1.279  config PCI_DOMAINS
   1.280  	bool
   1.281 @@ -462,6 +465,8 @@ endmenu
   1.282  
   1.283  endif
   1.284  
   1.285 +source "net/Kconfig"
   1.286 +
   1.287  source "drivers/Kconfig"
   1.288  
   1.289  source "fs/Kconfig"
   1.290 @@ -479,10 +484,28 @@ config GENERIC_IRQ_PROBE
   1.291  	bool
   1.292  	default y
   1.293  
   1.294 +config GENERIC_PENDING_IRQ
   1.295 +	bool
   1.296 +	depends on GENERIC_HARDIRQS && SMP
   1.297 +	default y
   1.298 +
   1.299  source "arch/ia64/hp/sim/Kconfig"
   1.300  
   1.301 +menu "Instrumentation Support"
   1.302 +        depends on EXPERIMENTAL
   1.303 +
   1.304  source "arch/ia64/oprofile/Kconfig"
   1.305  
   1.306 +config KPROBES
   1.307 +	bool "Kprobes (EXPERIMENTAL)"
   1.308 +	help
   1.309 +	  Kprobes allows you to trap at almost any kernel address and
   1.310 +	  execute a callback function.  register_kprobe() establishes
   1.311 +	  a probepoint and specifies the callback.  Kprobes is useful
   1.312 +	  for kernel debugging, non-intrusive instrumentation and testing.
   1.313 +	  If in doubt, say "N".
   1.314 +endmenu
   1.315 +
   1.316  source "arch/ia64/Kconfig.debug"
   1.317  
   1.318  source "security/Kconfig"
     2.1 --- a/linux-2.6-xen-sparse/arch/ia64/Makefile	Thu Feb 02 19:16:38 2006 +0000
     2.2 +++ b/linux-2.6-xen-sparse/arch/ia64/Makefile	Thu Feb 02 19:21:18 2006 +0000
     2.3 @@ -11,9 +11,6 @@
     2.4  NM := $(CROSS_COMPILE)nm -B
     2.5  READELF := $(CROSS_COMPILE)readelf
     2.6  
     2.7 -# following is temporary pending xen directory restructuring
     2.8 -NOSTDINC_FLAGS += -Iinclude/asm-xen
     2.9 -
    2.10  export AWK
    2.11  
    2.12  CHECKFLAGS	+= -m64 -D__ia64=1 -D__ia64__=1 -D_LP64 -D__LP64__
    2.13 @@ -91,42 +88,7 @@ unwcheck: vmlinux
    2.14  archclean:
    2.15  	$(Q)$(MAKE) $(clean)=$(boot)
    2.16  
    2.17 -CLEAN_FILES += include/asm-ia64/.offsets.h.stamp vmlinux.gz bootloader
    2.18 -#CLEAN_FILES += include/asm-xen/xen-public include/asm-ia64/xen/asm-xsi-offsets.h
    2.19 -#CLEAN_FILES += include/asm-xen/linux-public include/asm-xen/asm-ia64/hypervisor.h
    2.20 -
    2.21 -MRPROPER_FILES += include/asm-ia64/offsets.h
    2.22 -
    2.23 -prepare: include/asm-ia64/offsets.h
    2.24 -
    2.25 -arch/ia64/kernel/asm-offsets.s: include/asm include/linux/version.h include/config/MARKER
    2.26 -
    2.27 -include/asm-ia64/offsets.h: arch/ia64/kernel/asm-offsets.s
    2.28 -	$(call filechk,gen-asm-offsets)
    2.29 -
    2.30 -arch/ia64/kernel/asm-offsets.s: include/asm-ia64/.offsets.h.stamp
    2.31 -
    2.32 -#XEN_PATH ?= $(srctree)/../xen-ia64-unstable.hg/
    2.33 -include/asm-ia64/.offsets.h.stamp:
    2.34 -	mkdir -p include/asm-ia64
    2.35 -	[ -s include/asm-ia64/offsets.h ] \
    2.36 -	 || echo "#define IA64_TASK_SIZE 0" > include/asm-ia64/offsets.h
    2.37 -	touch $@
    2.38 -	[ -e include/asm-xen/asm ] \
    2.39 -	 || ln -s asm-ia64 include/asm-xen/asm
    2.40 -#	[ -e include/asm-xen/xen-public ] \
    2.41 -#	 || ln -s $(XEN_PATH)/xen/include/public \
    2.42 -#		include/asm-xen/xen-public
    2.43 -#	[ -e include/asm-ia64/xen/asm-xsi-offsets.h ] \
    2.44 -#	 || ln -s $(XEN_PATH)/xen/include/asm-ia64/asm-xsi-offsets.h \
    2.45 -#		include/asm-ia64/xen/asm-xsi-offsets.h
    2.46 -#	[ -e include/asm-xen/linux-public ] \
    2.47 -#	 || ln -s $(XEN_PATH)/linux-2.6-xen-sparse/include/asm-xen/linux-public \
    2.48 -		include/asm-xen/linux-public
    2.49 -	[ -e include/asm-xen/asm-ia64/hypervisor.h ] \
    2.50 -	 || ln -s $(XEN_PATH)/linux-2.6-xen-sparse/include/asm-xen/asm-ia64/hypervisor.h \
    2.51 -		include/asm-xen/asm-ia64/hypervisor.h
    2.52 -
    2.53 +CLEAN_FILES += vmlinux.gz bootloader
    2.54  
    2.55  boot:	lib/lib.a vmlinux
    2.56  	$(Q)$(MAKE) $(build)=$(boot) $@
     3.1 --- a/linux-2.6-xen-sparse/arch/ia64/kernel/entry.S	Thu Feb 02 19:16:38 2006 +0000
     3.2 +++ b/linux-2.6-xen-sparse/arch/ia64/kernel/entry.S	Thu Feb 02 19:21:18 2006 +0000
     3.3 @@ -37,7 +37,7 @@
     3.4  #include <asm/cache.h>
     3.5  #include <asm/errno.h>
     3.6  #include <asm/kregs.h>
     3.7 -#include <asm/offsets.h>
     3.8 +#include <asm/asm-offsets.h>
     3.9  #include <asm/pgtable.h>
    3.10  #include <asm/percpu.h>
    3.11  #include <asm/processor.h>
    3.12 @@ -204,9 +204,6 @@ GLOBAL_ENTRY(__ia64_switch_to)
    3.13  (p6)	br.cond.dpnt .map
    3.14  	;;
    3.15  .done:
    3.16 -(p6)	ssm psr.ic			// if we had to map, reenable the psr.ic bit FIRST!!!
    3.17 -	;;
    3.18 -(p6)	srlz.d
    3.19  	ld8 sp=[r21]			// load kernel stack pointer of new task
    3.20  	mov IA64_KR(CURRENT)=in0	// update "current" application register
    3.21  	mov r8=r13			// return pointer to previously running task
    3.22 @@ -234,6 +231,9 @@ GLOBAL_ENTRY(__ia64_switch_to)
    3.23  	mov IA64_KR(CURRENT_STACK)=r26	// remember last page we mapped...
    3.24  	;;
    3.25  	itr.d dtr[r25]=r23		// wire in new mapping...
    3.26 +	ssm psr.ic			// reenable the psr.ic bit
    3.27 +	;;
    3.28 +	srlz.d
    3.29  	br.cond.sptk .done
    3.30  END(__ia64_switch_to)
    3.31  
    3.32 @@ -470,17 +470,28 @@ GLOBAL_ENTRY(load_switch_stack)
    3.33  	br.cond.sptk.many b7
    3.34  END(load_switch_stack)
    3.35  
    3.36 -GLOBAL_ENTRY(__ia64_syscall)
    3.37 -	.regstk 6,0,0,0
    3.38 -	mov r15=in5				// put syscall number in place
    3.39 -	break __BREAK_SYSCALL
    3.40 -	movl r2=errno
    3.41 -	cmp.eq p6,p7=-1,r10
    3.42 +GLOBAL_ENTRY(prefetch_stack)
    3.43 +	add r14 = -IA64_SWITCH_STACK_SIZE, sp
    3.44 +	add r15 = IA64_TASK_THREAD_KSP_OFFSET, in0
    3.45 +	;;
    3.46 +	ld8 r16 = [r15]				// load next's stack pointer
    3.47 +	lfetch.fault.excl [r14], 128
    3.48 +	;;
    3.49 +	lfetch.fault.excl [r14], 128
    3.50 +	lfetch.fault [r16], 128
    3.51  	;;
    3.52 -(p6)	st4 [r2]=r8
    3.53 -(p6)	mov r8=-1
    3.54 +	lfetch.fault.excl [r14], 128
    3.55 +	lfetch.fault [r16], 128
    3.56 +	;;
    3.57 +	lfetch.fault.excl [r14], 128
    3.58 +	lfetch.fault [r16], 128
    3.59 +	;;
    3.60 +	lfetch.fault.excl [r14], 128
    3.61 +	lfetch.fault [r16], 128
    3.62 +	;;
    3.63 +	lfetch.fault [r16], 128
    3.64  	br.ret.sptk.many rp
    3.65 -END(__ia64_syscall)
    3.66 +END(prefetch_stack)
    3.67  
    3.68  GLOBAL_ENTRY(execve)
    3.69  	mov r15=__NR_execve			// put syscall number in place
    3.70 @@ -640,7 +651,7 @@ END(ia64_ret_from_syscall)
    3.71   *	      r8-r11: restored (syscall return value(s))
    3.72   *		 r12: restored (user-level stack pointer)
    3.73   *		 r13: restored (user-level thread pointer)
    3.74 - *		 r14: cleared
    3.75 + *		 r14: set to __kernel_syscall_via_epc
    3.76   *		 r15: restored (syscall #)
    3.77   *	     r16-r17: cleared
    3.78   *		 r18: user-level b6
    3.79 @@ -661,7 +672,7 @@ END(ia64_ret_from_syscall)
    3.80   *		  pr: restored (user-level pr)
    3.81   *		  b0: restored (user-level rp)
    3.82   *	          b6: restored
    3.83 - *		  b7: cleared
    3.84 + *		  b7: set to __kernel_syscall_via_epc
    3.85   *	     ar.unat: restored (user-level ar.unat)
    3.86   *	      ar.pfs: restored (user-level ar.pfs)
    3.87   *	      ar.rsc: restored (user-level ar.rsc)
    3.88 @@ -707,72 +718,79 @@ GLOBAL_ENTRY(__ia64_leave_syscall)
    3.89  	;;
    3.90  (p6)	ld4 r31=[r18]				// load current_thread_info()->flags
    3.91  	ld8 r19=[r2],PT(B6)-PT(LOADRS)		// load ar.rsc value for "loadrs"
    3.92 -	mov b7=r0		// clear b7
    3.93 +	nop.i 0
    3.94  	;;
    3.95 -	ld8 r23=[r3],PT(R11)-PT(AR_BSPSTORE)	// load ar.bspstore (may be garbage)
    3.96 +	mov r16=ar.bsp				// M2  get existing backing store pointer
    3.97  	ld8 r18=[r2],PT(R9)-PT(B6)		// load b6
    3.98  (p6)	and r15=TIF_WORK_MASK,r31		// any work other than TIF_SYSCALL_TRACE?
    3.99  	;;
   3.100 -	mov r16=ar.bsp				// M2  get existing backing store pointer
   3.101 +	ld8 r23=[r3],PT(R11)-PT(AR_BSPSTORE)	// load ar.bspstore (may be garbage)
   3.102  (p6)	cmp4.ne.unc p6,p0=r15, r0		// any special work pending?
   3.103  (p6)	br.cond.spnt .work_pending_syscall
   3.104  	;;
   3.105  	// start restoring the state saved on the kernel stack (struct pt_regs):
   3.106  	ld8 r9=[r2],PT(CR_IPSR)-PT(R9)
   3.107  	ld8 r11=[r3],PT(CR_IIP)-PT(R11)
   3.108 -	mov f6=f0		// clear f6
   3.109 +(pNonSys) break 0		//      bug check: we shouldn't be here if pNonSys is TRUE!
   3.110  	;;
   3.111  	invala			// M0|1 invalidate ALAT
   3.112 -	rsm psr.i | psr.ic	// M2 initiate turning off of interrupt and interruption collection
   3.113 -	mov f9=f0		// clear f9
   3.114 +	rsm psr.i | psr.ic	// M2   turn off interrupts and interruption collection
   3.115 +	cmp.eq p9,p0=r0,r0	// A    set p9 to indicate that we should restore cr.ifs
   3.116  
   3.117 -	ld8 r29=[r2],16		// load cr.ipsr
   3.118 -	ld8 r28=[r3],16			// load cr.iip
   3.119 -	mov f8=f0		// clear f8
   3.120 +	ld8 r29=[r2],16		// M0|1 load cr.ipsr
   3.121 +	ld8 r28=[r3],16		// M0|1 load cr.iip
   3.122 +	mov r22=r0		// A    clear r22
   3.123  	;;
   3.124  	ld8 r30=[r2],16		// M0|1 load cr.ifs
   3.125  	ld8 r25=[r3],16		// M0|1 load ar.unat
   3.126 -	cmp.eq p9,p0=r0,r0	// set p9 to indicate that we should restore cr.ifs
   3.127 -	;;
   3.128 -	ld8 r26=[r2],PT(B0)-PT(AR_PFS)	// M0|1 load ar.pfs
   3.129 -(pKStk)	mov r22=psr		// M2 read PSR now that interrupts are disabled
   3.130 -	mov f10=f0		// clear f10
   3.131 -	;;
   3.132 -	ld8 r21=[r2],PT(AR_RNAT)-PT(B0) // load b0
   3.133 -	ld8 r27=[r3],PT(PR)-PT(AR_RSC)	// load ar.rsc
   3.134 -	mov f11=f0		// clear f11
   3.135 -	;;
   3.136 -	ld8 r24=[r2],PT(AR_FPSR)-PT(AR_RNAT)	// load ar.rnat (may be garbage)
   3.137 -	ld8 r31=[r3],PT(R1)-PT(PR)		// load predicates
   3.138  (pUStk) add r14=IA64_TASK_THREAD_ON_USTACK_OFFSET,r13
   3.139  	;;
   3.140 -	ld8 r20=[r2],PT(R12)-PT(AR_FPSR)	// load ar.fpsr
   3.141 -	ld8.fill r1=[r3],16	// load r1
   3.142 -(pUStk) mov r17=1
   3.143 +	ld8 r26=[r2],PT(B0)-PT(AR_PFS)	// M0|1 load ar.pfs
   3.144 +(pKStk)	mov r22=psr			// M2   read PSR now that interrupts are disabled
   3.145 +	nop 0
   3.146 +	;;
   3.147 +	ld8 r21=[r2],PT(AR_RNAT)-PT(B0) // M0|1 load b0
   3.148 +	ld8 r27=[r3],PT(PR)-PT(AR_RSC)	// M0|1 load ar.rsc
   3.149 +	mov f6=f0			// F    clear f6
   3.150 +	;;
   3.151 +	ld8 r24=[r2],PT(AR_FPSR)-PT(AR_RNAT)	// M0|1 load ar.rnat (may be garbage)
   3.152 +	ld8 r31=[r3],PT(R1)-PT(PR)		// M0|1 load predicates
   3.153 +	mov f7=f0				// F    clear f7
   3.154  	;;
   3.155 -	srlz.d			// M0  ensure interruption collection is off
   3.156 -	ld8.fill r13=[r3],16
   3.157 -	mov f7=f0		// clear f7
   3.158 +	ld8 r20=[r2],PT(R12)-PT(AR_FPSR)	// M0|1 load ar.fpsr
   3.159 +	ld8.fill r1=[r3],16			// M0|1 load r1
   3.160 +(pUStk) mov r17=1				// A
   3.161  	;;
   3.162 -	ld8.fill r12=[r2]	// restore r12 (sp)
   3.163 -	mov.m ar.ssd=r0		// M2 clear ar.ssd
   3.164 -	mov r22=r0		// clear r22
   3.165 +(pUStk) st1 [r14]=r17				// M2|3
   3.166 +	ld8.fill r13=[r3],16			// M0|1
   3.167 +	mov f8=f0				// F    clear f8
   3.168 +	;;
   3.169 +	ld8.fill r12=[r2]			// M0|1 restore r12 (sp)
   3.170 +	ld8.fill r15=[r3]			// M0|1 restore r15
   3.171 +	mov b6=r18				// I0   restore b6
   3.172  
   3.173 -	ld8.fill r15=[r3]	// restore r15
   3.174 -(pUStk) st1 [r14]=r17
   3.175 -	addl r3=THIS_CPU(ia64_phys_stacked_size_p8),r0
   3.176 -	;;
   3.177 -(pUStk)	ld4 r17=[r3]		// r17 = cpu_data->phys_stacked_size_p8
   3.178 -	mov.m ar.csd=r0		// M2 clear ar.csd
   3.179 -	mov b6=r18		// I0  restore b6
   3.180 +	addl r17=THIS_CPU(ia64_phys_stacked_size_p8),r0 // A
   3.181 +	mov f9=f0					// F    clear f9
   3.182 +(pKStk) br.cond.dpnt.many skip_rbs_switch		// B
   3.183 +
   3.184 +	srlz.d				// M0   ensure interruption collection is off (for cover)
   3.185 +	shr.u r18=r19,16		// I0|1 get byte size of existing "dirty" partition
   3.186 +	cover				// B    add current frame into dirty partition & set cr.ifs
   3.187  	;;
   3.188 -	mov r14=r0		// clear r14
   3.189 -	shr.u r18=r19,16	// I0|1 get byte size of existing "dirty" partition
   3.190 -(pKStk) br.cond.dpnt.many skip_rbs_switch
   3.191 +(pUStk) ld4 r17=[r17]			// M0|1 r17 = cpu_data->phys_stacked_size_p8
   3.192 +	mov r19=ar.bsp			// M2   get new backing store pointer
   3.193 +	mov f10=f0			// F    clear f10
   3.194  
   3.195 -	mov.m ar.ccv=r0		// clear ar.ccv
   3.196 -(pNonSys) br.cond.dpnt.many dont_preserve_current_frame
   3.197 -	br.cond.sptk.many rbs_switch
   3.198 +	nop.m 0
   3.199 +	movl r14=__kernel_syscall_via_epc // X
   3.200 +	;;
   3.201 +	mov.m ar.csd=r0			// M2   clear ar.csd
   3.202 +	mov.m ar.ccv=r0			// M2   clear ar.ccv
   3.203 +	mov b7=r14			// I0   clear b7 (hint with __kernel_syscall_via_epc)
   3.204 +
   3.205 +	mov.m ar.ssd=r0			// M2   clear ar.ssd
   3.206 +	mov f11=f0			// F    clear f11
   3.207 +	br.cond.sptk.many rbs_switch	// B
   3.208  END(__ia64_leave_syscall)
   3.209  
   3.210  #ifdef CONFIG_IA32_SUPPORT
   3.211 @@ -891,7 +909,7 @@ GLOBAL_ENTRY(__ia64_leave_kernel)
   3.212  	ldf.fill f7=[r2],PT(F11)-PT(F7)
   3.213  	ldf.fill f8=[r3],32
   3.214  	;;
   3.215 -	srlz.i			// ensure interruption collection is off
   3.216 +	srlz.d	// ensure that inter. collection is off (VHPT is don't care, since text is pinned)
   3.217  	mov ar.ccv=r15
   3.218  	;;
   3.219  	ldf.fill f11=[r2]
   3.220 @@ -951,11 +969,10 @@ GLOBAL_ENTRY(__ia64_leave_kernel)
   3.221  	 * NOTE: alloc, loadrs, and cover can't be predicated.
   3.222  	 */
   3.223  (pNonSys) br.cond.dpnt dont_preserve_current_frame
   3.224 -
   3.225 -rbs_switch:
   3.226  	cover				// add current frame into dirty partition and set cr.ifs
   3.227  	;;
   3.228  	mov r19=ar.bsp			// get new backing store pointer
   3.229 +rbs_switch:
   3.230  	sub r16=r16,r18			// krbs = old bsp - size of dirty partition
   3.231  	cmp.ne p9,p0=r0,r0		// clear p9 to skip restore of cr.ifs
   3.232  	;;
   3.233 @@ -1030,14 +1047,14 @@ rse_clear_invalid:
   3.234  	mov loc5=0
   3.235  	mov loc6=0
   3.236  	mov loc7=0
   3.237 -(pRecurse) br.call.sptk.few b0=rse_clear_invalid
   3.238 +(pRecurse) br.call.dptk.few b0=rse_clear_invalid
   3.239  	;;
   3.240  	mov loc8=0
   3.241  	mov loc9=0
   3.242  	cmp.ne pReturn,p0=r0,in1	// if recursion count != 0, we need to do a br.ret
   3.243  	mov loc10=0
   3.244  	mov loc11=0
   3.245 -(pReturn) br.ret.sptk.many b0
   3.246 +(pReturn) br.ret.dptk.many b0
   3.247  #endif /* !CONFIG_ITANIUM */
   3.248  #	undef pRecurse
   3.249  #	undef pReturn
   3.250 @@ -1261,7 +1278,7 @@ ENTRY(sys_rt_sigreturn)
   3.251   	stf.spill [r17]=f11
   3.252  	adds out0=16,sp				// out0 = &sigscratch
   3.253  	br.call.sptk.many rp=ia64_rt_sigreturn
   3.254 -.ret19:	.restore sp 0
   3.255 +.ret19:	.restore sp,0
   3.256  	adds sp=16,sp
   3.257  	;;
   3.258  	ld8 r9=[sp]				// load new ar.unat
   3.259 @@ -1583,11 +1600,11 @@ sys_call_table:
   3.260  	data8 sys_add_key
   3.261  	data8 sys_request_key
   3.262  	data8 sys_keyctl
   3.263 -	data8 sys_ni_syscall
   3.264 -	data8 sys_ni_syscall			// 1275
   3.265 +	data8 sys_ioprio_set
   3.266 +	data8 sys_ioprio_get			// 1275
   3.267  	data8 sys_ni_syscall
   3.268 -	data8 sys_ni_syscall
   3.269 -	data8 sys_ni_syscall
   3.270 -	data8 sys_ni_syscall
   3.271 +	data8 sys_inotify_init
   3.272 +	data8 sys_inotify_add_watch
   3.273 +	data8 sys_inotify_rm_watch
   3.274  
   3.275  	.org sys_call_table + 8*NR_syscalls	// guard against failures to increase NR_syscalls
     4.1 --- a/linux-2.6-xen-sparse/arch/ia64/kernel/head.S	Thu Feb 02 19:16:38 2006 +0000
     4.2 +++ b/linux-2.6-xen-sparse/arch/ia64/kernel/head.S	Thu Feb 02 19:21:18 2006 +0000
     4.3 @@ -25,7 +25,7 @@
     4.4  #include <asm/fpu.h>
     4.5  #include <asm/kregs.h>
     4.6  #include <asm/mmu_context.h>
     4.7 -#include <asm/offsets.h>
     4.8 +#include <asm/asm-offsets.h>
     4.9  #include <asm/pal.h>
    4.10  #include <asm/pgtable.h>
    4.11  #include <asm/processor.h>
     5.1 --- a/linux-2.6-xen-sparse/arch/ia64/kernel/setup.c	Thu Feb 02 19:16:38 2006 +0000
     5.2 +++ b/linux-2.6-xen-sparse/arch/ia64/kernel/setup.c	Thu Feb 02 19:21:18 2006 +0000
     5.3 @@ -20,6 +20,7 @@
     5.4   * 02/01/00 R.Seth	fixed get_cpuinfo for SMP
     5.5   * 01/07/99 S.Eranian	added the support for command line argument
     5.6   * 06/24/99 W.Drummond	added boot_cpu_data.
     5.7 + * 05/28/05 Z. Menyhart	Dynamic stride size for "flush_icache_range()"
     5.8   */
     5.9  #include <linux/config.h>
    5.10  #include <linux/module.h>
    5.11 @@ -40,6 +41,8 @@
    5.12  #include <linux/serial_core.h>
    5.13  #include <linux/efi.h>
    5.14  #include <linux/initrd.h>
    5.15 +#include <linux/platform.h>
    5.16 +#include <linux/pm.h>
    5.17  
    5.18  #include <asm/ia32.h>
    5.19  #include <asm/machvec.h>
    5.20 @@ -72,8 +75,30 @@ DEFINE_PER_CPU(unsigned long, ia64_phys_
    5.21  unsigned long ia64_cycles_per_usec;
    5.22  struct ia64_boot_param *ia64_boot_param;
    5.23  struct screen_info screen_info;
    5.24 +unsigned long vga_console_iobase;
    5.25 +unsigned long vga_console_membase;
    5.26 +
    5.27 +static struct resource data_resource = {
    5.28 +	.name	= "Kernel data",
    5.29 +	.flags	= IORESOURCE_BUSY | IORESOURCE_MEM
    5.30 +};
    5.31 +
    5.32 +static struct resource code_resource = {
    5.33 +	.name	= "Kernel code",
    5.34 +	.flags	= IORESOURCE_BUSY | IORESOURCE_MEM
    5.35 +};
    5.36 +extern void efi_initialize_iomem_resources(struct resource *,
    5.37 +		struct resource *);
    5.38 +extern char _text[], _end[], _etext[];
    5.39  
    5.40  unsigned long ia64_max_cacheline_size;
    5.41 +
    5.42 +int dma_get_cache_alignment(void)
    5.43 +{
    5.44 +        return ia64_max_cacheline_size;
    5.45 +}
    5.46 +EXPORT_SYMBOL(dma_get_cache_alignment);
    5.47 +
    5.48  unsigned long ia64_iobase;	/* virtual address for I/O accesses */
    5.49  EXPORT_SYMBOL(ia64_iobase);
    5.50  struct io_space io_space[MAX_IO_SPACES];
    5.51 @@ -81,6 +106,13 @@ EXPORT_SYMBOL(io_space);
    5.52  unsigned int num_io_spaces;
    5.53  
    5.54  /*
    5.55 + * "flush_icache_range()" needs to know what processor dependent stride size to use
    5.56 + * when it makes i-cache(s) coherent with d-caches.
    5.57 + */
    5.58 +#define	I_CACHE_STRIDE_SHIFT	5	/* Safest way to go: 32 bytes by 32 bytes */
    5.59 +unsigned long ia64_i_cache_stride_shift = ~0;
    5.60 +
    5.61 +/*
    5.62   * The merge_mask variable needs to be set to (max(iommu_page_size(iommu)) - 1).  This
    5.63   * mask specifies a mask of address bits that must be 0 in order for two buffers to be
    5.64   * mergeable by the I/O MMU (i.e., the end address of the first buffer and the start
    5.65 @@ -159,6 +191,22 @@ sort_regions (struct rsvd_region *rsvd_r
    5.66  	}
    5.67  }
    5.68  
    5.69 +/*
    5.70 + * Request address space for all standard resources
    5.71 + */
    5.72 +static int __init register_memory(void)
    5.73 +{
    5.74 +	code_resource.start = ia64_tpa(_text);
    5.75 +	code_resource.end   = ia64_tpa(_etext) - 1;
    5.76 +	data_resource.start = ia64_tpa(_etext);
    5.77 +	data_resource.end   = ia64_tpa(_end) - 1;
    5.78 +	efi_initialize_iomem_resources(&code_resource, &data_resource);
    5.79 +
    5.80 +	return 0;
    5.81 +}
    5.82 +
    5.83 +__initcall(register_memory);
    5.84 +
    5.85  /**
    5.86   * reserve_memory - setup reserved memory areas
    5.87   *
    5.88 @@ -199,6 +247,9 @@ reserve_memory (void)
    5.89  	}
    5.90  #endif
    5.91  
    5.92 +	efi_memmap_init(&rsvd_region[n].start, &rsvd_region[n].end);
    5.93 +	n++;
    5.94 +
    5.95  	/* end of memory marker */
    5.96  	rsvd_region[n].start = ~0UL;
    5.97  	rsvd_region[n].end   = ~0UL;
    5.98 @@ -232,28 +283,31 @@ find_initrd (void)
    5.99  static void __init
   5.100  io_port_init (void)
   5.101  {
   5.102 -	extern unsigned long ia64_iobase;
   5.103  	unsigned long phys_iobase;
   5.104  
   5.105  	/*
   5.106 -	 *  Set `iobase' to the appropriate address in region 6 (uncached access range).
   5.107 +	 * Set `iobase' based on the EFI memory map or, failing that, the
   5.108 +	 * value firmware left in ar.k0.
   5.109  	 *
   5.110 -	 *  The EFI memory map is the "preferred" location to get the I/O port space base,
   5.111 -	 *  rather the relying on AR.KR0. This should become more clear in future SAL
   5.112 -	 *  specs. We'll fall back to getting it out of AR.KR0 if no appropriate entry is
   5.113 -	 *  found in the memory map.
   5.114 +	 * Note that in ia32 mode, IN/OUT instructions use ar.k0 to compute
   5.115 +	 * the port's virtual address, so ia32_load_state() loads it with a
   5.116 +	 * user virtual address.  But in ia64 mode, glibc uses the
   5.117 +	 * *physical* address in ar.k0 to mmap the appropriate area from
   5.118 +	 * /dev/mem, and the inX()/outX() interfaces use MMIO.  In both
   5.119 +	 * cases, user-mode can only use the legacy 0-64K I/O port space.
   5.120 +	 *
   5.121 +	 * ar.k0 is not involved in kernel I/O port accesses, which can use
   5.122 +	 * any of the I/O port spaces and are done via MMIO using the
   5.123 +	 * virtual mmio_base from the appropriate io_space[].
   5.124  	 */
   5.125  	phys_iobase = efi_get_iobase();
   5.126 -	if (phys_iobase)
   5.127 -		/* set AR.KR0 since this is all we use it for anyway */
   5.128 -		ia64_set_kr(IA64_KR_IO_BASE, phys_iobase);
   5.129 -	else {
   5.130 +	if (!phys_iobase) {
   5.131  		phys_iobase = ia64_get_kr(IA64_KR_IO_BASE);
   5.132 -		printk(KERN_INFO "No I/O port range found in EFI memory map, falling back "
   5.133 -		       "to AR.KR0\n");
   5.134 -		printk(KERN_INFO "I/O port base = 0x%lx\n", phys_iobase);
   5.135 +		printk(KERN_INFO "No I/O port range found in EFI memory map, "
   5.136 +			"falling back to AR.KR0 (0x%lx)\n", phys_iobase);
   5.137  	}
   5.138  	ia64_iobase = (unsigned long) ioremap(phys_iobase, 0);
   5.139 +	ia64_set_kr(IA64_KR_IO_BASE, __pa(ia64_iobase));
   5.140  
   5.141  	/* setup legacy IO port space */
   5.142  	io_space[0].mmio_base = ia64_iobase;
   5.143 @@ -273,26 +327,29 @@ io_port_init (void)
   5.144  static inline int __init
   5.145  early_console_setup (char *cmdline)
   5.146  {
   5.147 +	int earlycons = 0;
   5.148 +
   5.149  #ifdef CONFIG_XEN
   5.150 -	if (!early_xen_console_setup(cmdline)) return 0;
   5.151 +	if (!early_xen_console_setup(cmdline))
   5.152 +		earlycons++;
   5.153  #endif
   5.154  #ifdef CONFIG_SERIAL_SGI_L1_CONSOLE
   5.155  	{
   5.156  		extern int sn_serial_console_early_setup(void);
   5.157  		if (!sn_serial_console_early_setup())
   5.158 -			return 0;
   5.159 +			earlycons++;
   5.160  	}
   5.161  #endif
   5.162  #ifdef CONFIG_EFI_PCDP
   5.163  	if (!efi_setup_pcdp_console(cmdline))
   5.164 -		return 0;
   5.165 +		earlycons++;
   5.166  #endif
   5.167  #ifdef CONFIG_SERIAL_8250_CONSOLE
   5.168  	if (!early_serial_console_init(cmdline))
   5.169 -		return 0;
   5.170 +		earlycons++;
   5.171  #endif
   5.172  
   5.173 -	return -1;
   5.174 +	return (earlycons) ? 0 : -1;
   5.175  }
   5.176  
   5.177  static inline void
   5.178 @@ -373,7 +430,7 @@ setup_arch (char **cmdline_p)
   5.179  	if (early_console_setup(*cmdline_p) == 0)
   5.180  		mark_bsp_online();
   5.181  
   5.182 -#ifdef CONFIG_ACPI_BOOT
   5.183 +#ifdef CONFIG_ACPI
   5.184  	/* Initialize the ACPI boot-time table parser */
   5.185  	acpi_table_init();
   5.186  # ifdef CONFIG_ACPI_NUMA
   5.187 @@ -408,8 +465,9 @@ setup_arch (char **cmdline_p)
   5.188  #endif
   5.189  
   5.190  	cpu_init();	/* initialize the bootstrap CPU */
   5.191 +	mmu_context_init();	/* initialize context_id bitmap */
   5.192  
   5.193 -#ifdef CONFIG_ACPI_BOOT
   5.194 +#ifdef CONFIG_ACPI
   5.195  	acpi_boot_init();
   5.196  #endif
   5.197  
   5.198 @@ -515,7 +573,7 @@ show_cpuinfo (struct seq_file *m, void *
   5.199  		   c->itc_freq / 1000000, c->itc_freq % 1000000,
   5.200  		   lpj*HZ/500000, (lpj*HZ/5000) % 100);
   5.201  #ifdef CONFIG_SMP
   5.202 -	seq_printf(m, "siblings   : %u\n", c->num_log);
   5.203 +	seq_printf(m, "siblings   : %u\n", cpus_weight(cpu_core_map[cpunum]));
   5.204  	if (c->threads_per_core > 1 || c->cores_per_socket > 1)
   5.205  		seq_printf(m,
   5.206  		   	   "physical id: %u\n"
   5.207 @@ -625,6 +683,12 @@ setup_per_cpu_areas (void)
   5.208  	/* start_kernel() requires this... */
   5.209  }
   5.210  
   5.211 +/*
   5.212 + * Calculate the max. cache line size.
   5.213 + *
   5.214 + * In addition, the minimum of the i-cache stride sizes is calculated for
   5.215 + * "flush_icache_range()".
   5.216 + */
   5.217  static void
   5.218  get_max_cacheline_size (void)
   5.219  {
   5.220 @@ -638,6 +702,8 @@ get_max_cacheline_size (void)
   5.221                  printk(KERN_ERR "%s: ia64_pal_cache_summary() failed (status=%ld)\n",
   5.222                         __FUNCTION__, status);
   5.223                  max = SMP_CACHE_BYTES;
   5.224 +		/* Safest setup for "flush_icache_range()" */
   5.225 +		ia64_i_cache_stride_shift = I_CACHE_STRIDE_SHIFT;
   5.226  		goto out;
   5.227          }
   5.228  
   5.229 @@ -646,14 +712,31 @@ get_max_cacheline_size (void)
   5.230  						    &cci);
   5.231  		if (status != 0) {
   5.232  			printk(KERN_ERR
   5.233 -			       "%s: ia64_pal_cache_config_info(l=%lu) failed (status=%ld)\n",
   5.234 +			       "%s: ia64_pal_cache_config_info(l=%lu, 2) failed (status=%ld)\n",
   5.235  			       __FUNCTION__, l, status);
   5.236  			max = SMP_CACHE_BYTES;
   5.237 +			/* The safest setup for "flush_icache_range()" */
   5.238 +			cci.pcci_stride = I_CACHE_STRIDE_SHIFT;
   5.239 +			cci.pcci_unified = 1;
   5.240  		}
   5.241  		line_size = 1 << cci.pcci_line_size;
   5.242  		if (line_size > max)
   5.243  			max = line_size;
   5.244 -        }
   5.245 +		if (!cci.pcci_unified) {
   5.246 +			status = ia64_pal_cache_config_info(l,
   5.247 +						    /* cache_type (instruction)= */ 1,
   5.248 +						    &cci);
   5.249 +			if (status != 0) {
   5.250 +				printk(KERN_ERR
   5.251 +				"%s: ia64_pal_cache_config_info(l=%lu, 1) failed (status=%ld)\n",
   5.252 +					__FUNCTION__, l, status);
   5.253 +				/* The safest setup for "flush_icache_range()" */
   5.254 +				cci.pcci_stride = I_CACHE_STRIDE_SHIFT;
   5.255 +			}
   5.256 +		}
   5.257 +		if (cci.pcci_stride < ia64_i_cache_stride_shift)
   5.258 +			ia64_i_cache_stride_shift = cci.pcci_stride;
   5.259 +	}
   5.260    out:
   5.261  	if (max > ia64_max_cacheline_size)
   5.262  		ia64_max_cacheline_size = max;
   5.263 @@ -782,6 +865,7 @@ cpu_init (void)
   5.264  	/* size of physical stacked register partition plus 8 bytes: */
   5.265  	__get_cpu_var(ia64_phys_stacked_size_p8) = num_phys_stacked*8 + 8;
   5.266  	platform_cpu_init();
   5.267 +	pm_idle = default_idle;
   5.268  }
   5.269  
   5.270  void
     6.1 --- a/linux-2.6-xen-sparse/arch/ia64/xen-mkbuildtree-pre	Thu Feb 02 19:16:38 2006 +0000
     6.2 +++ b/linux-2.6-xen-sparse/arch/ia64/xen-mkbuildtree-pre	Thu Feb 02 19:21:18 2006 +0000
     6.3 @@ -13,10 +13,10 @@ then
     6.4  	mv net net.xen-x86
     6.5  	mv kernel kernel.xen-x86
     6.6  	mv drivers/acpi/tables.c drivers/acpi/tables.c.xen-x86
     6.7 -	mv arch/xen/kernel drivers/xen/core
     6.8 -	mv arch/xen arch/xen.xen-x86
     6.9 -	mkdir arch/xen
    6.10 -	mv arch/xen.xen-x86/configs arch/xen
    6.11 +#	mv arch/xen/kernel drivers/xen/core
    6.12 +#	mv arch/xen arch/xen.xen-x86
    6.13 +#	mkdir arch/xen
    6.14 +#	mv arch/xen.xen-x86/configs arch/xen
    6.15  #	mv include/asm-generic include/asm-generic.xen-x86
    6.16  	mv include/linux include/linux.xen-x86
    6.17  	mkdir include/linux
     7.1 --- a/linux-2.6-xen-sparse/arch/ia64/xen/drivers/evtchn_ia64.c	Thu Feb 02 19:16:38 2006 +0000
     7.2 +++ b/linux-2.6-xen-sparse/arch/ia64/xen/drivers/evtchn_ia64.c	Thu Feb 02 19:21:18 2006 +0000
     7.3 @@ -4,7 +4,7 @@
     7.4  #include <linux/config.h>
     7.5  #include <linux/kernel.h>
     7.6  #include <asm/hw_irq.h>
     7.7 -#include <asm-xen/evtchn.h>
     7.8 +#include <xen/evtchn.h>
     7.9  
    7.10  #define MAX_EVTCHN 1024
    7.11  
     8.1 --- a/linux-2.6-xen-sparse/arch/ia64/xen/xenentry.S	Thu Feb 02 19:16:38 2006 +0000
     8.2 +++ b/linux-2.6-xen-sparse/arch/ia64/xen/xenentry.S	Thu Feb 02 19:21:18 2006 +0000
     8.3 @@ -14,7 +14,7 @@
     8.4  #include <asm/cache.h>
     8.5  #include <asm/errno.h>
     8.6  #include <asm/kregs.h>
     8.7 -#include <asm/offsets.h>
     8.8 +#include <asm/asm-offsets.h>
     8.9  #include <asm/pgtable.h>
    8.10  #include <asm/percpu.h>
    8.11  #include <asm/processor.h>
     9.1 --- a/linux-2.6-xen-sparse/arch/ia64/xen/xenivt.S	Thu Feb 02 19:16:38 2006 +0000
     9.2 +++ b/linux-2.6-xen-sparse/arch/ia64/xen/xenivt.S	Thu Feb 02 19:21:18 2006 +0000
     9.3 @@ -35,7 +35,7 @@
     9.4  #include <asm/break.h>
     9.5  #include <asm/ia32.h>
     9.6  #include <asm/kregs.h>
     9.7 -#include <asm/offsets.h>
     9.8 +#include <asm/asm-offsets.h>
     9.9  #include <asm/pgtable.h>
    9.10  #include <asm/processor.h>
    9.11  #include <asm/ptrace.h>