ia64/xen-unstable

changeset 8883:776ab80f5a6c

Update the ia64 linux-2.6-xen-sparse tree to 2.6.16-rc3.

Signed-off-by: Alex Williamson <alex.williamson@hp.com>
author cl349@firebug.cl.cam.ac.uk
date Thu Feb 16 23:24:47 2006 +0000 (2006-02-16)
parents 3faa7f3ef8ac
children e299470e8793
files buildconfigs/linux-defconfig_xen0_ia64 buildconfigs/linux-defconfig_xenU_ia64 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/sal.c linux-2.6-xen-sparse/arch/ia64/kernel/setup.c linux-2.6-xen-sparse/include/asm-ia64/processor.h linux-2.6-xen-sparse/include/asm-ia64/system.h
line diff
     1.1 --- a/buildconfigs/linux-defconfig_xen0_ia64	Fri Feb 17 00:07:11 2006 +0100
     1.2 +++ b/buildconfigs/linux-defconfig_xen0_ia64	Thu Feb 16 23:24:47 2006 +0000
     1.3 @@ -1,14 +1,13 @@
     1.4  #
     1.5  # Automatically generated make config: don't edit
     1.6 -# Linux kernel version: 2.6.16-rc2-xen0
     1.7 -# Mon Feb  6 02:48:43 2006
     1.8 +# Linux kernel version: 2.6.16-rc3-xen0
     1.9 +# Thu Feb 16 13:20:46 2006
    1.10  #
    1.11  
    1.12  #
    1.13  # Code maturity level options
    1.14  #
    1.15  CONFIG_EXPERIMENTAL=y
    1.16 -CONFIG_CLEAN_COMPILE=y
    1.17  CONFIG_LOCK_KERNEL=y
    1.18  CONFIG_INIT_ENV_ARG_LIMIT=32
    1.19  
    1.20 @@ -212,6 +211,7 @@ CONFIG_NET=y
    1.21  #
    1.22  # Networking options
    1.23  #
    1.24 +# CONFIG_NETDEBUG is not set
    1.25  CONFIG_PACKET=y
    1.26  # CONFIG_PACKET_MMAP is not set
    1.27  CONFIG_UNIX=y
    1.28 @@ -359,6 +359,7 @@ CONFIG_BLK_DEV_INITRD=y
    1.29  # ATA/ATAPI/MFM/RLL support
    1.30  #
    1.31  CONFIG_IDE=y
    1.32 +CONFIG_IDE_MAX_HWIFS=4
    1.33  CONFIG_BLK_DEV_IDE=y
    1.34  
    1.35  #
    1.36 @@ -739,6 +740,7 @@ CONFIG_SERIAL_8250_SHARE_IRQ=y
    1.37  #
    1.38  CONFIG_SERIAL_CORE=y
    1.39  CONFIG_SERIAL_CORE_CONSOLE=y
    1.40 +# CONFIG_SERIAL_JSM is not set
    1.41  CONFIG_UNIX98_PTYS=y
    1.42  CONFIG_LEGACY_PTYS=y
    1.43  CONFIG_LEGACY_PTY_COUNT=256
    1.44 @@ -860,6 +862,7 @@ CONFIG_HWMON=y
    1.45  # CONFIG_SENSORS_ASB100 is not set
    1.46  # CONFIG_SENSORS_ATXP1 is not set
    1.47  # CONFIG_SENSORS_DS1621 is not set
    1.48 +# CONFIG_SENSORS_F71805F is not set
    1.49  # CONFIG_SENSORS_FSCHER is not set
    1.50  # CONFIG_SENSORS_FSCPOS is not set
    1.51  # CONFIG_SENSORS_GL518SM is not set
     2.1 --- a/buildconfigs/linux-defconfig_xenU_ia64	Fri Feb 17 00:07:11 2006 +0100
     2.2 +++ b/buildconfigs/linux-defconfig_xenU_ia64	Thu Feb 16 23:24:47 2006 +0000
     2.3 @@ -1,16 +1,13 @@
     2.4  #
     2.5  # Automatically generated make config: don't edit
     2.6 -# Linux kernel version: 2.6.16-rc2-xenU
     2.7 -# Mon Feb  6 03:35:30 2006
     2.8 +# Linux kernel version: 2.6.16-rc3-xenU
     2.9 +# Thu Feb 16 13:47:59 2006
    2.10  #
    2.11  
    2.12  #
    2.13  # Code maturity level options
    2.14  #
    2.15  CONFIG_EXPERIMENTAL=y
    2.16 -# CONFIG_CLEAN_COMPILE is not set
    2.17 -CONFIG_BROKEN=y
    2.18 -CONFIG_BROKEN_ON_SMP=y
    2.19  CONFIG_LOCK_KERNEL=y
    2.20  CONFIG_INIT_ENV_ARG_LIMIT=32
    2.21  
    2.22 @@ -211,6 +208,7 @@ CONFIG_NET=y
    2.23  #
    2.24  # Networking options
    2.25  #
    2.26 +# CONFIG_NETDEBUG is not set
    2.27  CONFIG_PACKET=y
    2.28  # CONFIG_PACKET_MMAP is not set
    2.29  CONFIG_UNIX=y
    2.30 @@ -397,13 +395,11 @@ CONFIG_SCSI_SAS_ATTRS=y
    2.31  # CONFIG_SCSI_AIC7XXX is not set
    2.32  # CONFIG_SCSI_AIC7XXX_OLD is not set
    2.33  # CONFIG_SCSI_AIC79XX is not set
    2.34 -# CONFIG_SCSI_ADVANSYS is not set
    2.35  # CONFIG_MEGARAID_NEWGEN is not set
    2.36  # CONFIG_MEGARAID_LEGACY is not set
    2.37  # CONFIG_MEGARAID_SAS is not set
    2.38  # CONFIG_SCSI_SATA is not set
    2.39  # CONFIG_SCSI_DMX3191D is not set
    2.40 -# CONFIG_SCSI_EATA_PIO is not set
    2.41  # CONFIG_SCSI_FUTURE_DOMAIN is not set
    2.42  # CONFIG_SCSI_IPS is not set
    2.43  # CONFIG_SCSI_INITIO is not set
    2.44 @@ -752,6 +748,7 @@ CONFIG_HWMON=y
    2.45  # CONFIG_SENSORS_ASB100 is not set
    2.46  # CONFIG_SENSORS_ATXP1 is not set
    2.47  # CONFIG_SENSORS_DS1621 is not set
    2.48 +# CONFIG_SENSORS_F71805F is not set
    2.49  # CONFIG_SENSORS_FSCHER is not set
    2.50  # CONFIG_SENSORS_FSCPOS is not set
    2.51  # CONFIG_SENSORS_GL518SM is not set
    2.52 @@ -809,7 +806,6 @@ CONFIG_VIDEO_DEV=y
    2.53  # CONFIG_TUNER_3036 is not set
    2.54  # CONFIG_VIDEO_STRADIS is not set
    2.55  # CONFIG_VIDEO_ZORAN is not set
    2.56 -# CONFIG_VIDEO_ZR36120 is not set
    2.57  # CONFIG_VIDEO_SAA7134 is not set
    2.58  # CONFIG_VIDEO_MXB is not set
    2.59  # CONFIG_VIDEO_DPC is not set
    2.60 @@ -865,7 +861,6 @@ CONFIG_FB_RADEON_DEBUG=y
    2.61  # CONFIG_FB_3DFX is not set
    2.62  # CONFIG_FB_VOODOO1 is not set
    2.63  # CONFIG_FB_TRIDENT is not set
    2.64 -# CONFIG_FB_PM3 is not set
    2.65  # CONFIG_FB_VIRTUAL is not set
    2.66  
    2.67  #
     3.1 --- a/linux-2.6-xen-sparse/arch/ia64/Kconfig	Fri Feb 17 00:07:11 2006 +0100
     3.2 +++ b/linux-2.6-xen-sparse/arch/ia64/Kconfig	Thu Feb 16 23:24:47 2006 +0000
     3.3 @@ -236,7 +236,6 @@ config IA64_L1_CACHE_SHIFT
     3.4  	default "7" if MCKINLEY
     3.5  	default "6" if ITANIUM
     3.6  
     3.7 -# align cache-sensitive data to 64 bytes
     3.8  config IA64_CYCLONE
     3.9  	bool "Cyclone (EXA) Time Source support"
    3.10  	help
    3.11 @@ -416,6 +415,9 @@ config IA64_PALINFO
    3.12  	  To use this option, you have to ensure that the "/proc file system
    3.13  	  support" (CONFIG_PROC_FS) is enabled, too.
    3.14  
    3.15 +config SGI_SN
    3.16 +	def_bool y if (IA64_SGI_SN2 || IA64_GENERIC)
    3.17 +
    3.18  source "drivers/firmware/Kconfig"
    3.19  
    3.20  source "fs/Kconfig.binfmt"
     4.1 --- a/linux-2.6-xen-sparse/arch/ia64/Makefile	Fri Feb 17 00:07:11 2006 +0100
     4.2 +++ b/linux-2.6-xen-sparse/arch/ia64/Makefile	Thu Feb 16 23:24:47 2006 +0000
     4.3 @@ -74,6 +74,8 @@ all: compressed unwcheck
     4.4  
     4.5  compressed: vmlinux.gz
     4.6  
     4.7 +vmlinuz: vmlinux.gz
     4.8 +
     4.9  vmlinux.gz: vmlinux
    4.10  	$(Q)$(MAKE) $(build)=$(boot) $@
    4.11  
    4.12 @@ -88,7 +90,7 @@ CLEAN_FILES += vmlinux.gz bootloader
    4.13  boot:	lib/lib.a vmlinux
    4.14  	$(Q)$(MAKE) $(build)=$(boot) $@
    4.15  
    4.16 -install: vmlinux.gz
    4.17 +install:
    4.18  	sh $(srctree)/arch/ia64/install.sh $(KERNELRELEASE) $< System.map "$(INSTALL_PATH)"
    4.19  
    4.20  define archhelp
     5.1 --- a/linux-2.6-xen-sparse/arch/ia64/kernel/entry.S	Fri Feb 17 00:07:11 2006 +0100
     5.2 +++ b/linux-2.6-xen-sparse/arch/ia64/kernel/entry.S	Thu Feb 16 23:24:47 2006 +0000
     5.3 @@ -1607,5 +1607,21 @@ sys_call_table:
     5.4  	data8 sys_inotify_add_watch
     5.5  	data8 sys_inotify_rm_watch
     5.6  	data8 sys_migrate_pages			// 1280
     5.7 +	data8 sys_openat
     5.8 +	data8 sys_mkdirat
     5.9 +	data8 sys_mknodat
    5.10 +	data8 sys_fchownat
    5.11 +	data8 sys_futimesat			// 1285
    5.12 +	data8 sys_newfstatat
    5.13 +	data8 sys_unlinkat
    5.14 +	data8 sys_renameat
    5.15 +	data8 sys_linkat
    5.16 +	data8 sys_symlinkat			// 1290
    5.17 +	data8 sys_readlinkat
    5.18 +	data8 sys_fchmodat
    5.19 +	data8 sys_faccessat
    5.20 +	data8 sys_ni_syscall			// reserved for pselect
    5.21 +	data8 sys_ni_syscall			// 1295 reserved for ppoll
    5.22 +	data8 sys_unshare
    5.23  
    5.24  	.org sys_call_table + 8*NR_syscalls	// guard against failures to increase NR_syscalls
     6.1 --- a/linux-2.6-xen-sparse/arch/ia64/kernel/head.S	Fri Feb 17 00:07:11 2006 +0100
     6.2 +++ b/linux-2.6-xen-sparse/arch/ia64/kernel/head.S	Thu Feb 16 23:24:47 2006 +0000
     6.3 @@ -352,6 +352,7 @@ 1:	// now we are in virtual mode
     6.4  	mov ar.rsc=0		// place RSE in enforced lazy mode
     6.5  	;;
     6.6  	loadrs			// clear the dirty partition
     6.7 +	mov IA64_KR(PER_CPU_DATA)=r0	// clear physical per-CPU base
     6.8  	;;
     6.9  	mov ar.bspstore=r2	// establish the new RSE stack
    6.10  	;;
     7.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.2 +++ b/linux-2.6-xen-sparse/arch/ia64/kernel/sal.c	Thu Feb 16 23:24:47 2006 +0000
     7.3 @@ -0,0 +1,378 @@
     7.4 +/*
     7.5 + * System Abstraction Layer (SAL) interface routines.
     7.6 + *
     7.7 + * Copyright (C) 1998, 1999, 2001, 2003 Hewlett-Packard Co
     7.8 + *	David Mosberger-Tang <davidm@hpl.hp.com>
     7.9 + * Copyright (C) 1999 VA Linux Systems
    7.10 + * Copyright (C) 1999 Walt Drummond <drummond@valinux.com>
    7.11 + */
    7.12 +#include <linux/config.h>
    7.13 +
    7.14 +#include <linux/kernel.h>
    7.15 +#include <linux/init.h>
    7.16 +#include <linux/module.h>
    7.17 +#include <linux/spinlock.h>
    7.18 +#include <linux/string.h>
    7.19 +
    7.20 +#include <asm/delay.h>
    7.21 +#include <asm/page.h>
    7.22 +#include <asm/sal.h>
    7.23 +#include <asm/pal.h>
    7.24 +
    7.25 + __cacheline_aligned DEFINE_SPINLOCK(sal_lock);
    7.26 +unsigned long sal_platform_features;
    7.27 +
    7.28 +unsigned short sal_revision;
    7.29 +unsigned short sal_version;
    7.30 +
    7.31 +#define SAL_MAJOR(x) ((x) >> 8)
    7.32 +#define SAL_MINOR(x) ((x) & 0xff)
    7.33 +
    7.34 +static struct {
    7.35 +	void *addr;	/* function entry point */
    7.36 +	void *gpval;	/* gp value to use */
    7.37 +} pdesc;
    7.38 +
    7.39 +static long
    7.40 +default_handler (void)
    7.41 +{
    7.42 +	return -1;
    7.43 +}
    7.44 +
    7.45 +ia64_sal_handler ia64_sal = (ia64_sal_handler) default_handler;
    7.46 +ia64_sal_desc_ptc_t *ia64_ptc_domain_info;
    7.47 +
    7.48 +const char *
    7.49 +ia64_sal_strerror (long status)
    7.50 +{
    7.51 +	const char *str;
    7.52 +	switch (status) {
    7.53 +	      case 0: str = "Call completed without error"; break;
    7.54 +	      case 1: str = "Effect a warm boot of the system to complete "
    7.55 +			      "the update"; break;
    7.56 +	      case -1: str = "Not implemented"; break;
    7.57 +	      case -2: str = "Invalid argument"; break;
    7.58 +	      case -3: str = "Call completed with error"; break;
    7.59 +	      case -4: str = "Virtual address not registered"; break;
    7.60 +	      case -5: str = "No information available"; break;
    7.61 +	      case -6: str = "Insufficient space to add the entry"; break;
    7.62 +	      case -7: str = "Invalid entry_addr value"; break;
    7.63 +	      case -8: str = "Invalid interrupt vector"; break;
    7.64 +	      case -9: str = "Requested memory not available"; break;
    7.65 +	      case -10: str = "Unable to write to the NVM device"; break;
    7.66 +	      case -11: str = "Invalid partition type specified"; break;
    7.67 +	      case -12: str = "Invalid NVM_Object id specified"; break;
    7.68 +	      case -13: str = "NVM_Object already has the maximum number "
    7.69 +				"of partitions"; break;
    7.70 +	      case -14: str = "Insufficient space in partition for the "
    7.71 +				"requested write sub-function"; break;
    7.72 +	      case -15: str = "Insufficient data buffer space for the "
    7.73 +				"requested read record sub-function"; break;
    7.74 +	      case -16: str = "Scratch buffer required for the write/delete "
    7.75 +				"sub-function"; break;
    7.76 +	      case -17: str = "Insufficient space in the NVM_Object for the "
    7.77 +				"requested create sub-function"; break;
    7.78 +	      case -18: str = "Invalid value specified in the partition_rec "
    7.79 +				"argument"; break;
    7.80 +	      case -19: str = "Record oriented I/O not supported for this "
    7.81 +				"partition"; break;
    7.82 +	      case -20: str = "Bad format of record to be written or "
    7.83 +				"required keyword variable not "
    7.84 +				"specified"; break;
    7.85 +	      default: str = "Unknown SAL status code"; break;
    7.86 +	}
    7.87 +	return str;
    7.88 +}
    7.89 +
    7.90 +void __init
    7.91 +ia64_sal_handler_init (void *entry_point, void *gpval)
    7.92 +{
    7.93 +	/* fill in the SAL procedure descriptor and point ia64_sal to it: */
    7.94 +	pdesc.addr = entry_point;
    7.95 +	pdesc.gpval = gpval;
    7.96 +	ia64_sal = (ia64_sal_handler) &pdesc;
    7.97 +}
    7.98 +
    7.99 +static void __init
   7.100 +check_versions (struct ia64_sal_systab *systab)
   7.101 +{
   7.102 +	sal_revision = (systab->sal_rev_major << 8) | systab->sal_rev_minor;
   7.103 +	sal_version = (systab->sal_b_rev_major << 8) | systab->sal_b_rev_minor;
   7.104 +
   7.105 +	/* Check for broken firmware */
   7.106 +	if ((sal_revision == SAL_VERSION_CODE(49, 29))
   7.107 +	    && (sal_version == SAL_VERSION_CODE(49, 29)))
   7.108 +	{
   7.109 +		/*
   7.110 +		 * Old firmware for zx2000 prototypes have this weird version number,
   7.111 +		 * reset it to something sane.
   7.112 +		 */
   7.113 +		sal_revision = SAL_VERSION_CODE(2, 8);
   7.114 +		sal_version = SAL_VERSION_CODE(0, 0);
   7.115 +	}
   7.116 +}
   7.117 +
   7.118 +static void __init
   7.119 +sal_desc_entry_point (void *p)
   7.120 +{
   7.121 +	struct ia64_sal_desc_entry_point *ep = p;
   7.122 +	ia64_pal_handler_init(__va(ep->pal_proc));
   7.123 +	ia64_sal_handler_init(__va(ep->sal_proc), __va(ep->gp));
   7.124 +}
   7.125 +
   7.126 +#ifdef CONFIG_SMP
   7.127 +static void __init
   7.128 +set_smp_redirect (int flag)
   7.129 +{
   7.130 +#ifndef CONFIG_HOTPLUG_CPU
   7.131 +	if (no_int_routing)
   7.132 +		smp_int_redirect &= ~flag;
   7.133 +	else
   7.134 +		smp_int_redirect |= flag;
   7.135 +#else
   7.136 +	/*
   7.137 +	 * For CPU Hotplug we dont want to do any chipset supported
   7.138 +	 * interrupt redirection. The reason is this would require that
   7.139 +	 * All interrupts be stopped and hard bind the irq to a cpu.
   7.140 +	 * Later when the interrupt is fired we need to set the redir hint
   7.141 +	 * on again in the vector. This is combersome for something that the
   7.142 +	 * user mode irq balancer will solve anyways.
   7.143 +	 */
   7.144 +	no_int_routing=1;
   7.145 +	smp_int_redirect &= ~flag;
   7.146 +#endif
   7.147 +}
   7.148 +#else
   7.149 +#define set_smp_redirect(flag)	do { } while (0)
   7.150 +#endif
   7.151 +
   7.152 +static void __init
   7.153 +sal_desc_platform_feature (void *p)
   7.154 +{
   7.155 +	struct ia64_sal_desc_platform_feature *pf = p;
   7.156 +	sal_platform_features = pf->feature_mask;
   7.157 +
   7.158 +	printk(KERN_INFO "SAL Platform features:");
   7.159 +	if (!sal_platform_features) {
   7.160 +		printk(" None\n");
   7.161 +		return;
   7.162 +	}
   7.163 +
   7.164 +	if (sal_platform_features & IA64_SAL_PLATFORM_FEATURE_BUS_LOCK)
   7.165 +		printk(" BusLock");
   7.166 +	if (sal_platform_features & IA64_SAL_PLATFORM_FEATURE_IRQ_REDIR_HINT) {
   7.167 +		printk(" IRQ_Redirection");
   7.168 +		set_smp_redirect(SMP_IRQ_REDIRECTION);
   7.169 +	}
   7.170 +	if (sal_platform_features & IA64_SAL_PLATFORM_FEATURE_IPI_REDIR_HINT) {
   7.171 +		printk(" IPI_Redirection");
   7.172 +		set_smp_redirect(SMP_IPI_REDIRECTION);
   7.173 +	}
   7.174 +	if (sal_platform_features & IA64_SAL_PLATFORM_FEATURE_ITC_DRIFT)
   7.175 +		printk(" ITC_Drift");
   7.176 +	printk("\n");
   7.177 +}
   7.178 +
   7.179 +#ifdef CONFIG_SMP
   7.180 +static void __init
   7.181 +sal_desc_ap_wakeup (void *p)
   7.182 +{
   7.183 +	struct ia64_sal_desc_ap_wakeup *ap = p;
   7.184 +
   7.185 +	switch (ap->mechanism) {
   7.186 +	case IA64_SAL_AP_EXTERNAL_INT:
   7.187 +		ap_wakeup_vector = ap->vector;
   7.188 +		printk(KERN_INFO "SAL: AP wakeup using external interrupt "
   7.189 +				"vector 0x%lx\n", ap_wakeup_vector);
   7.190 +		break;
   7.191 +	default:
   7.192 +		printk(KERN_ERR "SAL: AP wakeup mechanism unsupported!\n");
   7.193 +		break;
   7.194 +	}
   7.195 +}
   7.196 +
   7.197 +static void __init
   7.198 +chk_nointroute_opt(void)
   7.199 +{
   7.200 +	char *cp;
   7.201 +	extern char saved_command_line[];
   7.202 +
   7.203 +	for (cp = saved_command_line; *cp; ) {
   7.204 +		if (memcmp(cp, "nointroute", 10) == 0) {
   7.205 +			no_int_routing = 1;
   7.206 +			printk ("no_int_routing on\n");
   7.207 +			break;
   7.208 +		} else {
   7.209 +			while (*cp != ' ' && *cp)
   7.210 +				++cp;
   7.211 +			while (*cp == ' ')
   7.212 +				++cp;
   7.213 +		}
   7.214 +	}
   7.215 +}
   7.216 +
   7.217 +#else
   7.218 +static void __init sal_desc_ap_wakeup(void *p) { }
   7.219 +#endif
   7.220 +
   7.221 +/*
   7.222 + * HP rx5670 firmware polls for interrupts during SAL_CACHE_FLUSH by reading
   7.223 + * cr.ivr, but it never writes cr.eoi.  This leaves any interrupt marked as
   7.224 + * "in-service" and masks other interrupts of equal or lower priority.
   7.225 + *
   7.226 + * HP internal defect reports: F1859, F2775, F3031.
   7.227 + */
   7.228 +static int sal_cache_flush_drops_interrupts;
   7.229 +
   7.230 +static void __init
   7.231 +check_sal_cache_flush (void)
   7.232 +{
   7.233 +	unsigned long flags, itv;
   7.234 +	int cpu;
   7.235 +	u64 vector;
   7.236 +
   7.237 +	cpu = get_cpu();
   7.238 +	local_irq_save(flags);
   7.239 +
   7.240 +	/*
   7.241 +	 * Schedule a timer interrupt, wait until it's reported, and see if
   7.242 +	 * SAL_CACHE_FLUSH drops it.
   7.243 +	 */
   7.244 +	itv = ia64_get_itv();
   7.245 +	BUG_ON((itv & (1 << 16)) == 0);
   7.246 +
   7.247 +	ia64_set_itv(IA64_TIMER_VECTOR);
   7.248 +	ia64_set_itm(ia64_get_itc() + 1000);
   7.249 +
   7.250 +	while (!ia64_get_irr(IA64_TIMER_VECTOR))
   7.251 +		cpu_relax();
   7.252 +
   7.253 +	ia64_sal_cache_flush(3);
   7.254 +
   7.255 +	if (ia64_get_irr(IA64_TIMER_VECTOR)) {
   7.256 +		vector = ia64_get_ivr();
   7.257 +		ia64_eoi();
   7.258 +		WARN_ON(vector != IA64_TIMER_VECTOR);
   7.259 +	} else {
   7.260 +		sal_cache_flush_drops_interrupts = 1;
   7.261 +		printk(KERN_ERR "SAL: SAL_CACHE_FLUSH drops interrupts; "
   7.262 +			"PAL_CACHE_FLUSH will be used instead\n");
   7.263 +		ia64_eoi();
   7.264 +	}
   7.265 +
   7.266 +	ia64_set_itv(itv);
   7.267 +	local_irq_restore(flags);
   7.268 +	put_cpu();
   7.269 +}
   7.270 +
   7.271 +s64
   7.272 +ia64_sal_cache_flush (u64 cache_type)
   7.273 +{
   7.274 +	struct ia64_sal_retval isrv;
   7.275 +
   7.276 +	if (sal_cache_flush_drops_interrupts) {
   7.277 +		unsigned long flags;
   7.278 +		u64 progress;
   7.279 +		s64 rc;
   7.280 +
   7.281 +		progress = 0;
   7.282 +		local_irq_save(flags);
   7.283 +		rc = ia64_pal_cache_flush(cache_type,
   7.284 +			PAL_CACHE_FLUSH_INVALIDATE, &progress, NULL);
   7.285 +		local_irq_restore(flags);
   7.286 +		return rc;
   7.287 +	}
   7.288 +
   7.289 +	SAL_CALL(isrv, SAL_CACHE_FLUSH, cache_type, 0, 0, 0, 0, 0, 0);
   7.290 +	return isrv.status;
   7.291 +}
   7.292 +
   7.293 +void __init
   7.294 +ia64_sal_init (struct ia64_sal_systab *systab)
   7.295 +{
   7.296 +	char *p;
   7.297 +	int i;
   7.298 +
   7.299 +	if (!systab) {
   7.300 +		printk(KERN_WARNING "Hmm, no SAL System Table.\n");
   7.301 +		return;
   7.302 +	}
   7.303 +
   7.304 +	if (strncmp(systab->signature, "SST_", 4) != 0)
   7.305 +		printk(KERN_ERR "bad signature in system table!");
   7.306 +
   7.307 +	check_versions(systab);
   7.308 +#ifdef CONFIG_SMP
   7.309 +	chk_nointroute_opt();
   7.310 +#endif
   7.311 +
   7.312 +	/* revisions are coded in BCD, so %x does the job for us */
   7.313 +	printk(KERN_INFO "SAL %x.%x: %.32s %.32s%sversion %x.%x\n",
   7.314 +			SAL_MAJOR(sal_revision), SAL_MINOR(sal_revision),
   7.315 +			systab->oem_id, systab->product_id,
   7.316 +			systab->product_id[0] ? " " : "",
   7.317 +			SAL_MAJOR(sal_version), SAL_MINOR(sal_version));
   7.318 +
   7.319 +	p = (char *) (systab + 1);
   7.320 +	for (i = 0; i < systab->entry_count; i++) {
   7.321 +		/*
   7.322 +		 * The first byte of each entry type contains the type
   7.323 +		 * descriptor.
   7.324 +		 */
   7.325 +		switch (*p) {
   7.326 +		case SAL_DESC_ENTRY_POINT:
   7.327 +			sal_desc_entry_point(p);
   7.328 +			break;
   7.329 +		case SAL_DESC_PLATFORM_FEATURE:
   7.330 +			sal_desc_platform_feature(p);
   7.331 +			break;
   7.332 +		case SAL_DESC_PTC:
   7.333 +			ia64_ptc_domain_info = (ia64_sal_desc_ptc_t *)p;
   7.334 +			break;
   7.335 +		case SAL_DESC_AP_WAKEUP:
   7.336 +			sal_desc_ap_wakeup(p);
   7.337 +			break;
   7.338 +		}
   7.339 +		p += SAL_DESC_SIZE(*p);
   7.340 +	}
   7.341 +
   7.342 +	if (!running_on_xen)
   7.343 +		check_sal_cache_flush();
   7.344 +}
   7.345 +
   7.346 +int
   7.347 +ia64_sal_oemcall(struct ia64_sal_retval *isrvp, u64 oemfunc, u64 arg1,
   7.348 +		 u64 arg2, u64 arg3, u64 arg4, u64 arg5, u64 arg6, u64 arg7)
   7.349 +{
   7.350 +	if (oemfunc < IA64_SAL_OEMFUNC_MIN || oemfunc > IA64_SAL_OEMFUNC_MAX)
   7.351 +		return -1;
   7.352 +	SAL_CALL(*isrvp, oemfunc, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
   7.353 +	return 0;
   7.354 +}
   7.355 +EXPORT_SYMBOL(ia64_sal_oemcall);
   7.356 +
   7.357 +int
   7.358 +ia64_sal_oemcall_nolock(struct ia64_sal_retval *isrvp, u64 oemfunc, u64 arg1,
   7.359 +			u64 arg2, u64 arg3, u64 arg4, u64 arg5, u64 arg6,
   7.360 +			u64 arg7)
   7.361 +{
   7.362 +	if (oemfunc < IA64_SAL_OEMFUNC_MIN || oemfunc > IA64_SAL_OEMFUNC_MAX)
   7.363 +		return -1;
   7.364 +	SAL_CALL_NOLOCK(*isrvp, oemfunc, arg1, arg2, arg3, arg4, arg5, arg6,
   7.365 +			arg7);
   7.366 +	return 0;
   7.367 +}
   7.368 +EXPORT_SYMBOL(ia64_sal_oemcall_nolock);
   7.369 +
   7.370 +int
   7.371 +ia64_sal_oemcall_reentrant(struct ia64_sal_retval *isrvp, u64 oemfunc,
   7.372 +			   u64 arg1, u64 arg2, u64 arg3, u64 arg4, u64 arg5,
   7.373 +			   u64 arg6, u64 arg7)
   7.374 +{
   7.375 +	if (oemfunc < IA64_SAL_OEMFUNC_MIN || oemfunc > IA64_SAL_OEMFUNC_MAX)
   7.376 +		return -1;
   7.377 +	SAL_CALL_REENTRANT(*isrvp, oemfunc, arg1, arg2, arg3, arg4, arg5, arg6,
   7.378 +			   arg7);
   7.379 +	return 0;
   7.380 +}
   7.381 +EXPORT_SYMBOL(ia64_sal_oemcall_reentrant);
     8.1 --- a/linux-2.6-xen-sparse/arch/ia64/kernel/setup.c	Fri Feb 17 00:07:11 2006 +0100
     8.2 +++ b/linux-2.6-xen-sparse/arch/ia64/kernel/setup.c	Thu Feb 16 23:24:47 2006 +0000
     8.3 @@ -71,6 +71,8 @@ unsigned long __per_cpu_offset[NR_CPUS];
     8.4  EXPORT_SYMBOL(__per_cpu_offset);
     8.5  #endif
     8.6  
     8.7 +extern void ia64_setup_printk_clock(void);
     8.8 +
     8.9  DEFINE_PER_CPU(struct cpuinfo_ia64, cpu_info);
    8.10  DEFINE_PER_CPU(unsigned long, local_per_cpu_offset);
    8.11  DEFINE_PER_CPU(unsigned long, ia64_phys_stacked_size_p8);
    8.12 @@ -449,6 +451,8 @@ setup_arch (char **cmdline_p)
    8.13  	/* process SAL system table: */
    8.14  	ia64_sal_init(efi.sal_systab);
    8.15  
    8.16 +	ia64_setup_printk_clock();
    8.17 +
    8.18  #ifdef CONFIG_SMP
    8.19  	cpu_physical_id(0) = hard_smp_processor_id();
    8.20  
     9.1 --- a/linux-2.6-xen-sparse/include/asm-ia64/processor.h	Fri Feb 17 00:07:11 2006 +0100
     9.2 +++ b/linux-2.6-xen-sparse/include/asm-ia64/processor.h	Thu Feb 16 23:24:47 2006 +0000
     9.3 @@ -560,6 +560,23 @@ ia64_eoi (void)
     9.4  
     9.5  #define cpu_relax()	ia64_hint(ia64_hint_pause)
     9.6  
     9.7 +static inline int
     9.8 +ia64_get_irr(unsigned int vector)
     9.9 +{
    9.10 +	unsigned int reg = vector / 64;
    9.11 +	unsigned int bit = vector % 64;
    9.12 +	u64 irr;
    9.13 +
    9.14 +	switch (reg) {
    9.15 +	case 0: irr = ia64_getreg(_IA64_REG_CR_IRR0); break;
    9.16 +	case 1: irr = ia64_getreg(_IA64_REG_CR_IRR1); break;
    9.17 +	case 2: irr = ia64_getreg(_IA64_REG_CR_IRR2); break;
    9.18 +	case 3: irr = ia64_getreg(_IA64_REG_CR_IRR3); break;
    9.19 +	}
    9.20 +
    9.21 +	return test_bit(bit, &irr);
    9.22 +}
    9.23 +
    9.24  static inline void
    9.25  ia64_set_lrr0 (unsigned long val)
    9.26  {
    10.1 --- a/linux-2.6-xen-sparse/include/asm-ia64/system.h	Fri Feb 17 00:07:11 2006 +0100
    10.2 +++ b/linux-2.6-xen-sparse/include/asm-ia64/system.h	Thu Feb 16 23:24:47 2006 +0000
    10.3 @@ -249,32 +249,7 @@ extern void ia64_load_extra (struct task
    10.4  # define switch_to(prev,next,last)	__switch_to(prev, next, last)
    10.5  #endif
    10.6  
    10.7 -/*
    10.8 - * On IA-64, we don't want to hold the runqueue's lock during the low-level context-switch,
    10.9 - * because that could cause a deadlock.  Here is an example by Erich Focht:
   10.10 - *
   10.11 - * Example:
   10.12 - * CPU#0:
   10.13 - * schedule()
   10.14 - *    -> spin_lock_irq(&rq->lock)
   10.15 - *    -> context_switch()
   10.16 - *       -> wrap_mmu_context()
   10.17 - *          -> read_lock(&tasklist_lock)
   10.18 - *
   10.19 - * CPU#1:
   10.20 - * sys_wait4() or release_task() or forget_original_parent()
   10.21 - *    -> write_lock(&tasklist_lock)
   10.22 - *    -> do_notify_parent()
   10.23 - *       -> wake_up_parent()
   10.24 - *          -> try_to_wake_up()
   10.25 - *             -> spin_lock_irq(&parent_rq->lock)
   10.26 - *
   10.27 - * If the parent's rq happens to be on CPU#0, we'll wait for the rq->lock
   10.28 - * of that CPU which will not be released, because there we wait for the
   10.29 - * tasklist_lock to become available.
   10.30 - */
   10.31  #define __ARCH_WANT_UNLOCKED_CTXSW
   10.32 -
   10.33  #define ARCH_HAS_PREFETCH_SWITCH_STACK
   10.34  #define ia64_platform_is(x) (strcmp(x, platform_name) == 0)
   10.35