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>
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