aboutsummaryrefslogtreecommitdiffstats
path: root/arch/ia64
diff options
context:
space:
mode:
Diffstat (limited to 'arch/ia64')
-rw-r--r--arch/ia64/Kconfig5
-rw-r--r--arch/ia64/Makefile7
-rw-r--r--arch/ia64/configs/bigsur_defconfig161
-rw-r--r--arch/ia64/configs/gensparse_defconfig174
-rw-r--r--arch/ia64/configs/sim_defconfig371
-rw-r--r--arch/ia64/configs/sn2_defconfig60
-rw-r--r--arch/ia64/configs/tiger_defconfig58
-rw-r--r--arch/ia64/configs/zx1_defconfig193
-rw-r--r--arch/ia64/defconfig178
-rw-r--r--arch/ia64/dig/setup.c10
-rw-r--r--arch/ia64/hp/sim/simserial.c12
-rw-r--r--arch/ia64/ia32/Makefile4
-rw-r--r--arch/ia64/ia32/elfcore32.h3
-rw-r--r--arch/ia64/ia32/ia32_entry.S2
-rw-r--r--arch/ia64/ia32/ia32_ioctl.c45
-rw-r--r--arch/ia64/ia32/ia32_signal.c5
-rw-r--r--arch/ia64/ia32/ia32_support.c4
-rw-r--r--arch/ia64/ia32/sys_ia32.c85
-rw-r--r--arch/ia64/kernel/Makefile5
-rw-r--r--arch/ia64/kernel/acpi-ext.c22
-rw-r--r--arch/ia64/kernel/acpi-processor.c67
-rw-r--r--arch/ia64/kernel/acpi.c59
-rw-r--r--arch/ia64/kernel/cpufreq/Makefile1
-rw-r--r--arch/ia64/kernel/cpufreq/acpi-cpufreq.c51
-rw-r--r--arch/ia64/kernel/cyclone.c2
-rw-r--r--arch/ia64/kernel/efi.c176
-rw-r--r--arch/ia64/kernel/entry.S21
-rw-r--r--arch/ia64/kernel/fsys.S29
-rw-r--r--arch/ia64/kernel/head.S3
-rw-r--r--arch/ia64/kernel/ia64_ksyms.c17
-rw-r--r--arch/ia64/kernel/ivt.S16
-rw-r--r--arch/ia64/kernel/jprobes.S27
-rw-r--r--arch/ia64/kernel/kprobes.c68
-rw-r--r--arch/ia64/kernel/mca.c4
-rw-r--r--arch/ia64/kernel/mca_asm.S4
-rw-r--r--arch/ia64/kernel/mca_drv.c19
-rw-r--r--arch/ia64/kernel/perfmon.c46
-rw-r--r--arch/ia64/kernel/perfmon_montecito.h269
-rw-r--r--arch/ia64/kernel/process.c12
-rw-r--r--arch/ia64/kernel/ptrace.c33
-rw-r--r--arch/ia64/kernel/sal.c75
-rw-r--r--arch/ia64/kernel/salinfo.c171
-rw-r--r--arch/ia64/kernel/setup.c28
-rw-r--r--arch/ia64/kernel/signal.c10
-rw-r--r--arch/ia64/kernel/smpboot.c5
-rw-r--r--arch/ia64/kernel/sys_ia64.c2
-rw-r--r--arch/ia64/kernel/time.c62
-rw-r--r--arch/ia64/kernel/topology.c18
-rw-r--r--arch/ia64/kernel/traps.c34
-rw-r--r--arch/ia64/kernel/unaligned.c36
-rw-r--r--arch/ia64/kernel/uncached.c1
-rw-r--r--arch/ia64/mm/init.c36
-rw-r--r--arch/ia64/mm/tlb.c2
-rw-r--r--arch/ia64/oprofile/backtrace.c2
-rw-r--r--arch/ia64/pci/pci.c33
-rw-r--r--arch/ia64/sn/Makefile2
-rw-r--r--arch/ia64/sn/include/xtalk/hubdev.h35
-rw-r--r--arch/ia64/sn/include/xtalk/xbow.h206
-rw-r--r--arch/ia64/sn/include/xtalk/xwidgetdev.h46
-rw-r--r--arch/ia64/sn/kernel/Makefile2
-rw-r--r--arch/ia64/sn/kernel/bte.c17
-rw-r--r--arch/ia64/sn/kernel/bte_error.c58
-rw-r--r--arch/ia64/sn/kernel/huberror.c9
-rw-r--r--arch/ia64/sn/kernel/io_init.c223
-rw-r--r--arch/ia64/sn/kernel/irq.c35
-rw-r--r--arch/ia64/sn/kernel/klconflib.c29
-rw-r--r--arch/ia64/sn/kernel/mca.c12
-rw-r--r--arch/ia64/sn/kernel/setup.c77
-rw-r--r--arch/ia64/sn/kernel/sn2/Makefile2
-rw-r--r--arch/ia64/sn/kernel/sn2/prominfo_proc.c25
-rw-r--r--arch/ia64/sn/kernel/sn2/sn2_smp.c213
-rw-r--r--arch/ia64/sn/kernel/sn2/sn_hwperf.c5
-rw-r--r--arch/ia64/sn/kernel/sn2/sn_proc_fs.c22
-rw-r--r--arch/ia64/sn/kernel/sn2/timer.c19
-rw-r--r--arch/ia64/sn/kernel/sn2/timer_interrupt.c7
-rw-r--r--arch/ia64/sn/kernel/tiocx.c41
-rw-r--r--arch/ia64/sn/kernel/xp_main.c17
-rw-r--r--arch/ia64/sn/kernel/xpc.h1273
-rw-r--r--arch/ia64/sn/kernel/xpc_channel.c70
-rw-r--r--arch/ia64/sn/kernel/xpc_main.c245
-rw-r--r--arch/ia64/sn/kernel/xpc_partition.c10
-rw-r--r--arch/ia64/sn/pci/Makefile2
-rw-r--r--arch/ia64/sn/pci/pci_dma.c20
-rw-r--r--arch/ia64/sn/pci/pcibr/Makefile2
-rw-r--r--arch/ia64/sn/pci/pcibr/pcibr_ate.c43
-rw-r--r--arch/ia64/sn/pci/pcibr/pcibr_dma.c76
-rw-r--r--arch/ia64/sn/pci/pcibr/pcibr_provider.c49
-rw-r--r--arch/ia64/sn/pci/pcibr/pcibr_reg.c28
-rw-r--r--arch/ia64/sn/pci/tioca_provider.c36
-rw-r--r--arch/ia64/sn/pci/tioce_provider.c68
90 files changed, 2953 insertions, 2914 deletions
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig
index 5e0f58e37c59..ff7ae6b664e8 100644
--- a/arch/ia64/Kconfig
+++ b/arch/ia64/Kconfig
@@ -194,7 +194,6 @@ config IA64_L1_CACHE_SHIFT
194 default "7" if MCKINLEY 194 default "7" if MCKINLEY
195 default "6" if ITANIUM 195 default "6" if ITANIUM
196 196
197# align cache-sensitive data to 64 bytes
198config IA64_CYCLONE 197config IA64_CYCLONE
199 bool "Cyclone (EXA) Time Source support" 198 bool "Cyclone (EXA) Time Source support"
200 help 199 help
@@ -393,6 +392,9 @@ config IA64_PALINFO
393 To use this option, you have to ensure that the "/proc file system 392 To use this option, you have to ensure that the "/proc file system
394 support" (CONFIG_PROC_FS) is enabled, too. 393 support" (CONFIG_PROC_FS) is enabled, too.
395 394
395config SGI_SN
396 def_bool y if (IA64_SGI_SN2 || IA64_GENERIC)
397
396source "drivers/firmware/Kconfig" 398source "drivers/firmware/Kconfig"
397 399
398source "fs/Kconfig.binfmt" 400source "fs/Kconfig.binfmt"
@@ -470,6 +472,7 @@ source "arch/ia64/oprofile/Kconfig"
470 472
471config KPROBES 473config KPROBES
472 bool "Kprobes (EXPERIMENTAL)" 474 bool "Kprobes (EXPERIMENTAL)"
475 depends on EXPERIMENTAL && MODULES
473 help 476 help
474 Kprobes allows you to trap at almost any kernel address and 477 Kprobes allows you to trap at almost any kernel address and
475 execute a callback function. register_kprobe() establishes 478 execute a callback function. register_kprobe() establishes
diff --git a/arch/ia64/Makefile b/arch/ia64/Makefile
index 67932ad53082..f722e1a25948 100644
--- a/arch/ia64/Makefile
+++ b/arch/ia64/Makefile
@@ -25,7 +25,6 @@ cflags-y := -pipe $(EXTRA) -ffixed-r13 -mfixed-range=f12-f15,f32-f127 \
25 -falign-functions=32 -frename-registers -fno-optimize-sibling-calls 25 -falign-functions=32 -frename-registers -fno-optimize-sibling-calls
26CFLAGS_KERNEL := -mconstant-gp 26CFLAGS_KERNEL := -mconstant-gp
27 27
28GCC_VERSION := $(call cc-version)
29GAS_STATUS = $(shell $(srctree)/arch/ia64/scripts/check-gas "$(CC)" "$(OBJDUMP)") 28GAS_STATUS = $(shell $(srctree)/arch/ia64/scripts/check-gas "$(CC)" "$(OBJDUMP)")
30CPPFLAGS += $(shell $(srctree)/arch/ia64/scripts/toolchain-flags "$(CC)" "$(OBJDUMP)" "$(READELF)") 29CPPFLAGS += $(shell $(srctree)/arch/ia64/scripts/toolchain-flags "$(CC)" "$(OBJDUMP)" "$(READELF)")
31 30
@@ -37,11 +36,7 @@ $(error Sorry, you need a newer version of the assember, one that is built from
37 ftp://ftp.hpl.hp.com/pub/linux-ia64/gas-030124.tar.gz) 36 ftp://ftp.hpl.hp.com/pub/linux-ia64/gas-030124.tar.gz)
38endif 37endif
39 38
40ifneq ($(shell if [ $(GCC_VERSION) -lt 0300 ] ; then echo "bad"; fi ;),) 39ifeq ($(call cc-version),0304)
41$(error Sorry, your compiler is too old. GCC v2.96 is known to generate bad code.)
42endif
43
44ifeq ($(GCC_VERSION),0304)
45 cflags-$(CONFIG_ITANIUM) += -mtune=merced 40 cflags-$(CONFIG_ITANIUM) += -mtune=merced
46 cflags-$(CONFIG_MCKINLEY) += -mtune=mckinley 41 cflags-$(CONFIG_MCKINLEY) += -mtune=mckinley
47endif 42endif
diff --git a/arch/ia64/configs/bigsur_defconfig b/arch/ia64/configs/bigsur_defconfig
index b40672bb3ab0..90e9c2e61bf4 100644
--- a/arch/ia64/configs/bigsur_defconfig
+++ b/arch/ia64/configs/bigsur_defconfig
@@ -1,14 +1,13 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.14-rc1 3# Linux kernel version: 2.6.16-rc5
4# Wed Sep 14 15:18:49 2005 4# Mon Feb 27 16:10:42 2006
5# 5#
6 6
7# 7#
8# Code maturity level options 8# Code maturity level options
9# 9#
10CONFIG_EXPERIMENTAL=y 10CONFIG_EXPERIMENTAL=y
11CONFIG_CLEAN_COMPILE=y
12CONFIG_LOCK_KERNEL=y 11CONFIG_LOCK_KERNEL=y
13CONFIG_INIT_ENV_ARG_LIMIT=32 12CONFIG_INIT_ENV_ARG_LIMIT=32
14 13
@@ -23,17 +22,18 @@ CONFIG_POSIX_MQUEUE=y
23# CONFIG_BSD_PROCESS_ACCT is not set 22# CONFIG_BSD_PROCESS_ACCT is not set
24CONFIG_SYSCTL=y 23CONFIG_SYSCTL=y
25# CONFIG_AUDIT is not set 24# CONFIG_AUDIT is not set
26CONFIG_HOTPLUG=y
27CONFIG_KOBJECT_UEVENT=y
28# CONFIG_IKCONFIG is not set 25# CONFIG_IKCONFIG is not set
29# CONFIG_CPUSETS is not set 26# CONFIG_CPUSETS is not set
30CONFIG_INITRAMFS_SOURCE="" 27CONFIG_INITRAMFS_SOURCE=""
28CONFIG_CC_OPTIMIZE_FOR_SIZE=y
31# CONFIG_EMBEDDED is not set 29# CONFIG_EMBEDDED is not set
32CONFIG_KALLSYMS=y 30CONFIG_KALLSYMS=y
33# CONFIG_KALLSYMS_ALL is not set 31# CONFIG_KALLSYMS_ALL is not set
34# CONFIG_KALLSYMS_EXTRA_PASS is not set 32# CONFIG_KALLSYMS_EXTRA_PASS is not set
33CONFIG_HOTPLUG=y
35CONFIG_PRINTK=y 34CONFIG_PRINTK=y
36CONFIG_BUG=y 35CONFIG_BUG=y
36CONFIG_ELF_CORE=y
37CONFIG_BASE_FULL=y 37CONFIG_BASE_FULL=y
38CONFIG_FUTEX=y 38CONFIG_FUTEX=y
39CONFIG_EPOLL=y 39CONFIG_EPOLL=y
@@ -42,8 +42,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
42CONFIG_CC_ALIGN_LABELS=0 42CONFIG_CC_ALIGN_LABELS=0
43CONFIG_CC_ALIGN_LOOPS=0 43CONFIG_CC_ALIGN_LOOPS=0
44CONFIG_CC_ALIGN_JUMPS=0 44CONFIG_CC_ALIGN_JUMPS=0
45CONFIG_SLAB=y
45# CONFIG_TINY_SHMEM is not set 46# CONFIG_TINY_SHMEM is not set
46CONFIG_BASE_SMALL=0 47CONFIG_BASE_SMALL=0
48# CONFIG_SLOB is not set
47 49
48# 50#
49# Loadable module support 51# Loadable module support
@@ -58,17 +60,36 @@ CONFIG_KMOD=y
58CONFIG_STOP_MACHINE=y 60CONFIG_STOP_MACHINE=y
59 61
60# 62#
63# Block layer
64#
65
66#
67# IO Schedulers
68#
69CONFIG_IOSCHED_NOOP=y
70CONFIG_IOSCHED_AS=y
71CONFIG_IOSCHED_DEADLINE=y
72CONFIG_IOSCHED_CFQ=y
73CONFIG_DEFAULT_AS=y
74# CONFIG_DEFAULT_DEADLINE is not set
75# CONFIG_DEFAULT_CFQ is not set
76# CONFIG_DEFAULT_NOOP is not set
77CONFIG_DEFAULT_IOSCHED="anticipatory"
78
79#
61# Processor type and features 80# Processor type and features
62# 81#
63CONFIG_IA64=y 82CONFIG_IA64=y
64CONFIG_64BIT=y 83CONFIG_64BIT=y
65CONFIG_MMU=y 84CONFIG_MMU=y
85CONFIG_SWIOTLB=y
66CONFIG_RWSEM_XCHGADD_ALGORITHM=y 86CONFIG_RWSEM_XCHGADD_ALGORITHM=y
67CONFIG_GENERIC_CALIBRATE_DELAY=y 87CONFIG_GENERIC_CALIBRATE_DELAY=y
68CONFIG_TIME_INTERPOLATION=y 88CONFIG_TIME_INTERPOLATION=y
69CONFIG_EFI=y 89CONFIG_EFI=y
70CONFIG_GENERIC_IOMAP=y 90CONFIG_GENERIC_IOMAP=y
71CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y 91CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
92CONFIG_DMA_IS_DMA32=y
72# CONFIG_IA64_GENERIC is not set 93# CONFIG_IA64_GENERIC is not set
73CONFIG_IA64_DIG=y 94CONFIG_IA64_DIG=y
74# CONFIG_IA64_HP_ZX1 is not set 95# CONFIG_IA64_HP_ZX1 is not set
@@ -81,18 +102,17 @@ CONFIG_ITANIUM=y
81# CONFIG_IA64_PAGE_SIZE_8KB is not set 102# CONFIG_IA64_PAGE_SIZE_8KB is not set
82CONFIG_IA64_PAGE_SIZE_16KB=y 103CONFIG_IA64_PAGE_SIZE_16KB=y
83# CONFIG_IA64_PAGE_SIZE_64KB is not set 104# CONFIG_IA64_PAGE_SIZE_64KB is not set
105CONFIG_PGTABLE_3=y
106# CONFIG_PGTABLE_4 is not set
84# CONFIG_HZ_100 is not set 107# CONFIG_HZ_100 is not set
85CONFIG_HZ_250=y 108CONFIG_HZ_250=y
86# CONFIG_HZ_1000 is not set 109# CONFIG_HZ_1000 is not set
87CONFIG_HZ=250 110CONFIG_HZ=250
88CONFIG_IA64_BRL_EMU=y 111CONFIG_IA64_BRL_EMU=y
89CONFIG_IA64_L1_CACHE_SHIFT=6 112CONFIG_IA64_L1_CACHE_SHIFT=6
90# CONFIG_NUMA is not set
91# CONFIG_VIRTUAL_MEM_MAP is not set
92# CONFIG_IA64_CYCLONE is not set 113# CONFIG_IA64_CYCLONE is not set
93CONFIG_IOSAPIC=y 114CONFIG_IOSAPIC=y
94# CONFIG_IA64_SGI_SN_XP is not set 115CONFIG_FORCE_MAX_ZONEORDER=17
95CONFIG_FORCE_MAX_ZONEORDER=18
96CONFIG_SMP=y 116CONFIG_SMP=y
97CONFIG_NR_CPUS=2 117CONFIG_NR_CPUS=2
98# CONFIG_HOTPLUG_CPU is not set 118# CONFIG_HOTPLUG_CPU is not set
@@ -105,7 +125,12 @@ CONFIG_FLATMEM_MANUAL=y
105CONFIG_FLATMEM=y 125CONFIG_FLATMEM=y
106CONFIG_FLAT_NODE_MEM_MAP=y 126CONFIG_FLAT_NODE_MEM_MAP=y
107# CONFIG_SPARSEMEM_STATIC is not set 127# CONFIG_SPARSEMEM_STATIC is not set
108CONFIG_HAVE_DEC_LOCK=y 128CONFIG_SPLIT_PTLOCK_CPUS=4
129CONFIG_ARCH_SELECT_MEMORY_MODEL=y
130CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
131CONFIG_ARCH_FLATMEM_ENABLE=y
132CONFIG_ARCH_SPARSEMEM_ENABLE=y
133# CONFIG_VIRTUAL_MEM_MAP is not set
109CONFIG_IA32_SUPPORT=y 134CONFIG_IA32_SUPPORT=y
110CONFIG_COMPAT=y 135CONFIG_COMPAT=y
111# CONFIG_IA64_MCA_RECOVERY is not set 136# CONFIG_IA64_MCA_RECOVERY is not set
@@ -117,7 +142,6 @@ CONFIG_IA64_PALINFO=y
117# 142#
118CONFIG_EFI_VARS=y 143CONFIG_EFI_VARS=y
119CONFIG_EFI_PCDP=y 144CONFIG_EFI_PCDP=y
120# CONFIG_DELL_RBU is not set
121CONFIG_BINFMT_ELF=y 145CONFIG_BINFMT_ELF=y
122CONFIG_BINFMT_MISC=m 146CONFIG_BINFMT_MISC=m
123 147
@@ -125,6 +149,7 @@ CONFIG_BINFMT_MISC=m
125# Power management and ACPI 149# Power management and ACPI
126# 150#
127CONFIG_PM=y 151CONFIG_PM=y
152CONFIG_PM_LEGACY=y
128# CONFIG_PM_DEBUG is not set 153# CONFIG_PM_DEBUG is not set
129 154
130# 155#
@@ -137,6 +162,7 @@ CONFIG_ACPI_PROCESSOR=m
137CONFIG_ACPI_THERMAL=m 162CONFIG_ACPI_THERMAL=m
138CONFIG_ACPI_BLACKLIST_YEAR=0 163CONFIG_ACPI_BLACKLIST_YEAR=0
139# CONFIG_ACPI_DEBUG is not set 164# CONFIG_ACPI_DEBUG is not set
165CONFIG_ACPI_EC=y
140CONFIG_ACPI_POWER=y 166CONFIG_ACPI_POWER=y
141CONFIG_ACPI_SYSTEM=y 167CONFIG_ACPI_SYSTEM=y
142# CONFIG_ACPI_CONTAINER is not set 168# CONFIG_ACPI_CONTAINER is not set
@@ -173,6 +199,7 @@ CONFIG_NET=y
173# 199#
174# Networking options 200# Networking options
175# 201#
202# CONFIG_NETDEBUG is not set
176CONFIG_PACKET=y 203CONFIG_PACKET=y
177CONFIG_PACKET_MMAP=y 204CONFIG_PACKET_MMAP=y
178CONFIG_UNIX=y 205CONFIG_UNIX=y
@@ -206,6 +233,11 @@ CONFIG_TCP_CONG_BIC=y
206# SCTP Configuration (EXPERIMENTAL) 233# SCTP Configuration (EXPERIMENTAL)
207# 234#
208# CONFIG_IP_SCTP is not set 235# CONFIG_IP_SCTP is not set
236
237#
238# TIPC Configuration (EXPERIMENTAL)
239#
240# CONFIG_TIPC is not set
209# CONFIG_ATM is not set 241# CONFIG_ATM is not set
210# CONFIG_BRIDGE is not set 242# CONFIG_BRIDGE is not set
211# CONFIG_VLAN_8021Q is not set 243# CONFIG_VLAN_8021Q is not set
@@ -218,14 +250,16 @@ CONFIG_TCP_CONG_BIC=y
218# CONFIG_NET_DIVERT is not set 250# CONFIG_NET_DIVERT is not set
219# CONFIG_ECONET is not set 251# CONFIG_ECONET is not set
220# CONFIG_WAN_ROUTER is not set 252# CONFIG_WAN_ROUTER is not set
253
254#
255# QoS and/or fair queueing
256#
221# CONFIG_NET_SCHED is not set 257# CONFIG_NET_SCHED is not set
222# CONFIG_NET_CLS_ROUTE is not set
223 258
224# 259#
225# Network testing 260# Network testing
226# 261#
227# CONFIG_NET_PKTGEN is not set 262# CONFIG_NET_PKTGEN is not set
228# CONFIG_NETFILTER_NETLINK is not set
229# CONFIG_HAMRADIO is not set 263# CONFIG_HAMRADIO is not set
230# CONFIG_IRDA is not set 264# CONFIG_IRDA is not set
231# CONFIG_BT is not set 265# CONFIG_BT is not set
@@ -286,20 +320,13 @@ CONFIG_BLK_DEV_RAM=m
286CONFIG_BLK_DEV_RAM_COUNT=16 320CONFIG_BLK_DEV_RAM_COUNT=16
287CONFIG_BLK_DEV_RAM_SIZE=4096 321CONFIG_BLK_DEV_RAM_SIZE=4096
288# CONFIG_CDROM_PKTCDVD is not set 322# CONFIG_CDROM_PKTCDVD is not set
289
290#
291# IO Schedulers
292#
293CONFIG_IOSCHED_NOOP=y
294CONFIG_IOSCHED_AS=y
295CONFIG_IOSCHED_DEADLINE=y
296CONFIG_IOSCHED_CFQ=y
297# CONFIG_ATA_OVER_ETH is not set 323# CONFIG_ATA_OVER_ETH is not set
298 324
299# 325#
300# ATA/ATAPI/MFM/RLL support 326# ATA/ATAPI/MFM/RLL support
301# 327#
302CONFIG_IDE=m 328CONFIG_IDE=m
329CONFIG_IDE_MAX_HWIFS=4
303CONFIG_BLK_DEV_IDE=m 330CONFIG_BLK_DEV_IDE=m
304 331
305# 332#
@@ -390,6 +417,7 @@ CONFIG_SCSI_SPI_ATTRS=m
390# 417#
391# SCSI low-level drivers 418# SCSI low-level drivers
392# 419#
420# CONFIG_ISCSI_TCP is not set
393# CONFIG_BLK_DEV_3W_XXXX_RAID is not set 421# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
394# CONFIG_SCSI_3W_9XXX is not set 422# CONFIG_SCSI_3W_9XXX is not set
395# CONFIG_SCSI_ACARD is not set 423# CONFIG_SCSI_ACARD is not set
@@ -399,6 +427,7 @@ CONFIG_SCSI_SPI_ATTRS=m
399# CONFIG_SCSI_AIC79XX is not set 427# CONFIG_SCSI_AIC79XX is not set
400# CONFIG_MEGARAID_NEWGEN is not set 428# CONFIG_MEGARAID_NEWGEN is not set
401# CONFIG_MEGARAID_LEGACY is not set 429# CONFIG_MEGARAID_LEGACY is not set
430# CONFIG_MEGARAID_SAS is not set
402# CONFIG_SCSI_SATA is not set 431# CONFIG_SCSI_SATA is not set
403# CONFIG_SCSI_DMX3191D is not set 432# CONFIG_SCSI_DMX3191D is not set
404# CONFIG_SCSI_FUTURE_DOMAIN is not set 433# CONFIG_SCSI_FUTURE_DOMAIN is not set
@@ -409,14 +438,7 @@ CONFIG_SCSI_SPI_ATTRS=m
409# CONFIG_SCSI_IPR is not set 438# CONFIG_SCSI_IPR is not set
410# CONFIG_SCSI_QLOGIC_FC is not set 439# CONFIG_SCSI_QLOGIC_FC is not set
411CONFIG_SCSI_QLOGIC_1280=y 440CONFIG_SCSI_QLOGIC_1280=y
412# CONFIG_SCSI_QLOGIC_1280_1040 is not set 441# CONFIG_SCSI_QLA_FC is not set
413CONFIG_SCSI_QLA2XXX=y
414# CONFIG_SCSI_QLA21XX is not set
415# CONFIG_SCSI_QLA22XX is not set
416# CONFIG_SCSI_QLA2300 is not set
417# CONFIG_SCSI_QLA2322 is not set
418# CONFIG_SCSI_QLA6312 is not set
419# CONFIG_SCSI_QLA24XX is not set
420# CONFIG_SCSI_LPFC is not set 442# CONFIG_SCSI_LPFC is not set
421# CONFIG_SCSI_DC395x is not set 443# CONFIG_SCSI_DC395x is not set
422# CONFIG_SCSI_DC390T is not set 444# CONFIG_SCSI_DC390T is not set
@@ -448,6 +470,7 @@ CONFIG_DM_ZERO=m
448# CONFIG_FUSION is not set 470# CONFIG_FUSION is not set
449# CONFIG_FUSION_SPI is not set 471# CONFIG_FUSION_SPI is not set
450# CONFIG_FUSION_FC is not set 472# CONFIG_FUSION_FC is not set
473# CONFIG_FUSION_SAS is not set
451 474
452# 475#
453# IEEE 1394 (FireWire) support 476# IEEE 1394 (FireWire) support
@@ -486,6 +509,7 @@ CONFIG_NET_ETHERNET=y
486CONFIG_MII=y 509CONFIG_MII=y
487# CONFIG_HAPPYMEAL is not set 510# CONFIG_HAPPYMEAL is not set
488# CONFIG_SUNGEM is not set 511# CONFIG_SUNGEM is not set
512# CONFIG_CASSINI is not set
489# CONFIG_NET_VENDOR_3COM is not set 513# CONFIG_NET_VENDOR_3COM is not set
490 514
491# 515#
@@ -524,6 +548,7 @@ CONFIG_EEPRO100=y
524# CONFIG_R8169 is not set 548# CONFIG_R8169 is not set
525# CONFIG_SIS190 is not set 549# CONFIG_SIS190 is not set
526# CONFIG_SKGE is not set 550# CONFIG_SKGE is not set
551# CONFIG_SKY2 is not set
527# CONFIG_SK98LIN is not set 552# CONFIG_SK98LIN is not set
528# CONFIG_VIA_VELOCITY is not set 553# CONFIG_VIA_VELOCITY is not set
529# CONFIG_TIGON3 is not set 554# CONFIG_TIGON3 is not set
@@ -630,6 +655,7 @@ CONFIG_SERIAL_8250=y
630CONFIG_SERIAL_8250_CONSOLE=y 655CONFIG_SERIAL_8250_CONSOLE=y
631CONFIG_SERIAL_8250_ACPI=y 656CONFIG_SERIAL_8250_ACPI=y
632CONFIG_SERIAL_8250_NR_UARTS=4 657CONFIG_SERIAL_8250_NR_UARTS=4
658CONFIG_SERIAL_8250_RUNTIME_UARTS=4
633CONFIG_SERIAL_8250_EXTENDED=y 659CONFIG_SERIAL_8250_EXTENDED=y
634CONFIG_SERIAL_8250_SHARE_IRQ=y 660CONFIG_SERIAL_8250_SHARE_IRQ=y
635# CONFIG_SERIAL_8250_DETECT_IRQ is not set 661# CONFIG_SERIAL_8250_DETECT_IRQ is not set
@@ -681,6 +707,7 @@ CONFIG_DRM_R128=m
681# TPM devices 707# TPM devices
682# 708#
683# CONFIG_TCG_TPM is not set 709# CONFIG_TCG_TPM is not set
710# CONFIG_TELCLOCK is not set
684 711
685# 712#
686# I2C support 713# I2C support
@@ -731,12 +758,19 @@ CONFIG_I2C_ALGOBIT=y
731# CONFIG_SENSORS_PCF8591 is not set 758# CONFIG_SENSORS_PCF8591 is not set
732# CONFIG_SENSORS_RTC8564 is not set 759# CONFIG_SENSORS_RTC8564 is not set
733# CONFIG_SENSORS_MAX6875 is not set 760# CONFIG_SENSORS_MAX6875 is not set
761# CONFIG_RTC_X1205_I2C is not set
734# CONFIG_I2C_DEBUG_CORE is not set 762# CONFIG_I2C_DEBUG_CORE is not set
735# CONFIG_I2C_DEBUG_ALGO is not set 763# CONFIG_I2C_DEBUG_ALGO is not set
736# CONFIG_I2C_DEBUG_BUS is not set 764# CONFIG_I2C_DEBUG_BUS is not set
737# CONFIG_I2C_DEBUG_CHIP is not set 765# CONFIG_I2C_DEBUG_CHIP is not set
738 766
739# 767#
768# SPI support
769#
770# CONFIG_SPI is not set
771# CONFIG_SPI_MASTER is not set
772
773#
740# Dallas's 1-wire bus 774# Dallas's 1-wire bus
741# 775#
742# CONFIG_W1 is not set 776# CONFIG_W1 is not set
@@ -754,6 +788,7 @@ CONFIG_HWMON=y
754# CONFIG_SENSORS_ASB100 is not set 788# CONFIG_SENSORS_ASB100 is not set
755# CONFIG_SENSORS_ATXP1 is not set 789# CONFIG_SENSORS_ATXP1 is not set
756# CONFIG_SENSORS_DS1621 is not set 790# CONFIG_SENSORS_DS1621 is not set
791# CONFIG_SENSORS_F71805F is not set
757# CONFIG_SENSORS_FSCHER is not set 792# CONFIG_SENSORS_FSCHER is not set
758# CONFIG_SENSORS_FSCPOS is not set 793# CONFIG_SENSORS_FSCPOS is not set
759# CONFIG_SENSORS_GL518SM is not set 794# CONFIG_SENSORS_GL518SM is not set
@@ -775,6 +810,7 @@ CONFIG_HWMON=y
775# CONFIG_SENSORS_SMSC47M1 is not set 810# CONFIG_SENSORS_SMSC47M1 is not set
776# CONFIG_SENSORS_SMSC47B397 is not set 811# CONFIG_SENSORS_SMSC47B397 is not set
777# CONFIG_SENSORS_VIA686A is not set 812# CONFIG_SENSORS_VIA686A is not set
813# CONFIG_SENSORS_VT8231 is not set
778# CONFIG_SENSORS_W83781D is not set 814# CONFIG_SENSORS_W83781D is not set
779# CONFIG_SENSORS_W83792D is not set 815# CONFIG_SENSORS_W83792D is not set
780# CONFIG_SENSORS_W83L785TS is not set 816# CONFIG_SENSORS_W83L785TS is not set
@@ -830,6 +866,8 @@ CONFIG_SND_OSSEMUL=y
830CONFIG_SND_MIXER_OSS=m 866CONFIG_SND_MIXER_OSS=m
831CONFIG_SND_PCM_OSS=m 867CONFIG_SND_PCM_OSS=m
832# CONFIG_SND_SEQUENCER_OSS is not set 868# CONFIG_SND_SEQUENCER_OSS is not set
869# CONFIG_SND_DYNAMIC_MINORS is not set
870CONFIG_SND_SUPPORT_OLD_API=y
833# CONFIG_SND_VERBOSE_PRINTK is not set 871# CONFIG_SND_VERBOSE_PRINTK is not set
834# CONFIG_SND_DEBUG is not set 872# CONFIG_SND_DEBUG is not set
835 873
@@ -837,17 +875,18 @@ CONFIG_SND_PCM_OSS=m
837# Generic devices 875# Generic devices
838# 876#
839CONFIG_SND_OPL3_LIB=m 877CONFIG_SND_OPL3_LIB=m
878CONFIG_SND_AC97_CODEC=m
879CONFIG_SND_AC97_BUS=m
840# CONFIG_SND_DUMMY is not set 880# CONFIG_SND_DUMMY is not set
841# CONFIG_SND_VIRMIDI is not set 881# CONFIG_SND_VIRMIDI is not set
842# CONFIG_SND_MTPAV is not set 882# CONFIG_SND_MTPAV is not set
843# CONFIG_SND_SERIAL_U16550 is not set 883# CONFIG_SND_SERIAL_U16550 is not set
844# CONFIG_SND_MPU401 is not set 884# CONFIG_SND_MPU401 is not set
845CONFIG_SND_AC97_CODEC=m
846CONFIG_SND_AC97_BUS=m
847 885
848# 886#
849# PCI devices 887# PCI devices
850# 888#
889# CONFIG_SND_AD1889 is not set
851# CONFIG_SND_ALI5451 is not set 890# CONFIG_SND_ALI5451 is not set
852# CONFIG_SND_ATIIXP is not set 891# CONFIG_SND_ATIIXP is not set
853# CONFIG_SND_ATIIXP_MODEM is not set 892# CONFIG_SND_ATIIXP_MODEM is not set
@@ -856,38 +895,38 @@ CONFIG_SND_AC97_BUS=m
856# CONFIG_SND_AU8830 is not set 895# CONFIG_SND_AU8830 is not set
857# CONFIG_SND_AZT3328 is not set 896# CONFIG_SND_AZT3328 is not set
858# CONFIG_SND_BT87X is not set 897# CONFIG_SND_BT87X is not set
859# CONFIG_SND_CS46XX is not set 898# CONFIG_SND_CA0106 is not set
899# CONFIG_SND_CMIPCI is not set
860CONFIG_SND_CS4281=m 900CONFIG_SND_CS4281=m
901# CONFIG_SND_CS46XX is not set
861# CONFIG_SND_EMU10K1 is not set 902# CONFIG_SND_EMU10K1 is not set
862# CONFIG_SND_EMU10K1X is not set 903# CONFIG_SND_EMU10K1X is not set
863# CONFIG_SND_CA0106 is not set
864# CONFIG_SND_KORG1212 is not set
865# CONFIG_SND_MIXART is not set
866# CONFIG_SND_NM256 is not set
867# CONFIG_SND_RME32 is not set
868# CONFIG_SND_RME96 is not set
869# CONFIG_SND_RME9652 is not set
870# CONFIG_SND_HDSP is not set
871# CONFIG_SND_HDSPM is not set
872# CONFIG_SND_TRIDENT is not set
873# CONFIG_SND_YMFPCI is not set
874# CONFIG_SND_AD1889 is not set
875# CONFIG_SND_CMIPCI is not set
876# CONFIG_SND_ENS1370 is not set 904# CONFIG_SND_ENS1370 is not set
877# CONFIG_SND_ENS1371 is not set 905# CONFIG_SND_ENS1371 is not set
878# CONFIG_SND_ES1938 is not set 906# CONFIG_SND_ES1938 is not set
879# CONFIG_SND_ES1968 is not set 907# CONFIG_SND_ES1968 is not set
880# CONFIG_SND_MAESTRO3 is not set
881# CONFIG_SND_FM801 is not set 908# CONFIG_SND_FM801 is not set
909# CONFIG_SND_HDA_INTEL is not set
910# CONFIG_SND_HDSP is not set
911# CONFIG_SND_HDSPM is not set
882# CONFIG_SND_ICE1712 is not set 912# CONFIG_SND_ICE1712 is not set
883# CONFIG_SND_ICE1724 is not set 913# CONFIG_SND_ICE1724 is not set
884# CONFIG_SND_INTEL8X0 is not set 914# CONFIG_SND_INTEL8X0 is not set
885# CONFIG_SND_INTEL8X0M is not set 915# CONFIG_SND_INTEL8X0M is not set
916# CONFIG_SND_KORG1212 is not set
917# CONFIG_SND_MAESTRO3 is not set
918# CONFIG_SND_MIXART is not set
919# CONFIG_SND_NM256 is not set
920# CONFIG_SND_PCXHR is not set
921# CONFIG_SND_RME32 is not set
922# CONFIG_SND_RME96 is not set
923# CONFIG_SND_RME9652 is not set
886# CONFIG_SND_SONICVIBES is not set 924# CONFIG_SND_SONICVIBES is not set
925# CONFIG_SND_TRIDENT is not set
887# CONFIG_SND_VIA82XX is not set 926# CONFIG_SND_VIA82XX is not set
888# CONFIG_SND_VIA82XX_MODEM is not set 927# CONFIG_SND_VIA82XX_MODEM is not set
889# CONFIG_SND_VX222 is not set 928# CONFIG_SND_VX222 is not set
890# CONFIG_SND_HDA_INTEL is not set 929# CONFIG_SND_YMFPCI is not set
891 930
892# 931#
893# USB devices 932# USB devices
@@ -929,12 +968,15 @@ CONFIG_USB_UHCI_HCD=m
929# USB Device Class drivers 968# USB Device Class drivers
930# 969#
931# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set 970# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
932CONFIG_USB_BLUETOOTH_TTY=m
933CONFIG_USB_ACM=m 971CONFIG_USB_ACM=m
934CONFIG_USB_PRINTER=m 972CONFIG_USB_PRINTER=m
935 973
936# 974#
937# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information 975# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
976#
977
978#
979# may also be needed; see USB_STORAGE Help for more information
938# 980#
939CONFIG_USB_STORAGE=m 981CONFIG_USB_STORAGE=m
940# CONFIG_USB_STORAGE_DEBUG is not set 982# CONFIG_USB_STORAGE_DEBUG is not set
@@ -946,13 +988,15 @@ CONFIG_USB_STORAGE=m
946# CONFIG_USB_STORAGE_SDDR09 is not set 988# CONFIG_USB_STORAGE_SDDR09 is not set
947# CONFIG_USB_STORAGE_SDDR55 is not set 989# CONFIG_USB_STORAGE_SDDR55 is not set
948# CONFIG_USB_STORAGE_JUMPSHOT is not set 990# CONFIG_USB_STORAGE_JUMPSHOT is not set
949# CONFIG_USB_STORAGE_ONETOUCH is not set 991# CONFIG_USB_STORAGE_ALAUDA is not set
992# CONFIG_USB_LIBUSUAL is not set
950 993
951# 994#
952# USB Input Devices 995# USB Input Devices
953# 996#
954CONFIG_USB_HID=m 997CONFIG_USB_HID=m
955CONFIG_USB_HIDINPUT=y 998CONFIG_USB_HIDINPUT=y
999# CONFIG_USB_HIDINPUT_POWERBOOK is not set
956# CONFIG_HID_FF is not set 1000# CONFIG_HID_FF is not set
957CONFIG_USB_HIDDEV=y 1001CONFIG_USB_HIDDEV=y
958 1002
@@ -972,6 +1016,7 @@ CONFIG_USB_HIDDEV=y
972# CONFIG_USB_YEALINK is not set 1016# CONFIG_USB_YEALINK is not set
973# CONFIG_USB_XPAD is not set 1017# CONFIG_USB_XPAD is not set
974# CONFIG_USB_ATI_REMOTE is not set 1018# CONFIG_USB_ATI_REMOTE is not set
1019# CONFIG_USB_ATI_REMOTE2 is not set
975# CONFIG_USB_KEYSPAN_REMOTE is not set 1020# CONFIG_USB_KEYSPAN_REMOTE is not set
976# CONFIG_USB_APPLETOUCH is not set 1021# CONFIG_USB_APPLETOUCH is not set
977 1022
@@ -1046,7 +1091,7 @@ CONFIG_USB_MON=y
1046# CONFIG_INFINIBAND is not set 1091# CONFIG_INFINIBAND is not set
1047 1092
1048# 1093#
1049# SN Devices 1094# EDAC - error detection and reporting (RAS)
1050# 1095#
1051 1096
1052# 1097#
@@ -1071,6 +1116,7 @@ CONFIG_XFS_QUOTA=y
1071CONFIG_XFS_SECURITY=y 1116CONFIG_XFS_SECURITY=y
1072CONFIG_XFS_POSIX_ACL=y 1117CONFIG_XFS_POSIX_ACL=y
1073# CONFIG_XFS_RT is not set 1118# CONFIG_XFS_RT is not set
1119# CONFIG_OCFS2_FS is not set
1074# CONFIG_MINIX_FS is not set 1120# CONFIG_MINIX_FS is not set
1075# CONFIG_ROMFS_FS is not set 1121# CONFIG_ROMFS_FS is not set
1076CONFIG_INOTIFY=y 1122CONFIG_INOTIFY=y
@@ -1111,6 +1157,7 @@ CONFIG_HUGETLBFS=y
1111CONFIG_HUGETLB_PAGE=y 1157CONFIG_HUGETLB_PAGE=y
1112CONFIG_RAMFS=y 1158CONFIG_RAMFS=y
1113# CONFIG_RELAYFS_FS is not set 1159# CONFIG_RELAYFS_FS is not set
1160# CONFIG_CONFIGFS_FS is not set
1114 1161
1115# 1162#
1116# Miscellaneous filesystems 1163# Miscellaneous filesystems
@@ -1153,6 +1200,7 @@ CONFIG_RPCSEC_GSS_KRB5=m
1153# CONFIG_SMB_FS is not set 1200# CONFIG_SMB_FS is not set
1154CONFIG_CIFS=m 1201CONFIG_CIFS=m
1155CONFIG_CIFS_STATS=y 1202CONFIG_CIFS_STATS=y
1203# CONFIG_CIFS_STATS2 is not set
1156CONFIG_CIFS_XATTR=y 1204CONFIG_CIFS_XATTR=y
1157CONFIG_CIFS_POSIX=y 1205CONFIG_CIFS_POSIX=y
1158# CONFIG_CIFS_EXPERIMENTAL is not set 1206# CONFIG_CIFS_EXPERIMENTAL is not set
@@ -1179,6 +1227,7 @@ CONFIG_MSDOS_PARTITION=y
1179CONFIG_SGI_PARTITION=y 1227CONFIG_SGI_PARTITION=y
1180# CONFIG_ULTRIX_PARTITION is not set 1228# CONFIG_ULTRIX_PARTITION is not set
1181# CONFIG_SUN_PARTITION is not set 1229# CONFIG_SUN_PARTITION is not set
1230# CONFIG_KARMA_PARTITION is not set
1182CONFIG_EFI_PARTITION=y 1231CONFIG_EFI_PARTITION=y
1183 1232
1184# 1233#
@@ -1237,28 +1286,32 @@ CONFIG_GENERIC_IRQ_PROBE=y
1237CONFIG_GENERIC_PENDING_IRQ=y 1286CONFIG_GENERIC_PENDING_IRQ=y
1238 1287
1239# 1288#
1240# Profiling support 1289# Instrumentation Support
1241# 1290#
1242CONFIG_PROFILING=y 1291CONFIG_PROFILING=y
1243CONFIG_OPROFILE=y 1292CONFIG_OPROFILE=y
1293# CONFIG_KPROBES is not set
1244 1294
1245# 1295#
1246# Kernel hacking 1296# Kernel hacking
1247# 1297#
1248# CONFIG_PRINTK_TIME is not set 1298# CONFIG_PRINTK_TIME is not set
1249CONFIG_DEBUG_KERNEL=y
1250CONFIG_MAGIC_SYSRQ=y 1299CONFIG_MAGIC_SYSRQ=y
1300CONFIG_DEBUG_KERNEL=y
1251CONFIG_LOG_BUF_SHIFT=16 1301CONFIG_LOG_BUF_SHIFT=16
1252CONFIG_DETECT_SOFTLOCKUP=y 1302CONFIG_DETECT_SOFTLOCKUP=y
1253# CONFIG_SCHEDSTATS is not set 1303# CONFIG_SCHEDSTATS is not set
1254# CONFIG_DEBUG_SLAB is not set 1304# CONFIG_DEBUG_SLAB is not set
1255CONFIG_DEBUG_PREEMPT=y 1305CONFIG_DEBUG_PREEMPT=y
1306CONFIG_DEBUG_MUTEXES=y
1256# CONFIG_DEBUG_SPINLOCK is not set 1307# CONFIG_DEBUG_SPINLOCK is not set
1257# CONFIG_DEBUG_SPINLOCK_SLEEP is not set 1308# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
1258# CONFIG_DEBUG_KOBJECT is not set 1309# CONFIG_DEBUG_KOBJECT is not set
1259# CONFIG_DEBUG_INFO is not set 1310# CONFIG_DEBUG_INFO is not set
1260# CONFIG_DEBUG_FS is not set 1311# CONFIG_DEBUG_FS is not set
1261# CONFIG_KPROBES is not set 1312# CONFIG_DEBUG_VM is not set
1313CONFIG_FORCED_INLINING=y
1314# CONFIG_RCU_TORTURE_TEST is not set
1262# CONFIG_IA64_GRANULE_16MB is not set 1315# CONFIG_IA64_GRANULE_16MB is not set
1263CONFIG_IA64_GRANULE_64MB=y 1316CONFIG_IA64_GRANULE_64MB=y
1264# CONFIG_IA64_PRINT_HAZARDS is not set 1317# CONFIG_IA64_PRINT_HAZARDS is not set
diff --git a/arch/ia64/configs/gensparse_defconfig b/arch/ia64/configs/gensparse_defconfig
index 80f8663bc6d9..744fd2f79f61 100644
--- a/arch/ia64/configs/gensparse_defconfig
+++ b/arch/ia64/configs/gensparse_defconfig
@@ -1,14 +1,13 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.14-rc2 3# Linux kernel version: 2.6.16-rc5
4# Wed Sep 28 08:27:29 2005 4# Thu Mar 2 16:39:10 2006
5# 5#
6 6
7# 7#
8# Code maturity level options 8# Code maturity level options
9# 9#
10CONFIG_EXPERIMENTAL=y 10CONFIG_EXPERIMENTAL=y
11CONFIG_CLEAN_COMPILE=y
12CONFIG_LOCK_KERNEL=y 11CONFIG_LOCK_KERNEL=y
13CONFIG_INIT_ENV_ARG_LIMIT=32 12CONFIG_INIT_ENV_ARG_LIMIT=32
14 13
@@ -23,18 +22,19 @@ CONFIG_POSIX_MQUEUE=y
23# CONFIG_BSD_PROCESS_ACCT is not set 22# CONFIG_BSD_PROCESS_ACCT is not set
24CONFIG_SYSCTL=y 23CONFIG_SYSCTL=y
25# CONFIG_AUDIT is not set 24# CONFIG_AUDIT is not set
26CONFIG_HOTPLUG=y
27CONFIG_KOBJECT_UEVENT=y
28CONFIG_IKCONFIG=y 25CONFIG_IKCONFIG=y
29CONFIG_IKCONFIG_PROC=y 26CONFIG_IKCONFIG_PROC=y
30# CONFIG_CPUSETS is not set 27# CONFIG_CPUSETS is not set
31CONFIG_INITRAMFS_SOURCE="" 28CONFIG_INITRAMFS_SOURCE=""
29CONFIG_CC_OPTIMIZE_FOR_SIZE=y
32# CONFIG_EMBEDDED is not set 30# CONFIG_EMBEDDED is not set
33CONFIG_KALLSYMS=y 31CONFIG_KALLSYMS=y
34CONFIG_KALLSYMS_ALL=y 32CONFIG_KALLSYMS_ALL=y
35# CONFIG_KALLSYMS_EXTRA_PASS is not set 33# CONFIG_KALLSYMS_EXTRA_PASS is not set
34CONFIG_HOTPLUG=y
36CONFIG_PRINTK=y 35CONFIG_PRINTK=y
37CONFIG_BUG=y 36CONFIG_BUG=y
37CONFIG_ELF_CORE=y
38CONFIG_BASE_FULL=y 38CONFIG_BASE_FULL=y
39CONFIG_FUTEX=y 39CONFIG_FUTEX=y
40CONFIG_EPOLL=y 40CONFIG_EPOLL=y
@@ -43,8 +43,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
43CONFIG_CC_ALIGN_LABELS=0 43CONFIG_CC_ALIGN_LABELS=0
44CONFIG_CC_ALIGN_LOOPS=0 44CONFIG_CC_ALIGN_LOOPS=0
45CONFIG_CC_ALIGN_JUMPS=0 45CONFIG_CC_ALIGN_JUMPS=0
46CONFIG_SLAB=y
46# CONFIG_TINY_SHMEM is not set 47# CONFIG_TINY_SHMEM is not set
47CONFIG_BASE_SMALL=0 48CONFIG_BASE_SMALL=0
49# CONFIG_SLOB is not set
48 50
49# 51#
50# Loadable module support 52# Loadable module support
@@ -59,17 +61,36 @@ CONFIG_KMOD=y
59CONFIG_STOP_MACHINE=y 61CONFIG_STOP_MACHINE=y
60 62
61# 63#
64# Block layer
65#
66
67#
68# IO Schedulers
69#
70CONFIG_IOSCHED_NOOP=y
71CONFIG_IOSCHED_AS=y
72CONFIG_IOSCHED_DEADLINE=y
73CONFIG_IOSCHED_CFQ=y
74CONFIG_DEFAULT_AS=y
75# CONFIG_DEFAULT_DEADLINE is not set
76# CONFIG_DEFAULT_CFQ is not set
77# CONFIG_DEFAULT_NOOP is not set
78CONFIG_DEFAULT_IOSCHED="anticipatory"
79
80#
62# Processor type and features 81# Processor type and features
63# 82#
64CONFIG_IA64=y 83CONFIG_IA64=y
65CONFIG_64BIT=y 84CONFIG_64BIT=y
66CONFIG_MMU=y 85CONFIG_MMU=y
86CONFIG_SWIOTLB=y
67CONFIG_RWSEM_XCHGADD_ALGORITHM=y 87CONFIG_RWSEM_XCHGADD_ALGORITHM=y
68CONFIG_GENERIC_CALIBRATE_DELAY=y 88CONFIG_GENERIC_CALIBRATE_DELAY=y
69CONFIG_TIME_INTERPOLATION=y 89CONFIG_TIME_INTERPOLATION=y
70CONFIG_EFI=y 90CONFIG_EFI=y
71CONFIG_GENERIC_IOMAP=y 91CONFIG_GENERIC_IOMAP=y
72CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y 92CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
93CONFIG_DMA_IS_DMA32=y
73CONFIG_IA64_GENERIC=y 94CONFIG_IA64_GENERIC=y
74# CONFIG_IA64_DIG is not set 95# CONFIG_IA64_DIG is not set
75# CONFIG_IA64_HP_ZX1 is not set 96# CONFIG_IA64_HP_ZX1 is not set
@@ -82,6 +103,8 @@ CONFIG_MCKINLEY=y
82# CONFIG_IA64_PAGE_SIZE_8KB is not set 103# CONFIG_IA64_PAGE_SIZE_8KB is not set
83CONFIG_IA64_PAGE_SIZE_16KB=y 104CONFIG_IA64_PAGE_SIZE_16KB=y
84# CONFIG_IA64_PAGE_SIZE_64KB is not set 105# CONFIG_IA64_PAGE_SIZE_64KB is not set
106CONFIG_PGTABLE_3=y
107# CONFIG_PGTABLE_4 is not set
85# CONFIG_HZ_100 is not set 108# CONFIG_HZ_100 is not set
86CONFIG_HZ_250=y 109CONFIG_HZ_250=y
87# CONFIG_HZ_1000 is not set 110# CONFIG_HZ_1000 is not set
@@ -105,6 +128,9 @@ CONFIG_NEED_MULTIPLE_NODES=y
105CONFIG_HAVE_MEMORY_PRESENT=y 128CONFIG_HAVE_MEMORY_PRESENT=y
106# CONFIG_SPARSEMEM_STATIC is not set 129# CONFIG_SPARSEMEM_STATIC is not set
107CONFIG_SPARSEMEM_EXTREME=y 130CONFIG_SPARSEMEM_EXTREME=y
131# CONFIG_MEMORY_HOTPLUG is not set
132CONFIG_SPLIT_PTLOCK_CPUS=4
133CONFIG_MIGRATION=y
108CONFIG_ARCH_SELECT_MEMORY_MODEL=y 134CONFIG_ARCH_SELECT_MEMORY_MODEL=y
109CONFIG_ARCH_DISCONTIGMEM_ENABLE=y 135CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
110CONFIG_ARCH_FLATMEM_ENABLE=y 136CONFIG_ARCH_FLATMEM_ENABLE=y
@@ -117,13 +143,13 @@ CONFIG_COMPAT=y
117CONFIG_IA64_MCA_RECOVERY=y 143CONFIG_IA64_MCA_RECOVERY=y
118CONFIG_PERFMON=y 144CONFIG_PERFMON=y
119CONFIG_IA64_PALINFO=y 145CONFIG_IA64_PALINFO=y
146CONFIG_SGI_SN=y
120 147
121# 148#
122# Firmware Drivers 149# Firmware Drivers
123# 150#
124CONFIG_EFI_VARS=y 151CONFIG_EFI_VARS=y
125CONFIG_EFI_PCDP=y 152CONFIG_EFI_PCDP=y
126# CONFIG_DELL_RBU is not set
127CONFIG_BINFMT_ELF=y 153CONFIG_BINFMT_ELF=y
128CONFIG_BINFMT_MISC=m 154CONFIG_BINFMT_MISC=m
129 155
@@ -131,6 +157,7 @@ CONFIG_BINFMT_MISC=m
131# Power management and ACPI 157# Power management and ACPI
132# 158#
133CONFIG_PM=y 159CONFIG_PM=y
160CONFIG_PM_LEGACY=y
134# CONFIG_PM_DEBUG is not set 161# CONFIG_PM_DEBUG is not set
135 162
136# 163#
@@ -145,6 +172,7 @@ CONFIG_ACPI_THERMAL=m
145CONFIG_ACPI_NUMA=y 172CONFIG_ACPI_NUMA=y
146CONFIG_ACPI_BLACKLIST_YEAR=0 173CONFIG_ACPI_BLACKLIST_YEAR=0
147# CONFIG_ACPI_DEBUG is not set 174# CONFIG_ACPI_DEBUG is not set
175CONFIG_ACPI_EC=y
148CONFIG_ACPI_POWER=y 176CONFIG_ACPI_POWER=y
149CONFIG_ACPI_SYSTEM=y 177CONFIG_ACPI_SYSTEM=y
150CONFIG_ACPI_CONTAINER=m 178CONFIG_ACPI_CONTAINER=m
@@ -187,6 +215,7 @@ CONFIG_NET=y
187# 215#
188# Networking options 216# Networking options
189# 217#
218# CONFIG_NETDEBUG is not set
190CONFIG_PACKET=y 219CONFIG_PACKET=y
191# CONFIG_PACKET_MMAP is not set 220# CONFIG_PACKET_MMAP is not set
192CONFIG_UNIX=y 221CONFIG_UNIX=y
@@ -221,6 +250,11 @@ CONFIG_TCP_CONG_BIC=y
221# SCTP Configuration (EXPERIMENTAL) 250# SCTP Configuration (EXPERIMENTAL)
222# 251#
223# CONFIG_IP_SCTP is not set 252# CONFIG_IP_SCTP is not set
253
254#
255# TIPC Configuration (EXPERIMENTAL)
256#
257# CONFIG_TIPC is not set
224# CONFIG_ATM is not set 258# CONFIG_ATM is not set
225# CONFIG_BRIDGE is not set 259# CONFIG_BRIDGE is not set
226# CONFIG_VLAN_8021Q is not set 260# CONFIG_VLAN_8021Q is not set
@@ -233,8 +267,11 @@ CONFIG_TCP_CONG_BIC=y
233# CONFIG_NET_DIVERT is not set 267# CONFIG_NET_DIVERT is not set
234# CONFIG_ECONET is not set 268# CONFIG_ECONET is not set
235# CONFIG_WAN_ROUTER is not set 269# CONFIG_WAN_ROUTER is not set
270
271#
272# QoS and/or fair queueing
273#
236# CONFIG_NET_SCHED is not set 274# CONFIG_NET_SCHED is not set
237# CONFIG_NET_CLS_ROUTE is not set
238 275
239# 276#
240# Network testing 277# Network testing
@@ -275,7 +312,13 @@ CONFIG_FW_LOADER=m
275# 312#
276# Plug and Play support 313# Plug and Play support
277# 314#
278# CONFIG_PNP is not set 315CONFIG_PNP=y
316# CONFIG_PNP_DEBUG is not set
317
318#
319# Protocols
320#
321CONFIG_PNPACPI=y
279 322
280# 323#
281# Block devices 324# Block devices
@@ -295,20 +338,13 @@ CONFIG_BLK_DEV_RAM_COUNT=16
295CONFIG_BLK_DEV_RAM_SIZE=4096 338CONFIG_BLK_DEV_RAM_SIZE=4096
296CONFIG_BLK_DEV_INITRD=y 339CONFIG_BLK_DEV_INITRD=y
297# CONFIG_CDROM_PKTCDVD is not set 340# CONFIG_CDROM_PKTCDVD is not set
298
299#
300# IO Schedulers
301#
302CONFIG_IOSCHED_NOOP=y
303CONFIG_IOSCHED_AS=y
304CONFIG_IOSCHED_DEADLINE=y
305CONFIG_IOSCHED_CFQ=y
306# CONFIG_ATA_OVER_ETH is not set 341# CONFIG_ATA_OVER_ETH is not set
307 342
308# 343#
309# ATA/ATAPI/MFM/RLL support 344# ATA/ATAPI/MFM/RLL support
310# 345#
311CONFIG_IDE=y 346CONFIG_IDE=y
347CONFIG_IDE_MAX_HWIFS=4
312CONFIG_BLK_DEV_IDE=y 348CONFIG_BLK_DEV_IDE=y
313 349
314# 350#
@@ -327,6 +363,7 @@ CONFIG_BLK_DEV_IDESCSI=m
327# IDE chipset support/bugfixes 363# IDE chipset support/bugfixes
328# 364#
329CONFIG_IDE_GENERIC=y 365CONFIG_IDE_GENERIC=y
366# CONFIG_BLK_DEV_IDEPNP is not set
330CONFIG_BLK_DEV_IDEPCI=y 367CONFIG_BLK_DEV_IDEPCI=y
331# CONFIG_IDEPCI_SHARE_IRQ is not set 368# CONFIG_IDEPCI_SHARE_IRQ is not set
332# CONFIG_BLK_DEV_OFFBOARD is not set 369# CONFIG_BLK_DEV_OFFBOARD is not set
@@ -400,6 +437,7 @@ CONFIG_SCSI_FC_ATTRS=y
400# 437#
401# SCSI low-level drivers 438# SCSI low-level drivers
402# 439#
440# CONFIG_ISCSI_TCP is not set
403# CONFIG_BLK_DEV_3W_XXXX_RAID is not set 441# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
404# CONFIG_SCSI_3W_9XXX is not set 442# CONFIG_SCSI_3W_9XXX is not set
405# CONFIG_SCSI_ACARD is not set 443# CONFIG_SCSI_ACARD is not set
@@ -409,16 +447,19 @@ CONFIG_SCSI_FC_ATTRS=y
409# CONFIG_SCSI_AIC79XX is not set 447# CONFIG_SCSI_AIC79XX is not set
410# CONFIG_MEGARAID_NEWGEN is not set 448# CONFIG_MEGARAID_NEWGEN is not set
411# CONFIG_MEGARAID_LEGACY is not set 449# CONFIG_MEGARAID_LEGACY is not set
450# CONFIG_MEGARAID_SAS is not set
412CONFIG_SCSI_SATA=y 451CONFIG_SCSI_SATA=y
413# CONFIG_SCSI_SATA_AHCI is not set 452# CONFIG_SCSI_SATA_AHCI is not set
414# CONFIG_SCSI_SATA_SVW is not set 453# CONFIG_SCSI_SATA_SVW is not set
415# CONFIG_SCSI_ATA_PIIX is not set 454# CONFIG_SCSI_ATA_PIIX is not set
416# CONFIG_SCSI_SATA_MV is not set 455# CONFIG_SCSI_SATA_MV is not set
417# CONFIG_SCSI_SATA_NV is not set 456# CONFIG_SCSI_SATA_NV is not set
418# CONFIG_SCSI_SATA_PROMISE is not set 457# CONFIG_SCSI_PDC_ADMA is not set
419# CONFIG_SCSI_SATA_QSTOR is not set 458# CONFIG_SCSI_SATA_QSTOR is not set
459# CONFIG_SCSI_SATA_PROMISE is not set
420# CONFIG_SCSI_SATA_SX4 is not set 460# CONFIG_SCSI_SATA_SX4 is not set
421# CONFIG_SCSI_SATA_SIL is not set 461# CONFIG_SCSI_SATA_SIL is not set
462# CONFIG_SCSI_SATA_SIL24 is not set
422# CONFIG_SCSI_SATA_SIS is not set 463# CONFIG_SCSI_SATA_SIS is not set
423# CONFIG_SCSI_SATA_ULI is not set 464# CONFIG_SCSI_SATA_ULI is not set
424# CONFIG_SCSI_SATA_VIA is not set 465# CONFIG_SCSI_SATA_VIA is not set
@@ -436,14 +477,7 @@ CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
436# CONFIG_SCSI_IPR is not set 477# CONFIG_SCSI_IPR is not set
437# CONFIG_SCSI_QLOGIC_FC is not set 478# CONFIG_SCSI_QLOGIC_FC is not set
438CONFIG_SCSI_QLOGIC_1280=y 479CONFIG_SCSI_QLOGIC_1280=y
439# CONFIG_SCSI_QLOGIC_1280_1040 is not set 480# CONFIG_SCSI_QLA_FC is not set
440CONFIG_SCSI_QLA2XXX=y
441CONFIG_SCSI_QLA21XX=m
442CONFIG_SCSI_QLA22XX=m
443CONFIG_SCSI_QLA2300=m
444CONFIG_SCSI_QLA2322=m
445# CONFIG_SCSI_QLA6312 is not set
446# CONFIG_SCSI_QLA24XX is not set
447# CONFIG_SCSI_LPFC is not set 481# CONFIG_SCSI_LPFC is not set
448# CONFIG_SCSI_DC395x is not set 482# CONFIG_SCSI_DC395x is not set
449# CONFIG_SCSI_DC390T is not set 483# CONFIG_SCSI_DC390T is not set
@@ -476,6 +510,7 @@ CONFIG_DM_MULTIPATH=m
476CONFIG_FUSION=y 510CONFIG_FUSION=y
477CONFIG_FUSION_SPI=y 511CONFIG_FUSION_SPI=y
478CONFIG_FUSION_FC=m 512CONFIG_FUSION_FC=m
513# CONFIG_FUSION_SAS is not set
479CONFIG_FUSION_MAX_SGE=128 514CONFIG_FUSION_MAX_SGE=128
480# CONFIG_FUSION_CTL is not set 515# CONFIG_FUSION_CTL is not set
481 516
@@ -497,6 +532,7 @@ CONFIG_DUMMY=m
497# CONFIG_BONDING is not set 532# CONFIG_BONDING is not set
498# CONFIG_EQUALIZER is not set 533# CONFIG_EQUALIZER is not set
499# CONFIG_TUN is not set 534# CONFIG_TUN is not set
535# CONFIG_NET_SB1000 is not set
500 536
501# 537#
502# ARCnet devices 538# ARCnet devices
@@ -515,6 +551,7 @@ CONFIG_NET_ETHERNET=y
515CONFIG_MII=m 551CONFIG_MII=m
516# CONFIG_HAPPYMEAL is not set 552# CONFIG_HAPPYMEAL is not set
517# CONFIG_SUNGEM is not set 553# CONFIG_SUNGEM is not set
554# CONFIG_CASSINI is not set
518# CONFIG_NET_VENDOR_3COM is not set 555# CONFIG_NET_VENDOR_3COM is not set
519 556
520# 557#
@@ -557,12 +594,14 @@ CONFIG_E100=m
557# CONFIG_DL2K is not set 594# CONFIG_DL2K is not set
558CONFIG_E1000=y 595CONFIG_E1000=y
559# CONFIG_E1000_NAPI is not set 596# CONFIG_E1000_NAPI is not set
597# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
560# CONFIG_NS83820 is not set 598# CONFIG_NS83820 is not set
561# CONFIG_HAMACHI is not set 599# CONFIG_HAMACHI is not set
562# CONFIG_YELLOWFIN is not set 600# CONFIG_YELLOWFIN is not set
563# CONFIG_R8169 is not set 601# CONFIG_R8169 is not set
564# CONFIG_SIS190 is not set 602# CONFIG_SIS190 is not set
565# CONFIG_SKGE is not set 603# CONFIG_SKGE is not set
604# CONFIG_SKY2 is not set
566# CONFIG_SK98LIN is not set 605# CONFIG_SK98LIN is not set
567# CONFIG_VIA_VELOCITY is not set 606# CONFIG_VIA_VELOCITY is not set
568CONFIG_TIGON3=y 607CONFIG_TIGON3=y
@@ -667,12 +706,15 @@ CONFIG_VT=y
667CONFIG_VT_CONSOLE=y 706CONFIG_VT_CONSOLE=y
668CONFIG_HW_CONSOLE=y 707CONFIG_HW_CONSOLE=y
669CONFIG_SERIAL_NONSTANDARD=y 708CONFIG_SERIAL_NONSTANDARD=y
709# CONFIG_COMPUTONE is not set
670# CONFIG_ROCKETPORT is not set 710# CONFIG_ROCKETPORT is not set
671# CONFIG_CYCLADES is not set 711# CONFIG_CYCLADES is not set
672# CONFIG_DIGIEPCA is not set 712# CONFIG_DIGIEPCA is not set
713# CONFIG_MOXA_INTELLIO is not set
673# CONFIG_MOXA_SMARTIO is not set 714# CONFIG_MOXA_SMARTIO is not set
674# CONFIG_ISI is not set 715# CONFIG_ISI is not set
675# CONFIG_SYNCLINKMP is not set 716# CONFIG_SYNCLINKMP is not set
717# CONFIG_SYNCLINK_GT is not set
676# CONFIG_N_HDLC is not set 718# CONFIG_N_HDLC is not set
677# CONFIG_SPECIALIX is not set 719# CONFIG_SPECIALIX is not set
678# CONFIG_SX is not set 720# CONFIG_SX is not set
@@ -688,6 +730,7 @@ CONFIG_SERIAL_8250=y
688CONFIG_SERIAL_8250_CONSOLE=y 730CONFIG_SERIAL_8250_CONSOLE=y
689CONFIG_SERIAL_8250_ACPI=y 731CONFIG_SERIAL_8250_ACPI=y
690CONFIG_SERIAL_8250_NR_UARTS=6 732CONFIG_SERIAL_8250_NR_UARTS=6
733CONFIG_SERIAL_8250_RUNTIME_UARTS=4
691CONFIG_SERIAL_8250_EXTENDED=y 734CONFIG_SERIAL_8250_EXTENDED=y
692CONFIG_SERIAL_8250_SHARE_IRQ=y 735CONFIG_SERIAL_8250_SHARE_IRQ=y
693# CONFIG_SERIAL_8250_DETECT_IRQ is not set 736# CONFIG_SERIAL_8250_DETECT_IRQ is not set
@@ -701,6 +744,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y
701CONFIG_SERIAL_SGI_L1_CONSOLE=y 744CONFIG_SERIAL_SGI_L1_CONSOLE=y
702# CONFIG_SERIAL_JSM is not set 745# CONFIG_SERIAL_JSM is not set
703CONFIG_SERIAL_SGI_IOC4=y 746CONFIG_SERIAL_SGI_IOC4=y
747CONFIG_SERIAL_SGI_IOC3=y
704CONFIG_UNIX98_PTYS=y 748CONFIG_UNIX98_PTYS=y
705CONFIG_LEGACY_PTYS=y 749CONFIG_LEGACY_PTYS=y
706CONFIG_LEGACY_PTY_COUNT=256 750CONFIG_LEGACY_PTY_COUNT=256
@@ -736,10 +780,10 @@ CONFIG_DRM_SIS=m
736# CONFIG_DRM_VIA is not set 780# CONFIG_DRM_VIA is not set
737# CONFIG_DRM_SAVAGE is not set 781# CONFIG_DRM_SAVAGE is not set
738CONFIG_RAW_DRIVER=m 782CONFIG_RAW_DRIVER=m
783CONFIG_MAX_RAW_DEVS=256
739CONFIG_HPET=y 784CONFIG_HPET=y
740# CONFIG_HPET_RTC_IRQ is not set 785# CONFIG_HPET_RTC_IRQ is not set
741CONFIG_HPET_MMAP=y 786CONFIG_HPET_MMAP=y
742CONFIG_MAX_RAW_DEVS=256
743# CONFIG_HANGCHECK_TIMER is not set 787# CONFIG_HANGCHECK_TIMER is not set
744CONFIG_MMTIMER=y 788CONFIG_MMTIMER=y
745 789
@@ -747,6 +791,7 @@ CONFIG_MMTIMER=y
747# TPM devices 791# TPM devices
748# 792#
749# CONFIG_TCG_TPM is not set 793# CONFIG_TCG_TPM is not set
794# CONFIG_TELCLOCK is not set
750 795
751# 796#
752# I2C support 797# I2C support
@@ -754,6 +799,12 @@ CONFIG_MMTIMER=y
754# CONFIG_I2C is not set 799# CONFIG_I2C is not set
755 800
756# 801#
802# SPI support
803#
804# CONFIG_SPI is not set
805# CONFIG_SPI_MASTER is not set
806
807#
757# Dallas's 1-wire bus 808# Dallas's 1-wire bus
758# 809#
759# CONFIG_W1 is not set 810# CONFIG_W1 is not set
@@ -763,6 +814,7 @@ CONFIG_MMTIMER=y
763# 814#
764CONFIG_HWMON=y 815CONFIG_HWMON=y
765# CONFIG_HWMON_VID is not set 816# CONFIG_HWMON_VID is not set
817# CONFIG_SENSORS_F71805F is not set
766# CONFIG_HWMON_DEBUG_CHIP is not set 818# CONFIG_HWMON_DEBUG_CHIP is not set
767 819
768# 820#
@@ -813,26 +865,28 @@ CONFIG_SND_OSSEMUL=y
813CONFIG_SND_MIXER_OSS=m 865CONFIG_SND_MIXER_OSS=m
814CONFIG_SND_PCM_OSS=m 866CONFIG_SND_PCM_OSS=m
815CONFIG_SND_SEQUENCER_OSS=y 867CONFIG_SND_SEQUENCER_OSS=y
868# CONFIG_SND_DYNAMIC_MINORS is not set
869CONFIG_SND_SUPPORT_OLD_API=y
816CONFIG_SND_VERBOSE_PRINTK=y 870CONFIG_SND_VERBOSE_PRINTK=y
817# CONFIG_SND_DEBUG is not set 871# CONFIG_SND_DEBUG is not set
818CONFIG_SND_GENERIC_DRIVER=y
819 872
820# 873#
821# Generic devices 874# Generic devices
822# 875#
823CONFIG_SND_MPU401_UART=m 876CONFIG_SND_MPU401_UART=m
824CONFIG_SND_OPL3_LIB=m 877CONFIG_SND_OPL3_LIB=m
878CONFIG_SND_AC97_CODEC=m
879CONFIG_SND_AC97_BUS=m
825CONFIG_SND_DUMMY=m 880CONFIG_SND_DUMMY=m
826CONFIG_SND_VIRMIDI=m 881CONFIG_SND_VIRMIDI=m
827CONFIG_SND_MTPAV=m 882CONFIG_SND_MTPAV=m
828CONFIG_SND_SERIAL_U16550=m 883CONFIG_SND_SERIAL_U16550=m
829CONFIG_SND_MPU401=m 884CONFIG_SND_MPU401=m
830CONFIG_SND_AC97_CODEC=m
831CONFIG_SND_AC97_BUS=m
832 885
833# 886#
834# PCI devices 887# PCI devices
835# 888#
889# CONFIG_SND_AD1889 is not set
836# CONFIG_SND_ALI5451 is not set 890# CONFIG_SND_ALI5451 is not set
837# CONFIG_SND_ATIIXP is not set 891# CONFIG_SND_ATIIXP is not set
838# CONFIG_SND_ATIIXP_MODEM is not set 892# CONFIG_SND_ATIIXP_MODEM is not set
@@ -841,40 +895,40 @@ CONFIG_SND_AC97_BUS=m
841# CONFIG_SND_AU8830 is not set 895# CONFIG_SND_AU8830 is not set
842# CONFIG_SND_AZT3328 is not set 896# CONFIG_SND_AZT3328 is not set
843# CONFIG_SND_BT87X is not set 897# CONFIG_SND_BT87X is not set
898# CONFIG_SND_CA0106 is not set
899# CONFIG_SND_CMIPCI is not set
900CONFIG_SND_CS4281=m
844CONFIG_SND_CS46XX=m 901CONFIG_SND_CS46XX=m
845CONFIG_SND_CS46XX_NEW_DSP=y 902CONFIG_SND_CS46XX_NEW_DSP=y
846CONFIG_SND_CS4281=m
847CONFIG_SND_EMU10K1=m 903CONFIG_SND_EMU10K1=m
848# CONFIG_SND_EMU10K1X is not set 904# CONFIG_SND_EMU10K1X is not set
849# CONFIG_SND_CA0106 is not set
850# CONFIG_SND_KORG1212 is not set
851# CONFIG_SND_MIXART is not set
852# CONFIG_SND_NM256 is not set
853# CONFIG_SND_RME32 is not set
854# CONFIG_SND_RME96 is not set
855# CONFIG_SND_RME9652 is not set
856# CONFIG_SND_HDSP is not set
857# CONFIG_SND_HDSPM is not set
858# CONFIG_SND_TRIDENT is not set
859# CONFIG_SND_YMFPCI is not set
860# CONFIG_SND_AD1889 is not set
861# CONFIG_SND_CMIPCI is not set
862# CONFIG_SND_ENS1370 is not set 905# CONFIG_SND_ENS1370 is not set
863# CONFIG_SND_ENS1371 is not set 906# CONFIG_SND_ENS1371 is not set
864# CONFIG_SND_ES1938 is not set 907# CONFIG_SND_ES1938 is not set
865# CONFIG_SND_ES1968 is not set 908# CONFIG_SND_ES1968 is not set
866# CONFIG_SND_MAESTRO3 is not set
867CONFIG_SND_FM801=m 909CONFIG_SND_FM801=m
868# CONFIG_SND_FM801_TEA575X is not set 910# CONFIG_SND_FM801_TEA575X is not set
911# CONFIG_SND_HDA_INTEL is not set
912# CONFIG_SND_HDSP is not set
913# CONFIG_SND_HDSPM is not set
869# CONFIG_SND_ICE1712 is not set 914# CONFIG_SND_ICE1712 is not set
870# CONFIG_SND_ICE1724 is not set 915# CONFIG_SND_ICE1724 is not set
871# CONFIG_SND_INTEL8X0 is not set 916# CONFIG_SND_INTEL8X0 is not set
872# CONFIG_SND_INTEL8X0M is not set 917# CONFIG_SND_INTEL8X0M is not set
918# CONFIG_SND_KORG1212 is not set
919# CONFIG_SND_MAESTRO3 is not set
920# CONFIG_SND_MIXART is not set
921# CONFIG_SND_NM256 is not set
922# CONFIG_SND_PCXHR is not set
923# CONFIG_SND_RME32 is not set
924# CONFIG_SND_RME96 is not set
925# CONFIG_SND_RME9652 is not set
873# CONFIG_SND_SONICVIBES is not set 926# CONFIG_SND_SONICVIBES is not set
927# CONFIG_SND_TRIDENT is not set
874# CONFIG_SND_VIA82XX is not set 928# CONFIG_SND_VIA82XX is not set
875# CONFIG_SND_VIA82XX_MODEM is not set 929# CONFIG_SND_VIA82XX_MODEM is not set
876# CONFIG_SND_VX222 is not set 930# CONFIG_SND_VX222 is not set
877# CONFIG_SND_HDA_INTEL is not set 931# CONFIG_SND_YMFPCI is not set
878 932
879# 933#
880# USB devices 934# USB devices
@@ -920,12 +974,15 @@ CONFIG_USB_UHCI_HCD=m
920# USB Device Class drivers 974# USB Device Class drivers
921# 975#
922# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set 976# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
923# CONFIG_USB_BLUETOOTH_TTY is not set
924# CONFIG_USB_ACM is not set 977# CONFIG_USB_ACM is not set
925# CONFIG_USB_PRINTER is not set 978# CONFIG_USB_PRINTER is not set
926 979
927# 980#
928# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information 981# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
982#
983
984#
985# may also be needed; see USB_STORAGE Help for more information
929# 986#
930CONFIG_USB_STORAGE=m 987CONFIG_USB_STORAGE=m
931# CONFIG_USB_STORAGE_DEBUG is not set 988# CONFIG_USB_STORAGE_DEBUG is not set
@@ -937,12 +994,15 @@ CONFIG_USB_STORAGE=m
937# CONFIG_USB_STORAGE_SDDR09 is not set 994# CONFIG_USB_STORAGE_SDDR09 is not set
938# CONFIG_USB_STORAGE_SDDR55 is not set 995# CONFIG_USB_STORAGE_SDDR55 is not set
939# CONFIG_USB_STORAGE_JUMPSHOT is not set 996# CONFIG_USB_STORAGE_JUMPSHOT is not set
997# CONFIG_USB_STORAGE_ALAUDA is not set
998# CONFIG_USB_LIBUSUAL is not set
940 999
941# 1000#
942# USB Input Devices 1001# USB Input Devices
943# 1002#
944CONFIG_USB_HID=m 1003CONFIG_USB_HID=m
945CONFIG_USB_HIDINPUT=y 1004CONFIG_USB_HIDINPUT=y
1005# CONFIG_USB_HIDINPUT_POWERBOOK is not set
946# CONFIG_HID_FF is not set 1006# CONFIG_HID_FF is not set
947# CONFIG_USB_HIDDEV is not set 1007# CONFIG_USB_HIDDEV is not set
948 1008
@@ -962,6 +1022,7 @@ CONFIG_USB_HIDINPUT=y
962# CONFIG_USB_YEALINK is not set 1022# CONFIG_USB_YEALINK is not set
963# CONFIG_USB_XPAD is not set 1023# CONFIG_USB_XPAD is not set
964# CONFIG_USB_ATI_REMOTE is not set 1024# CONFIG_USB_ATI_REMOTE is not set
1025# CONFIG_USB_ATI_REMOTE2 is not set
965# CONFIG_USB_KEYSPAN_REMOTE is not set 1026# CONFIG_USB_KEYSPAN_REMOTE is not set
966# CONFIG_USB_APPLETOUCH is not set 1027# CONFIG_USB_APPLETOUCH is not set
967 1028
@@ -1041,11 +1102,17 @@ CONFIG_INFINIBAND_MTHCA=m
1041# CONFIG_INFINIBAND_MTHCA_DEBUG is not set 1102# CONFIG_INFINIBAND_MTHCA_DEBUG is not set
1042CONFIG_INFINIBAND_IPOIB=m 1103CONFIG_INFINIBAND_IPOIB=m
1043# CONFIG_INFINIBAND_IPOIB_DEBUG is not set 1104# CONFIG_INFINIBAND_IPOIB_DEBUG is not set
1105# CONFIG_INFINIBAND_SRP is not set
1044 1106
1045# 1107#
1046# SN Devices 1108# SN Devices
1047# 1109#
1048CONFIG_SGI_IOC4=y 1110CONFIG_SGI_IOC4=y
1111CONFIG_SGI_IOC3=y
1112
1113#
1114# EDAC - error detection and reporting (RAS)
1115#
1049 1116
1050# 1117#
1051# File systems 1118# File systems
@@ -1076,6 +1143,7 @@ CONFIG_XFS_EXPORT=y
1076# CONFIG_XFS_SECURITY is not set 1143# CONFIG_XFS_SECURITY is not set
1077# CONFIG_XFS_POSIX_ACL is not set 1144# CONFIG_XFS_POSIX_ACL is not set
1078# CONFIG_XFS_RT is not set 1145# CONFIG_XFS_RT is not set
1146# CONFIG_OCFS2_FS is not set
1079# CONFIG_MINIX_FS is not set 1147# CONFIG_MINIX_FS is not set
1080# CONFIG_ROMFS_FS is not set 1148# CONFIG_ROMFS_FS is not set
1081CONFIG_INOTIFY=y 1149CONFIG_INOTIFY=y
@@ -1117,6 +1185,7 @@ CONFIG_HUGETLBFS=y
1117CONFIG_HUGETLB_PAGE=y 1185CONFIG_HUGETLB_PAGE=y
1118CONFIG_RAMFS=y 1186CONFIG_RAMFS=y
1119# CONFIG_RELAYFS_FS is not set 1187# CONFIG_RELAYFS_FS is not set
1188# CONFIG_CONFIGFS_FS is not set
1120 1189
1121# 1190#
1122# Miscellaneous filesystems 1191# Miscellaneous filesystems
@@ -1186,6 +1255,7 @@ CONFIG_MSDOS_PARTITION=y
1186CONFIG_SGI_PARTITION=y 1255CONFIG_SGI_PARTITION=y
1187# CONFIG_ULTRIX_PARTITION is not set 1256# CONFIG_ULTRIX_PARTITION is not set
1188# CONFIG_SUN_PARTITION is not set 1257# CONFIG_SUN_PARTITION is not set
1258# CONFIG_KARMA_PARTITION is not set
1189CONFIG_EFI_PARTITION=y 1259CONFIG_EFI_PARTITION=y
1190 1260
1191# 1261#
@@ -1251,26 +1321,30 @@ CONFIG_GENERIC_PENDING_IRQ=y
1251# CONFIG_HP_SIMSCSI is not set 1321# CONFIG_HP_SIMSCSI is not set
1252 1322
1253# 1323#
1254# Profiling support 1324# Instrumentation Support
1255# 1325#
1256# CONFIG_PROFILING is not set 1326# CONFIG_PROFILING is not set
1327# CONFIG_KPROBES is not set
1257 1328
1258# 1329#
1259# Kernel hacking 1330# Kernel hacking
1260# 1331#
1261# CONFIG_PRINTK_TIME is not set 1332# CONFIG_PRINTK_TIME is not set
1262CONFIG_DEBUG_KERNEL=y
1263CONFIG_MAGIC_SYSRQ=y 1333CONFIG_MAGIC_SYSRQ=y
1334CONFIG_DEBUG_KERNEL=y
1264CONFIG_LOG_BUF_SHIFT=20 1335CONFIG_LOG_BUF_SHIFT=20
1265CONFIG_DETECT_SOFTLOCKUP=y 1336CONFIG_DETECT_SOFTLOCKUP=y
1266# CONFIG_SCHEDSTATS is not set 1337# CONFIG_SCHEDSTATS is not set
1267# CONFIG_DEBUG_SLAB is not set 1338# CONFIG_DEBUG_SLAB is not set
1339CONFIG_DEBUG_MUTEXES=y
1268# CONFIG_DEBUG_SPINLOCK is not set 1340# CONFIG_DEBUG_SPINLOCK is not set
1269# CONFIG_DEBUG_SPINLOCK_SLEEP is not set 1341# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
1270# CONFIG_DEBUG_KOBJECT is not set 1342# CONFIG_DEBUG_KOBJECT is not set
1271# CONFIG_DEBUG_INFO is not set 1343# CONFIG_DEBUG_INFO is not set
1272# CONFIG_DEBUG_FS is not set 1344# CONFIG_DEBUG_FS is not set
1273# CONFIG_KPROBES is not set 1345# CONFIG_DEBUG_VM is not set
1346CONFIG_FORCED_INLINING=y
1347# CONFIG_RCU_TORTURE_TEST is not set
1274CONFIG_IA64_GRANULE_16MB=y 1348CONFIG_IA64_GRANULE_16MB=y
1275# CONFIG_IA64_GRANULE_64MB is not set 1349# CONFIG_IA64_GRANULE_64MB is not set
1276# CONFIG_IA64_PRINT_HAZARDS is not set 1350# CONFIG_IA64_PRINT_HAZARDS is not set
diff --git a/arch/ia64/configs/sim_defconfig b/arch/ia64/configs/sim_defconfig
index a26781cfe8bf..d9146c31ea13 100644
--- a/arch/ia64/configs/sim_defconfig
+++ b/arch/ia64/configs/sim_defconfig
@@ -1,39 +1,52 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.16-rc5
4# Mon Feb 27 16:13:41 2006
3# 5#
4 6
5# 7#
6# Code maturity level options 8# Code maturity level options
7# 9#
8CONFIG_EXPERIMENTAL=y 10CONFIG_EXPERIMENTAL=y
9# CONFIG_CLEAN_COMPILE is not set 11CONFIG_LOCK_KERNEL=y
10# CONFIG_STANDALONE is not set 12CONFIG_INIT_ENV_ARG_LIMIT=32
11CONFIG_BROKEN=y
12CONFIG_BROKEN_ON_SMP=y
13 13
14# 14#
15# General setup 15# General setup
16# 16#
17CONFIG_LOCALVERSION=""
18CONFIG_LOCALVERSION_AUTO=y
17CONFIG_SWAP=y 19CONFIG_SWAP=y
18CONFIG_SYSVIPC=y 20CONFIG_SYSVIPC=y
19# CONFIG_POSIX_MQUEUE is not set 21# CONFIG_POSIX_MQUEUE is not set
20# CONFIG_BSD_PROCESS_ACCT is not set 22# CONFIG_BSD_PROCESS_ACCT is not set
21CONFIG_SYSCTL=y 23CONFIG_SYSCTL=y
22# CONFIG_AUDIT is not set 24# CONFIG_AUDIT is not set
23CONFIG_LOG_BUF_SHIFT=16
24# CONFIG_HOTPLUG is not set
25CONFIG_IKCONFIG=y 25CONFIG_IKCONFIG=y
26CONFIG_IKCONFIG_PROC=y 26CONFIG_IKCONFIG_PROC=y
27# CONFIG_CPUSETS is not set
28CONFIG_INITRAMFS_SOURCE=""
29# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
27# CONFIG_EMBEDDED is not set 30# CONFIG_EMBEDDED is not set
28CONFIG_KALLSYMS=y 31CONFIG_KALLSYMS=y
29# CONFIG_KALLSYMS_ALL is not set 32# CONFIG_KALLSYMS_ALL is not set
33# CONFIG_KALLSYMS_EXTRA_PASS is not set
34CONFIG_HOTPLUG=y
35CONFIG_PRINTK=y
36CONFIG_BUG=y
37CONFIG_ELF_CORE=y
38CONFIG_BASE_FULL=y
30CONFIG_FUTEX=y 39CONFIG_FUTEX=y
31CONFIG_EPOLL=y 40CONFIG_EPOLL=y
32CONFIG_IOSCHED_NOOP=y 41CONFIG_SHMEM=y
33CONFIG_IOSCHED_AS=y 42CONFIG_CC_ALIGN_FUNCTIONS=0
34CONFIG_IOSCHED_DEADLINE=y 43CONFIG_CC_ALIGN_LABELS=0
35CONFIG_IOSCHED_CFQ=y 44CONFIG_CC_ALIGN_LOOPS=0
36# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set 45CONFIG_CC_ALIGN_JUMPS=0
46CONFIG_SLAB=y
47# CONFIG_TINY_SHMEM is not set
48CONFIG_BASE_SMALL=0
49# CONFIG_SLOB is not set
37 50
38# 51#
39# Loadable module support 52# Loadable module support
@@ -43,21 +56,45 @@ CONFIG_MODULE_UNLOAD=y
43CONFIG_MODULE_FORCE_UNLOAD=y 56CONFIG_MODULE_FORCE_UNLOAD=y
44CONFIG_OBSOLETE_MODPARM=y 57CONFIG_OBSOLETE_MODPARM=y
45CONFIG_MODVERSIONS=y 58CONFIG_MODVERSIONS=y
59# CONFIG_MODULE_SRCVERSION_ALL is not set
46CONFIG_KMOD=y 60CONFIG_KMOD=y
47CONFIG_STOP_MACHINE=y 61CONFIG_STOP_MACHINE=y
48 62
49# 63#
64# Block layer
65#
66
67#
68# IO Schedulers
69#
70CONFIG_IOSCHED_NOOP=y
71CONFIG_IOSCHED_AS=y
72CONFIG_IOSCHED_DEADLINE=y
73CONFIG_IOSCHED_CFQ=y
74CONFIG_DEFAULT_AS=y
75# CONFIG_DEFAULT_DEADLINE is not set
76# CONFIG_DEFAULT_CFQ is not set
77# CONFIG_DEFAULT_NOOP is not set
78CONFIG_DEFAULT_IOSCHED="anticipatory"
79
80#
50# Processor type and features 81# Processor type and features
51# 82#
52CONFIG_IA64=y 83CONFIG_IA64=y
53CONFIG_64BIT=y 84CONFIG_64BIT=y
54CONFIG_MMU=y 85CONFIG_MMU=y
86CONFIG_SWIOTLB=y
55CONFIG_RWSEM_XCHGADD_ALGORITHM=y 87CONFIG_RWSEM_XCHGADD_ALGORITHM=y
88CONFIG_GENERIC_CALIBRATE_DELAY=y
56CONFIG_TIME_INTERPOLATION=y 89CONFIG_TIME_INTERPOLATION=y
57CONFIG_EFI=y 90CONFIG_EFI=y
91CONFIG_GENERIC_IOMAP=y
92CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
93CONFIG_DMA_IS_DMA32=y
58# CONFIG_IA64_GENERIC is not set 94# CONFIG_IA64_GENERIC is not set
59# CONFIG_IA64_DIG is not set 95# CONFIG_IA64_DIG is not set
60# CONFIG_IA64_HP_ZX1 is not set 96# CONFIG_IA64_HP_ZX1 is not set
97# CONFIG_IA64_HP_ZX1_SWIOTLB is not set
61# CONFIG_IA64_SGI_SN2 is not set 98# CONFIG_IA64_SGI_SN2 is not set
62CONFIG_IA64_HP_SIM=y 99CONFIG_IA64_HP_SIM=y
63# CONFIG_ITANIUM is not set 100# CONFIG_ITANIUM is not set
@@ -66,17 +103,36 @@ CONFIG_MCKINLEY=y
66# CONFIG_IA64_PAGE_SIZE_8KB is not set 103# CONFIG_IA64_PAGE_SIZE_8KB is not set
67# CONFIG_IA64_PAGE_SIZE_16KB is not set 104# CONFIG_IA64_PAGE_SIZE_16KB is not set
68CONFIG_IA64_PAGE_SIZE_64KB=y 105CONFIG_IA64_PAGE_SIZE_64KB=y
106CONFIG_PGTABLE_3=y
107# CONFIG_PGTABLE_4 is not set
108# CONFIG_HZ_100 is not set
109CONFIG_HZ_250=y
110# CONFIG_HZ_1000 is not set
111CONFIG_HZ=250
69CONFIG_IA64_L1_CACHE_SHIFT=7 112CONFIG_IA64_L1_CACHE_SHIFT=7
70# CONFIG_MCKINLEY_ASTEP_SPECIFIC is not set
71# CONFIG_VIRTUAL_MEM_MAP is not set
72# CONFIG_IA64_CYCLONE is not set 113# CONFIG_IA64_CYCLONE is not set
73CONFIG_FORCE_MAX_ZONEORDER=18 114CONFIG_FORCE_MAX_ZONEORDER=17
74CONFIG_SMP=y 115CONFIG_SMP=y
75CONFIG_NR_CPUS=64 116CONFIG_NR_CPUS=64
117# CONFIG_HOTPLUG_CPU is not set
118# CONFIG_SCHED_SMT is not set
76CONFIG_PREEMPT=y 119CONFIG_PREEMPT=y
77CONFIG_HAVE_DEC_LOCK=y 120CONFIG_SELECT_MEMORY_MODEL=y
121CONFIG_FLATMEM_MANUAL=y
122# CONFIG_DISCONTIGMEM_MANUAL is not set
123# CONFIG_SPARSEMEM_MANUAL is not set
124CONFIG_FLATMEM=y
125CONFIG_FLAT_NODE_MEM_MAP=y
126# CONFIG_SPARSEMEM_STATIC is not set
127CONFIG_SPLIT_PTLOCK_CPUS=4
128CONFIG_ARCH_SELECT_MEMORY_MODEL=y
129CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
130CONFIG_ARCH_FLATMEM_ENABLE=y
131CONFIG_ARCH_SPARSEMEM_ENABLE=y
132# CONFIG_VIRTUAL_MEM_MAP is not set
78CONFIG_IA32_SUPPORT=y 133CONFIG_IA32_SUPPORT=y
79CONFIG_COMPAT=y 134CONFIG_COMPAT=y
135# CONFIG_IA64_MCA_RECOVERY is not set
80# CONFIG_PERFMON is not set 136# CONFIG_PERFMON is not set
81CONFIG_IA64_PALINFO=m 137CONFIG_IA64_PALINFO=m
82 138
@@ -84,7 +140,6 @@ CONFIG_IA64_PALINFO=m
84# Firmware Drivers 140# Firmware Drivers
85# 141#
86CONFIG_EFI_VARS=y 142CONFIG_EFI_VARS=y
87# CONFIG_SMBIOS is not set
88CONFIG_BINFMT_ELF=y 143CONFIG_BINFMT_ELF=y
89CONFIG_BINFMT_MISC=y 144CONFIG_BINFMT_MISC=y
90 145
@@ -93,15 +148,98 @@ CONFIG_BINFMT_MISC=y
93# 148#
94 149
95# 150#
151# Networking
152#
153CONFIG_NET=y
154
155#
156# Networking options
157#
158# CONFIG_NETDEBUG is not set
159CONFIG_PACKET=y
160# CONFIG_PACKET_MMAP is not set
161# CONFIG_UNIX is not set
162# CONFIG_NET_KEY is not set
163CONFIG_INET=y
164CONFIG_IP_MULTICAST=y
165# CONFIG_IP_ADVANCED_ROUTER is not set
166CONFIG_IP_FIB_HASH=y
167# CONFIG_IP_PNP is not set
168# CONFIG_NET_IPIP is not set
169# CONFIG_NET_IPGRE is not set
170# CONFIG_IP_MROUTE is not set
171# CONFIG_ARPD is not set
172# CONFIG_SYN_COOKIES is not set
173# CONFIG_INET_AH is not set
174# CONFIG_INET_ESP is not set
175# CONFIG_INET_IPCOMP is not set
176# CONFIG_INET_TUNNEL is not set
177CONFIG_INET_DIAG=y
178CONFIG_INET_TCP_DIAG=y
179# CONFIG_TCP_CONG_ADVANCED is not set
180CONFIG_TCP_CONG_BIC=y
181# CONFIG_IPV6 is not set
182# CONFIG_NETFILTER is not set
183
184#
185# DCCP Configuration (EXPERIMENTAL)
186#
187# CONFIG_IP_DCCP is not set
188
189#
190# SCTP Configuration (EXPERIMENTAL)
191#
192# CONFIG_IP_SCTP is not set
193
194#
195# TIPC Configuration (EXPERIMENTAL)
196#
197# CONFIG_TIPC is not set
198# CONFIG_ATM is not set
199# CONFIG_BRIDGE is not set
200# CONFIG_VLAN_8021Q is not set
201# CONFIG_DECNET is not set
202# CONFIG_LLC2 is not set
203# CONFIG_IPX is not set
204# CONFIG_ATALK is not set
205# CONFIG_X25 is not set
206# CONFIG_LAPB is not set
207# CONFIG_NET_DIVERT is not set
208# CONFIG_ECONET is not set
209# CONFIG_WAN_ROUTER is not set
210
211#
212# QoS and/or fair queueing
213#
214# CONFIG_NET_SCHED is not set
215
216#
217# Network testing
218#
219# CONFIG_NET_PKTGEN is not set
220# CONFIG_HAMRADIO is not set
221# CONFIG_IRDA is not set
222# CONFIG_BT is not set
223# CONFIG_IEEE80211 is not set
224
225#
96# Device Drivers 226# Device Drivers
97# 227#
98 228
99# 229#
100# Generic Driver Options 230# Generic Driver Options
101# 231#
232# CONFIG_STANDALONE is not set
233CONFIG_PREVENT_FIRMWARE_BUILD=y
234# CONFIG_FW_LOADER is not set
102# CONFIG_DEBUG_DRIVER is not set 235# CONFIG_DEBUG_DRIVER is not set
103 236
104# 237#
238# Connector - unified userspace <-> kernelspace linker
239#
240# CONFIG_CONNECTOR is not set
241
242#
105# Memory Technology Devices (MTD) 243# Memory Technology Devices (MTD)
106# 244#
107# CONFIG_MTD is not set 245# CONFIG_MTD is not set
@@ -118,12 +256,16 @@ CONFIG_BINFMT_MISC=y
118# 256#
119# Block devices 257# Block devices
120# 258#
259# CONFIG_BLK_DEV_COW_COMMON is not set
121CONFIG_BLK_DEV_LOOP=y 260CONFIG_BLK_DEV_LOOP=y
122# CONFIG_BLK_DEV_CRYPTOLOOP is not set 261# CONFIG_BLK_DEV_CRYPTOLOOP is not set
123# CONFIG_BLK_DEV_NBD is not set 262# CONFIG_BLK_DEV_NBD is not set
124CONFIG_BLK_DEV_RAM=y 263CONFIG_BLK_DEV_RAM=y
264CONFIG_BLK_DEV_RAM_COUNT=16
125CONFIG_BLK_DEV_RAM_SIZE=4096 265CONFIG_BLK_DEV_RAM_SIZE=4096
126# CONFIG_BLK_DEV_INITRD is not set 266# CONFIG_BLK_DEV_INITRD is not set
267# CONFIG_CDROM_PKTCDVD is not set
268# CONFIG_ATA_OVER_ETH is not set
127 269
128# 270#
129# ATA/ATAPI/MFM/RLL support 271# ATA/ATAPI/MFM/RLL support
@@ -133,6 +275,7 @@ CONFIG_BLK_DEV_RAM_SIZE=4096
133# 275#
134# SCSI device support 276# SCSI device support
135# 277#
278# CONFIG_RAID_ATTRS is not set
136CONFIG_SCSI=y 279CONFIG_SCSI=y
137CONFIG_SCSI_PROC_FS=y 280CONFIG_SCSI_PROC_FS=y
138 281
@@ -144,6 +287,7 @@ CONFIG_BLK_DEV_SD=y
144# CONFIG_CHR_DEV_OSST is not set 287# CONFIG_CHR_DEV_OSST is not set
145# CONFIG_BLK_DEV_SR is not set 288# CONFIG_BLK_DEV_SR is not set
146# CONFIG_CHR_DEV_SG is not set 289# CONFIG_CHR_DEV_SG is not set
290# CONFIG_CHR_DEV_SCH is not set
147 291
148# 292#
149# Some SCSI devices (e.g. CD jukebox) support multiple LUNs 293# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
@@ -157,13 +301,14 @@ CONFIG_SCSI_LOGGING=y
157# 301#
158CONFIG_SCSI_SPI_ATTRS=y 302CONFIG_SCSI_SPI_ATTRS=y
159# CONFIG_SCSI_FC_ATTRS is not set 303# CONFIG_SCSI_FC_ATTRS is not set
304# CONFIG_SCSI_ISCSI_ATTRS is not set
305# CONFIG_SCSI_SAS_ATTRS is not set
160 306
161# 307#
162# SCSI low-level drivers 308# SCSI low-level drivers
163# 309#
164# CONFIG_SCSI_AIC7XXX_OLD is not set 310# CONFIG_ISCSI_TCP is not set
165# CONFIG_SCSI_SATA is not set 311# CONFIG_SCSI_SATA is not set
166# CONFIG_SCSI_EATA_PIO is not set
167# CONFIG_SCSI_DEBUG is not set 312# CONFIG_SCSI_DEBUG is not set
168 313
169# 314#
@@ -174,77 +319,47 @@ CONFIG_SCSI_SPI_ATTRS=y
174# 319#
175# Fusion MPT device support 320# Fusion MPT device support
176# 321#
322# CONFIG_FUSION is not set
177 323
178# 324#
179# IEEE 1394 (FireWire) support 325# IEEE 1394 (FireWire) support
180# 326#
181# CONFIG_IEEE1394 is not set
182 327
183# 328#
184# I2O device support 329# I2O device support
185# 330#
186 331
187# 332#
188# Networking support 333# Network device support
189# 334#
190CONFIG_NET=y 335# CONFIG_NETDEVICES is not set
336# CONFIG_DUMMY is not set
337# CONFIG_BONDING is not set
338# CONFIG_EQUALIZER is not set
339# CONFIG_TUN is not set
191 340
192# 341#
193# Networking options 342# PHY device support
194# 343#
195CONFIG_PACKET=y
196# CONFIG_PACKET_MMAP is not set
197# CONFIG_NETLINK_DEV is not set
198# CONFIG_UNIX is not set
199# CONFIG_NET_KEY is not set
200CONFIG_INET=y
201CONFIG_IP_MULTICAST=y
202# CONFIG_IP_ADVANCED_ROUTER is not set
203# CONFIG_IP_PNP is not set
204# CONFIG_NET_IPIP is not set
205# CONFIG_NET_IPGRE is not set
206# CONFIG_IP_MROUTE is not set
207# CONFIG_ARPD is not set
208# CONFIG_SYN_COOKIES is not set
209# CONFIG_INET_AH is not set
210# CONFIG_INET_ESP is not set
211# CONFIG_INET_IPCOMP is not set
212# CONFIG_IPV6 is not set
213# CONFIG_NETFILTER is not set
214 344
215# 345#
216# SCTP Configuration (EXPERIMENTAL) 346# Ethernet (10 or 100Mbit)
217# 347#
218# CONFIG_IP_SCTP is not set 348# CONFIG_NET_ETHERNET is not set
219# CONFIG_ATM is not set
220# CONFIG_BRIDGE is not set
221# CONFIG_VLAN_8021Q is not set
222# CONFIG_DECNET is not set
223# CONFIG_LLC2 is not set
224# CONFIG_IPX is not set
225# CONFIG_ATALK is not set
226# CONFIG_X25 is not set
227# CONFIG_LAPB is not set
228# CONFIG_NET_DIVERT is not set
229# CONFIG_ECONET is not set
230# CONFIG_WAN_ROUTER is not set
231# CONFIG_NET_HW_FLOWCONTROL is not set
232 349
233# 350#
234# QoS and/or fair queueing 351# Ethernet (1000 Mbit)
235# 352#
236# CONFIG_NET_SCHED is not set
237 353
238# 354#
239# Network testing 355# Ethernet (10000 Mbit)
240# 356#
241# CONFIG_NET_PKTGEN is not set 357# CONFIG_PPP is not set
358# CONFIG_SLIP is not set
359# CONFIG_SHAPER is not set
360# CONFIG_NETCONSOLE is not set
242# CONFIG_NETPOLL is not set 361# CONFIG_NETPOLL is not set
243# CONFIG_NET_POLL_CONTROLLER is not set 362# CONFIG_NET_POLL_CONTROLLER is not set
244# CONFIG_HAMRADIO is not set
245# CONFIG_IRDA is not set
246# CONFIG_BT is not set
247# CONFIG_NETDEVICES is not set
248 363
249# 364#
250# ISDN subsystem 365# ISDN subsystem
@@ -274,16 +389,6 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
274# CONFIG_INPUT_EVBUG is not set 389# CONFIG_INPUT_EVBUG is not set
275 390
276# 391#
277# Input I/O drivers
278#
279# CONFIG_GAMEPORT is not set
280CONFIG_SOUND_GAMEPORT=y
281CONFIG_SERIO=y
282# CONFIG_SERIO_I8042 is not set
283CONFIG_SERIO_SERPORT=y
284# CONFIG_SERIO_CT82C710 is not set
285
286#
287# Input Device Drivers 392# Input Device Drivers
288# 393#
289# CONFIG_INPUT_KEYBOARD is not set 394# CONFIG_INPUT_KEYBOARD is not set
@@ -293,6 +398,15 @@ CONFIG_SERIO_SERPORT=y
293# CONFIG_INPUT_MISC is not set 398# CONFIG_INPUT_MISC is not set
294 399
295# 400#
401# Hardware I/O ports
402#
403CONFIG_SERIO=y
404# CONFIG_SERIO_I8042 is not set
405CONFIG_SERIO_SERPORT=y
406# CONFIG_SERIO_RAW is not set
407# CONFIG_GAMEPORT is not set
408
409#
296# Character devices 410# Character devices
297# 411#
298CONFIG_VT=y 412CONFIG_VT=y
@@ -310,7 +424,6 @@ CONFIG_HW_CONSOLE=y
310# 424#
311CONFIG_UNIX98_PTYS=y 425CONFIG_UNIX98_PTYS=y
312# CONFIG_LEGACY_PTYS is not set 426# CONFIG_LEGACY_PTYS is not set
313# CONFIG_QIC02_TAPE is not set
314 427
315# 428#
316# IPMI 429# IPMI
@@ -324,15 +437,19 @@ CONFIG_UNIX98_PTYS=y
324CONFIG_EFI_RTC=y 437CONFIG_EFI_RTC=y
325# CONFIG_DTLK is not set 438# CONFIG_DTLK is not set
326# CONFIG_R3964 is not set 439# CONFIG_R3964 is not set
327# CONFIG_APPLICOM is not set
328 440
329# 441#
330# Ftape, the floppy tape device driver 442# Ftape, the floppy tape device driver
331# 443#
332# CONFIG_FTAPE is not set
333# CONFIG_AGP is not set 444# CONFIG_AGP is not set
334# CONFIG_DRM is not set
335# CONFIG_RAW_DRIVER is not set 445# CONFIG_RAW_DRIVER is not set
446# CONFIG_HANGCHECK_TIMER is not set
447
448#
449# TPM devices
450#
451# CONFIG_TCG_TPM is not set
452# CONFIG_TELCLOCK is not set
336 453
337# 454#
338# I2C support 455# I2C support
@@ -340,10 +457,33 @@ CONFIG_EFI_RTC=y
340# CONFIG_I2C is not set 457# CONFIG_I2C is not set
341 458
342# 459#
460# SPI support
461#
462# CONFIG_SPI is not set
463# CONFIG_SPI_MASTER is not set
464
465#
466# Dallas's 1-wire bus
467#
468# CONFIG_W1 is not set
469
470#
471# Hardware Monitoring support
472#
473CONFIG_HWMON=y
474# CONFIG_HWMON_VID is not set
475# CONFIG_SENSORS_F71805F is not set
476# CONFIG_HWMON_DEBUG_CHIP is not set
477
478#
343# Misc devices 479# Misc devices
344# 480#
345 481
346# 482#
483# Multimedia Capabilities Port drivers
484#
485
486#
347# Multimedia devices 487# Multimedia devices
348# 488#
349# CONFIG_VIDEO_DEV is not set 489# CONFIG_VIDEO_DEV is not set
@@ -362,7 +502,6 @@ CONFIG_EFI_RTC=y
362# Console display driver support 502# Console display driver support
363# 503#
364# CONFIG_VGA_CONSOLE is not set 504# CONFIG_VGA_CONSOLE is not set
365# CONFIG_MDA_CONSOLE is not set
366CONFIG_DUMMY_CONSOLE=y 505CONFIG_DUMMY_CONSOLE=y
367 506
368# 507#
@@ -373,6 +512,12 @@ CONFIG_DUMMY_CONSOLE=y
373# 512#
374# USB support 513# USB support
375# 514#
515# CONFIG_USB_ARCH_HAS_HCD is not set
516# CONFIG_USB_ARCH_HAS_OHCI is not set
517
518#
519# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
520#
376 521
377# 522#
378# USB Gadget Support 523# USB Gadget Support
@@ -380,22 +525,41 @@ CONFIG_DUMMY_CONSOLE=y
380# CONFIG_USB_GADGET is not set 525# CONFIG_USB_GADGET is not set
381 526
382# 527#
528# MMC/SD Card support
529#
530# CONFIG_MMC is not set
531
532#
533# InfiniBand support
534#
535
536#
537# EDAC - error detection and reporting (RAS)
538#
539
540#
383# File systems 541# File systems
384# 542#
385CONFIG_EXT2_FS=y 543CONFIG_EXT2_FS=y
386# CONFIG_EXT2_FS_XATTR is not set 544# CONFIG_EXT2_FS_XATTR is not set
545# CONFIG_EXT2_FS_XIP is not set
387CONFIG_EXT3_FS=y 546CONFIG_EXT3_FS=y
388# CONFIG_EXT3_FS_XATTR is not set 547# CONFIG_EXT3_FS_XATTR is not set
389CONFIG_JBD=y 548CONFIG_JBD=y
390# CONFIG_JBD_DEBUG is not set 549# CONFIG_JBD_DEBUG is not set
391# CONFIG_REISERFS_FS is not set 550# CONFIG_REISERFS_FS is not set
392# CONFIG_JFS_FS is not set 551# CONFIG_JFS_FS is not set
552# CONFIG_FS_POSIX_ACL is not set
393# CONFIG_XFS_FS is not set 553# CONFIG_XFS_FS is not set
554# CONFIG_OCFS2_FS is not set
394# CONFIG_MINIX_FS is not set 555# CONFIG_MINIX_FS is not set
395# CONFIG_ROMFS_FS is not set 556# CONFIG_ROMFS_FS is not set
557CONFIG_INOTIFY=y
396# CONFIG_QUOTA is not set 558# CONFIG_QUOTA is not set
559CONFIG_DNOTIFY=y
397# CONFIG_AUTOFS_FS is not set 560# CONFIG_AUTOFS_FS is not set
398# CONFIG_AUTOFS4_FS is not set 561# CONFIG_AUTOFS4_FS is not set
562# CONFIG_FUSE_FS is not set
399 563
400# 564#
401# CD-ROM/DVD Filesystems 565# CD-ROM/DVD Filesystems
@@ -406,7 +570,8 @@ CONFIG_JBD=y
406# 570#
407# DOS/FAT/NT Filesystems 571# DOS/FAT/NT Filesystems
408# 572#
409# CONFIG_FAT_FS is not set 573# CONFIG_MSDOS_FS is not set
574# CONFIG_VFAT_FS is not set
410# CONFIG_NTFS_FS is not set 575# CONFIG_NTFS_FS is not set
411 576
412# 577#
@@ -415,12 +580,12 @@ CONFIG_JBD=y
415CONFIG_PROC_FS=y 580CONFIG_PROC_FS=y
416CONFIG_PROC_KCORE=y 581CONFIG_PROC_KCORE=y
417CONFIG_SYSFS=y 582CONFIG_SYSFS=y
418# CONFIG_DEVFS_FS is not set
419# CONFIG_DEVPTS_FS_XATTR is not set
420# CONFIG_TMPFS is not set 583# CONFIG_TMPFS is not set
421CONFIG_HUGETLBFS=y 584CONFIG_HUGETLBFS=y
422CONFIG_HUGETLB_PAGE=y 585CONFIG_HUGETLB_PAGE=y
423CONFIG_RAMFS=y 586CONFIG_RAMFS=y
587# CONFIG_RELAYFS_FS is not set
588# CONFIG_CONFIGFS_FS is not set
424 589
425# 590#
426# Miscellaneous filesystems 591# Miscellaneous filesystems
@@ -448,18 +613,22 @@ CONFIG_NFS_FS=y
448CONFIG_NFS_DIRECTIO=y 613CONFIG_NFS_DIRECTIO=y
449CONFIG_NFSD=y 614CONFIG_NFSD=y
450CONFIG_NFSD_V3=y 615CONFIG_NFSD_V3=y
616# CONFIG_NFSD_V3_ACL is not set
451# CONFIG_NFSD_V4 is not set 617# CONFIG_NFSD_V4 is not set
452# CONFIG_NFSD_TCP is not set 618# CONFIG_NFSD_TCP is not set
453CONFIG_LOCKD=y 619CONFIG_LOCKD=y
454CONFIG_LOCKD_V4=y 620CONFIG_LOCKD_V4=y
455CONFIG_EXPORTFS=y 621CONFIG_EXPORTFS=y
622CONFIG_NFS_COMMON=y
456CONFIG_SUNRPC=y 623CONFIG_SUNRPC=y
457# CONFIG_RPCSEC_GSS_KRB5 is not set 624# CONFIG_RPCSEC_GSS_KRB5 is not set
625# CONFIG_RPCSEC_GSS_SPKM3 is not set
458# CONFIG_SMB_FS is not set 626# CONFIG_SMB_FS is not set
459# CONFIG_CIFS is not set 627# CONFIG_CIFS is not set
460# CONFIG_NCP_FS is not set 628# CONFIG_NCP_FS is not set
461# CONFIG_CODA_FS is not set 629# CONFIG_CODA_FS is not set
462# CONFIG_AFS_FS is not set 630# CONFIG_AFS_FS is not set
631# CONFIG_9P_FS is not set
463 632
464# 633#
465# Partition Types 634# Partition Types
@@ -476,10 +645,10 @@ CONFIG_MSDOS_PARTITION=y
476# CONFIG_SOLARIS_X86_PARTITION is not set 645# CONFIG_SOLARIS_X86_PARTITION is not set
477# CONFIG_UNIXWARE_DISKLABEL is not set 646# CONFIG_UNIXWARE_DISKLABEL is not set
478# CONFIG_LDM_PARTITION is not set 647# CONFIG_LDM_PARTITION is not set
479# CONFIG_NEC98_PARTITION is not set
480# CONFIG_SGI_PARTITION is not set 648# CONFIG_SGI_PARTITION is not set
481# CONFIG_ULTRIX_PARTITION is not set 649# CONFIG_ULTRIX_PARTITION is not set
482# CONFIG_SUN_PARTITION is not set 650# CONFIG_SUN_PARTITION is not set
651# CONFIG_KARMA_PARTITION is not set
483CONFIG_EFI_PARTITION=y 652CONFIG_EFI_PARTITION=y
484 653
485# 654#
@@ -490,8 +659,13 @@ CONFIG_EFI_PARTITION=y
490# 659#
491# Library routines 660# Library routines
492# 661#
662# CONFIG_CRC_CCITT is not set
663# CONFIG_CRC16 is not set
493CONFIG_CRC32=y 664CONFIG_CRC32=y
494# CONFIG_LIBCRC32C is not set 665# CONFIG_LIBCRC32C is not set
666CONFIG_GENERIC_HARDIRQS=y
667CONFIG_GENERIC_IRQ_PROBE=y
668CONFIG_GENERIC_PENDING_IRQ=y
495 669
496# 670#
497# HP Simulator drivers 671# HP Simulator drivers
@@ -502,33 +676,50 @@ CONFIG_HP_SIMSERIAL_CONSOLE=y
502CONFIG_HP_SIMSCSI=y 676CONFIG_HP_SIMSCSI=y
503 677
504# 678#
505# Profiling support 679# Instrumentation Support
506# 680#
507# CONFIG_PROFILING is not set 681# CONFIG_PROFILING is not set
682# CONFIG_KPROBES is not set
508 683
509# 684#
510# Kernel hacking 685# Kernel hacking
511# 686#
512# CONFIG_IA64_GRANULE_16MB is not set 687# CONFIG_PRINTK_TIME is not set
513CONFIG_IA64_GRANULE_64MB=y
514CONFIG_DEBUG_KERNEL=y
515# CONFIG_IA64_PRINT_HAZARDS is not set
516# CONFIG_DISABLE_VHPT is not set
517# CONFIG_MAGIC_SYSRQ is not set 688# CONFIG_MAGIC_SYSRQ is not set
689CONFIG_DEBUG_KERNEL=y
690CONFIG_LOG_BUF_SHIFT=16
691CONFIG_DETECT_SOFTLOCKUP=y
692# CONFIG_SCHEDSTATS is not set
518# CONFIG_DEBUG_SLAB is not set 693# CONFIG_DEBUG_SLAB is not set
694CONFIG_DEBUG_PREEMPT=y
695CONFIG_DEBUG_MUTEXES=y
519# CONFIG_DEBUG_SPINLOCK is not set 696# CONFIG_DEBUG_SPINLOCK is not set
520# CONFIG_DEBUG_SPINLOCK_SLEEP is not set 697# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
698# CONFIG_DEBUG_KOBJECT is not set
699CONFIG_DEBUG_INFO=y
700# CONFIG_DEBUG_FS is not set
701# CONFIG_DEBUG_VM is not set
702CONFIG_FORCED_INLINING=y
703# CONFIG_RCU_TORTURE_TEST is not set
704# CONFIG_IA64_GRANULE_16MB is not set
705CONFIG_IA64_GRANULE_64MB=y
706# CONFIG_IA64_PRINT_HAZARDS is not set
707# CONFIG_DISABLE_VHPT is not set
521# CONFIG_IA64_DEBUG_CMPXCHG is not set 708# CONFIG_IA64_DEBUG_CMPXCHG is not set
522# CONFIG_IA64_DEBUG_IRQ is not set 709# CONFIG_IA64_DEBUG_IRQ is not set
523CONFIG_DEBUG_INFO=y
524CONFIG_SYSVIPC_COMPAT=y 710CONFIG_SYSVIPC_COMPAT=y
525 711
526# 712#
527# Security options 713# Security options
528# 714#
715# CONFIG_KEYS is not set
529# CONFIG_SECURITY is not set 716# CONFIG_SECURITY is not set
530 717
531# 718#
532# Cryptographic options 719# Cryptographic options
533# 720#
534# CONFIG_CRYPTO is not set 721# CONFIG_CRYPTO is not set
722
723#
724# Hardware crypto devices
725#
diff --git a/arch/ia64/configs/sn2_defconfig b/arch/ia64/configs/sn2_defconfig
index ff8bb3770c9d..8206752161bb 100644
--- a/arch/ia64/configs/sn2_defconfig
+++ b/arch/ia64/configs/sn2_defconfig
@@ -1,14 +1,13 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.15-rc4 3# Linux kernel version: 2.6.16-rc5
4# Fri Dec 2 10:33:48 2005 4# Mon Feb 27 16:06:38 2006
5# 5#
6 6
7# 7#
8# Code maturity level options 8# Code maturity level options
9# 9#
10CONFIG_EXPERIMENTAL=y 10CONFIG_EXPERIMENTAL=y
11CONFIG_CLEAN_COMPILE=y
12CONFIG_LOCK_KERNEL=y 11CONFIG_LOCK_KERNEL=y
13CONFIG_INIT_ENV_ARG_LIMIT=32 12CONFIG_INIT_ENV_ARG_LIMIT=32
14 13
@@ -23,17 +22,18 @@ CONFIG_POSIX_MQUEUE=y
23# CONFIG_BSD_PROCESS_ACCT is not set 22# CONFIG_BSD_PROCESS_ACCT is not set
24CONFIG_SYSCTL=y 23CONFIG_SYSCTL=y
25# CONFIG_AUDIT is not set 24# CONFIG_AUDIT is not set
26CONFIG_HOTPLUG=y
27CONFIG_KOBJECT_UEVENT=y
28# CONFIG_IKCONFIG is not set 25# CONFIG_IKCONFIG is not set
29CONFIG_CPUSETS=y 26CONFIG_CPUSETS=y
30CONFIG_INITRAMFS_SOURCE="" 27CONFIG_INITRAMFS_SOURCE=""
28CONFIG_CC_OPTIMIZE_FOR_SIZE=y
31# CONFIG_EMBEDDED is not set 29# CONFIG_EMBEDDED is not set
32CONFIG_KALLSYMS=y 30CONFIG_KALLSYMS=y
33CONFIG_KALLSYMS_ALL=y 31CONFIG_KALLSYMS_ALL=y
34# CONFIG_KALLSYMS_EXTRA_PASS is not set 32# CONFIG_KALLSYMS_EXTRA_PASS is not set
33CONFIG_HOTPLUG=y
35CONFIG_PRINTK=y 34CONFIG_PRINTK=y
36CONFIG_BUG=y 35CONFIG_BUG=y
36CONFIG_ELF_CORE=y
37CONFIG_BASE_FULL=y 37CONFIG_BASE_FULL=y
38CONFIG_FUTEX=y 38CONFIG_FUTEX=y
39CONFIG_EPOLL=y 39CONFIG_EPOLL=y
@@ -42,8 +42,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
42CONFIG_CC_ALIGN_LABELS=0 42CONFIG_CC_ALIGN_LABELS=0
43CONFIG_CC_ALIGN_LOOPS=0 43CONFIG_CC_ALIGN_LOOPS=0
44CONFIG_CC_ALIGN_JUMPS=0 44CONFIG_CC_ALIGN_JUMPS=0
45CONFIG_SLAB=y
45# CONFIG_TINY_SHMEM is not set 46# CONFIG_TINY_SHMEM is not set
46CONFIG_BASE_SMALL=0 47CONFIG_BASE_SMALL=0
48# CONFIG_SLOB is not set
47 49
48# 50#
49# Loadable module support 51# Loadable module support
@@ -88,7 +90,7 @@ CONFIG_EFI=y
88CONFIG_GENERIC_IOMAP=y 90CONFIG_GENERIC_IOMAP=y
89CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y 91CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
90CONFIG_IA64_UNCACHED_ALLOCATOR=y 92CONFIG_IA64_UNCACHED_ALLOCATOR=y
91CONFIG_ZONE_DMA_IS_DMA32=y 93CONFIG_DMA_IS_DMA32=y
92# CONFIG_IA64_GENERIC is not set 94# CONFIG_IA64_GENERIC is not set
93# CONFIG_IA64_DIG is not set 95# CONFIG_IA64_DIG is not set
94# CONFIG_IA64_HP_ZX1 is not set 96# CONFIG_IA64_HP_ZX1 is not set
@@ -126,6 +128,7 @@ CONFIG_FLAT_NODE_MEM_MAP=y
126CONFIG_NEED_MULTIPLE_NODES=y 128CONFIG_NEED_MULTIPLE_NODES=y
127# CONFIG_SPARSEMEM_STATIC is not set 129# CONFIG_SPARSEMEM_STATIC is not set
128CONFIG_SPLIT_PTLOCK_CPUS=4 130CONFIG_SPLIT_PTLOCK_CPUS=4
131CONFIG_MIGRATION=y
129CONFIG_ARCH_SELECT_MEMORY_MODEL=y 132CONFIG_ARCH_SELECT_MEMORY_MODEL=y
130CONFIG_ARCH_DISCONTIGMEM_ENABLE=y 133CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
131CONFIG_ARCH_FLATMEM_ENABLE=y 134CONFIG_ARCH_FLATMEM_ENABLE=y
@@ -140,6 +143,7 @@ CONFIG_COMPAT=y
140CONFIG_IA64_MCA_RECOVERY=y 143CONFIG_IA64_MCA_RECOVERY=y
141CONFIG_PERFMON=y 144CONFIG_PERFMON=y
142CONFIG_IA64_PALINFO=y 145CONFIG_IA64_PALINFO=y
146CONFIG_SGI_SN=y
143 147
144# 148#
145# Firmware Drivers 149# Firmware Drivers
@@ -166,6 +170,7 @@ CONFIG_ACPI=y
166CONFIG_ACPI_NUMA=y 170CONFIG_ACPI_NUMA=y
167CONFIG_ACPI_BLACKLIST_YEAR=0 171CONFIG_ACPI_BLACKLIST_YEAR=0
168# CONFIG_ACPI_DEBUG is not set 172# CONFIG_ACPI_DEBUG is not set
173CONFIG_ACPI_EC=y
169CONFIG_ACPI_POWER=y 174CONFIG_ACPI_POWER=y
170CONFIG_ACPI_SYSTEM=y 175CONFIG_ACPI_SYSTEM=y
171# CONFIG_ACPI_CONTAINER is not set 176# CONFIG_ACPI_CONTAINER is not set
@@ -207,6 +212,7 @@ CONFIG_NET=y
207# 212#
208# Networking options 213# Networking options
209# 214#
215# CONFIG_NETDEBUG is not set
210CONFIG_PACKET=y 216CONFIG_PACKET=y
211CONFIG_PACKET_MMAP=y 217CONFIG_PACKET_MMAP=y
212CONFIG_UNIX=y 218CONFIG_UNIX=y
@@ -247,6 +253,11 @@ CONFIG_IPV6=m
247# SCTP Configuration (EXPERIMENTAL) 253# SCTP Configuration (EXPERIMENTAL)
248# 254#
249# CONFIG_IP_SCTP is not set 255# CONFIG_IP_SCTP is not set
256
257#
258# TIPC Configuration (EXPERIMENTAL)
259#
260# CONFIG_TIPC is not set
250# CONFIG_ATM is not set 261# CONFIG_ATM is not set
251# CONFIG_BRIDGE is not set 262# CONFIG_BRIDGE is not set
252# CONFIG_VLAN_8021Q is not set 263# CONFIG_VLAN_8021Q is not set
@@ -330,6 +341,7 @@ CONFIG_ATA_OVER_ETH=m
330# ATA/ATAPI/MFM/RLL support 341# ATA/ATAPI/MFM/RLL support
331# 342#
332CONFIG_IDE=y 343CONFIG_IDE=y
344CONFIG_IDE_MAX_HWIFS=4
333CONFIG_BLK_DEV_IDE=y 345CONFIG_BLK_DEV_IDE=y
334 346
335# 347#
@@ -457,13 +469,7 @@ CONFIG_SCSI_SATA_VITESSE=y
457# CONFIG_SCSI_IPR is not set 469# CONFIG_SCSI_IPR is not set
458# CONFIG_SCSI_QLOGIC_FC is not set 470# CONFIG_SCSI_QLOGIC_FC is not set
459CONFIG_SCSI_QLOGIC_1280=y 471CONFIG_SCSI_QLOGIC_1280=y
460CONFIG_SCSI_QLA2XXX=y 472# CONFIG_SCSI_QLA_FC is not set
461# CONFIG_SCSI_QLA21XX is not set
462CONFIG_SCSI_QLA22XX=y
463CONFIG_SCSI_QLA2300=y
464CONFIG_SCSI_QLA2322=y
465# CONFIG_SCSI_QLA6312 is not set
466# CONFIG_SCSI_QLA24XX is not set
467# CONFIG_SCSI_LPFC is not set 473# CONFIG_SCSI_LPFC is not set
468# CONFIG_SCSI_DC395x is not set 474# CONFIG_SCSI_DC395x is not set
469# CONFIG_SCSI_DC390T is not set 475# CONFIG_SCSI_DC390T is not set
@@ -545,6 +551,7 @@ CONFIG_NETDEVICES=y
545# CONFIG_R8169 is not set 551# CONFIG_R8169 is not set
546# CONFIG_SIS190 is not set 552# CONFIG_SIS190 is not set
547# CONFIG_SKGE is not set 553# CONFIG_SKGE is not set
554# CONFIG_SKY2 is not set
548# CONFIG_SK98LIN is not set 555# CONFIG_SK98LIN is not set
549CONFIG_TIGON3=y 556CONFIG_TIGON3=y
550# CONFIG_BNX2 is not set 557# CONFIG_BNX2 is not set
@@ -632,12 +639,15 @@ CONFIG_VT=y
632CONFIG_VT_CONSOLE=y 639CONFIG_VT_CONSOLE=y
633CONFIG_HW_CONSOLE=y 640CONFIG_HW_CONSOLE=y
634CONFIG_SERIAL_NONSTANDARD=y 641CONFIG_SERIAL_NONSTANDARD=y
642# CONFIG_COMPUTONE is not set
635# CONFIG_ROCKETPORT is not set 643# CONFIG_ROCKETPORT is not set
636# CONFIG_CYCLADES is not set 644# CONFIG_CYCLADES is not set
637# CONFIG_DIGIEPCA is not set 645# CONFIG_DIGIEPCA is not set
646# CONFIG_MOXA_INTELLIO is not set
638# CONFIG_MOXA_SMARTIO is not set 647# CONFIG_MOXA_SMARTIO is not set
639# CONFIG_ISI is not set 648# CONFIG_ISI is not set
640# CONFIG_SYNCLINKMP is not set 649# CONFIG_SYNCLINKMP is not set
650# CONFIG_SYNCLINK_GT is not set
641# CONFIG_N_HDLC is not set 651# CONFIG_N_HDLC is not set
642# CONFIG_SPECIALIX is not set 652# CONFIG_SPECIALIX is not set
643# CONFIG_SX is not set 653# CONFIG_SX is not set
@@ -659,6 +669,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y
659CONFIG_SERIAL_SGI_L1_CONSOLE=y 669CONFIG_SERIAL_SGI_L1_CONSOLE=y
660# CONFIG_SERIAL_JSM is not set 670# CONFIG_SERIAL_JSM is not set
661CONFIG_SERIAL_SGI_IOC4=y 671CONFIG_SERIAL_SGI_IOC4=y
672CONFIG_SERIAL_SGI_IOC3=y
662CONFIG_UNIX98_PTYS=y 673CONFIG_UNIX98_PTYS=y
663CONFIG_LEGACY_PTYS=y 674CONFIG_LEGACY_PTYS=y
664CONFIG_LEGACY_PTY_COUNT=256 675CONFIG_LEGACY_PTY_COUNT=256
@@ -685,8 +696,8 @@ CONFIG_AGP=y
685CONFIG_AGP_SGI_TIOCA=y 696CONFIG_AGP_SGI_TIOCA=y
686# CONFIG_DRM is not set 697# CONFIG_DRM is not set
687CONFIG_RAW_DRIVER=m 698CONFIG_RAW_DRIVER=m
688# CONFIG_HPET is not set
689CONFIG_MAX_RAW_DEVS=256 699CONFIG_MAX_RAW_DEVS=256
700# CONFIG_HPET is not set
690# CONFIG_HANGCHECK_TIMER is not set 701# CONFIG_HANGCHECK_TIMER is not set
691CONFIG_MMTIMER=y 702CONFIG_MMTIMER=y
692 703
@@ -702,6 +713,12 @@ CONFIG_MMTIMER=y
702# CONFIG_I2C is not set 713# CONFIG_I2C is not set
703 714
704# 715#
716# SPI support
717#
718# CONFIG_SPI is not set
719# CONFIG_SPI_MASTER is not set
720
721#
705# Dallas's 1-wire bus 722# Dallas's 1-wire bus
706# 723#
707# CONFIG_W1 is not set 724# CONFIG_W1 is not set
@@ -790,12 +807,14 @@ CONFIG_USB_UHCI_HCD=m
790# may also be needed; see USB_STORAGE Help for more information 807# may also be needed; see USB_STORAGE Help for more information
791# 808#
792# CONFIG_USB_STORAGE is not set 809# CONFIG_USB_STORAGE is not set
810# CONFIG_USB_LIBUSUAL is not set
793 811
794# 812#
795# USB Input Devices 813# USB Input Devices
796# 814#
797CONFIG_USB_HID=m 815CONFIG_USB_HID=m
798CONFIG_USB_HIDINPUT=y 816CONFIG_USB_HIDINPUT=y
817# CONFIG_USB_HIDINPUT_POWERBOOK is not set
799# CONFIG_HID_FF is not set 818# CONFIG_HID_FF is not set
800# CONFIG_USB_HIDDEV is not set 819# CONFIG_USB_HIDDEV is not set
801 820
@@ -815,6 +834,7 @@ CONFIG_USB_HIDINPUT=y
815# CONFIG_USB_YEALINK is not set 834# CONFIG_USB_YEALINK is not set
816# CONFIG_USB_XPAD is not set 835# CONFIG_USB_XPAD is not set
817# CONFIG_USB_ATI_REMOTE is not set 836# CONFIG_USB_ATI_REMOTE is not set
837# CONFIG_USB_ATI_REMOTE2 is not set
818# CONFIG_USB_KEYSPAN_REMOTE is not set 838# CONFIG_USB_KEYSPAN_REMOTE is not set
819# CONFIG_USB_APPLETOUCH is not set 839# CONFIG_USB_APPLETOUCH is not set
820 840
@@ -899,6 +919,11 @@ CONFIG_INFINIBAND_SRP=m
899# SN Devices 919# SN Devices
900# 920#
901CONFIG_SGI_IOC4=y 921CONFIG_SGI_IOC4=y
922CONFIG_SGI_IOC3=y
923
924#
925# EDAC - error detection and reporting (RAS)
926#
902 927
903# 928#
904# File systems 929# File systems
@@ -929,6 +954,7 @@ CONFIG_XFS_QUOTA=y
929# CONFIG_XFS_SECURITY is not set 954# CONFIG_XFS_SECURITY is not set
930CONFIG_XFS_POSIX_ACL=y 955CONFIG_XFS_POSIX_ACL=y
931CONFIG_XFS_RT=y 956CONFIG_XFS_RT=y
957# CONFIG_OCFS2_FS is not set
932# CONFIG_MINIX_FS is not set 958# CONFIG_MINIX_FS is not set
933# CONFIG_ROMFS_FS is not set 959# CONFIG_ROMFS_FS is not set
934CONFIG_INOTIFY=y 960CONFIG_INOTIFY=y
@@ -971,6 +997,7 @@ CONFIG_HUGETLBFS=y
971CONFIG_HUGETLB_PAGE=y 997CONFIG_HUGETLB_PAGE=y
972CONFIG_RAMFS=y 998CONFIG_RAMFS=y
973CONFIG_RELAYFS_FS=m 999CONFIG_RELAYFS_FS=m
1000# CONFIG_CONFIGFS_FS is not set
974 1001
975# 1002#
976# Miscellaneous filesystems 1003# Miscellaneous filesystems
@@ -1039,6 +1066,7 @@ CONFIG_MSDOS_PARTITION=y
1039CONFIG_SGI_PARTITION=y 1066CONFIG_SGI_PARTITION=y
1040# CONFIG_ULTRIX_PARTITION is not set 1067# CONFIG_ULTRIX_PARTITION is not set
1041# CONFIG_SUN_PARTITION is not set 1068# CONFIG_SUN_PARTITION is not set
1069# CONFIG_KARMA_PARTITION is not set
1042CONFIG_EFI_PARTITION=y 1070CONFIG_EFI_PARTITION=y
1043 1071
1044# 1072#
@@ -1109,19 +1137,21 @@ CONFIG_GENERIC_PENDING_IRQ=y
1109# Kernel hacking 1137# Kernel hacking
1110# 1138#
1111# CONFIG_PRINTK_TIME is not set 1139# CONFIG_PRINTK_TIME is not set
1112CONFIG_DEBUG_KERNEL=y
1113CONFIG_MAGIC_SYSRQ=y 1140CONFIG_MAGIC_SYSRQ=y
1141CONFIG_DEBUG_KERNEL=y
1114CONFIG_LOG_BUF_SHIFT=20 1142CONFIG_LOG_BUF_SHIFT=20
1115CONFIG_DETECT_SOFTLOCKUP=y 1143CONFIG_DETECT_SOFTLOCKUP=y
1116# CONFIG_SCHEDSTATS is not set 1144# CONFIG_SCHEDSTATS is not set
1117# CONFIG_DEBUG_SLAB is not set 1145# CONFIG_DEBUG_SLAB is not set
1118CONFIG_DEBUG_PREEMPT=y 1146CONFIG_DEBUG_PREEMPT=y
1147CONFIG_DEBUG_MUTEXES=y
1119# CONFIG_DEBUG_SPINLOCK is not set 1148# CONFIG_DEBUG_SPINLOCK is not set
1120# CONFIG_DEBUG_SPINLOCK_SLEEP is not set 1149# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
1121# CONFIG_DEBUG_KOBJECT is not set 1150# CONFIG_DEBUG_KOBJECT is not set
1122CONFIG_DEBUG_INFO=y 1151CONFIG_DEBUG_INFO=y
1123# CONFIG_DEBUG_FS is not set 1152# CONFIG_DEBUG_FS is not set
1124# CONFIG_DEBUG_VM is not set 1153# CONFIG_DEBUG_VM is not set
1154CONFIG_FORCED_INLINING=y
1125# CONFIG_RCU_TORTURE_TEST is not set 1155# CONFIG_RCU_TORTURE_TEST is not set
1126CONFIG_IA64_GRANULE_16MB=y 1156CONFIG_IA64_GRANULE_16MB=y
1127# CONFIG_IA64_GRANULE_64MB is not set 1157# CONFIG_IA64_GRANULE_64MB is not set
diff --git a/arch/ia64/configs/tiger_defconfig b/arch/ia64/configs/tiger_defconfig
index aed034d33976..766bf4955432 100644
--- a/arch/ia64/configs/tiger_defconfig
+++ b/arch/ia64/configs/tiger_defconfig
@@ -1,14 +1,13 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.15-rc4 3# Linux kernel version: 2.6.16-rc5
4# Fri Dec 2 16:06:32 2005 4# Mon Feb 27 15:49:18 2006
5# 5#
6 6
7# 7#
8# Code maturity level options 8# Code maturity level options
9# 9#
10CONFIG_EXPERIMENTAL=y 10CONFIG_EXPERIMENTAL=y
11CONFIG_CLEAN_COMPILE=y
12CONFIG_LOCK_KERNEL=y 11CONFIG_LOCK_KERNEL=y
13CONFIG_INIT_ENV_ARG_LIMIT=32 12CONFIG_INIT_ENV_ARG_LIMIT=32
14 13
@@ -23,18 +22,19 @@ CONFIG_POSIX_MQUEUE=y
23# CONFIG_BSD_PROCESS_ACCT is not set 22# CONFIG_BSD_PROCESS_ACCT is not set
24CONFIG_SYSCTL=y 23CONFIG_SYSCTL=y
25# CONFIG_AUDIT is not set 24# CONFIG_AUDIT is not set
26CONFIG_HOTPLUG=y
27CONFIG_KOBJECT_UEVENT=y
28CONFIG_IKCONFIG=y 25CONFIG_IKCONFIG=y
29CONFIG_IKCONFIG_PROC=y 26CONFIG_IKCONFIG_PROC=y
30# CONFIG_CPUSETS is not set 27# CONFIG_CPUSETS is not set
31CONFIG_INITRAMFS_SOURCE="" 28CONFIG_INITRAMFS_SOURCE=""
29CONFIG_CC_OPTIMIZE_FOR_SIZE=y
32# CONFIG_EMBEDDED is not set 30# CONFIG_EMBEDDED is not set
33CONFIG_KALLSYMS=y 31CONFIG_KALLSYMS=y
34CONFIG_KALLSYMS_ALL=y 32CONFIG_KALLSYMS_ALL=y
35# CONFIG_KALLSYMS_EXTRA_PASS is not set 33# CONFIG_KALLSYMS_EXTRA_PASS is not set
34CONFIG_HOTPLUG=y
36CONFIG_PRINTK=y 35CONFIG_PRINTK=y
37CONFIG_BUG=y 36CONFIG_BUG=y
37CONFIG_ELF_CORE=y
38CONFIG_BASE_FULL=y 38CONFIG_BASE_FULL=y
39CONFIG_FUTEX=y 39CONFIG_FUTEX=y
40CONFIG_EPOLL=y 40CONFIG_EPOLL=y
@@ -43,8 +43,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
43CONFIG_CC_ALIGN_LABELS=0 43CONFIG_CC_ALIGN_LABELS=0
44CONFIG_CC_ALIGN_LOOPS=0 44CONFIG_CC_ALIGN_LOOPS=0
45CONFIG_CC_ALIGN_JUMPS=0 45CONFIG_CC_ALIGN_JUMPS=0
46CONFIG_SLAB=y
46# CONFIG_TINY_SHMEM is not set 47# CONFIG_TINY_SHMEM is not set
47CONFIG_BASE_SMALL=0 48CONFIG_BASE_SMALL=0
49# CONFIG_SLOB is not set
48 50
49# 51#
50# Loadable module support 52# Loadable module support
@@ -88,7 +90,7 @@ CONFIG_TIME_INTERPOLATION=y
88CONFIG_EFI=y 90CONFIG_EFI=y
89CONFIG_GENERIC_IOMAP=y 91CONFIG_GENERIC_IOMAP=y
90CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y 92CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
91CONFIG_ZONE_DMA_IS_DMA32=y 93CONFIG_DMA_IS_DMA32=y
92# CONFIG_IA64_GENERIC is not set 94# CONFIG_IA64_GENERIC is not set
93CONFIG_IA64_DIG=y 95CONFIG_IA64_DIG=y
94# CONFIG_IA64_HP_ZX1 is not set 96# CONFIG_IA64_HP_ZX1 is not set
@@ -164,6 +166,7 @@ CONFIG_ACPI_HOTPLUG_CPU=y
164CONFIG_ACPI_THERMAL=m 166CONFIG_ACPI_THERMAL=m
165CONFIG_ACPI_BLACKLIST_YEAR=0 167CONFIG_ACPI_BLACKLIST_YEAR=0
166# CONFIG_ACPI_DEBUG is not set 168# CONFIG_ACPI_DEBUG is not set
169CONFIG_ACPI_EC=y
167CONFIG_ACPI_POWER=y 170CONFIG_ACPI_POWER=y
168CONFIG_ACPI_SYSTEM=y 171CONFIG_ACPI_SYSTEM=y
169CONFIG_ACPI_CONTAINER=m 172CONFIG_ACPI_CONTAINER=m
@@ -205,6 +208,7 @@ CONFIG_NET=y
205# 208#
206# Networking options 209# Networking options
207# 210#
211# CONFIG_NETDEBUG is not set
208CONFIG_PACKET=y 212CONFIG_PACKET=y
209# CONFIG_PACKET_MMAP is not set 213# CONFIG_PACKET_MMAP is not set
210CONFIG_UNIX=y 214CONFIG_UNIX=y
@@ -239,6 +243,11 @@ CONFIG_TCP_CONG_BIC=y
239# SCTP Configuration (EXPERIMENTAL) 243# SCTP Configuration (EXPERIMENTAL)
240# 244#
241# CONFIG_IP_SCTP is not set 245# CONFIG_IP_SCTP is not set
246
247#
248# TIPC Configuration (EXPERIMENTAL)
249#
250# CONFIG_TIPC is not set
242# CONFIG_ATM is not set 251# CONFIG_ATM is not set
243# CONFIG_BRIDGE is not set 252# CONFIG_BRIDGE is not set
244# CONFIG_VLAN_8021Q is not set 253# CONFIG_VLAN_8021Q is not set
@@ -328,6 +337,7 @@ CONFIG_BLK_DEV_INITRD=y
328# ATA/ATAPI/MFM/RLL support 337# ATA/ATAPI/MFM/RLL support
329# 338#
330CONFIG_IDE=y 339CONFIG_IDE=y
340CONFIG_IDE_MAX_HWIFS=4
331CONFIG_BLK_DEV_IDE=y 341CONFIG_BLK_DEV_IDE=y
332 342
333# 343#
@@ -445,13 +455,7 @@ CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
445CONFIG_SCSI_QLOGIC_FC=y 455CONFIG_SCSI_QLOGIC_FC=y
446# CONFIG_SCSI_QLOGIC_FC_FIRMWARE is not set 456# CONFIG_SCSI_QLOGIC_FC_FIRMWARE is not set
447CONFIG_SCSI_QLOGIC_1280=y 457CONFIG_SCSI_QLOGIC_1280=y
448CONFIG_SCSI_QLA2XXX=y 458# CONFIG_SCSI_QLA_FC is not set
449CONFIG_SCSI_QLA21XX=m
450CONFIG_SCSI_QLA22XX=m
451CONFIG_SCSI_QLA2300=m
452CONFIG_SCSI_QLA2322=m
453# CONFIG_SCSI_QLA6312 is not set
454# CONFIG_SCSI_QLA24XX is not set
455# CONFIG_SCSI_LPFC is not set 459# CONFIG_SCSI_LPFC is not set
456# CONFIG_SCSI_DC395x is not set 460# CONFIG_SCSI_DC395x is not set
457# CONFIG_SCSI_DC390T is not set 461# CONFIG_SCSI_DC390T is not set
@@ -567,12 +571,14 @@ CONFIG_E100=m
567# CONFIG_DL2K is not set 571# CONFIG_DL2K is not set
568CONFIG_E1000=y 572CONFIG_E1000=y
569# CONFIG_E1000_NAPI is not set 573# CONFIG_E1000_NAPI is not set
574# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
570# CONFIG_NS83820 is not set 575# CONFIG_NS83820 is not set
571# CONFIG_HAMACHI is not set 576# CONFIG_HAMACHI is not set
572# CONFIG_YELLOWFIN is not set 577# CONFIG_YELLOWFIN is not set
573# CONFIG_R8169 is not set 578# CONFIG_R8169 is not set
574# CONFIG_SIS190 is not set 579# CONFIG_SIS190 is not set
575# CONFIG_SKGE is not set 580# CONFIG_SKGE is not set
581# CONFIG_SKY2 is not set
576# CONFIG_SK98LIN is not set 582# CONFIG_SK98LIN is not set
577# CONFIG_VIA_VELOCITY is not set 583# CONFIG_VIA_VELOCITY is not set
578CONFIG_TIGON3=y 584CONFIG_TIGON3=y
@@ -677,12 +683,15 @@ CONFIG_VT=y
677CONFIG_VT_CONSOLE=y 683CONFIG_VT_CONSOLE=y
678CONFIG_HW_CONSOLE=y 684CONFIG_HW_CONSOLE=y
679CONFIG_SERIAL_NONSTANDARD=y 685CONFIG_SERIAL_NONSTANDARD=y
686# CONFIG_COMPUTONE is not set
680# CONFIG_ROCKETPORT is not set 687# CONFIG_ROCKETPORT is not set
681# CONFIG_CYCLADES is not set 688# CONFIG_CYCLADES is not set
682# CONFIG_DIGIEPCA is not set 689# CONFIG_DIGIEPCA is not set
690# CONFIG_MOXA_INTELLIO is not set
683# CONFIG_MOXA_SMARTIO is not set 691# CONFIG_MOXA_SMARTIO is not set
684# CONFIG_ISI is not set 692# CONFIG_ISI is not set
685# CONFIG_SYNCLINKMP is not set 693# CONFIG_SYNCLINKMP is not set
694# CONFIG_SYNCLINK_GT is not set
686# CONFIG_N_HDLC is not set 695# CONFIG_N_HDLC is not set
687# CONFIG_SPECIALIX is not set 696# CONFIG_SPECIALIX is not set
688# CONFIG_SX is not set 697# CONFIG_SX is not set
@@ -695,6 +704,7 @@ CONFIG_SERIAL_8250=y
695CONFIG_SERIAL_8250_CONSOLE=y 704CONFIG_SERIAL_8250_CONSOLE=y
696CONFIG_SERIAL_8250_ACPI=y 705CONFIG_SERIAL_8250_ACPI=y
697CONFIG_SERIAL_8250_NR_UARTS=6 706CONFIG_SERIAL_8250_NR_UARTS=6
707CONFIG_SERIAL_8250_RUNTIME_UARTS=4
698CONFIG_SERIAL_8250_EXTENDED=y 708CONFIG_SERIAL_8250_EXTENDED=y
699CONFIG_SERIAL_8250_SHARE_IRQ=y 709CONFIG_SERIAL_8250_SHARE_IRQ=y
700# CONFIG_SERIAL_8250_DETECT_IRQ is not set 710# CONFIG_SERIAL_8250_DETECT_IRQ is not set
@@ -739,10 +749,10 @@ CONFIG_DRM_SIS=m
739# CONFIG_DRM_VIA is not set 749# CONFIG_DRM_VIA is not set
740# CONFIG_DRM_SAVAGE is not set 750# CONFIG_DRM_SAVAGE is not set
741CONFIG_RAW_DRIVER=m 751CONFIG_RAW_DRIVER=m
752CONFIG_MAX_RAW_DEVS=256
742CONFIG_HPET=y 753CONFIG_HPET=y
743# CONFIG_HPET_RTC_IRQ is not set 754# CONFIG_HPET_RTC_IRQ is not set
744CONFIG_HPET_MMAP=y 755CONFIG_HPET_MMAP=y
745CONFIG_MAX_RAW_DEVS=256
746# CONFIG_HANGCHECK_TIMER is not set 756# CONFIG_HANGCHECK_TIMER is not set
747 757
748# 758#
@@ -757,6 +767,12 @@ CONFIG_MAX_RAW_DEVS=256
757# CONFIG_I2C is not set 767# CONFIG_I2C is not set
758 768
759# 769#
770# SPI support
771#
772# CONFIG_SPI is not set
773# CONFIG_SPI_MASTER is not set
774
775#
760# Dallas's 1-wire bus 776# Dallas's 1-wire bus
761# 777#
762# CONFIG_W1 is not set 778# CONFIG_W1 is not set
@@ -766,6 +782,7 @@ CONFIG_MAX_RAW_DEVS=256
766# 782#
767CONFIG_HWMON=y 783CONFIG_HWMON=y
768# CONFIG_HWMON_VID is not set 784# CONFIG_HWMON_VID is not set
785# CONFIG_SENSORS_F71805F is not set
769# CONFIG_HWMON_DEBUG_CHIP is not set 786# CONFIG_HWMON_DEBUG_CHIP is not set
770 787
771# 788#
@@ -855,12 +872,15 @@ CONFIG_USB_STORAGE=m
855# CONFIG_USB_STORAGE_SDDR09 is not set 872# CONFIG_USB_STORAGE_SDDR09 is not set
856# CONFIG_USB_STORAGE_SDDR55 is not set 873# CONFIG_USB_STORAGE_SDDR55 is not set
857# CONFIG_USB_STORAGE_JUMPSHOT is not set 874# CONFIG_USB_STORAGE_JUMPSHOT is not set
875# CONFIG_USB_STORAGE_ALAUDA is not set
876# CONFIG_USB_LIBUSUAL is not set
858 877
859# 878#
860# USB Input Devices 879# USB Input Devices
861# 880#
862CONFIG_USB_HID=y 881CONFIG_USB_HID=y
863CONFIG_USB_HIDINPUT=y 882CONFIG_USB_HIDINPUT=y
883# CONFIG_USB_HIDINPUT_POWERBOOK is not set
864# CONFIG_HID_FF is not set 884# CONFIG_HID_FF is not set
865# CONFIG_USB_HIDDEV is not set 885# CONFIG_USB_HIDDEV is not set
866# CONFIG_USB_AIPTEK is not set 886# CONFIG_USB_AIPTEK is not set
@@ -874,6 +894,7 @@ CONFIG_USB_HIDINPUT=y
874# CONFIG_USB_YEALINK is not set 894# CONFIG_USB_YEALINK is not set
875# CONFIG_USB_XPAD is not set 895# CONFIG_USB_XPAD is not set
876# CONFIG_USB_ATI_REMOTE is not set 896# CONFIG_USB_ATI_REMOTE is not set
897# CONFIG_USB_ATI_REMOTE2 is not set
877# CONFIG_USB_KEYSPAN_REMOTE is not set 898# CONFIG_USB_KEYSPAN_REMOTE is not set
878# CONFIG_USB_APPLETOUCH is not set 899# CONFIG_USB_APPLETOUCH is not set
879 900
@@ -949,7 +970,7 @@ CONFIG_USB_HIDINPUT=y
949# CONFIG_INFINIBAND is not set 970# CONFIG_INFINIBAND is not set
950 971
951# 972#
952# SN Devices 973# EDAC - error detection and reporting (RAS)
953# 974#
954 975
955# 976#
@@ -981,6 +1002,7 @@ CONFIG_XFS_EXPORT=y
981# CONFIG_XFS_SECURITY is not set 1002# CONFIG_XFS_SECURITY is not set
982# CONFIG_XFS_POSIX_ACL is not set 1003# CONFIG_XFS_POSIX_ACL is not set
983# CONFIG_XFS_RT is not set 1004# CONFIG_XFS_RT is not set
1005# CONFIG_OCFS2_FS is not set
984# CONFIG_MINIX_FS is not set 1006# CONFIG_MINIX_FS is not set
985# CONFIG_ROMFS_FS is not set 1007# CONFIG_ROMFS_FS is not set
986CONFIG_INOTIFY=y 1008CONFIG_INOTIFY=y
@@ -1022,6 +1044,7 @@ CONFIG_HUGETLBFS=y
1022CONFIG_HUGETLB_PAGE=y 1044CONFIG_HUGETLB_PAGE=y
1023CONFIG_RAMFS=y 1045CONFIG_RAMFS=y
1024# CONFIG_RELAYFS_FS is not set 1046# CONFIG_RELAYFS_FS is not set
1047# CONFIG_CONFIGFS_FS is not set
1025 1048
1026# 1049#
1027# Miscellaneous filesystems 1050# Miscellaneous filesystems
@@ -1091,6 +1114,7 @@ CONFIG_MSDOS_PARTITION=y
1091CONFIG_SGI_PARTITION=y 1114CONFIG_SGI_PARTITION=y
1092# CONFIG_ULTRIX_PARTITION is not set 1115# CONFIG_ULTRIX_PARTITION is not set
1093# CONFIG_SUN_PARTITION is not set 1116# CONFIG_SUN_PARTITION is not set
1117# CONFIG_KARMA_PARTITION is not set
1094CONFIG_EFI_PARTITION=y 1118CONFIG_EFI_PARTITION=y
1095 1119
1096# 1120#
@@ -1158,18 +1182,20 @@ CONFIG_GENERIC_PENDING_IRQ=y
1158# Kernel hacking 1182# Kernel hacking
1159# 1183#
1160# CONFIG_PRINTK_TIME is not set 1184# CONFIG_PRINTK_TIME is not set
1161CONFIG_DEBUG_KERNEL=y
1162CONFIG_MAGIC_SYSRQ=y 1185CONFIG_MAGIC_SYSRQ=y
1186CONFIG_DEBUG_KERNEL=y
1163CONFIG_LOG_BUF_SHIFT=20 1187CONFIG_LOG_BUF_SHIFT=20
1164CONFIG_DETECT_SOFTLOCKUP=y 1188CONFIG_DETECT_SOFTLOCKUP=y
1165# CONFIG_SCHEDSTATS is not set 1189# CONFIG_SCHEDSTATS is not set
1166# CONFIG_DEBUG_SLAB is not set 1190# CONFIG_DEBUG_SLAB is not set
1191CONFIG_DEBUG_MUTEXES=y
1167# CONFIG_DEBUG_SPINLOCK is not set 1192# CONFIG_DEBUG_SPINLOCK is not set
1168# CONFIG_DEBUG_SPINLOCK_SLEEP is not set 1193# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
1169# CONFIG_DEBUG_KOBJECT is not set 1194# CONFIG_DEBUG_KOBJECT is not set
1170# CONFIG_DEBUG_INFO is not set 1195# CONFIG_DEBUG_INFO is not set
1171# CONFIG_DEBUG_FS is not set 1196# CONFIG_DEBUG_FS is not set
1172# CONFIG_DEBUG_VM is not set 1197# CONFIG_DEBUG_VM is not set
1198CONFIG_FORCED_INLINING=y
1173# CONFIG_RCU_TORTURE_TEST is not set 1199# CONFIG_RCU_TORTURE_TEST is not set
1174CONFIG_IA64_GRANULE_16MB=y 1200CONFIG_IA64_GRANULE_16MB=y
1175# CONFIG_IA64_GRANULE_64MB is not set 1201# CONFIG_IA64_GRANULE_64MB is not set
diff --git a/arch/ia64/configs/zx1_defconfig b/arch/ia64/configs/zx1_defconfig
index 0856ca67dd50..949dc4670a0c 100644
--- a/arch/ia64/configs/zx1_defconfig
+++ b/arch/ia64/configs/zx1_defconfig
@@ -1,16 +1,13 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.14-rc1 3# Linux kernel version: 2.6.16-rc5
4# Wed Sep 14 15:15:01 2005 4# Mon Feb 27 15:55:36 2006
5# 5#
6 6
7# 7#
8# Code maturity level options 8# Code maturity level options
9# 9#
10CONFIG_EXPERIMENTAL=y 10CONFIG_EXPERIMENTAL=y
11# CONFIG_CLEAN_COMPILE is not set
12CONFIG_BROKEN=y
13CONFIG_BROKEN_ON_SMP=y
14CONFIG_LOCK_KERNEL=y 11CONFIG_LOCK_KERNEL=y
15CONFIG_INIT_ENV_ARG_LIMIT=32 12CONFIG_INIT_ENV_ARG_LIMIT=32
16 13
@@ -26,17 +23,18 @@ CONFIG_BSD_PROCESS_ACCT=y
26# CONFIG_BSD_PROCESS_ACCT_V3 is not set 23# CONFIG_BSD_PROCESS_ACCT_V3 is not set
27CONFIG_SYSCTL=y 24CONFIG_SYSCTL=y
28# CONFIG_AUDIT is not set 25# CONFIG_AUDIT is not set
29CONFIG_HOTPLUG=y
30CONFIG_KOBJECT_UEVENT=y
31# CONFIG_IKCONFIG is not set 26# CONFIG_IKCONFIG is not set
32# CONFIG_CPUSETS is not set 27# CONFIG_CPUSETS is not set
33CONFIG_INITRAMFS_SOURCE="" 28CONFIG_INITRAMFS_SOURCE=""
29CONFIG_CC_OPTIMIZE_FOR_SIZE=y
34# CONFIG_EMBEDDED is not set 30# CONFIG_EMBEDDED is not set
35CONFIG_KALLSYMS=y 31CONFIG_KALLSYMS=y
36# CONFIG_KALLSYMS_ALL is not set 32# CONFIG_KALLSYMS_ALL is not set
37# CONFIG_KALLSYMS_EXTRA_PASS is not set 33# CONFIG_KALLSYMS_EXTRA_PASS is not set
34CONFIG_HOTPLUG=y
38CONFIG_PRINTK=y 35CONFIG_PRINTK=y
39CONFIG_BUG=y 36CONFIG_BUG=y
37CONFIG_ELF_CORE=y
40CONFIG_BASE_FULL=y 38CONFIG_BASE_FULL=y
41CONFIG_FUTEX=y 39CONFIG_FUTEX=y
42CONFIG_EPOLL=y 40CONFIG_EPOLL=y
@@ -45,8 +43,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
45CONFIG_CC_ALIGN_LABELS=0 43CONFIG_CC_ALIGN_LABELS=0
46CONFIG_CC_ALIGN_LOOPS=0 44CONFIG_CC_ALIGN_LOOPS=0
47CONFIG_CC_ALIGN_JUMPS=0 45CONFIG_CC_ALIGN_JUMPS=0
46CONFIG_SLAB=y
48# CONFIG_TINY_SHMEM is not set 47# CONFIG_TINY_SHMEM is not set
49CONFIG_BASE_SMALL=0 48CONFIG_BASE_SMALL=0
49# CONFIG_SLOB is not set
50 50
51# 51#
52# Loadable module support 52# Loadable module support
@@ -59,17 +59,36 @@ CONFIG_OBSOLETE_MODPARM=y
59# CONFIG_KMOD is not set 59# CONFIG_KMOD is not set
60 60
61# 61#
62# Block layer
63#
64
65#
66# IO Schedulers
67#
68CONFIG_IOSCHED_NOOP=y
69CONFIG_IOSCHED_AS=y
70CONFIG_IOSCHED_DEADLINE=y
71CONFIG_IOSCHED_CFQ=y
72CONFIG_DEFAULT_AS=y
73# CONFIG_DEFAULT_DEADLINE is not set
74# CONFIG_DEFAULT_CFQ is not set
75# CONFIG_DEFAULT_NOOP is not set
76CONFIG_DEFAULT_IOSCHED="anticipatory"
77
78#
62# Processor type and features 79# Processor type and features
63# 80#
64CONFIG_IA64=y 81CONFIG_IA64=y
65CONFIG_64BIT=y 82CONFIG_64BIT=y
66CONFIG_MMU=y 83CONFIG_MMU=y
84CONFIG_SWIOTLB=y
67CONFIG_RWSEM_XCHGADD_ALGORITHM=y 85CONFIG_RWSEM_XCHGADD_ALGORITHM=y
68CONFIG_GENERIC_CALIBRATE_DELAY=y 86CONFIG_GENERIC_CALIBRATE_DELAY=y
69CONFIG_TIME_INTERPOLATION=y 87CONFIG_TIME_INTERPOLATION=y
70CONFIG_EFI=y 88CONFIG_EFI=y
71CONFIG_GENERIC_IOMAP=y 89CONFIG_GENERIC_IOMAP=y
72CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y 90CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
91CONFIG_DMA_IS_DMA32=y
73# CONFIG_IA64_GENERIC is not set 92# CONFIG_IA64_GENERIC is not set
74# CONFIG_IA64_DIG is not set 93# CONFIG_IA64_DIG is not set
75CONFIG_IA64_HP_ZX1=y 94CONFIG_IA64_HP_ZX1=y
@@ -82,18 +101,16 @@ CONFIG_MCKINLEY=y
82# CONFIG_IA64_PAGE_SIZE_8KB is not set 101# CONFIG_IA64_PAGE_SIZE_8KB is not set
83CONFIG_IA64_PAGE_SIZE_16KB=y 102CONFIG_IA64_PAGE_SIZE_16KB=y
84# CONFIG_IA64_PAGE_SIZE_64KB is not set 103# CONFIG_IA64_PAGE_SIZE_64KB is not set
104CONFIG_PGTABLE_3=y
105# CONFIG_PGTABLE_4 is not set
85# CONFIG_HZ_100 is not set 106# CONFIG_HZ_100 is not set
86CONFIG_HZ_250=y 107CONFIG_HZ_250=y
87# CONFIG_HZ_1000 is not set 108# CONFIG_HZ_1000 is not set
88CONFIG_HZ=250 109CONFIG_HZ=250
89CONFIG_IA64_L1_CACHE_SHIFT=7 110CONFIG_IA64_L1_CACHE_SHIFT=7
90# CONFIG_NUMA is not set
91CONFIG_VIRTUAL_MEM_MAP=y
92CONFIG_HOLES_IN_ZONE=y
93# CONFIG_IA64_CYCLONE is not set 111# CONFIG_IA64_CYCLONE is not set
94CONFIG_IOSAPIC=y 112CONFIG_IOSAPIC=y
95# CONFIG_IA64_SGI_SN_XP is not set 113CONFIG_FORCE_MAX_ZONEORDER=17
96CONFIG_FORCE_MAX_ZONEORDER=18
97CONFIG_SMP=y 114CONFIG_SMP=y
98CONFIG_NR_CPUS=16 115CONFIG_NR_CPUS=16
99# CONFIG_HOTPLUG_CPU is not set 116# CONFIG_HOTPLUG_CPU is not set
@@ -106,7 +123,14 @@ CONFIG_FLATMEM_MANUAL=y
106CONFIG_FLATMEM=y 123CONFIG_FLATMEM=y
107CONFIG_FLAT_NODE_MEM_MAP=y 124CONFIG_FLAT_NODE_MEM_MAP=y
108# CONFIG_SPARSEMEM_STATIC is not set 125# CONFIG_SPARSEMEM_STATIC is not set
109CONFIG_HAVE_DEC_LOCK=y 126CONFIG_SPLIT_PTLOCK_CPUS=4
127CONFIG_ARCH_SELECT_MEMORY_MODEL=y
128CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
129CONFIG_ARCH_FLATMEM_ENABLE=y
130CONFIG_ARCH_SPARSEMEM_ENABLE=y
131CONFIG_ARCH_DISCONTIGMEM_DEFAULT=y
132CONFIG_VIRTUAL_MEM_MAP=y
133CONFIG_HOLES_IN_ZONE=y
110CONFIG_IA32_SUPPORT=y 134CONFIG_IA32_SUPPORT=y
111CONFIG_COMPAT=y 135CONFIG_COMPAT=y
112CONFIG_IA64_MCA_RECOVERY=y 136CONFIG_IA64_MCA_RECOVERY=y
@@ -118,7 +142,6 @@ CONFIG_IA64_PALINFO=y
118# 142#
119CONFIG_EFI_VARS=y 143CONFIG_EFI_VARS=y
120CONFIG_EFI_PCDP=y 144CONFIG_EFI_PCDP=y
121# CONFIG_DELL_RBU is not set
122CONFIG_BINFMT_ELF=y 145CONFIG_BINFMT_ELF=y
123CONFIG_BINFMT_MISC=y 146CONFIG_BINFMT_MISC=y
124 147
@@ -126,6 +149,7 @@ CONFIG_BINFMT_MISC=y
126# Power management and ACPI 149# Power management and ACPI
127# 150#
128CONFIG_PM=y 151CONFIG_PM=y
152CONFIG_PM_LEGACY=y
129# CONFIG_PM_DEBUG is not set 153# CONFIG_PM_DEBUG is not set
130 154
131# 155#
@@ -138,6 +162,7 @@ CONFIG_ACPI_PROCESSOR=y
138CONFIG_ACPI_THERMAL=y 162CONFIG_ACPI_THERMAL=y
139CONFIG_ACPI_BLACKLIST_YEAR=0 163CONFIG_ACPI_BLACKLIST_YEAR=0
140# CONFIG_ACPI_DEBUG is not set 164# CONFIG_ACPI_DEBUG is not set
165CONFIG_ACPI_EC=y
141CONFIG_ACPI_POWER=y 166CONFIG_ACPI_POWER=y
142CONFIG_ACPI_SYSTEM=y 167CONFIG_ACPI_SYSTEM=y
143# CONFIG_ACPI_CONTAINER is not set 168# CONFIG_ACPI_CONTAINER is not set
@@ -179,6 +204,7 @@ CONFIG_NET=y
179# 204#
180# Networking options 205# Networking options
181# 206#
207# CONFIG_NETDEBUG is not set
182CONFIG_PACKET=y 208CONFIG_PACKET=y
183# CONFIG_PACKET_MMAP is not set 209# CONFIG_PACKET_MMAP is not set
184CONFIG_UNIX=y 210CONFIG_UNIX=y
@@ -211,14 +237,17 @@ CONFIG_NETFILTER=y
211# CONFIG_NETFILTER_DEBUG is not set 237# CONFIG_NETFILTER_DEBUG is not set
212 238
213# 239#
240# Core Netfilter Configuration
241#
242# CONFIG_NETFILTER_NETLINK is not set
243# CONFIG_NF_CONNTRACK is not set
244# CONFIG_NETFILTER_XTABLES is not set
245
246#
214# IP: Netfilter Configuration 247# IP: Netfilter Configuration
215# 248#
216# CONFIG_IP_NF_CONNTRACK is not set 249# CONFIG_IP_NF_CONNTRACK is not set
217# CONFIG_IP_NF_QUEUE is not set 250# CONFIG_IP_NF_QUEUE is not set
218# CONFIG_IP_NF_IPTABLES is not set
219CONFIG_IP_NF_ARPTABLES=y
220# CONFIG_IP_NF_ARPFILTER is not set
221# CONFIG_IP_NF_ARP_MANGLE is not set
222 251
223# 252#
224# DCCP Configuration (EXPERIMENTAL) 253# DCCP Configuration (EXPERIMENTAL)
@@ -229,6 +258,11 @@ CONFIG_IP_NF_ARPTABLES=y
229# SCTP Configuration (EXPERIMENTAL) 258# SCTP Configuration (EXPERIMENTAL)
230# 259#
231# CONFIG_IP_SCTP is not set 260# CONFIG_IP_SCTP is not set
261
262#
263# TIPC Configuration (EXPERIMENTAL)
264#
265# CONFIG_TIPC is not set
232# CONFIG_ATM is not set 266# CONFIG_ATM is not set
233# CONFIG_BRIDGE is not set 267# CONFIG_BRIDGE is not set
234# CONFIG_VLAN_8021Q is not set 268# CONFIG_VLAN_8021Q is not set
@@ -241,14 +275,16 @@ CONFIG_IP_NF_ARPTABLES=y
241# CONFIG_NET_DIVERT is not set 275# CONFIG_NET_DIVERT is not set
242# CONFIG_ECONET is not set 276# CONFIG_ECONET is not set
243# CONFIG_WAN_ROUTER is not set 277# CONFIG_WAN_ROUTER is not set
278
279#
280# QoS and/or fair queueing
281#
244# CONFIG_NET_SCHED is not set 282# CONFIG_NET_SCHED is not set
245# CONFIG_NET_CLS_ROUTE is not set
246 283
247# 284#
248# Network testing 285# Network testing
249# 286#
250# CONFIG_NET_PKTGEN is not set 287# CONFIG_NET_PKTGEN is not set
251# CONFIG_NETFILTER_NETLINK is not set
252# CONFIG_HAMRADIO is not set 288# CONFIG_HAMRADIO is not set
253# CONFIG_IRDA is not set 289# CONFIG_IRDA is not set
254# CONFIG_BT is not set 290# CONFIG_BT is not set
@@ -310,20 +346,13 @@ CONFIG_BLK_DEV_RAM_COUNT=16
310CONFIG_BLK_DEV_RAM_SIZE=4096 346CONFIG_BLK_DEV_RAM_SIZE=4096
311CONFIG_BLK_DEV_INITRD=y 347CONFIG_BLK_DEV_INITRD=y
312# CONFIG_CDROM_PKTCDVD is not set 348# CONFIG_CDROM_PKTCDVD is not set
313
314#
315# IO Schedulers
316#
317CONFIG_IOSCHED_NOOP=y
318CONFIG_IOSCHED_AS=y
319CONFIG_IOSCHED_DEADLINE=y
320CONFIG_IOSCHED_CFQ=y
321# CONFIG_ATA_OVER_ETH is not set 349# CONFIG_ATA_OVER_ETH is not set
322 350
323# 351#
324# ATA/ATAPI/MFM/RLL support 352# ATA/ATAPI/MFM/RLL support
325# 353#
326CONFIG_IDE=y 354CONFIG_IDE=y
355CONFIG_IDE_MAX_HWIFS=4
327CONFIG_BLK_DEV_IDE=y 356CONFIG_BLK_DEV_IDE=y
328 357
329# 358#
@@ -407,13 +436,14 @@ CONFIG_SCSI_LOGGING=y
407# SCSI Transport Attributes 436# SCSI Transport Attributes
408# 437#
409CONFIG_SCSI_SPI_ATTRS=y 438CONFIG_SCSI_SPI_ATTRS=y
410# CONFIG_SCSI_FC_ATTRS is not set 439CONFIG_SCSI_FC_ATTRS=y
411# CONFIG_SCSI_ISCSI_ATTRS is not set 440# CONFIG_SCSI_ISCSI_ATTRS is not set
412# CONFIG_SCSI_SAS_ATTRS is not set 441# CONFIG_SCSI_SAS_ATTRS is not set
413 442
414# 443#
415# SCSI low-level drivers 444# SCSI low-level drivers
416# 445#
446# CONFIG_ISCSI_TCP is not set
417# CONFIG_BLK_DEV_3W_XXXX_RAID is not set 447# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
418# CONFIG_SCSI_3W_9XXX is not set 448# CONFIG_SCSI_3W_9XXX is not set
419# CONFIG_SCSI_ACARD is not set 449# CONFIG_SCSI_ACARD is not set
@@ -421,13 +451,11 @@ CONFIG_SCSI_SPI_ATTRS=y
421# CONFIG_SCSI_AIC7XXX is not set 451# CONFIG_SCSI_AIC7XXX is not set
422# CONFIG_SCSI_AIC7XXX_OLD is not set 452# CONFIG_SCSI_AIC7XXX_OLD is not set
423# CONFIG_SCSI_AIC79XX is not set 453# CONFIG_SCSI_AIC79XX is not set
424# CONFIG_SCSI_ADVANSYS is not set
425# CONFIG_MEGARAID_NEWGEN is not set 454# CONFIG_MEGARAID_NEWGEN is not set
426# CONFIG_MEGARAID_LEGACY is not set 455# CONFIG_MEGARAID_LEGACY is not set
456# CONFIG_MEGARAID_SAS is not set
427# CONFIG_SCSI_SATA is not set 457# CONFIG_SCSI_SATA is not set
428# CONFIG_SCSI_CPQFCTS is not set
429# CONFIG_SCSI_DMX3191D is not set 458# CONFIG_SCSI_DMX3191D is not set
430# CONFIG_SCSI_EATA_PIO is not set
431# CONFIG_SCSI_FUTURE_DOMAIN is not set 459# CONFIG_SCSI_FUTURE_DOMAIN is not set
432# CONFIG_SCSI_IPS is not set 460# CONFIG_SCSI_IPS is not set
433# CONFIG_SCSI_INITIO is not set 461# CONFIG_SCSI_INITIO is not set
@@ -438,17 +466,9 @@ CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
438CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 466CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
439# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set 467# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set
440# CONFIG_SCSI_IPR is not set 468# CONFIG_SCSI_IPR is not set
441# CONFIG_SCSI_QLOGIC_ISP is not set
442# CONFIG_SCSI_QLOGIC_FC is not set 469# CONFIG_SCSI_QLOGIC_FC is not set
443CONFIG_SCSI_QLOGIC_1280=y 470CONFIG_SCSI_QLOGIC_1280=y
444# CONFIG_SCSI_QLOGIC_1280_1040 is not set 471# CONFIG_SCSI_QLA_FC is not set
445CONFIG_SCSI_QLA2XXX=y
446# CONFIG_SCSI_QLA21XX is not set
447# CONFIG_SCSI_QLA22XX is not set
448# CONFIG_SCSI_QLA2300 is not set
449# CONFIG_SCSI_QLA2322 is not set
450# CONFIG_SCSI_QLA6312 is not set
451# CONFIG_SCSI_QLA24XX is not set
452# CONFIG_SCSI_LPFC is not set 472# CONFIG_SCSI_LPFC is not set
453# CONFIG_SCSI_DC395x is not set 473# CONFIG_SCSI_DC395x is not set
454# CONFIG_SCSI_DC390T is not set 474# CONFIG_SCSI_DC390T is not set
@@ -465,6 +485,7 @@ CONFIG_SCSI_QLA2XXX=y
465CONFIG_FUSION=y 485CONFIG_FUSION=y
466CONFIG_FUSION_SPI=y 486CONFIG_FUSION_SPI=y
467CONFIG_FUSION_FC=y 487CONFIG_FUSION_FC=y
488# CONFIG_FUSION_SAS is not set
468CONFIG_FUSION_MAX_SGE=128 489CONFIG_FUSION_MAX_SGE=128
469CONFIG_FUSION_CTL=m 490CONFIG_FUSION_CTL=m
470 491
@@ -505,6 +526,7 @@ CONFIG_NET_ETHERNET=y
505CONFIG_MII=y 526CONFIG_MII=y
506# CONFIG_HAPPYMEAL is not set 527# CONFIG_HAPPYMEAL is not set
507# CONFIG_SUNGEM is not set 528# CONFIG_SUNGEM is not set
529# CONFIG_CASSINI is not set
508# CONFIG_NET_VENDOR_3COM is not set 530# CONFIG_NET_VENDOR_3COM is not set
509 531
510# 532#
@@ -548,12 +570,14 @@ CONFIG_E100=y
548# CONFIG_DL2K is not set 570# CONFIG_DL2K is not set
549CONFIG_E1000=y 571CONFIG_E1000=y
550# CONFIG_E1000_NAPI is not set 572# CONFIG_E1000_NAPI is not set
573# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
551# CONFIG_NS83820 is not set 574# CONFIG_NS83820 is not set
552# CONFIG_HAMACHI is not set 575# CONFIG_HAMACHI is not set
553# CONFIG_YELLOWFIN is not set 576# CONFIG_YELLOWFIN is not set
554# CONFIG_R8169 is not set 577# CONFIG_R8169 is not set
555# CONFIG_SIS190 is not set 578# CONFIG_SIS190 is not set
556# CONFIG_SKGE is not set 579# CONFIG_SKGE is not set
580# CONFIG_SKY2 is not set
557# CONFIG_SK98LIN is not set 581# CONFIG_SK98LIN is not set
558# CONFIG_VIA_VELOCITY is not set 582# CONFIG_VIA_VELOCITY is not set
559CONFIG_TIGON3=y 583CONFIG_TIGON3=y
@@ -651,6 +675,7 @@ CONFIG_SERIAL_8250=y
651CONFIG_SERIAL_8250_CONSOLE=y 675CONFIG_SERIAL_8250_CONSOLE=y
652CONFIG_SERIAL_8250_ACPI=y 676CONFIG_SERIAL_8250_ACPI=y
653CONFIG_SERIAL_8250_NR_UARTS=8 677CONFIG_SERIAL_8250_NR_UARTS=8
678CONFIG_SERIAL_8250_RUNTIME_UARTS=4
654CONFIG_SERIAL_8250_EXTENDED=y 679CONFIG_SERIAL_8250_EXTENDED=y
655CONFIG_SERIAL_8250_SHARE_IRQ=y 680CONFIG_SERIAL_8250_SHARE_IRQ=y
656# CONFIG_SERIAL_8250_DETECT_IRQ is not set 681# CONFIG_SERIAL_8250_DETECT_IRQ is not set
@@ -702,6 +727,7 @@ CONFIG_DRM_RADEON=y
702# TPM devices 727# TPM devices
703# 728#
704# CONFIG_TCG_TPM is not set 729# CONFIG_TCG_TPM is not set
730# CONFIG_TELCLOCK is not set
705 731
706# 732#
707# I2C support 733# I2C support
@@ -752,12 +778,19 @@ CONFIG_I2C_ALGOPCF=y
752# CONFIG_SENSORS_PCF8591 is not set 778# CONFIG_SENSORS_PCF8591 is not set
753# CONFIG_SENSORS_RTC8564 is not set 779# CONFIG_SENSORS_RTC8564 is not set
754# CONFIG_SENSORS_MAX6875 is not set 780# CONFIG_SENSORS_MAX6875 is not set
781# CONFIG_RTC_X1205_I2C is not set
755# CONFIG_I2C_DEBUG_CORE is not set 782# CONFIG_I2C_DEBUG_CORE is not set
756# CONFIG_I2C_DEBUG_ALGO is not set 783# CONFIG_I2C_DEBUG_ALGO is not set
757# CONFIG_I2C_DEBUG_BUS is not set 784# CONFIG_I2C_DEBUG_BUS is not set
758# CONFIG_I2C_DEBUG_CHIP is not set 785# CONFIG_I2C_DEBUG_CHIP is not set
759 786
760# 787#
788# SPI support
789#
790# CONFIG_SPI is not set
791# CONFIG_SPI_MASTER is not set
792
793#
761# Dallas's 1-wire bus 794# Dallas's 1-wire bus
762# 795#
763# CONFIG_W1 is not set 796# CONFIG_W1 is not set
@@ -788,6 +821,7 @@ CONFIG_VIDEO_DEV=y
788# 821#
789# Video Adapters 822# Video Adapters
790# 823#
824# CONFIG_VIDEO_ADV_DEBUG is not set
791# CONFIG_VIDEO_BT848 is not set 825# CONFIG_VIDEO_BT848 is not set
792# CONFIG_VIDEO_CPIA is not set 826# CONFIG_VIDEO_CPIA is not set
793# CONFIG_VIDEO_SAA5246A is not set 827# CONFIG_VIDEO_SAA5246A is not set
@@ -795,14 +829,16 @@ CONFIG_VIDEO_DEV=y
795# CONFIG_TUNER_3036 is not set 829# CONFIG_TUNER_3036 is not set
796# CONFIG_VIDEO_STRADIS is not set 830# CONFIG_VIDEO_STRADIS is not set
797# CONFIG_VIDEO_ZORAN is not set 831# CONFIG_VIDEO_ZORAN is not set
798# CONFIG_VIDEO_ZR36120 is not set
799# CONFIG_VIDEO_SAA7134 is not set 832# CONFIG_VIDEO_SAA7134 is not set
800# CONFIG_VIDEO_MXB is not set 833# CONFIG_VIDEO_MXB is not set
801# CONFIG_VIDEO_DPC is not set 834# CONFIG_VIDEO_DPC is not set
802# CONFIG_VIDEO_HEXIUM_ORION is not set 835# CONFIG_VIDEO_HEXIUM_ORION is not set
803# CONFIG_VIDEO_HEXIUM_GEMINI is not set 836# CONFIG_VIDEO_HEXIUM_GEMINI is not set
804# CONFIG_VIDEO_CX88 is not set 837# CONFIG_VIDEO_CX88 is not set
838# CONFIG_VIDEO_EM28XX is not set
805# CONFIG_VIDEO_OVCAMCHIP is not set 839# CONFIG_VIDEO_OVCAMCHIP is not set
840# CONFIG_VIDEO_AUDIO_DECODER is not set
841# CONFIG_VIDEO_DECODER is not set
806 842
807# 843#
808# Radio Adapters 844# Radio Adapters
@@ -823,7 +859,6 @@ CONFIG_FB=y
823CONFIG_FB_CFB_FILLRECT=y 859CONFIG_FB_CFB_FILLRECT=y
824CONFIG_FB_CFB_COPYAREA=y 860CONFIG_FB_CFB_COPYAREA=y
825CONFIG_FB_CFB_IMAGEBLIT=y 861CONFIG_FB_CFB_IMAGEBLIT=y
826CONFIG_FB_SOFT_CURSOR=y
827# CONFIG_FB_MACMODES is not set 862# CONFIG_FB_MACMODES is not set
828CONFIG_FB_MODE_HELPERS=y 863CONFIG_FB_MODE_HELPERS=y
829# CONFIG_FB_TILEBLITTING is not set 864# CONFIG_FB_TILEBLITTING is not set
@@ -832,6 +867,7 @@ CONFIG_FB_MODE_HELPERS=y
832# CONFIG_FB_CYBER2000 is not set 867# CONFIG_FB_CYBER2000 is not set
833# CONFIG_FB_ASILIANT is not set 868# CONFIG_FB_ASILIANT is not set
834# CONFIG_FB_IMSTT is not set 869# CONFIG_FB_IMSTT is not set
870# CONFIG_FB_S1D13XXX is not set
835# CONFIG_FB_NVIDIA is not set 871# CONFIG_FB_NVIDIA is not set
836# CONFIG_FB_RIVA is not set 872# CONFIG_FB_RIVA is not set
837# CONFIG_FB_MATROX is not set 873# CONFIG_FB_MATROX is not set
@@ -847,10 +883,7 @@ CONFIG_FB_RADEON_DEBUG=y
847# CONFIG_FB_KYRO is not set 883# CONFIG_FB_KYRO is not set
848# CONFIG_FB_3DFX is not set 884# CONFIG_FB_3DFX is not set
849# CONFIG_FB_VOODOO1 is not set 885# CONFIG_FB_VOODOO1 is not set
850# CONFIG_FB_CYBLA is not set
851# CONFIG_FB_TRIDENT is not set 886# CONFIG_FB_TRIDENT is not set
852# CONFIG_FB_PM3 is not set
853# CONFIG_FB_S1D13XXX is not set
854# CONFIG_FB_VIRTUAL is not set 887# CONFIG_FB_VIRTUAL is not set
855 888
856# 889#
@@ -859,6 +892,7 @@ CONFIG_FB_RADEON_DEBUG=y
859CONFIG_VGA_CONSOLE=y 892CONFIG_VGA_CONSOLE=y
860CONFIG_DUMMY_CONSOLE=y 893CONFIG_DUMMY_CONSOLE=y
861CONFIG_FRAMEBUFFER_CONSOLE=y 894CONFIG_FRAMEBUFFER_CONSOLE=y
895# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
862# CONFIG_FONTS is not set 896# CONFIG_FONTS is not set
863CONFIG_FONT_8x8=y 897CONFIG_FONT_8x8=y
864CONFIG_FONT_8x16=y 898CONFIG_FONT_8x16=y
@@ -891,6 +925,8 @@ CONFIG_SND_OSSEMUL=y
891CONFIG_SND_MIXER_OSS=y 925CONFIG_SND_MIXER_OSS=y
892CONFIG_SND_PCM_OSS=y 926CONFIG_SND_PCM_OSS=y
893CONFIG_SND_SEQUENCER_OSS=y 927CONFIG_SND_SEQUENCER_OSS=y
928# CONFIG_SND_DYNAMIC_MINORS is not set
929CONFIG_SND_SUPPORT_OLD_API=y
894# CONFIG_SND_VERBOSE_PRINTK is not set 930# CONFIG_SND_VERBOSE_PRINTK is not set
895# CONFIG_SND_DEBUG is not set 931# CONFIG_SND_DEBUG is not set
896 932
@@ -899,17 +935,18 @@ CONFIG_SND_SEQUENCER_OSS=y
899# 935#
900CONFIG_SND_MPU401_UART=y 936CONFIG_SND_MPU401_UART=y
901CONFIG_SND_OPL3_LIB=y 937CONFIG_SND_OPL3_LIB=y
938CONFIG_SND_AC97_CODEC=y
939CONFIG_SND_AC97_BUS=y
902# CONFIG_SND_DUMMY is not set 940# CONFIG_SND_DUMMY is not set
903# CONFIG_SND_VIRMIDI is not set 941# CONFIG_SND_VIRMIDI is not set
904# CONFIG_SND_MTPAV is not set 942# CONFIG_SND_MTPAV is not set
905# CONFIG_SND_SERIAL_U16550 is not set 943# CONFIG_SND_SERIAL_U16550 is not set
906# CONFIG_SND_MPU401 is not set 944# CONFIG_SND_MPU401 is not set
907CONFIG_SND_AC97_CODEC=y
908CONFIG_SND_AC97_BUS=y
909 945
910# 946#
911# PCI devices 947# PCI devices
912# 948#
949# CONFIG_SND_AD1889 is not set
913# CONFIG_SND_ALI5451 is not set 950# CONFIG_SND_ALI5451 is not set
914# CONFIG_SND_ATIIXP is not set 951# CONFIG_SND_ATIIXP is not set
915# CONFIG_SND_ATIIXP_MODEM is not set 952# CONFIG_SND_ATIIXP_MODEM is not set
@@ -918,39 +955,39 @@ CONFIG_SND_AC97_BUS=y
918# CONFIG_SND_AU8830 is not set 955# CONFIG_SND_AU8830 is not set
919# CONFIG_SND_AZT3328 is not set 956# CONFIG_SND_AZT3328 is not set
920# CONFIG_SND_BT87X is not set 957# CONFIG_SND_BT87X is not set
921# CONFIG_SND_CS46XX is not set 958# CONFIG_SND_CA0106 is not set
959# CONFIG_SND_CMIPCI is not set
922# CONFIG_SND_CS4281 is not set 960# CONFIG_SND_CS4281 is not set
961# CONFIG_SND_CS46XX is not set
923# CONFIG_SND_EMU10K1 is not set 962# CONFIG_SND_EMU10K1 is not set
924# CONFIG_SND_EMU10K1X is not set 963# CONFIG_SND_EMU10K1X is not set
925# CONFIG_SND_CA0106 is not set
926# CONFIG_SND_KORG1212 is not set
927# CONFIG_SND_MIXART is not set
928# CONFIG_SND_NM256 is not set
929# CONFIG_SND_RME32 is not set
930# CONFIG_SND_RME96 is not set
931# CONFIG_SND_RME9652 is not set
932# CONFIG_SND_HDSP is not set
933# CONFIG_SND_HDSPM is not set
934# CONFIG_SND_TRIDENT is not set
935# CONFIG_SND_YMFPCI is not set
936# CONFIG_SND_AD1889 is not set
937# CONFIG_SND_CMIPCI is not set
938# CONFIG_SND_ENS1370 is not set 964# CONFIG_SND_ENS1370 is not set
939# CONFIG_SND_ENS1371 is not set 965# CONFIG_SND_ENS1371 is not set
940# CONFIG_SND_ES1938 is not set 966# CONFIG_SND_ES1938 is not set
941# CONFIG_SND_ES1968 is not set 967# CONFIG_SND_ES1968 is not set
942# CONFIG_SND_MAESTRO3 is not set
943CONFIG_SND_FM801=y 968CONFIG_SND_FM801=y
944CONFIG_SND_FM801_TEA575X=y 969CONFIG_SND_FM801_TEA575X=y
970# CONFIG_SND_HDA_INTEL is not set
971# CONFIG_SND_HDSP is not set
972# CONFIG_SND_HDSPM is not set
945# CONFIG_SND_ICE1712 is not set 973# CONFIG_SND_ICE1712 is not set
946# CONFIG_SND_ICE1724 is not set 974# CONFIG_SND_ICE1724 is not set
947# CONFIG_SND_INTEL8X0 is not set 975# CONFIG_SND_INTEL8X0 is not set
948# CONFIG_SND_INTEL8X0M is not set 976# CONFIG_SND_INTEL8X0M is not set
977# CONFIG_SND_KORG1212 is not set
978# CONFIG_SND_MAESTRO3 is not set
979# CONFIG_SND_MIXART is not set
980# CONFIG_SND_NM256 is not set
981# CONFIG_SND_PCXHR is not set
982# CONFIG_SND_RME32 is not set
983# CONFIG_SND_RME96 is not set
984# CONFIG_SND_RME9652 is not set
949# CONFIG_SND_SONICVIBES is not set 985# CONFIG_SND_SONICVIBES is not set
986# CONFIG_SND_TRIDENT is not set
950# CONFIG_SND_VIA82XX is not set 987# CONFIG_SND_VIA82XX is not set
951# CONFIG_SND_VIA82XX_MODEM is not set 988# CONFIG_SND_VIA82XX_MODEM is not set
952# CONFIG_SND_VX222 is not set 989# CONFIG_SND_VX222 is not set
953# CONFIG_SND_HDA_INTEL is not set 990# CONFIG_SND_YMFPCI is not set
954 991
955# 992#
956# USB devices 993# USB devices
@@ -996,12 +1033,15 @@ CONFIG_USB_UHCI_HCD=y
996# USB Device Class drivers 1033# USB Device Class drivers
997# 1034#
998# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set 1035# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
999# CONFIG_USB_BLUETOOTH_TTY is not set
1000# CONFIG_USB_ACM is not set 1036# CONFIG_USB_ACM is not set
1001# CONFIG_USB_PRINTER is not set 1037# CONFIG_USB_PRINTER is not set
1002 1038
1003# 1039#
1004# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information 1040# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
1041#
1042
1043#
1044# may also be needed; see USB_STORAGE Help for more information
1005# 1045#
1006CONFIG_USB_STORAGE=y 1046CONFIG_USB_STORAGE=y
1007# CONFIG_USB_STORAGE_DEBUG is not set 1047# CONFIG_USB_STORAGE_DEBUG is not set
@@ -1013,13 +1053,15 @@ CONFIG_USB_STORAGE=y
1013# CONFIG_USB_STORAGE_SDDR09 is not set 1053# CONFIG_USB_STORAGE_SDDR09 is not set
1014# CONFIG_USB_STORAGE_SDDR55 is not set 1054# CONFIG_USB_STORAGE_SDDR55 is not set
1015# CONFIG_USB_STORAGE_JUMPSHOT is not set 1055# CONFIG_USB_STORAGE_JUMPSHOT is not set
1016# CONFIG_USB_STORAGE_ONETOUCH is not set 1056# CONFIG_USB_STORAGE_ALAUDA is not set
1057# CONFIG_USB_LIBUSUAL is not set
1017 1058
1018# 1059#
1019# USB Input Devices 1060# USB Input Devices
1020# 1061#
1021CONFIG_USB_HID=y 1062CONFIG_USB_HID=y
1022CONFIG_USB_HIDINPUT=y 1063CONFIG_USB_HIDINPUT=y
1064# CONFIG_USB_HIDINPUT_POWERBOOK is not set
1023# CONFIG_HID_FF is not set 1065# CONFIG_HID_FF is not set
1024CONFIG_USB_HIDDEV=y 1066CONFIG_USB_HIDDEV=y
1025# CONFIG_USB_AIPTEK is not set 1067# CONFIG_USB_AIPTEK is not set
@@ -1033,6 +1075,7 @@ CONFIG_USB_HIDDEV=y
1033# CONFIG_USB_YEALINK is not set 1075# CONFIG_USB_YEALINK is not set
1034# CONFIG_USB_XPAD is not set 1076# CONFIG_USB_XPAD is not set
1035# CONFIG_USB_ATI_REMOTE is not set 1077# CONFIG_USB_ATI_REMOTE is not set
1078# CONFIG_USB_ATI_REMOTE2 is not set
1036# CONFIG_USB_KEYSPAN_REMOTE is not set 1079# CONFIG_USB_KEYSPAN_REMOTE is not set
1037# CONFIG_USB_APPLETOUCH is not set 1080# CONFIG_USB_APPLETOUCH is not set
1038 1081
@@ -1048,6 +1091,7 @@ CONFIG_USB_HIDDEV=y
1048# CONFIG_USB_DABUSB is not set 1091# CONFIG_USB_DABUSB is not set
1049# CONFIG_USB_VICAM is not set 1092# CONFIG_USB_VICAM is not set
1050# CONFIG_USB_DSBR is not set 1093# CONFIG_USB_DSBR is not set
1094# CONFIG_USB_ET61X251 is not set
1051# CONFIG_USB_IBMCAM is not set 1095# CONFIG_USB_IBMCAM is not set
1052# CONFIG_USB_KONICAWC is not set 1096# CONFIG_USB_KONICAWC is not set
1053# CONFIG_USB_OV511 is not set 1097# CONFIG_USB_OV511 is not set
@@ -1112,7 +1156,7 @@ CONFIG_USB_MON=y
1112# CONFIG_INFINIBAND is not set 1156# CONFIG_INFINIBAND is not set
1113 1157
1114# 1158#
1115# SN Devices 1159# EDAC - error detection and reporting (RAS)
1116# 1160#
1117 1161
1118# 1162#
@@ -1134,6 +1178,7 @@ CONFIG_FS_MBCACHE=y
1134# CONFIG_JFS_FS is not set 1178# CONFIG_JFS_FS is not set
1135# CONFIG_FS_POSIX_ACL is not set 1179# CONFIG_FS_POSIX_ACL is not set
1136# CONFIG_XFS_FS is not set 1180# CONFIG_XFS_FS is not set
1181# CONFIG_OCFS2_FS is not set
1137# CONFIG_MINIX_FS is not set 1182# CONFIG_MINIX_FS is not set
1138# CONFIG_ROMFS_FS is not set 1183# CONFIG_ROMFS_FS is not set
1139# CONFIG_INOTIFY is not set 1184# CONFIG_INOTIFY is not set
@@ -1173,6 +1218,7 @@ CONFIG_HUGETLBFS=y
1173CONFIG_HUGETLB_PAGE=y 1218CONFIG_HUGETLB_PAGE=y
1174CONFIG_RAMFS=y 1219CONFIG_RAMFS=y
1175# CONFIG_RELAYFS_FS is not set 1220# CONFIG_RELAYFS_FS is not set
1221# CONFIG_CONFIGFS_FS is not set
1176 1222
1177# 1223#
1178# Miscellaneous filesystems 1224# Miscellaneous filesystems
@@ -1237,6 +1283,7 @@ CONFIG_MSDOS_PARTITION=y
1237# CONFIG_SGI_PARTITION is not set 1283# CONFIG_SGI_PARTITION is not set
1238# CONFIG_ULTRIX_PARTITION is not set 1284# CONFIG_ULTRIX_PARTITION is not set
1239# CONFIG_SUN_PARTITION is not set 1285# CONFIG_SUN_PARTITION is not set
1286# CONFIG_KARMA_PARTITION is not set
1240CONFIG_EFI_PARTITION=y 1287CONFIG_EFI_PARTITION=y
1241 1288
1242# 1289#
@@ -1295,26 +1342,30 @@ CONFIG_GENERIC_IRQ_PROBE=y
1295CONFIG_GENERIC_PENDING_IRQ=y 1342CONFIG_GENERIC_PENDING_IRQ=y
1296 1343
1297# 1344#
1298# Profiling support 1345# Instrumentation Support
1299# 1346#
1300# CONFIG_PROFILING is not set 1347# CONFIG_PROFILING is not set
1348CONFIG_KPROBES=y
1301 1349
1302# 1350#
1303# Kernel hacking 1351# Kernel hacking
1304# 1352#
1305# CONFIG_PRINTK_TIME is not set 1353# CONFIG_PRINTK_TIME is not set
1306CONFIG_DEBUG_KERNEL=y
1307CONFIG_MAGIC_SYSRQ=y 1354CONFIG_MAGIC_SYSRQ=y
1355CONFIG_DEBUG_KERNEL=y
1308CONFIG_LOG_BUF_SHIFT=17 1356CONFIG_LOG_BUF_SHIFT=17
1309CONFIG_DETECT_SOFTLOCKUP=y 1357CONFIG_DETECT_SOFTLOCKUP=y
1310# CONFIG_SCHEDSTATS is not set 1358# CONFIG_SCHEDSTATS is not set
1311# CONFIG_DEBUG_SLAB is not set 1359# CONFIG_DEBUG_SLAB is not set
1360CONFIG_DEBUG_MUTEXES=y
1312# CONFIG_DEBUG_SPINLOCK is not set 1361# CONFIG_DEBUG_SPINLOCK is not set
1313# CONFIG_DEBUG_SPINLOCK_SLEEP is not set 1362# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
1314# CONFIG_DEBUG_KOBJECT is not set 1363# CONFIG_DEBUG_KOBJECT is not set
1315# CONFIG_DEBUG_INFO is not set 1364# CONFIG_DEBUG_INFO is not set
1316# CONFIG_DEBUG_FS is not set 1365# CONFIG_DEBUG_FS is not set
1317CONFIG_KPROBES=y 1366# CONFIG_DEBUG_VM is not set
1367CONFIG_FORCED_INLINING=y
1368# CONFIG_RCU_TORTURE_TEST is not set
1318CONFIG_IA64_GRANULE_16MB=y 1369CONFIG_IA64_GRANULE_16MB=y
1319# CONFIG_IA64_GRANULE_64MB is not set 1370# CONFIG_IA64_GRANULE_64MB is not set
1320CONFIG_IA64_PRINT_HAZARDS=y 1371CONFIG_IA64_PRINT_HAZARDS=y
diff --git a/arch/ia64/defconfig b/arch/ia64/defconfig
index 275a26c6e5aa..3e767288a745 100644
--- a/arch/ia64/defconfig
+++ b/arch/ia64/defconfig
@@ -1,14 +1,13 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.14-rc1 3# Linux kernel version: 2.6.16-rc5
4# Wed Sep 14 15:13:03 2005 4# Mon Feb 27 16:02:28 2006
5# 5#
6 6
7# 7#
8# Code maturity level options 8# Code maturity level options
9# 9#
10CONFIG_EXPERIMENTAL=y 10CONFIG_EXPERIMENTAL=y
11CONFIG_CLEAN_COMPILE=y
12CONFIG_LOCK_KERNEL=y 11CONFIG_LOCK_KERNEL=y
13CONFIG_INIT_ENV_ARG_LIMIT=32 12CONFIG_INIT_ENV_ARG_LIMIT=32
14 13
@@ -23,18 +22,19 @@ CONFIG_POSIX_MQUEUE=y
23# CONFIG_BSD_PROCESS_ACCT is not set 22# CONFIG_BSD_PROCESS_ACCT is not set
24CONFIG_SYSCTL=y 23CONFIG_SYSCTL=y
25# CONFIG_AUDIT is not set 24# CONFIG_AUDIT is not set
26CONFIG_HOTPLUG=y
27CONFIG_KOBJECT_UEVENT=y
28CONFIG_IKCONFIG=y 25CONFIG_IKCONFIG=y
29CONFIG_IKCONFIG_PROC=y 26CONFIG_IKCONFIG_PROC=y
30# CONFIG_CPUSETS is not set 27# CONFIG_CPUSETS is not set
31CONFIG_INITRAMFS_SOURCE="" 28CONFIG_INITRAMFS_SOURCE=""
29CONFIG_CC_OPTIMIZE_FOR_SIZE=y
32# CONFIG_EMBEDDED is not set 30# CONFIG_EMBEDDED is not set
33CONFIG_KALLSYMS=y 31CONFIG_KALLSYMS=y
34CONFIG_KALLSYMS_ALL=y 32CONFIG_KALLSYMS_ALL=y
35# CONFIG_KALLSYMS_EXTRA_PASS is not set 33# CONFIG_KALLSYMS_EXTRA_PASS is not set
34CONFIG_HOTPLUG=y
36CONFIG_PRINTK=y 35CONFIG_PRINTK=y
37CONFIG_BUG=y 36CONFIG_BUG=y
37CONFIG_ELF_CORE=y
38CONFIG_BASE_FULL=y 38CONFIG_BASE_FULL=y
39CONFIG_FUTEX=y 39CONFIG_FUTEX=y
40CONFIG_EPOLL=y 40CONFIG_EPOLL=y
@@ -43,8 +43,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
43CONFIG_CC_ALIGN_LABELS=0 43CONFIG_CC_ALIGN_LABELS=0
44CONFIG_CC_ALIGN_LOOPS=0 44CONFIG_CC_ALIGN_LOOPS=0
45CONFIG_CC_ALIGN_JUMPS=0 45CONFIG_CC_ALIGN_JUMPS=0
46CONFIG_SLAB=y
46# CONFIG_TINY_SHMEM is not set 47# CONFIG_TINY_SHMEM is not set
47CONFIG_BASE_SMALL=0 48CONFIG_BASE_SMALL=0
49# CONFIG_SLOB is not set
48 50
49# 51#
50# Loadable module support 52# Loadable module support
@@ -59,17 +61,36 @@ CONFIG_KMOD=y
59CONFIG_STOP_MACHINE=y 61CONFIG_STOP_MACHINE=y
60 62
61# 63#
64# Block layer
65#
66
67#
68# IO Schedulers
69#
70CONFIG_IOSCHED_NOOP=y
71CONFIG_IOSCHED_AS=y
72CONFIG_IOSCHED_DEADLINE=y
73CONFIG_IOSCHED_CFQ=y
74CONFIG_DEFAULT_AS=y
75# CONFIG_DEFAULT_DEADLINE is not set
76# CONFIG_DEFAULT_CFQ is not set
77# CONFIG_DEFAULT_NOOP is not set
78CONFIG_DEFAULT_IOSCHED="anticipatory"
79
80#
62# Processor type and features 81# Processor type and features
63# 82#
64CONFIG_IA64=y 83CONFIG_IA64=y
65CONFIG_64BIT=y 84CONFIG_64BIT=y
66CONFIG_MMU=y 85CONFIG_MMU=y
86CONFIG_SWIOTLB=y
67CONFIG_RWSEM_XCHGADD_ALGORITHM=y 87CONFIG_RWSEM_XCHGADD_ALGORITHM=y
68CONFIG_GENERIC_CALIBRATE_DELAY=y 88CONFIG_GENERIC_CALIBRATE_DELAY=y
69CONFIG_TIME_INTERPOLATION=y 89CONFIG_TIME_INTERPOLATION=y
70CONFIG_EFI=y 90CONFIG_EFI=y
71CONFIG_GENERIC_IOMAP=y 91CONFIG_GENERIC_IOMAP=y
72CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y 92CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
93CONFIG_DMA_IS_DMA32=y
73CONFIG_IA64_GENERIC=y 94CONFIG_IA64_GENERIC=y
74# CONFIG_IA64_DIG is not set 95# CONFIG_IA64_DIG is not set
75# CONFIG_IA64_HP_ZX1 is not set 96# CONFIG_IA64_HP_ZX1 is not set
@@ -89,14 +110,10 @@ CONFIG_HZ_250=y
89# CONFIG_HZ_1000 is not set 110# CONFIG_HZ_1000 is not set
90CONFIG_HZ=250 111CONFIG_HZ=250
91CONFIG_IA64_L1_CACHE_SHIFT=7 112CONFIG_IA64_L1_CACHE_SHIFT=7
92CONFIG_NUMA=y
93CONFIG_VIRTUAL_MEM_MAP=y
94CONFIG_HOLES_IN_ZONE=y
95CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
96CONFIG_IA64_CYCLONE=y 113CONFIG_IA64_CYCLONE=y
97CONFIG_IOSAPIC=y 114CONFIG_IOSAPIC=y
98# CONFIG_IA64_SGI_SN_XP is not set 115# CONFIG_IA64_SGI_SN_XP is not set
99CONFIG_FORCE_MAX_ZONEORDER=18 116CONFIG_FORCE_MAX_ZONEORDER=17
100CONFIG_SMP=y 117CONFIG_SMP=y
101CONFIG_NR_CPUS=512 118CONFIG_NR_CPUS=512
102CONFIG_HOTPLUG_CPU=y 119CONFIG_HOTPLUG_CPU=y
@@ -110,19 +127,29 @@ CONFIG_DISCONTIGMEM=y
110CONFIG_FLAT_NODE_MEM_MAP=y 127CONFIG_FLAT_NODE_MEM_MAP=y
111CONFIG_NEED_MULTIPLE_NODES=y 128CONFIG_NEED_MULTIPLE_NODES=y
112# CONFIG_SPARSEMEM_STATIC is not set 129# CONFIG_SPARSEMEM_STATIC is not set
113CONFIG_HAVE_DEC_LOCK=y 130CONFIG_SPLIT_PTLOCK_CPUS=4
131CONFIG_MIGRATION=y
132CONFIG_ARCH_SELECT_MEMORY_MODEL=y
133CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
134CONFIG_ARCH_FLATMEM_ENABLE=y
135CONFIG_ARCH_SPARSEMEM_ENABLE=y
136CONFIG_ARCH_DISCONTIGMEM_DEFAULT=y
137CONFIG_NUMA=y
138CONFIG_VIRTUAL_MEM_MAP=y
139CONFIG_HOLES_IN_ZONE=y
140CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
114CONFIG_IA32_SUPPORT=y 141CONFIG_IA32_SUPPORT=y
115CONFIG_COMPAT=y 142CONFIG_COMPAT=y
116CONFIG_IA64_MCA_RECOVERY=y 143CONFIG_IA64_MCA_RECOVERY=y
117CONFIG_PERFMON=y 144CONFIG_PERFMON=y
118CONFIG_IA64_PALINFO=y 145CONFIG_IA64_PALINFO=y
146CONFIG_SGI_SN=y
119 147
120# 148#
121# Firmware Drivers 149# Firmware Drivers
122# 150#
123CONFIG_EFI_VARS=y 151CONFIG_EFI_VARS=y
124CONFIG_EFI_PCDP=y 152CONFIG_EFI_PCDP=y
125# CONFIG_DELL_RBU is not set
126CONFIG_BINFMT_ELF=y 153CONFIG_BINFMT_ELF=y
127CONFIG_BINFMT_MISC=m 154CONFIG_BINFMT_MISC=m
128 155
@@ -130,6 +157,7 @@ CONFIG_BINFMT_MISC=m
130# Power management and ACPI 157# Power management and ACPI
131# 158#
132CONFIG_PM=y 159CONFIG_PM=y
160CONFIG_PM_LEGACY=y
133# CONFIG_PM_DEBUG is not set 161# CONFIG_PM_DEBUG is not set
134 162
135# 163#
@@ -144,6 +172,7 @@ CONFIG_ACPI_THERMAL=m
144CONFIG_ACPI_NUMA=y 172CONFIG_ACPI_NUMA=y
145CONFIG_ACPI_BLACKLIST_YEAR=0 173CONFIG_ACPI_BLACKLIST_YEAR=0
146# CONFIG_ACPI_DEBUG is not set 174# CONFIG_ACPI_DEBUG is not set
175CONFIG_ACPI_EC=y
147CONFIG_ACPI_POWER=y 176CONFIG_ACPI_POWER=y
148CONFIG_ACPI_SYSTEM=y 177CONFIG_ACPI_SYSTEM=y
149CONFIG_ACPI_CONTAINER=m 178CONFIG_ACPI_CONTAINER=m
@@ -186,6 +215,7 @@ CONFIG_NET=y
186# 215#
187# Networking options 216# Networking options
188# 217#
218# CONFIG_NETDEBUG is not set
189CONFIG_PACKET=y 219CONFIG_PACKET=y
190# CONFIG_PACKET_MMAP is not set 220# CONFIG_PACKET_MMAP is not set
191CONFIG_UNIX=y 221CONFIG_UNIX=y
@@ -220,6 +250,11 @@ CONFIG_TCP_CONG_BIC=y
220# SCTP Configuration (EXPERIMENTAL) 250# SCTP Configuration (EXPERIMENTAL)
221# 251#
222# CONFIG_IP_SCTP is not set 252# CONFIG_IP_SCTP is not set
253
254#
255# TIPC Configuration (EXPERIMENTAL)
256#
257# CONFIG_TIPC is not set
223# CONFIG_ATM is not set 258# CONFIG_ATM is not set
224# CONFIG_BRIDGE is not set 259# CONFIG_BRIDGE is not set
225# CONFIG_VLAN_8021Q is not set 260# CONFIG_VLAN_8021Q is not set
@@ -232,14 +267,16 @@ CONFIG_TCP_CONG_BIC=y
232# CONFIG_NET_DIVERT is not set 267# CONFIG_NET_DIVERT is not set
233# CONFIG_ECONET is not set 268# CONFIG_ECONET is not set
234# CONFIG_WAN_ROUTER is not set 269# CONFIG_WAN_ROUTER is not set
270
271#
272# QoS and/or fair queueing
273#
235# CONFIG_NET_SCHED is not set 274# CONFIG_NET_SCHED is not set
236# CONFIG_NET_CLS_ROUTE is not set
237 275
238# 276#
239# Network testing 277# Network testing
240# 278#
241# CONFIG_NET_PKTGEN is not set 279# CONFIG_NET_PKTGEN is not set
242# CONFIG_NETFILTER_NETLINK is not set
243# CONFIG_HAMRADIO is not set 280# CONFIG_HAMRADIO is not set
244# CONFIG_IRDA is not set 281# CONFIG_IRDA is not set
245# CONFIG_BT is not set 282# CONFIG_BT is not set
@@ -301,20 +338,13 @@ CONFIG_BLK_DEV_RAM_COUNT=16
301CONFIG_BLK_DEV_RAM_SIZE=4096 338CONFIG_BLK_DEV_RAM_SIZE=4096
302CONFIG_BLK_DEV_INITRD=y 339CONFIG_BLK_DEV_INITRD=y
303# CONFIG_CDROM_PKTCDVD is not set 340# CONFIG_CDROM_PKTCDVD is not set
304
305#
306# IO Schedulers
307#
308CONFIG_IOSCHED_NOOP=y
309CONFIG_IOSCHED_AS=y
310CONFIG_IOSCHED_DEADLINE=y
311CONFIG_IOSCHED_CFQ=y
312# CONFIG_ATA_OVER_ETH is not set 341# CONFIG_ATA_OVER_ETH is not set
313 342
314# 343#
315# ATA/ATAPI/MFM/RLL support 344# ATA/ATAPI/MFM/RLL support
316# 345#
317CONFIG_IDE=y 346CONFIG_IDE=y
347CONFIG_IDE_MAX_HWIFS=4
318CONFIG_BLK_DEV_IDE=y 348CONFIG_BLK_DEV_IDE=y
319 349
320# 350#
@@ -407,6 +437,7 @@ CONFIG_SCSI_FC_ATTRS=y
407# 437#
408# SCSI low-level drivers 438# SCSI low-level drivers
409# 439#
440# CONFIG_ISCSI_TCP is not set
410# CONFIG_BLK_DEV_3W_XXXX_RAID is not set 441# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
411# CONFIG_SCSI_3W_9XXX is not set 442# CONFIG_SCSI_3W_9XXX is not set
412# CONFIG_SCSI_ACARD is not set 443# CONFIG_SCSI_ACARD is not set
@@ -416,16 +447,19 @@ CONFIG_SCSI_FC_ATTRS=y
416# CONFIG_SCSI_AIC79XX is not set 447# CONFIG_SCSI_AIC79XX is not set
417# CONFIG_MEGARAID_NEWGEN is not set 448# CONFIG_MEGARAID_NEWGEN is not set
418# CONFIG_MEGARAID_LEGACY is not set 449# CONFIG_MEGARAID_LEGACY is not set
450# CONFIG_MEGARAID_SAS is not set
419CONFIG_SCSI_SATA=y 451CONFIG_SCSI_SATA=y
420# CONFIG_SCSI_SATA_AHCI is not set 452# CONFIG_SCSI_SATA_AHCI is not set
421# CONFIG_SCSI_SATA_SVW is not set 453# CONFIG_SCSI_SATA_SVW is not set
422# CONFIG_SCSI_ATA_PIIX is not set 454# CONFIG_SCSI_ATA_PIIX is not set
423# CONFIG_SCSI_SATA_MV is not set 455# CONFIG_SCSI_SATA_MV is not set
424# CONFIG_SCSI_SATA_NV is not set 456# CONFIG_SCSI_SATA_NV is not set
425# CONFIG_SCSI_SATA_PROMISE is not set 457# CONFIG_SCSI_PDC_ADMA is not set
426# CONFIG_SCSI_SATA_QSTOR is not set 458# CONFIG_SCSI_SATA_QSTOR is not set
459# CONFIG_SCSI_SATA_PROMISE is not set
427# CONFIG_SCSI_SATA_SX4 is not set 460# CONFIG_SCSI_SATA_SX4 is not set
428# CONFIG_SCSI_SATA_SIL is not set 461# CONFIG_SCSI_SATA_SIL is not set
462# CONFIG_SCSI_SATA_SIL24 is not set
429# CONFIG_SCSI_SATA_SIS is not set 463# CONFIG_SCSI_SATA_SIS is not set
430# CONFIG_SCSI_SATA_ULI is not set 464# CONFIG_SCSI_SATA_ULI is not set
431# CONFIG_SCSI_SATA_VIA is not set 465# CONFIG_SCSI_SATA_VIA is not set
@@ -443,14 +477,7 @@ CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
443# CONFIG_SCSI_IPR is not set 477# CONFIG_SCSI_IPR is not set
444# CONFIG_SCSI_QLOGIC_FC is not set 478# CONFIG_SCSI_QLOGIC_FC is not set
445CONFIG_SCSI_QLOGIC_1280=y 479CONFIG_SCSI_QLOGIC_1280=y
446# CONFIG_SCSI_QLOGIC_1280_1040 is not set 480# CONFIG_SCSI_QLA_FC is not set
447CONFIG_SCSI_QLA2XXX=y
448CONFIG_SCSI_QLA21XX=m
449CONFIG_SCSI_QLA22XX=m
450CONFIG_SCSI_QLA2300=m
451CONFIG_SCSI_QLA2322=m
452# CONFIG_SCSI_QLA6312 is not set
453# CONFIG_SCSI_QLA24XX is not set
454# CONFIG_SCSI_LPFC is not set 481# CONFIG_SCSI_LPFC is not set
455# CONFIG_SCSI_DC395x is not set 482# CONFIG_SCSI_DC395x is not set
456# CONFIG_SCSI_DC390T is not set 483# CONFIG_SCSI_DC390T is not set
@@ -483,6 +510,7 @@ CONFIG_DM_MULTIPATH=m
483CONFIG_FUSION=y 510CONFIG_FUSION=y
484CONFIG_FUSION_SPI=y 511CONFIG_FUSION_SPI=y
485CONFIG_FUSION_FC=m 512CONFIG_FUSION_FC=m
513# CONFIG_FUSION_SAS is not set
486CONFIG_FUSION_MAX_SGE=128 514CONFIG_FUSION_MAX_SGE=128
487# CONFIG_FUSION_CTL is not set 515# CONFIG_FUSION_CTL is not set
488 516
@@ -523,6 +551,7 @@ CONFIG_NET_ETHERNET=y
523CONFIG_MII=m 551CONFIG_MII=m
524# CONFIG_HAPPYMEAL is not set 552# CONFIG_HAPPYMEAL is not set
525# CONFIG_SUNGEM is not set 553# CONFIG_SUNGEM is not set
554# CONFIG_CASSINI is not set
526# CONFIG_NET_VENDOR_3COM is not set 555# CONFIG_NET_VENDOR_3COM is not set
527 556
528# 557#
@@ -565,12 +594,14 @@ CONFIG_E100=m
565# CONFIG_DL2K is not set 594# CONFIG_DL2K is not set
566CONFIG_E1000=y 595CONFIG_E1000=y
567# CONFIG_E1000_NAPI is not set 596# CONFIG_E1000_NAPI is not set
597# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
568# CONFIG_NS83820 is not set 598# CONFIG_NS83820 is not set
569# CONFIG_HAMACHI is not set 599# CONFIG_HAMACHI is not set
570# CONFIG_YELLOWFIN is not set 600# CONFIG_YELLOWFIN is not set
571# CONFIG_R8169 is not set 601# CONFIG_R8169 is not set
572# CONFIG_SIS190 is not set 602# CONFIG_SIS190 is not set
573# CONFIG_SKGE is not set 603# CONFIG_SKGE is not set
604# CONFIG_SKY2 is not set
574# CONFIG_SK98LIN is not set 605# CONFIG_SK98LIN is not set
575# CONFIG_VIA_VELOCITY is not set 606# CONFIG_VIA_VELOCITY is not set
576CONFIG_TIGON3=y 607CONFIG_TIGON3=y
@@ -675,12 +706,15 @@ CONFIG_VT=y
675CONFIG_VT_CONSOLE=y 706CONFIG_VT_CONSOLE=y
676CONFIG_HW_CONSOLE=y 707CONFIG_HW_CONSOLE=y
677CONFIG_SERIAL_NONSTANDARD=y 708CONFIG_SERIAL_NONSTANDARD=y
709# CONFIG_COMPUTONE is not set
678# CONFIG_ROCKETPORT is not set 710# CONFIG_ROCKETPORT is not set
679# CONFIG_CYCLADES is not set 711# CONFIG_CYCLADES is not set
680# CONFIG_DIGIEPCA is not set 712# CONFIG_DIGIEPCA is not set
713# CONFIG_MOXA_INTELLIO is not set
681# CONFIG_MOXA_SMARTIO is not set 714# CONFIG_MOXA_SMARTIO is not set
682# CONFIG_ISI is not set 715# CONFIG_ISI is not set
683# CONFIG_SYNCLINKMP is not set 716# CONFIG_SYNCLINKMP is not set
717# CONFIG_SYNCLINK_GT is not set
684# CONFIG_N_HDLC is not set 718# CONFIG_N_HDLC is not set
685# CONFIG_SPECIALIX is not set 719# CONFIG_SPECIALIX is not set
686# CONFIG_SX is not set 720# CONFIG_SX is not set
@@ -696,6 +730,7 @@ CONFIG_SERIAL_8250=y
696CONFIG_SERIAL_8250_CONSOLE=y 730CONFIG_SERIAL_8250_CONSOLE=y
697CONFIG_SERIAL_8250_ACPI=y 731CONFIG_SERIAL_8250_ACPI=y
698CONFIG_SERIAL_8250_NR_UARTS=6 732CONFIG_SERIAL_8250_NR_UARTS=6
733CONFIG_SERIAL_8250_RUNTIME_UARTS=4
699CONFIG_SERIAL_8250_EXTENDED=y 734CONFIG_SERIAL_8250_EXTENDED=y
700CONFIG_SERIAL_8250_SHARE_IRQ=y 735CONFIG_SERIAL_8250_SHARE_IRQ=y
701# CONFIG_SERIAL_8250_DETECT_IRQ is not set 736# CONFIG_SERIAL_8250_DETECT_IRQ is not set
@@ -709,6 +744,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y
709CONFIG_SERIAL_SGI_L1_CONSOLE=y 744CONFIG_SERIAL_SGI_L1_CONSOLE=y
710# CONFIG_SERIAL_JSM is not set 745# CONFIG_SERIAL_JSM is not set
711CONFIG_SERIAL_SGI_IOC4=y 746CONFIG_SERIAL_SGI_IOC4=y
747# CONFIG_SERIAL_SGI_IOC3 is not set
712CONFIG_UNIX98_PTYS=y 748CONFIG_UNIX98_PTYS=y
713CONFIG_LEGACY_PTYS=y 749CONFIG_LEGACY_PTYS=y
714CONFIG_LEGACY_PTY_COUNT=256 750CONFIG_LEGACY_PTY_COUNT=256
@@ -744,10 +780,10 @@ CONFIG_DRM_SIS=m
744# CONFIG_DRM_VIA is not set 780# CONFIG_DRM_VIA is not set
745# CONFIG_DRM_SAVAGE is not set 781# CONFIG_DRM_SAVAGE is not set
746CONFIG_RAW_DRIVER=m 782CONFIG_RAW_DRIVER=m
783CONFIG_MAX_RAW_DEVS=256
747CONFIG_HPET=y 784CONFIG_HPET=y
748# CONFIG_HPET_RTC_IRQ is not set 785# CONFIG_HPET_RTC_IRQ is not set
749CONFIG_HPET_MMAP=y 786CONFIG_HPET_MMAP=y
750CONFIG_MAX_RAW_DEVS=256
751# CONFIG_HANGCHECK_TIMER is not set 787# CONFIG_HANGCHECK_TIMER is not set
752CONFIG_MMTIMER=y 788CONFIG_MMTIMER=y
753 789
@@ -755,6 +791,7 @@ CONFIG_MMTIMER=y
755# TPM devices 791# TPM devices
756# 792#
757# CONFIG_TCG_TPM is not set 793# CONFIG_TCG_TPM is not set
794# CONFIG_TELCLOCK is not set
758 795
759# 796#
760# I2C support 797# I2C support
@@ -762,6 +799,12 @@ CONFIG_MMTIMER=y
762# CONFIG_I2C is not set 799# CONFIG_I2C is not set
763 800
764# 801#
802# SPI support
803#
804# CONFIG_SPI is not set
805# CONFIG_SPI_MASTER is not set
806
807#
765# Dallas's 1-wire bus 808# Dallas's 1-wire bus
766# 809#
767# CONFIG_W1 is not set 810# CONFIG_W1 is not set
@@ -771,6 +814,7 @@ CONFIG_MMTIMER=y
771# 814#
772CONFIG_HWMON=y 815CONFIG_HWMON=y
773# CONFIG_HWMON_VID is not set 816# CONFIG_HWMON_VID is not set
817# CONFIG_SENSORS_F71805F is not set
774# CONFIG_HWMON_DEBUG_CHIP is not set 818# CONFIG_HWMON_DEBUG_CHIP is not set
775 819
776# 820#
@@ -821,26 +865,28 @@ CONFIG_SND_OSSEMUL=y
821CONFIG_SND_MIXER_OSS=m 865CONFIG_SND_MIXER_OSS=m
822CONFIG_SND_PCM_OSS=m 866CONFIG_SND_PCM_OSS=m
823CONFIG_SND_SEQUENCER_OSS=y 867CONFIG_SND_SEQUENCER_OSS=y
868# CONFIG_SND_DYNAMIC_MINORS is not set
869CONFIG_SND_SUPPORT_OLD_API=y
824CONFIG_SND_VERBOSE_PRINTK=y 870CONFIG_SND_VERBOSE_PRINTK=y
825# CONFIG_SND_DEBUG is not set 871# CONFIG_SND_DEBUG is not set
826CONFIG_SND_GENERIC_DRIVER=y
827 872
828# 873#
829# Generic devices 874# Generic devices
830# 875#
831CONFIG_SND_MPU401_UART=m 876CONFIG_SND_MPU401_UART=m
832CONFIG_SND_OPL3_LIB=m 877CONFIG_SND_OPL3_LIB=m
878CONFIG_SND_AC97_CODEC=m
879CONFIG_SND_AC97_BUS=m
833CONFIG_SND_DUMMY=m 880CONFIG_SND_DUMMY=m
834CONFIG_SND_VIRMIDI=m 881CONFIG_SND_VIRMIDI=m
835CONFIG_SND_MTPAV=m 882CONFIG_SND_MTPAV=m
836CONFIG_SND_SERIAL_U16550=m 883CONFIG_SND_SERIAL_U16550=m
837CONFIG_SND_MPU401=m 884CONFIG_SND_MPU401=m
838CONFIG_SND_AC97_CODEC=m
839CONFIG_SND_AC97_BUS=m
840 885
841# 886#
842# PCI devices 887# PCI devices
843# 888#
889# CONFIG_SND_AD1889 is not set
844# CONFIG_SND_ALI5451 is not set 890# CONFIG_SND_ALI5451 is not set
845# CONFIG_SND_ATIIXP is not set 891# CONFIG_SND_ATIIXP is not set
846# CONFIG_SND_ATIIXP_MODEM is not set 892# CONFIG_SND_ATIIXP_MODEM is not set
@@ -849,40 +895,40 @@ CONFIG_SND_AC97_BUS=m
849# CONFIG_SND_AU8830 is not set 895# CONFIG_SND_AU8830 is not set
850# CONFIG_SND_AZT3328 is not set 896# CONFIG_SND_AZT3328 is not set
851# CONFIG_SND_BT87X is not set 897# CONFIG_SND_BT87X is not set
898# CONFIG_SND_CA0106 is not set
899# CONFIG_SND_CMIPCI is not set
900CONFIG_SND_CS4281=m
852CONFIG_SND_CS46XX=m 901CONFIG_SND_CS46XX=m
853CONFIG_SND_CS46XX_NEW_DSP=y 902CONFIG_SND_CS46XX_NEW_DSP=y
854CONFIG_SND_CS4281=m
855CONFIG_SND_EMU10K1=m 903CONFIG_SND_EMU10K1=m
856# CONFIG_SND_EMU10K1X is not set 904# CONFIG_SND_EMU10K1X is not set
857# CONFIG_SND_CA0106 is not set
858# CONFIG_SND_KORG1212 is not set
859# CONFIG_SND_MIXART is not set
860# CONFIG_SND_NM256 is not set
861# CONFIG_SND_RME32 is not set
862# CONFIG_SND_RME96 is not set
863# CONFIG_SND_RME9652 is not set
864# CONFIG_SND_HDSP is not set
865# CONFIG_SND_HDSPM is not set
866# CONFIG_SND_TRIDENT is not set
867# CONFIG_SND_YMFPCI is not set
868# CONFIG_SND_AD1889 is not set
869# CONFIG_SND_CMIPCI is not set
870# CONFIG_SND_ENS1370 is not set 905# CONFIG_SND_ENS1370 is not set
871# CONFIG_SND_ENS1371 is not set 906# CONFIG_SND_ENS1371 is not set
872# CONFIG_SND_ES1938 is not set 907# CONFIG_SND_ES1938 is not set
873# CONFIG_SND_ES1968 is not set 908# CONFIG_SND_ES1968 is not set
874# CONFIG_SND_MAESTRO3 is not set
875CONFIG_SND_FM801=m 909CONFIG_SND_FM801=m
876# CONFIG_SND_FM801_TEA575X is not set 910# CONFIG_SND_FM801_TEA575X is not set
911# CONFIG_SND_HDA_INTEL is not set
912# CONFIG_SND_HDSP is not set
913# CONFIG_SND_HDSPM is not set
877# CONFIG_SND_ICE1712 is not set 914# CONFIG_SND_ICE1712 is not set
878# CONFIG_SND_ICE1724 is not set 915# CONFIG_SND_ICE1724 is not set
879# CONFIG_SND_INTEL8X0 is not set 916# CONFIG_SND_INTEL8X0 is not set
880# CONFIG_SND_INTEL8X0M is not set 917# CONFIG_SND_INTEL8X0M is not set
918# CONFIG_SND_KORG1212 is not set
919# CONFIG_SND_MAESTRO3 is not set
920# CONFIG_SND_MIXART is not set
921# CONFIG_SND_NM256 is not set
922# CONFIG_SND_PCXHR is not set
923# CONFIG_SND_RME32 is not set
924# CONFIG_SND_RME96 is not set
925# CONFIG_SND_RME9652 is not set
881# CONFIG_SND_SONICVIBES is not set 926# CONFIG_SND_SONICVIBES is not set
927# CONFIG_SND_TRIDENT is not set
882# CONFIG_SND_VIA82XX is not set 928# CONFIG_SND_VIA82XX is not set
883# CONFIG_SND_VIA82XX_MODEM is not set 929# CONFIG_SND_VIA82XX_MODEM is not set
884# CONFIG_SND_VX222 is not set 930# CONFIG_SND_VX222 is not set
885# CONFIG_SND_HDA_INTEL is not set 931# CONFIG_SND_YMFPCI is not set
886 932
887# 933#
888# USB devices 934# USB devices
@@ -928,12 +974,15 @@ CONFIG_USB_UHCI_HCD=m
928# USB Device Class drivers 974# USB Device Class drivers
929# 975#
930# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set 976# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
931# CONFIG_USB_BLUETOOTH_TTY is not set
932# CONFIG_USB_ACM is not set 977# CONFIG_USB_ACM is not set
933# CONFIG_USB_PRINTER is not set 978# CONFIG_USB_PRINTER is not set
934 979
935# 980#
936# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information 981# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
982#
983
984#
985# may also be needed; see USB_STORAGE Help for more information
937# 986#
938CONFIG_USB_STORAGE=m 987CONFIG_USB_STORAGE=m
939# CONFIG_USB_STORAGE_DEBUG is not set 988# CONFIG_USB_STORAGE_DEBUG is not set
@@ -945,12 +994,15 @@ CONFIG_USB_STORAGE=m
945# CONFIG_USB_STORAGE_SDDR09 is not set 994# CONFIG_USB_STORAGE_SDDR09 is not set
946# CONFIG_USB_STORAGE_SDDR55 is not set 995# CONFIG_USB_STORAGE_SDDR55 is not set
947# CONFIG_USB_STORAGE_JUMPSHOT is not set 996# CONFIG_USB_STORAGE_JUMPSHOT is not set
997# CONFIG_USB_STORAGE_ALAUDA is not set
998# CONFIG_USB_LIBUSUAL is not set
948 999
949# 1000#
950# USB Input Devices 1001# USB Input Devices
951# 1002#
952CONFIG_USB_HID=m 1003CONFIG_USB_HID=m
953CONFIG_USB_HIDINPUT=y 1004CONFIG_USB_HIDINPUT=y
1005# CONFIG_USB_HIDINPUT_POWERBOOK is not set
954# CONFIG_HID_FF is not set 1006# CONFIG_HID_FF is not set
955# CONFIG_USB_HIDDEV is not set 1007# CONFIG_USB_HIDDEV is not set
956 1008
@@ -970,6 +1022,7 @@ CONFIG_USB_HIDINPUT=y
970# CONFIG_USB_YEALINK is not set 1022# CONFIG_USB_YEALINK is not set
971# CONFIG_USB_XPAD is not set 1023# CONFIG_USB_XPAD is not set
972# CONFIG_USB_ATI_REMOTE is not set 1024# CONFIG_USB_ATI_REMOTE is not set
1025# CONFIG_USB_ATI_REMOTE2 is not set
973# CONFIG_USB_KEYSPAN_REMOTE is not set 1026# CONFIG_USB_KEYSPAN_REMOTE is not set
974# CONFIG_USB_APPLETOUCH is not set 1027# CONFIG_USB_APPLETOUCH is not set
975 1028
@@ -1049,11 +1102,17 @@ CONFIG_INFINIBAND_MTHCA=m
1049# CONFIG_INFINIBAND_MTHCA_DEBUG is not set 1102# CONFIG_INFINIBAND_MTHCA_DEBUG is not set
1050CONFIG_INFINIBAND_IPOIB=m 1103CONFIG_INFINIBAND_IPOIB=m
1051# CONFIG_INFINIBAND_IPOIB_DEBUG is not set 1104# CONFIG_INFINIBAND_IPOIB_DEBUG is not set
1105# CONFIG_INFINIBAND_SRP is not set
1052 1106
1053# 1107#
1054# SN Devices 1108# SN Devices
1055# 1109#
1056CONFIG_SGI_IOC4=y 1110CONFIG_SGI_IOC4=y
1111CONFIG_SGI_IOC3=m
1112
1113#
1114# EDAC - error detection and reporting (RAS)
1115#
1057 1116
1058# 1117#
1059# File systems 1118# File systems
@@ -1084,6 +1143,7 @@ CONFIG_XFS_EXPORT=y
1084# CONFIG_XFS_SECURITY is not set 1143# CONFIG_XFS_SECURITY is not set
1085# CONFIG_XFS_POSIX_ACL is not set 1144# CONFIG_XFS_POSIX_ACL is not set
1086# CONFIG_XFS_RT is not set 1145# CONFIG_XFS_RT is not set
1146# CONFIG_OCFS2_FS is not set
1087# CONFIG_MINIX_FS is not set 1147# CONFIG_MINIX_FS is not set
1088# CONFIG_ROMFS_FS is not set 1148# CONFIG_ROMFS_FS is not set
1089CONFIG_INOTIFY=y 1149CONFIG_INOTIFY=y
@@ -1125,6 +1185,7 @@ CONFIG_HUGETLBFS=y
1125CONFIG_HUGETLB_PAGE=y 1185CONFIG_HUGETLB_PAGE=y
1126CONFIG_RAMFS=y 1186CONFIG_RAMFS=y
1127# CONFIG_RELAYFS_FS is not set 1187# CONFIG_RELAYFS_FS is not set
1188# CONFIG_CONFIGFS_FS is not set
1128 1189
1129# 1190#
1130# Miscellaneous filesystems 1191# Miscellaneous filesystems
@@ -1194,6 +1255,7 @@ CONFIG_MSDOS_PARTITION=y
1194CONFIG_SGI_PARTITION=y 1255CONFIG_SGI_PARTITION=y
1195# CONFIG_ULTRIX_PARTITION is not set 1256# CONFIG_ULTRIX_PARTITION is not set
1196# CONFIG_SUN_PARTITION is not set 1257# CONFIG_SUN_PARTITION is not set
1258# CONFIG_KARMA_PARTITION is not set
1197CONFIG_EFI_PARTITION=y 1259CONFIG_EFI_PARTITION=y
1198 1260
1199# 1261#
@@ -1259,26 +1321,30 @@ CONFIG_GENERIC_PENDING_IRQ=y
1259# CONFIG_HP_SIMSCSI is not set 1321# CONFIG_HP_SIMSCSI is not set
1260 1322
1261# 1323#
1262# Profiling support 1324# Instrumentation Support
1263# 1325#
1264# CONFIG_PROFILING is not set 1326# CONFIG_PROFILING is not set
1327# CONFIG_KPROBES is not set
1265 1328
1266# 1329#
1267# Kernel hacking 1330# Kernel hacking
1268# 1331#
1269# CONFIG_PRINTK_TIME is not set 1332# CONFIG_PRINTK_TIME is not set
1270CONFIG_DEBUG_KERNEL=y
1271CONFIG_MAGIC_SYSRQ=y 1333CONFIG_MAGIC_SYSRQ=y
1334CONFIG_DEBUG_KERNEL=y
1272CONFIG_LOG_BUF_SHIFT=20 1335CONFIG_LOG_BUF_SHIFT=20
1273CONFIG_DETECT_SOFTLOCKUP=y 1336CONFIG_DETECT_SOFTLOCKUP=y
1274# CONFIG_SCHEDSTATS is not set 1337# CONFIG_SCHEDSTATS is not set
1275# CONFIG_DEBUG_SLAB is not set 1338# CONFIG_DEBUG_SLAB is not set
1339CONFIG_DEBUG_MUTEXES=y
1276# CONFIG_DEBUG_SPINLOCK is not set 1340# CONFIG_DEBUG_SPINLOCK is not set
1277# CONFIG_DEBUG_SPINLOCK_SLEEP is not set 1341# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
1278# CONFIG_DEBUG_KOBJECT is not set 1342# CONFIG_DEBUG_KOBJECT is not set
1279# CONFIG_DEBUG_INFO is not set 1343# CONFIG_DEBUG_INFO is not set
1280# CONFIG_DEBUG_FS is not set 1344# CONFIG_DEBUG_FS is not set
1281# CONFIG_KPROBES is not set 1345# CONFIG_DEBUG_VM is not set
1346CONFIG_FORCED_INLINING=y
1347# CONFIG_RCU_TORTURE_TEST is not set
1282CONFIG_IA64_GRANULE_16MB=y 1348CONFIG_IA64_GRANULE_16MB=y
1283# CONFIG_IA64_GRANULE_64MB is not set 1349# CONFIG_IA64_GRANULE_64MB is not set
1284# CONFIG_IA64_PRINT_HAZARDS is not set 1350# CONFIG_IA64_PRINT_HAZARDS is not set
diff --git a/arch/ia64/dig/setup.c b/arch/ia64/dig/setup.c
index d58003f1ad02..c9104bfff667 100644
--- a/arch/ia64/dig/setup.c
+++ b/arch/ia64/dig/setup.c
@@ -25,16 +25,6 @@
25#include <asm/machvec.h> 25#include <asm/machvec.h>
26#include <asm/system.h> 26#include <asm/system.h>
27 27
28/*
29 * This is here so we can use the CMOS detection in ide-probe.c to
30 * determine what drives are present. In theory, we don't need this
31 * as the auto-detection could be done via ide-probe.c:do_probe() but
32 * in practice that would be much slower, which is painful when
33 * running in the simulator. Note that passing zeroes in DRIVE_INFO
34 * is sufficient (the IDE driver will autodetect the drive geometry).
35 */
36char drive_info[4*16];
37
38void __init 28void __init
39dig_setup (char **cmdline_p) 29dig_setup (char **cmdline_p)
40{ 30{
diff --git a/arch/ia64/hp/sim/simserial.c b/arch/ia64/hp/sim/simserial.c
index 19ee635eeb70..626cdc83668b 100644
--- a/arch/ia64/hp/sim/simserial.c
+++ b/arch/ia64/hp/sim/simserial.c
@@ -26,6 +26,7 @@
26#include <linux/fcntl.h> 26#include <linux/fcntl.h>
27#include <linux/mm.h> 27#include <linux/mm.h>
28#include <linux/slab.h> 28#include <linux/slab.h>
29#include <linux/capability.h>
29#include <linux/console.h> 30#include <linux/console.h>
30#include <linux/module.h> 31#include <linux/module.h>
31#include <linux/serial.h> 32#include <linux/serial.h>
@@ -107,7 +108,6 @@ static struct async_struct *IRQ_ports[NR_IRQS];
107static struct console *console; 108static struct console *console;
108 109
109static unsigned char *tmp_buf; 110static unsigned char *tmp_buf;
110static DECLARE_MUTEX(tmp_buf_sem);
111 111
112extern struct console *console_drivers; /* from kernel/printk.c */ 112extern struct console *console_drivers; /* from kernel/printk.c */
113 113
@@ -166,15 +166,9 @@ static void receive_chars(struct tty_struct *tty, struct pt_regs *regs)
166 } 166 }
167 } 167 }
168 seen_esc = 0; 168 seen_esc = 0;
169 if (tty->flip.count >= TTY_FLIPBUF_SIZE) break;
170 169
171 *tty->flip.char_buf_ptr = ch; 170 if (tty_insert_flip_char(tty, ch, TTY_NORMAL) == 0)
172 171 break;
173 *tty->flip.flag_buf_ptr = 0;
174
175 tty->flip.flag_buf_ptr++;
176 tty->flip.char_buf_ptr++;
177 tty->flip.count++;
178 } 172 }
179 tty_flip_buffer_push(tty); 173 tty_flip_buffer_push(tty);
180} 174}
diff --git a/arch/ia64/ia32/Makefile b/arch/ia64/ia32/Makefile
index 2ed90da81166..61cb60affd95 100644
--- a/arch/ia64/ia32/Makefile
+++ b/arch/ia64/ia32/Makefile
@@ -2,11 +2,9 @@
2# Makefile for the ia32 kernel emulation subsystem. 2# Makefile for the ia32 kernel emulation subsystem.
3# 3#
4 4
5obj-y := ia32_entry.o sys_ia32.o ia32_ioctl.o ia32_signal.o \ 5obj-y := ia32_entry.o sys_ia32.o ia32_signal.o \
6 ia32_support.o ia32_traps.o binfmt_elf32.o ia32_ldt.o 6 ia32_support.o ia32_traps.o binfmt_elf32.o ia32_ldt.o
7 7
8CFLAGS_ia32_ioctl.o += -Ifs/
9
10# Don't let GCC uses f16-f31 so that save_ia32_fpstate_live() and 8# Don't let GCC uses f16-f31 so that save_ia32_fpstate_live() and
11# restore_ia32_fpstate_live() can be sure the live register contain user-level state. 9# restore_ia32_fpstate_live() can be sure the live register contain user-level state.
12CFLAGS_ia32_signal.o += -mfixed-range=f16-f31 10CFLAGS_ia32_signal.o += -mfixed-range=f16-f31
diff --git a/arch/ia64/ia32/elfcore32.h b/arch/ia64/ia32/elfcore32.h
index b73b8b6b10c1..a47f63b204fb 100644
--- a/arch/ia64/ia32/elfcore32.h
+++ b/arch/ia64/ia32/elfcore32.h
@@ -95,8 +95,7 @@ static inline void elf_core_copy_regs(elf_gregset_t *elfregs,
95static inline int elf_core_copy_task_regs(struct task_struct *t, 95static inline int elf_core_copy_task_regs(struct task_struct *t,
96 elf_gregset_t* elfregs) 96 elf_gregset_t* elfregs)
97{ 97{
98 struct pt_regs *pp = ia64_task_regs(t); 98 ELF_CORE_COPY_REGS((*elfregs), task_pt_regs(t));
99 ELF_CORE_COPY_REGS((*elfregs), pp);
100 return 1; 99 return 1;
101} 100}
102 101
diff --git a/arch/ia64/ia32/ia32_entry.S b/arch/ia64/ia32/ia32_entry.S
index 494fad6bf376..95fe04400f6b 100644
--- a/arch/ia64/ia32/ia32_entry.S
+++ b/arch/ia64/ia32/ia32_entry.S
@@ -469,7 +469,7 @@ ia32_syscall_table:
469 data8 sys32_epoll_wait 469 data8 sys32_epoll_wait
470 data8 sys_remap_file_pages 470 data8 sys_remap_file_pages
471 data8 sys_set_tid_address 471 data8 sys_set_tid_address
472 data8 sys32_timer_create 472 data8 compat_sys_timer_create
473 data8 compat_sys_timer_settime /* 260 */ 473 data8 compat_sys_timer_settime /* 260 */
474 data8 compat_sys_timer_gettime 474 data8 compat_sys_timer_gettime
475 data8 sys_timer_getoverrun 475 data8 sys_timer_getoverrun
diff --git a/arch/ia64/ia32/ia32_ioctl.c b/arch/ia64/ia32/ia32_ioctl.c
deleted file mode 100644
index 88739394f6df..000000000000
--- a/arch/ia64/ia32/ia32_ioctl.c
+++ /dev/null
@@ -1,45 +0,0 @@
1/*
2 * IA32 Architecture-specific ioctl shim code
3 *
4 * Copyright (C) 2000 VA Linux Co
5 * Copyright (C) 2000 Don Dugger <n0ano@valinux.com>
6 * Copyright (C) 2001-2003 Hewlett-Packard Co
7 * David Mosberger-Tang <davidm@hpl.hp.com>
8 */
9
10#include <linux/signal.h> /* argh, msdos_fs.h isn't self-contained... */
11#include <linux/syscalls.h>
12#include "ia32priv.h"
13
14#define INCLUDES
15#include "compat_ioctl.c"
16
17#define IOCTL_NR(a) ((a) & ~(_IOC_SIZEMASK << _IOC_SIZESHIFT))
18
19#define DO_IOCTL(fd, cmd, arg) ({ \
20 int _ret; \
21 mm_segment_t _old_fs = get_fs(); \
22 \
23 set_fs(KERNEL_DS); \
24 _ret = sys_ioctl(fd, cmd, (unsigned long)arg); \
25 set_fs(_old_fs); \
26 _ret; \
27})
28
29#define CODE
30#include "compat_ioctl.c"
31
32#define COMPATIBLE_IOCTL(cmd) HANDLE_IOCTL((cmd),sys_ioctl)
33#define HANDLE_IOCTL(cmd,handler) { (cmd), (ioctl_trans_handler_t)(handler), NULL },
34#define IOCTL_TABLE_START \
35 struct ioctl_trans ioctl_start[] = {
36#define IOCTL_TABLE_END \
37 };
38
39IOCTL_TABLE_START
40#define DECLARES
41#include "compat_ioctl.c"
42#include <linux/compat_ioctl.h>
43IOCTL_TABLE_END
44
45int ioctl_table_size = ARRAY_SIZE(ioctl_start);
diff --git a/arch/ia64/ia32/ia32_signal.c b/arch/ia64/ia32/ia32_signal.c
index aa891c9bc9b6..b3355a9ca2c3 100644
--- a/arch/ia64/ia32/ia32_signal.c
+++ b/arch/ia64/ia32/ia32_signal.c
@@ -255,7 +255,7 @@ save_ia32_fpstate_live (struct _fpstate_ia32 __user *save)
255 */ 255 */
256 fp_tos = (fsr>>11)&0x7; 256 fp_tos = (fsr>>11)&0x7;
257 fr8_st_map = (8-fp_tos)&0x7; 257 fr8_st_map = (8-fp_tos)&0x7;
258 ptp = ia64_task_regs(tsk); 258 ptp = task_pt_regs(tsk);
259 fpregp = (struct _fpreg_ia32 *)(((unsigned long)buf + 15) & ~15); 259 fpregp = (struct _fpreg_ia32 *)(((unsigned long)buf + 15) & ~15);
260 ia64f2ia32f(fpregp, &ptp->f8); 260 ia64f2ia32f(fpregp, &ptp->f8);
261 copy_to_user(&save->_st[(0+fr8_st_map)&0x7], fpregp, sizeof(struct _fpreg_ia32)); 261 copy_to_user(&save->_st[(0+fr8_st_map)&0x7], fpregp, sizeof(struct _fpreg_ia32));
@@ -389,7 +389,7 @@ restore_ia32_fpstate_live (struct _fpstate_ia32 __user *save)
389 fr8_st_map = (8-fp_tos)&0x7; 389 fr8_st_map = (8-fp_tos)&0x7;
390 fpregp = (struct _fpreg_ia32 *)(((unsigned long)buf + 15) & ~15); 390 fpregp = (struct _fpreg_ia32 *)(((unsigned long)buf + 15) & ~15);
391 391
392 ptp = ia64_task_regs(tsk); 392 ptp = task_pt_regs(tsk);
393 copy_from_user(fpregp, &save->_st[(0+fr8_st_map)&0x7], sizeof(struct _fpreg_ia32)); 393 copy_from_user(fpregp, &save->_st[(0+fr8_st_map)&0x7], sizeof(struct _fpreg_ia32));
394 ia32f2ia64f(&ptp->f8, fpregp); 394 ia32f2ia64f(&ptp->f8, fpregp);
395 copy_from_user(fpregp, &save->_st[(1+fr8_st_map)&0x7], sizeof(struct _fpreg_ia32)); 395 copy_from_user(fpregp, &save->_st[(1+fr8_st_map)&0x7], sizeof(struct _fpreg_ia32));
@@ -515,6 +515,7 @@ sys32_signal (int sig, unsigned int handler)
515 515
516 sigact_set_handler(&new_sa, handler, 0); 516 sigact_set_handler(&new_sa, handler, 0);
517 new_sa.sa.sa_flags = SA_ONESHOT | SA_NOMASK; 517 new_sa.sa.sa_flags = SA_ONESHOT | SA_NOMASK;
518 sigemptyset(&new_sa.sa.sa_mask);
518 519
519 ret = do_sigaction(sig, &new_sa, &old_sa); 520 ret = do_sigaction(sig, &new_sa, &old_sa);
520 521
diff --git a/arch/ia64/ia32/ia32_support.c b/arch/ia64/ia32/ia32_support.c
index 4f630043b3ae..c187743965a0 100644
--- a/arch/ia64/ia32/ia32_support.c
+++ b/arch/ia64/ia32/ia32_support.c
@@ -58,7 +58,7 @@ load_desc (u16 selector)
58void 58void
59ia32_load_segment_descriptors (struct task_struct *task) 59ia32_load_segment_descriptors (struct task_struct *task)
60{ 60{
61 struct pt_regs *regs = ia64_task_regs(task); 61 struct pt_regs *regs = task_pt_regs(task);
62 62
63 /* Setup the segment descriptors */ 63 /* Setup the segment descriptors */
64 regs->r24 = load_desc(regs->r16 >> 16); /* ESD */ 64 regs->r24 = load_desc(regs->r16 >> 16); /* ESD */
@@ -113,7 +113,7 @@ void
113ia32_load_state (struct task_struct *t) 113ia32_load_state (struct task_struct *t)
114{ 114{
115 unsigned long eflag, fsr, fcr, fir, fdr, tssd; 115 unsigned long eflag, fsr, fcr, fir, fdr, tssd;
116 struct pt_regs *regs = ia64_task_regs(t); 116 struct pt_regs *regs = task_pt_regs(t);
117 117
118 eflag = t->thread.eflag; 118 eflag = t->thread.eflag;
119 fsr = t->thread.fsr; 119 fsr = t->thread.fsr;
diff --git a/arch/ia64/ia32/sys_ia32.c b/arch/ia64/ia32/sys_ia32.c
index dc282710421a..70dba1f0e2ee 100644
--- a/arch/ia64/ia32/sys_ia32.c
+++ b/arch/ia64/ia32/sys_ia32.c
@@ -48,12 +48,13 @@
48#include <linux/ptrace.h> 48#include <linux/ptrace.h>
49#include <linux/stat.h> 49#include <linux/stat.h>
50#include <linux/ipc.h> 50#include <linux/ipc.h>
51#include <linux/capability.h>
51#include <linux/compat.h> 52#include <linux/compat.h>
52#include <linux/vfs.h> 53#include <linux/vfs.h>
53#include <linux/mman.h> 54#include <linux/mman.h>
55#include <linux/mutex.h>
54 56
55#include <asm/intrinsics.h> 57#include <asm/intrinsics.h>
56#include <asm/semaphore.h>
57#include <asm/types.h> 58#include <asm/types.h>
58#include <asm/uaccess.h> 59#include <asm/uaccess.h>
59#include <asm/unistd.h> 60#include <asm/unistd.h>
@@ -85,7 +86,7 @@
85 * while doing so. 86 * while doing so.
86 */ 87 */
87/* XXX make per-mm: */ 88/* XXX make per-mm: */
88static DECLARE_MUTEX(ia32_mmap_sem); 89static DEFINE_MUTEX(ia32_mmap_mutex);
89 90
90asmlinkage long 91asmlinkage long
91sys32_execve (char __user *name, compat_uptr_t __user *argv, compat_uptr_t __user *envp, 92sys32_execve (char __user *name, compat_uptr_t __user *argv, compat_uptr_t __user *envp,
@@ -894,11 +895,11 @@ ia32_do_mmap (struct file *file, unsigned long addr, unsigned long len, int prot
894 prot = get_prot32(prot); 895 prot = get_prot32(prot);
895 896
896#if PAGE_SHIFT > IA32_PAGE_SHIFT 897#if PAGE_SHIFT > IA32_PAGE_SHIFT
897 down(&ia32_mmap_sem); 898 mutex_lock(&ia32_mmap_mutex);
898 { 899 {
899 addr = emulate_mmap(file, addr, len, prot, flags, offset); 900 addr = emulate_mmap(file, addr, len, prot, flags, offset);
900 } 901 }
901 up(&ia32_mmap_sem); 902 mutex_unlock(&ia32_mmap_mutex);
902#else 903#else
903 down_write(&current->mm->mmap_sem); 904 down_write(&current->mm->mmap_sem);
904 { 905 {
@@ -999,11 +1000,9 @@ sys32_munmap (unsigned int start, unsigned int len)
999 if (start >= end) 1000 if (start >= end)
1000 return 0; 1001 return 0;
1001 1002
1002 down(&ia32_mmap_sem); 1003 mutex_lock(&ia32_mmap_mutex);
1003 { 1004 ret = sys_munmap(start, end - start);
1004 ret = sys_munmap(start, end - start); 1005 mutex_unlock(&ia32_mmap_mutex);
1005 }
1006 up(&ia32_mmap_sem);
1007#endif 1006#endif
1008 return ret; 1007 return ret;
1009} 1008}
@@ -1055,7 +1054,7 @@ sys32_mprotect (unsigned int start, unsigned int len, int prot)
1055 if (retval < 0) 1054 if (retval < 0)
1056 return retval; 1055 return retval;
1057 1056
1058 down(&ia32_mmap_sem); 1057 mutex_lock(&ia32_mmap_mutex);
1059 { 1058 {
1060 if (offset_in_page(start)) { 1059 if (offset_in_page(start)) {
1061 /* start address is 4KB aligned but not page aligned. */ 1060 /* start address is 4KB aligned but not page aligned. */
@@ -1079,7 +1078,7 @@ sys32_mprotect (unsigned int start, unsigned int len, int prot)
1079 retval = sys_mprotect(start, end - start, prot); 1078 retval = sys_mprotect(start, end - start, prot);
1080 } 1079 }
1081 out: 1080 out:
1082 up(&ia32_mmap_sem); 1081 mutex_unlock(&ia32_mmap_mutex);
1083 return retval; 1082 return retval;
1084#endif 1083#endif
1085} 1084}
@@ -1123,11 +1122,9 @@ sys32_mremap (unsigned int addr, unsigned int old_len, unsigned int new_len,
1123 old_len = PAGE_ALIGN(old_end) - addr; 1122 old_len = PAGE_ALIGN(old_end) - addr;
1124 new_len = PAGE_ALIGN(new_end) - addr; 1123 new_len = PAGE_ALIGN(new_end) - addr;
1125 1124
1126 down(&ia32_mmap_sem); 1125 mutex_lock(&ia32_mmap_mutex);
1127 { 1126 ret = sys_mremap(addr, old_len, new_len, flags, new_addr);
1128 ret = sys_mremap(addr, old_len, new_len, flags, new_addr); 1127 mutex_unlock(&ia32_mmap_mutex);
1129 }
1130 up(&ia32_mmap_sem);
1131 1128
1132 if ((ret >= 0) && (old_len < new_len)) { 1129 if ((ret >= 0) && (old_len < new_len)) {
1133 /* mremap expanded successfully */ 1130 /* mremap expanded successfully */
@@ -1481,7 +1478,7 @@ getreg (struct task_struct *child, int regno)
1481{ 1478{
1482 struct pt_regs *child_regs; 1479 struct pt_regs *child_regs;
1483 1480
1484 child_regs = ia64_task_regs(child); 1481 child_regs = task_pt_regs(child);
1485 switch (regno / sizeof(int)) { 1482 switch (regno / sizeof(int)) {
1486 case PT_EBX: return child_regs->r11; 1483 case PT_EBX: return child_regs->r11;
1487 case PT_ECX: return child_regs->r9; 1484 case PT_ECX: return child_regs->r9;
@@ -1509,7 +1506,7 @@ putreg (struct task_struct *child, int regno, unsigned int value)
1509{ 1506{
1510 struct pt_regs *child_regs; 1507 struct pt_regs *child_regs;
1511 1508
1512 child_regs = ia64_task_regs(child); 1509 child_regs = task_pt_regs(child);
1513 switch (regno / sizeof(int)) { 1510 switch (regno / sizeof(int)) {
1514 case PT_EBX: child_regs->r11 = value; break; 1511 case PT_EBX: child_regs->r11 = value; break;
1515 case PT_ECX: child_regs->r9 = value; break; 1512 case PT_ECX: child_regs->r9 = value; break;
@@ -1625,7 +1622,7 @@ save_ia32_fpstate (struct task_struct *tsk, struct ia32_user_i387_struct __user
1625 * Stack frames start with 16-bytes of temp space 1622 * Stack frames start with 16-bytes of temp space
1626 */ 1623 */
1627 swp = (struct switch_stack *)(tsk->thread.ksp + 16); 1624 swp = (struct switch_stack *)(tsk->thread.ksp + 16);
1628 ptp = ia64_task_regs(tsk); 1625 ptp = task_pt_regs(tsk);
1629 tos = (tsk->thread.fsr >> 11) & 7; 1626 tos = (tsk->thread.fsr >> 11) & 7;
1630 for (i = 0; i < 8; i++) 1627 for (i = 0; i < 8; i++)
1631 put_fpreg(i, &save->st_space[i], ptp, swp, tos); 1628 put_fpreg(i, &save->st_space[i], ptp, swp, tos);
@@ -1658,7 +1655,7 @@ restore_ia32_fpstate (struct task_struct *tsk, struct ia32_user_i387_struct __us
1658 * Stack frames start with 16-bytes of temp space 1655 * Stack frames start with 16-bytes of temp space
1659 */ 1656 */
1660 swp = (struct switch_stack *)(tsk->thread.ksp + 16); 1657 swp = (struct switch_stack *)(tsk->thread.ksp + 16);
1661 ptp = ia64_task_regs(tsk); 1658 ptp = task_pt_regs(tsk);
1662 tos = (tsk->thread.fsr >> 11) & 7; 1659 tos = (tsk->thread.fsr >> 11) & 7;
1663 for (i = 0; i < 8; i++) 1660 for (i = 0; i < 8; i++)
1664 get_fpreg(i, &save->st_space[i], ptp, swp, tos); 1661 get_fpreg(i, &save->st_space[i], ptp, swp, tos);
@@ -1689,7 +1686,7 @@ save_ia32_fpxstate (struct task_struct *tsk, struct ia32_user_fxsr_struct __user
1689 * Stack frames start with 16-bytes of temp space 1686 * Stack frames start with 16-bytes of temp space
1690 */ 1687 */
1691 swp = (struct switch_stack *)(tsk->thread.ksp + 16); 1688 swp = (struct switch_stack *)(tsk->thread.ksp + 16);
1692 ptp = ia64_task_regs(tsk); 1689 ptp = task_pt_regs(tsk);
1693 tos = (tsk->thread.fsr >> 11) & 7; 1690 tos = (tsk->thread.fsr >> 11) & 7;
1694 for (i = 0; i < 8; i++) 1691 for (i = 0; i < 8; i++)
1695 put_fpreg(i, (struct _fpreg_ia32 __user *)&save->st_space[4*i], ptp, swp, tos); 1692 put_fpreg(i, (struct _fpreg_ia32 __user *)&save->st_space[4*i], ptp, swp, tos);
@@ -1733,7 +1730,7 @@ restore_ia32_fpxstate (struct task_struct *tsk, struct ia32_user_fxsr_struct __u
1733 * Stack frames start with 16-bytes of temp space 1730 * Stack frames start with 16-bytes of temp space
1734 */ 1731 */
1735 swp = (struct switch_stack *)(tsk->thread.ksp + 16); 1732 swp = (struct switch_stack *)(tsk->thread.ksp + 16);
1736 ptp = ia64_task_regs(tsk); 1733 ptp = task_pt_regs(tsk);
1737 tos = (tsk->thread.fsr >> 11) & 7; 1734 tos = (tsk->thread.fsr >> 11) & 7;
1738 for (i = 0; i < 8; i++) 1735 for (i = 0; i < 8; i++)
1739 get_fpreg(i, (struct _fpreg_ia32 __user *)&save->st_space[4*i], ptp, swp, tos); 1736 get_fpreg(i, (struct _fpreg_ia32 __user *)&save->st_space[4*i], ptp, swp, tos);
@@ -1761,21 +1758,15 @@ sys32_ptrace (int request, pid_t pid, unsigned int addr, unsigned int data)
1761 1758
1762 lock_kernel(); 1759 lock_kernel();
1763 if (request == PTRACE_TRACEME) { 1760 if (request == PTRACE_TRACEME) {
1764 ret = sys_ptrace(request, pid, addr, data); 1761 ret = ptrace_traceme();
1765 goto out; 1762 goto out;
1766 } 1763 }
1767 1764
1768 ret = -ESRCH; 1765 child = ptrace_get_task_struct(pid);
1769 read_lock(&tasklist_lock); 1766 if (IS_ERR(child)) {
1770 child = find_task_by_pid(pid); 1767 ret = PTR_ERR(child);
1771 if (child)
1772 get_task_struct(child);
1773 read_unlock(&tasklist_lock);
1774 if (!child)
1775 goto out; 1768 goto out;
1776 ret = -EPERM; 1769 }
1777 if (pid == 1) /* no messing around with init! */
1778 goto out_tsk;
1779 1770
1780 if (request == PTRACE_ATTACH) { 1771 if (request == PTRACE_ATTACH) {
1781 ret = sys_ptrace(request, pid, addr, data); 1772 ret = sys_ptrace(request, pid, addr, data);
@@ -2559,34 +2550,6 @@ sys32_get_thread_area (struct ia32_user_desc __user *u_info)
2559 return 0; 2550 return 0;
2560} 2551}
2561 2552
2562asmlinkage long
2563sys32_timer_create(u32 clock, struct compat_sigevent __user *se32, timer_t __user *timer_id)
2564{
2565 struct sigevent se;
2566 mm_segment_t oldfs;
2567 timer_t t;
2568 long err;
2569
2570 if (se32 == NULL)
2571 return sys_timer_create(clock, NULL, timer_id);
2572
2573 if (get_compat_sigevent(&se, se32))
2574 return -EFAULT;
2575
2576 if (!access_ok(VERIFY_WRITE,timer_id,sizeof(timer_t)))
2577 return -EFAULT;
2578
2579 oldfs = get_fs();
2580 set_fs(KERNEL_DS);
2581 err = sys_timer_create(clock, (struct sigevent __user *) &se, (timer_t __user *) &t);
2582 set_fs(oldfs);
2583
2584 if (!err)
2585 err = __put_user (t, timer_id);
2586
2587 return err;
2588}
2589
2590long sys32_fadvise64_64(int fd, __u32 offset_low, __u32 offset_high, 2553long sys32_fadvise64_64(int fd, __u32 offset_low, __u32 offset_high,
2591 __u32 len_low, __u32 len_high, int advice) 2554 __u32 len_low, __u32 len_high, int advice)
2592{ 2555{
diff --git a/arch/ia64/kernel/Makefile b/arch/ia64/kernel/Makefile
index 307514f7a282..09a0dbc17fb6 100644
--- a/arch/ia64/kernel/Makefile
+++ b/arch/ia64/kernel/Makefile
@@ -13,6 +13,11 @@ obj-$(CONFIG_IA64_BRL_EMU) += brl_emu.o
13obj-$(CONFIG_IA64_GENERIC) += acpi-ext.o 13obj-$(CONFIG_IA64_GENERIC) += acpi-ext.o
14obj-$(CONFIG_IA64_HP_ZX1) += acpi-ext.o 14obj-$(CONFIG_IA64_HP_ZX1) += acpi-ext.o
15obj-$(CONFIG_IA64_HP_ZX1_SWIOTLB) += acpi-ext.o 15obj-$(CONFIG_IA64_HP_ZX1_SWIOTLB) += acpi-ext.o
16
17ifneq ($(CONFIG_ACPI_PROCESSOR),)
18obj-y += acpi-processor.o
19endif
20
16obj-$(CONFIG_IA64_PALINFO) += palinfo.o 21obj-$(CONFIG_IA64_PALINFO) += palinfo.o
17obj-$(CONFIG_IOSAPIC) += iosapic.o 22obj-$(CONFIG_IOSAPIC) += iosapic.o
18obj-$(CONFIG_MODULES) += module.o 23obj-$(CONFIG_MODULES) += module.o
diff --git a/arch/ia64/kernel/acpi-ext.c b/arch/ia64/kernel/acpi-ext.c
index 13a5b3b49bf8..4a5574ff007b 100644
--- a/arch/ia64/kernel/acpi-ext.c
+++ b/arch/ia64/kernel/acpi-ext.c
@@ -33,33 +33,33 @@ acpi_vendor_resource_match(struct acpi_resource *resource, void *context)
33 struct acpi_vendor_info *info = (struct acpi_vendor_info *)context; 33 struct acpi_vendor_info *info = (struct acpi_vendor_info *)context;
34 struct acpi_resource_vendor *vendor; 34 struct acpi_resource_vendor *vendor;
35 struct acpi_vendor_descriptor *descriptor; 35 struct acpi_vendor_descriptor *descriptor;
36 u32 length; 36 u32 byte_length;
37 37
38 if (resource->id != ACPI_RSTYPE_VENDOR) 38 if (resource->type != ACPI_RESOURCE_TYPE_VENDOR)
39 return AE_OK; 39 return AE_OK;
40 40
41 vendor = (struct acpi_resource_vendor *)&resource->data; 41 vendor = (struct acpi_resource_vendor *)&resource->data;
42 descriptor = (struct acpi_vendor_descriptor *)vendor->reserved; 42 descriptor = (struct acpi_vendor_descriptor *)vendor->byte_data;
43 if (vendor->length <= sizeof(*info->descriptor) || 43 if (vendor->byte_length <= sizeof(*info->descriptor) ||
44 descriptor->guid_id != info->descriptor->guid_id || 44 descriptor->guid_id != info->descriptor->guid_id ||
45 efi_guidcmp(descriptor->guid, info->descriptor->guid)) 45 efi_guidcmp(descriptor->guid, info->descriptor->guid))
46 return AE_OK; 46 return AE_OK;
47 47
48 length = vendor->length - sizeof(struct acpi_vendor_descriptor); 48 byte_length = vendor->byte_length - sizeof(struct acpi_vendor_descriptor);
49 info->data = acpi_os_allocate(length); 49 info->data = acpi_os_allocate(byte_length);
50 if (!info->data) 50 if (!info->data)
51 return AE_NO_MEMORY; 51 return AE_NO_MEMORY;
52 52
53 memcpy(info->data, 53 memcpy(info->data,
54 vendor->reserved + sizeof(struct acpi_vendor_descriptor), 54 vendor->byte_data + sizeof(struct acpi_vendor_descriptor),
55 length); 55 byte_length);
56 info->length = length; 56 info->length = byte_length;
57 return AE_CTRL_TERMINATE; 57 return AE_CTRL_TERMINATE;
58} 58}
59 59
60acpi_status 60acpi_status
61acpi_find_vendor_resource(acpi_handle obj, struct acpi_vendor_descriptor * id, 61acpi_find_vendor_resource(acpi_handle obj, struct acpi_vendor_descriptor * id,
62 u8 ** data, u32 * length) 62 u8 ** data, u32 * byte_length)
63{ 63{
64 struct acpi_vendor_info info; 64 struct acpi_vendor_info info;
65 65
@@ -72,7 +72,7 @@ acpi_find_vendor_resource(acpi_handle obj, struct acpi_vendor_descriptor * id,
72 return AE_NOT_FOUND; 72 return AE_NOT_FOUND;
73 73
74 *data = info.data; 74 *data = info.data;
75 *length = info.length; 75 *byte_length = info.length;
76 return AE_OK; 76 return AE_OK;
77} 77}
78 78
diff --git a/arch/ia64/kernel/acpi-processor.c b/arch/ia64/kernel/acpi-processor.c
new file mode 100644
index 000000000000..e683630c8ce2
--- /dev/null
+++ b/arch/ia64/kernel/acpi-processor.c
@@ -0,0 +1,67 @@
1/*
2 * arch/ia64/kernel/cpufreq/processor.c
3 *
4 * Copyright (C) 2005 Intel Corporation
5 * Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
6 * - Added _PDC for platforms with Intel CPUs
7 */
8
9#include <linux/kernel.h>
10#include <linux/module.h>
11#include <linux/init.h>
12#include <linux/acpi.h>
13
14#include <acpi/processor.h>
15#include <asm/acpi.h>
16
17static void init_intel_pdc(struct acpi_processor *pr)
18{
19 struct acpi_object_list *obj_list;
20 union acpi_object *obj;
21 u32 *buf;
22
23 /* allocate and initialize pdc. It will be used later. */
24 obj_list = kmalloc(sizeof(struct acpi_object_list), GFP_KERNEL);
25 if (!obj_list) {
26 printk(KERN_ERR "Memory allocation error\n");
27 return;
28 }
29
30 obj = kmalloc(sizeof(union acpi_object), GFP_KERNEL);
31 if (!obj) {
32 printk(KERN_ERR "Memory allocation error\n");
33 kfree(obj_list);
34 return;
35 }
36
37 buf = kmalloc(12, GFP_KERNEL);
38 if (!buf) {
39 printk(KERN_ERR "Memory allocation error\n");
40 kfree(obj);
41 kfree(obj_list);
42 return;
43 }
44
45 buf[0] = ACPI_PDC_REVISION_ID;
46 buf[1] = 1;
47 buf[2] |= ACPI_PDC_EST_CAPABILITY_SMP;
48
49 obj->type = ACPI_TYPE_BUFFER;
50 obj->buffer.length = 12;
51 obj->buffer.pointer = (u8 *) buf;
52 obj_list->count = 1;
53 obj_list->pointer = obj;
54 pr->pdc = obj_list;
55
56 return;
57}
58
59/* Initialize _PDC data based on the CPU vendor */
60void arch_acpi_processor_init_pdc(struct acpi_processor *pr)
61{
62 pr->pdc = NULL;
63 init_intel_pdc(pr);
64 return;
65}
66
67EXPORT_SYMBOL(arch_acpi_processor_init_pdc);
diff --git a/arch/ia64/kernel/acpi.c b/arch/ia64/kernel/acpi.c
index 8d350b33a20f..4722ec51c70c 100644
--- a/arch/ia64/kernel/acpi.c
+++ b/arch/ia64/kernel/acpi.c
@@ -573,16 +573,16 @@ void __init acpi_numa_arch_fixup(void)
573 * success: return IRQ number (>=0) 573 * success: return IRQ number (>=0)
574 * failure: return < 0 574 * failure: return < 0
575 */ 575 */
576int acpi_register_gsi(u32 gsi, int edge_level, int active_high_low) 576int acpi_register_gsi(u32 gsi, int triggering, int polarity)
577{ 577{
578 if (has_8259 && gsi < 16) 578 if (has_8259 && gsi < 16)
579 return isa_irq_to_vector(gsi); 579 return isa_irq_to_vector(gsi);
580 580
581 return iosapic_register_intr(gsi, 581 return iosapic_register_intr(gsi,
582 (active_high_low == 582 (polarity ==
583 ACPI_ACTIVE_HIGH) ? IOSAPIC_POL_HIGH : 583 ACPI_ACTIVE_HIGH) ? IOSAPIC_POL_HIGH :
584 IOSAPIC_POL_LOW, 584 IOSAPIC_POL_LOW,
585 (edge_level == 585 (triggering ==
586 ACPI_EDGE_SENSITIVE) ? IOSAPIC_EDGE : 586 ACPI_EDGE_SENSITIVE) ? IOSAPIC_EDGE :
587 IOSAPIC_LEVEL); 587 IOSAPIC_LEVEL);
588} 588}
@@ -767,6 +767,59 @@ int acpi_map_cpu2node(acpi_handle handle, int cpu, long physid)
767 return (0); 767 return (0);
768} 768}
769 769
770int additional_cpus __initdata = -1;
771
772static __init int setup_additional_cpus(char *s)
773{
774 if (s)
775 additional_cpus = simple_strtol(s, NULL, 0);
776
777 return 0;
778}
779
780early_param("additional_cpus", setup_additional_cpus);
781
782/*
783 * cpu_possible_map should be static, it cannot change as cpu's
784 * are onlined, or offlined. The reason is per-cpu data-structures
785 * are allocated by some modules at init time, and dont expect to
786 * do this dynamically on cpu arrival/departure.
787 * cpu_present_map on the other hand can change dynamically.
788 * In case when cpu_hotplug is not compiled, then we resort to current
789 * behaviour, which is cpu_possible == cpu_present.
790 * - Ashok Raj
791 *
792 * Three ways to find out the number of additional hotplug CPUs:
793 * - If the BIOS specified disabled CPUs in ACPI/mptables use that.
794 * - The user can overwrite it with additional_cpus=NUM
795 * - Otherwise don't reserve additional CPUs.
796 */
797__init void prefill_possible_map(void)
798{
799 int i;
800 int possible, disabled_cpus;
801
802 disabled_cpus = total_cpus - available_cpus;
803
804 if (additional_cpus == -1) {
805 if (disabled_cpus > 0)
806 additional_cpus = disabled_cpus;
807 else
808 additional_cpus = 0;
809 }
810
811 possible = available_cpus + additional_cpus;
812
813 if (possible > NR_CPUS)
814 possible = NR_CPUS;
815
816 printk(KERN_INFO "SMP: Allowing %d CPUs, %d hotplug CPUs\n",
817 possible, max((possible - available_cpus), 0));
818
819 for (i = 0; i < possible; i++)
820 cpu_set(i, cpu_possible_map);
821}
822
770int acpi_map_lsapic(acpi_handle handle, int *pcpu) 823int acpi_map_lsapic(acpi_handle handle, int *pcpu)
771{ 824{
772 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; 825 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
diff --git a/arch/ia64/kernel/cpufreq/Makefile b/arch/ia64/kernel/cpufreq/Makefile
index f748d34c02f0..4838f2a57c7a 100644
--- a/arch/ia64/kernel/cpufreq/Makefile
+++ b/arch/ia64/kernel/cpufreq/Makefile
@@ -1 +1,2 @@
1obj-$(CONFIG_IA64_ACPI_CPUFREQ) += acpi-cpufreq.o 1obj-$(CONFIG_IA64_ACPI_CPUFREQ) += acpi-cpufreq.o
2
diff --git a/arch/ia64/kernel/cpufreq/acpi-cpufreq.c b/arch/ia64/kernel/cpufreq/acpi-cpufreq.c
index da4d5cf80a48..5a1bf815282d 100644
--- a/arch/ia64/kernel/cpufreq/acpi-cpufreq.c
+++ b/arch/ia64/kernel/cpufreq/acpi-cpufreq.c
@@ -269,48 +269,6 @@ acpi_cpufreq_verify (
269} 269}
270 270
271 271
272/*
273 * processor_init_pdc - let BIOS know about the SMP capabilities
274 * of this driver
275 * @perf: processor-specific acpi_io_data struct
276 * @cpu: CPU being initialized
277 *
278 * To avoid issues with legacy OSes, some BIOSes require to be informed of
279 * the SMP capabilities of OS P-state driver. Here we set the bits in _PDC
280 * accordingly. Actual call to _PDC is done in driver/acpi/processor.c
281 */
282static void
283processor_init_pdc (
284 struct acpi_processor_performance *perf,
285 unsigned int cpu,
286 struct acpi_object_list *obj_list
287 )
288{
289 union acpi_object *obj;
290 u32 *buf;
291
292 dprintk("processor_init_pdc\n");
293
294 perf->pdc = NULL;
295 /* Initialize pdc. It will be used later. */
296 if (!obj_list)
297 return;
298
299 if (!(obj_list->count && obj_list->pointer))
300 return;
301
302 obj = obj_list->pointer;
303 if ((obj->buffer.length == 12) && obj->buffer.pointer) {
304 buf = (u32 *)obj->buffer.pointer;
305 buf[0] = ACPI_PDC_REVISION_ID;
306 buf[1] = 1;
307 buf[2] = ACPI_PDC_EST_CAPABILITY_SMP;
308 perf->pdc = obj_list;
309 }
310 return;
311}
312
313
314static int 272static int
315acpi_cpufreq_cpu_init ( 273acpi_cpufreq_cpu_init (
316 struct cpufreq_policy *policy) 274 struct cpufreq_policy *policy)
@@ -320,14 +278,7 @@ acpi_cpufreq_cpu_init (
320 struct cpufreq_acpi_io *data; 278 struct cpufreq_acpi_io *data;
321 unsigned int result = 0; 279 unsigned int result = 0;
322 280
323 union acpi_object arg0 = {ACPI_TYPE_BUFFER};
324 u32 arg0_buf[3];
325 struct acpi_object_list arg_list = {1, &arg0};
326
327 dprintk("acpi_cpufreq_cpu_init\n"); 281 dprintk("acpi_cpufreq_cpu_init\n");
328 /* setup arg_list for _PDC settings */
329 arg0.buffer.length = 12;
330 arg0.buffer.pointer = (u8 *) arg0_buf;
331 282
332 data = kmalloc(sizeof(struct cpufreq_acpi_io), GFP_KERNEL); 283 data = kmalloc(sizeof(struct cpufreq_acpi_io), GFP_KERNEL);
333 if (!data) 284 if (!data)
@@ -337,9 +288,7 @@ acpi_cpufreq_cpu_init (
337 288
338 acpi_io_data[cpu] = data; 289 acpi_io_data[cpu] = data;
339 290
340 processor_init_pdc(&data->acpi_data, cpu, &arg_list);
341 result = acpi_processor_register_performance(&data->acpi_data, cpu); 291 result = acpi_processor_register_performance(&data->acpi_data, cpu);
342 data->acpi_data.pdc = NULL;
343 292
344 if (result) 293 if (result)
345 goto err_free; 294 goto err_free;
diff --git a/arch/ia64/kernel/cyclone.c b/arch/ia64/kernel/cyclone.c
index 6ade3790ce07..e00b21514f7c 100644
--- a/arch/ia64/kernel/cyclone.c
+++ b/arch/ia64/kernel/cyclone.c
@@ -36,7 +36,7 @@ int __init init_cyclone_clock(void)
36 u32* volatile cyclone_timer; /* Cyclone MPMC0 register */ 36 u32* volatile cyclone_timer; /* Cyclone MPMC0 register */
37 37
38 if (!use_cyclone) 38 if (!use_cyclone)
39 return -ENODEV; 39 return 0;
40 40
41 printk(KERN_INFO "Summit chipset: Starting Cyclone Counter.\n"); 41 printk(KERN_INFO "Summit chipset: Starting Cyclone Counter.\n");
42 42
diff --git a/arch/ia64/kernel/efi.c b/arch/ia64/kernel/efi.c
index a3aa45cbcfa0..9990320b6f9a 100644
--- a/arch/ia64/kernel/efi.c
+++ b/arch/ia64/kernel/efi.c
@@ -247,6 +247,32 @@ typedef struct kern_memdesc {
247 247
248static kern_memdesc_t *kern_memmap; 248static kern_memdesc_t *kern_memmap;
249 249
250#define efi_md_size(md) (md->num_pages << EFI_PAGE_SHIFT)
251
252static inline u64
253kmd_end(kern_memdesc_t *kmd)
254{
255 return (kmd->start + (kmd->num_pages << EFI_PAGE_SHIFT));
256}
257
258static inline u64
259efi_md_end(efi_memory_desc_t *md)
260{
261 return (md->phys_addr + efi_md_size(md));
262}
263
264static inline int
265efi_wb(efi_memory_desc_t *md)
266{
267 return (md->attribute & EFI_MEMORY_WB);
268}
269
270static inline int
271efi_uc(efi_memory_desc_t *md)
272{
273 return (md->attribute & EFI_MEMORY_UC);
274}
275
250static void 276static void
251walk (efi_freemem_callback_t callback, void *arg, u64 attr) 277walk (efi_freemem_callback_t callback, void *arg, u64 attr)
252{ 278{
@@ -384,24 +410,16 @@ efi_init (void)
384 efi_config_table_t *config_tables; 410 efi_config_table_t *config_tables;
385 efi_char16_t *c16; 411 efi_char16_t *c16;
386 u64 efi_desc_size; 412 u64 efi_desc_size;
387 char *cp, *end, vendor[100] = "unknown"; 413 char *cp, vendor[100] = "unknown";
388 extern char saved_command_line[]; 414 extern char saved_command_line[];
389 int i; 415 int i;
390 416
391 /* it's too early to be able to use the standard kernel command line support... */ 417 /* it's too early to be able to use the standard kernel command line support... */
392 for (cp = saved_command_line; *cp; ) { 418 for (cp = saved_command_line; *cp; ) {
393 if (memcmp(cp, "mem=", 4) == 0) { 419 if (memcmp(cp, "mem=", 4) == 0) {
394 cp += 4; 420 mem_limit = memparse(cp + 4, &cp);
395 mem_limit = memparse(cp, &end);
396 if (end != cp)
397 break;
398 cp = end;
399 } else if (memcmp(cp, "max_addr=", 9) == 0) { 421 } else if (memcmp(cp, "max_addr=", 9) == 0) {
400 cp += 9; 422 max_addr = GRANULEROUNDDOWN(memparse(cp + 9, &cp));
401 max_addr = GRANULEROUNDDOWN(memparse(cp, &end));
402 if (end != cp)
403 break;
404 cp = end;
405 } else { 423 } else {
406 while (*cp != ' ' && *cp) 424 while (*cp != ' ' && *cp)
407 ++cp; 425 ++cp;
@@ -432,7 +450,7 @@ efi_init (void)
432 /* Show what we know for posterity */ 450 /* Show what we know for posterity */
433 c16 = __va(efi.systab->fw_vendor); 451 c16 = __va(efi.systab->fw_vendor);
434 if (c16) { 452 if (c16) {
435 for (i = 0;i < (int) sizeof(vendor) && *c16; ++i) 453 for (i = 0;i < (int) sizeof(vendor) - 1 && *c16; ++i)
436 vendor[i] = *c16++; 454 vendor[i] = *c16++;
437 vendor[i] = '\0'; 455 vendor[i] = '\0';
438 } 456 }
@@ -595,8 +613,8 @@ efi_get_iobase (void)
595 return 0; 613 return 0;
596} 614}
597 615
598u32 616static efi_memory_desc_t *
599efi_mem_type (unsigned long phys_addr) 617efi_memory_descriptor (unsigned long phys_addr)
600{ 618{
601 void *efi_map_start, *efi_map_end, *p; 619 void *efi_map_start, *efi_map_end, *p;
602 efi_memory_desc_t *md; 620 efi_memory_desc_t *md;
@@ -610,13 +628,13 @@ efi_mem_type (unsigned long phys_addr)
610 md = p; 628 md = p;
611 629
612 if (phys_addr - md->phys_addr < (md->num_pages << EFI_PAGE_SHIFT)) 630 if (phys_addr - md->phys_addr < (md->num_pages << EFI_PAGE_SHIFT))
613 return md->type; 631 return md;
614 } 632 }
615 return 0; 633 return 0;
616} 634}
617 635
618u64 636static int
619efi_mem_attributes (unsigned long phys_addr) 637efi_memmap_has_mmio (void)
620{ 638{
621 void *efi_map_start, *efi_map_end, *p; 639 void *efi_map_start, *efi_map_end, *p;
622 efi_memory_desc_t *md; 640 efi_memory_desc_t *md;
@@ -629,36 +647,98 @@ efi_mem_attributes (unsigned long phys_addr)
629 for (p = efi_map_start; p < efi_map_end; p += efi_desc_size) { 647 for (p = efi_map_start; p < efi_map_end; p += efi_desc_size) {
630 md = p; 648 md = p;
631 649
632 if (phys_addr - md->phys_addr < (md->num_pages << EFI_PAGE_SHIFT)) 650 if (md->type == EFI_MEMORY_MAPPED_IO)
633 return md->attribute; 651 return 1;
634 } 652 }
635 return 0; 653 return 0;
636} 654}
655
656u32
657efi_mem_type (unsigned long phys_addr)
658{
659 efi_memory_desc_t *md = efi_memory_descriptor(phys_addr);
660
661 if (md)
662 return md->type;
663 return 0;
664}
665
666u64
667efi_mem_attributes (unsigned long phys_addr)
668{
669 efi_memory_desc_t *md = efi_memory_descriptor(phys_addr);
670
671 if (md)
672 return md->attribute;
673 return 0;
674}
637EXPORT_SYMBOL(efi_mem_attributes); 675EXPORT_SYMBOL(efi_mem_attributes);
638 676
677/*
678 * Determines whether the memory at phys_addr supports the desired
679 * attribute (WB, UC, etc). If this returns 1, the caller can safely
680 * access *size bytes at phys_addr with the specified attribute.
681 */
682static int
683efi_mem_attribute_range (unsigned long phys_addr, unsigned long *size, u64 attr)
684{
685 efi_memory_desc_t *md = efi_memory_descriptor(phys_addr);
686 unsigned long md_end;
687
688 if (!md || (md->attribute & attr) != attr)
689 return 0;
690
691 do {
692 md_end = efi_md_end(md);
693 if (phys_addr + *size <= md_end)
694 return 1;
695
696 md = efi_memory_descriptor(md_end);
697 if (!md || (md->attribute & attr) != attr) {
698 *size = md_end - phys_addr;
699 return 1;
700 }
701 } while (md);
702 return 0;
703}
704
705/*
706 * For /dev/mem, we only allow read & write system calls to access
707 * write-back memory, because read & write don't allow the user to
708 * control access size.
709 */
639int 710int
640valid_phys_addr_range (unsigned long phys_addr, unsigned long *size) 711valid_phys_addr_range (unsigned long phys_addr, unsigned long *size)
641{ 712{
642 void *efi_map_start, *efi_map_end, *p; 713 return efi_mem_attribute_range(phys_addr, size, EFI_MEMORY_WB);
643 efi_memory_desc_t *md; 714}
644 u64 efi_desc_size;
645 715
646 efi_map_start = __va(ia64_boot_param->efi_memmap); 716/*
647 efi_map_end = efi_map_start + ia64_boot_param->efi_memmap_size; 717 * We allow mmap of anything in the EFI memory map that supports
648 efi_desc_size = ia64_boot_param->efi_memdesc_size; 718 * either write-back or uncacheable access. For uncacheable regions,
719 * the supported access sizes are system-dependent, and the user is
720 * responsible for using the correct size.
721 *
722 * Note that this doesn't currently allow access to hot-added memory,
723 * because that doesn't appear in the boot-time EFI memory map.
724 */
725int
726valid_mmap_phys_addr_range (unsigned long phys_addr, unsigned long *size)
727{
728 if (efi_mem_attribute_range(phys_addr, size, EFI_MEMORY_WB))
729 return 1;
649 730
650 for (p = efi_map_start; p < efi_map_end; p += efi_desc_size) { 731 if (efi_mem_attribute_range(phys_addr, size, EFI_MEMORY_UC))
651 md = p; 732 return 1;
652 733
653 if (phys_addr - md->phys_addr < (md->num_pages << EFI_PAGE_SHIFT)) { 734 /*
654 if (!(md->attribute & EFI_MEMORY_WB)) 735 * Some firmware doesn't report MMIO regions in the EFI memory map.
655 return 0; 736 * The Intel BigSur (a.k.a. HP i2000) has this problem. In this
737 * case, we can't use the EFI memory map to validate mmap requests.
738 */
739 if (!efi_memmap_has_mmio())
740 return 1;
656 741
657 if (*size > md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT) - phys_addr)
658 *size = md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT) - phys_addr;
659 return 1;
660 }
661 }
662 return 0; 742 return 0;
663} 743}
664 744
@@ -707,32 +787,6 @@ efi_uart_console_only(void)
707 return 0; 787 return 0;
708} 788}
709 789
710#define efi_md_size(md) (md->num_pages << EFI_PAGE_SHIFT)
711
712static inline u64
713kmd_end(kern_memdesc_t *kmd)
714{
715 return (kmd->start + (kmd->num_pages << EFI_PAGE_SHIFT));
716}
717
718static inline u64
719efi_md_end(efi_memory_desc_t *md)
720{
721 return (md->phys_addr + efi_md_size(md));
722}
723
724static inline int
725efi_wb(efi_memory_desc_t *md)
726{
727 return (md->attribute & EFI_MEMORY_WB);
728}
729
730static inline int
731efi_uc(efi_memory_desc_t *md)
732{
733 return (md->attribute & EFI_MEMORY_UC);
734}
735
736/* 790/*
737 * Look for the first granule aligned memory descriptor memory 791 * Look for the first granule aligned memory descriptor memory
738 * that is big enough to hold EFI memory map. Make sure this 792 * that is big enough to hold EFI memory map. Make sure this
diff --git a/arch/ia64/kernel/entry.S b/arch/ia64/kernel/entry.S
index 0741b066b98f..930fdfca6ddb 100644
--- a/arch/ia64/kernel/entry.S
+++ b/arch/ia64/kernel/entry.S
@@ -569,7 +569,9 @@ GLOBAL_ENTRY(ia64_trace_syscall)
569.mem.offset 0,0; st8.spill [r2]=r8 // store return value in slot for r8 569.mem.offset 0,0; st8.spill [r2]=r8 // store return value in slot for r8
570.mem.offset 8,0; st8.spill [r3]=r10 // clear error indication in slot for r10 570.mem.offset 8,0; st8.spill [r3]=r10 // clear error indication in slot for r10
571 br.call.sptk.many rp=syscall_trace_leave // give parent a chance to catch return value 571 br.call.sptk.many rp=syscall_trace_leave // give parent a chance to catch return value
572.ret3: br.cond.sptk .work_pending_syscall_end 572.ret3:
573(pUStk) cmp.eq.unc p6,p0=r0,r0 // p6 <- pUStk
574 br.cond.sptk .work_pending_syscall_end
573 575
574strace_error: 576strace_error:
575 ld8 r3=[r2] // load pt_regs.r8 577 ld8 r3=[r2] // load pt_regs.r8
@@ -1600,5 +1602,22 @@ sys_call_table:
1600 data8 sys_inotify_init 1602 data8 sys_inotify_init
1601 data8 sys_inotify_add_watch 1603 data8 sys_inotify_add_watch
1602 data8 sys_inotify_rm_watch 1604 data8 sys_inotify_rm_watch
1605 data8 sys_migrate_pages // 1280
1606 data8 sys_openat
1607 data8 sys_mkdirat
1608 data8 sys_mknodat
1609 data8 sys_fchownat
1610 data8 sys_futimesat // 1285
1611 data8 sys_newfstatat
1612 data8 sys_unlinkat
1613 data8 sys_renameat
1614 data8 sys_linkat
1615 data8 sys_symlinkat // 1290
1616 data8 sys_readlinkat
1617 data8 sys_fchmodat
1618 data8 sys_faccessat
1619 data8 sys_ni_syscall // reserved for pselect
1620 data8 sys_ni_syscall // 1295 reserved for ppoll
1621 data8 sys_unshare
1603 1622
1604 .org sys_call_table + 8*NR_syscalls // guard against failures to increase NR_syscalls 1623 .org sys_call_table + 8*NR_syscalls // guard against failures to increase NR_syscalls
diff --git a/arch/ia64/kernel/fsys.S b/arch/ia64/kernel/fsys.S
index 2ddbac6f4999..7a05b1cb2ad5 100644
--- a/arch/ia64/kernel/fsys.S
+++ b/arch/ia64/kernel/fsys.S
@@ -878,30 +878,7 @@ fsyscall_table:
878 data8 0 // timer_delete 878 data8 0 // timer_delete
879 data8 0 // clock_settime 879 data8 0 // clock_settime
880 data8 fsys_clock_gettime // clock_gettime 880 data8 fsys_clock_gettime // clock_gettime
881 data8 0 // clock_getres // 1255
882 data8 0 // clock_nanosleep
883 data8 0 // fstatfs64
884 data8 0 // statfs64
885 data8 0
886 data8 0 // 1260
887 data8 0
888 data8 0 // mq_open
889 data8 0 // mq_unlink
890 data8 0 // mq_timedsend
891 data8 0 // mq_timedreceive // 1265
892 data8 0 // mq_notify
893 data8 0 // mq_getsetattr
894 data8 0 // kexec_load
895 data8 0
896 data8 0 // 1270
897 data8 0
898 data8 0
899 data8 0
900 data8 0
901 data8 0 // 1275
902 data8 0
903 data8 0
904 data8 0
905 data8 0
906 881
907 .org fsyscall_table + 8*NR_syscalls // guard against failures to increase NR_syscalls 882 // fill in zeros for the remaining entries
883 .zero:
884 .space fsyscall_table + 8*NR_syscalls - .zero, 0
diff --git a/arch/ia64/kernel/head.S b/arch/ia64/kernel/head.S
index bfe65b2e8621..f1778a84ea61 100644
--- a/arch/ia64/kernel/head.S
+++ b/arch/ia64/kernel/head.S
@@ -352,6 +352,7 @@ start_ap:
352 mov ar.rsc=0 // place RSE in enforced lazy mode 352 mov ar.rsc=0 // place RSE in enforced lazy mode
353 ;; 353 ;;
354 loadrs // clear the dirty partition 354 loadrs // clear the dirty partition
355 mov IA64_KR(PER_CPU_DATA)=r0 // clear physical per-CPU base
355 ;; 356 ;;
356 mov ar.bspstore=r2 // establish the new RSE stack 357 mov ar.bspstore=r2 // establish the new RSE stack
357 ;; 358 ;;
@@ -1060,7 +1061,7 @@ SET_REG(b5);
1060 * the clobber lists for spin_lock() in include/asm-ia64/spinlock.h. 1061 * the clobber lists for spin_lock() in include/asm-ia64/spinlock.h.
1061 */ 1062 */
1062 1063
1063#if __GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 3) 1064#if (__GNUC__ == 3 && __GNUC_MINOR__ < 3)
1064 1065
1065GLOBAL_ENTRY(ia64_spinlock_contention_pre3_4) 1066GLOBAL_ENTRY(ia64_spinlock_contention_pre3_4)
1066 .prologue 1067 .prologue
diff --git a/arch/ia64/kernel/ia64_ksyms.c b/arch/ia64/kernel/ia64_ksyms.c
index 5db9d3bcbbcb..bbcfd08378a6 100644
--- a/arch/ia64/kernel/ia64_ksyms.c
+++ b/arch/ia64/kernel/ia64_ksyms.c
@@ -10,23 +10,8 @@
10 10
11#include <linux/string.h> 11#include <linux/string.h>
12EXPORT_SYMBOL(memset); 12EXPORT_SYMBOL(memset);
13EXPORT_SYMBOL(memchr);
14EXPORT_SYMBOL(memcmp);
15EXPORT_SYMBOL(memcpy); 13EXPORT_SYMBOL(memcpy);
16EXPORT_SYMBOL(memmove);
17EXPORT_SYMBOL(memscan);
18EXPORT_SYMBOL(strcat);
19EXPORT_SYMBOL(strchr);
20EXPORT_SYMBOL(strcmp);
21EXPORT_SYMBOL(strcpy);
22EXPORT_SYMBOL(strlen); 14EXPORT_SYMBOL(strlen);
23EXPORT_SYMBOL(strncat);
24EXPORT_SYMBOL(strncmp);
25EXPORT_SYMBOL(strncpy);
26EXPORT_SYMBOL(strnlen);
27EXPORT_SYMBOL(strrchr);
28EXPORT_SYMBOL(strstr);
29EXPORT_SYMBOL(strpbrk);
30 15
31#include <asm/checksum.h> 16#include <asm/checksum.h>
32EXPORT_SYMBOL(ip_fast_csum); /* hand-coded assembly */ 17EXPORT_SYMBOL(ip_fast_csum); /* hand-coded assembly */
@@ -103,7 +88,7 @@ EXPORT_SYMBOL(unw_init_running);
103 88
104#ifdef ASM_SUPPORTED 89#ifdef ASM_SUPPORTED
105# ifdef CONFIG_SMP 90# ifdef CONFIG_SMP
106# if __GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 3) 91# if (__GNUC__ == 3 && __GNUC_MINOR__ < 3)
107/* 92/*
108 * This is not a normal routine and we don't want a function descriptor for it, so we use 93 * This is not a normal routine and we don't want a function descriptor for it, so we use
109 * a fake declaration here. 94 * a fake declaration here.
diff --git a/arch/ia64/kernel/ivt.S b/arch/ia64/kernel/ivt.S
index 301f2e9d262e..dcd906fe5749 100644
--- a/arch/ia64/kernel/ivt.S
+++ b/arch/ia64/kernel/ivt.S
@@ -561,11 +561,12 @@ ENTRY(dirty_bit)
561 ;; // avoid RAW on r18 561 ;; // avoid RAW on r18
562 mov ar.ccv=r18 // set compare value for cmpxchg 562 mov ar.ccv=r18 // set compare value for cmpxchg
563 or r25=_PAGE_D|_PAGE_A,r18 // set the dirty and accessed bits 563 or r25=_PAGE_D|_PAGE_A,r18 // set the dirty and accessed bits
564 tbit.z p7,p6 = r18,_PAGE_P_BIT // Check present bit
564 ;; 565 ;;
565 cmpxchg8.acq r26=[r17],r25,ar.ccv 566(p6) cmpxchg8.acq r26=[r17],r25,ar.ccv // Only update if page is present
566 mov r24=PAGE_SHIFT<<2 567 mov r24=PAGE_SHIFT<<2
567 ;; 568 ;;
568 cmp.eq p6,p7=r26,r18 569(p6) cmp.eq p6,p7=r26,r18 // Only compare if page is present
569 ;; 570 ;;
570(p6) itc.d r25 // install updated PTE 571(p6) itc.d r25 // install updated PTE
571 ;; 572 ;;
@@ -626,11 +627,12 @@ ENTRY(iaccess_bit)
626 ;; 627 ;;
627 mov ar.ccv=r18 // set compare value for cmpxchg 628 mov ar.ccv=r18 // set compare value for cmpxchg
628 or r25=_PAGE_A,r18 // set the accessed bit 629 or r25=_PAGE_A,r18 // set the accessed bit
630 tbit.z p7,p6 = r18,_PAGE_P_BIT // Check present bit
629 ;; 631 ;;
630 cmpxchg8.acq r26=[r17],r25,ar.ccv 632(p6) cmpxchg8.acq r26=[r17],r25,ar.ccv // Only if page present
631 mov r24=PAGE_SHIFT<<2 633 mov r24=PAGE_SHIFT<<2
632 ;; 634 ;;
633 cmp.eq p6,p7=r26,r18 635(p6) cmp.eq p6,p7=r26,r18 // Only if page present
634 ;; 636 ;;
635(p6) itc.i r25 // install updated PTE 637(p6) itc.i r25 // install updated PTE
636 ;; 638 ;;
@@ -680,11 +682,12 @@ ENTRY(daccess_bit)
680 ;; // avoid RAW on r18 682 ;; // avoid RAW on r18
681 mov ar.ccv=r18 // set compare value for cmpxchg 683 mov ar.ccv=r18 // set compare value for cmpxchg
682 or r25=_PAGE_A,r18 // set the dirty bit 684 or r25=_PAGE_A,r18 // set the dirty bit
685 tbit.z p7,p6 = r18,_PAGE_P_BIT // Check present bit
683 ;; 686 ;;
684 cmpxchg8.acq r26=[r17],r25,ar.ccv 687(p6) cmpxchg8.acq r26=[r17],r25,ar.ccv // Only if page is present
685 mov r24=PAGE_SHIFT<<2 688 mov r24=PAGE_SHIFT<<2
686 ;; 689 ;;
687 cmp.eq p6,p7=r26,r18 690(p6) cmp.eq p6,p7=r26,r18 // Only if page is present
688 ;; 691 ;;
689(p6) itc.d r25 // install updated PTE 692(p6) itc.d r25 // install updated PTE
690 /* 693 /*
@@ -1362,7 +1365,6 @@ END(debug_vector)
1362// 0x5a00 Entry 30 (size 16 bundles) Unaligned Reference (57) 1365// 0x5a00 Entry 30 (size 16 bundles) Unaligned Reference (57)
1363ENTRY(unaligned_access) 1366ENTRY(unaligned_access)
1364 DBG_FAULT(30) 1367 DBG_FAULT(30)
1365 mov r16=cr.ipsr
1366 mov r31=pr // prepare to save predicates 1368 mov r31=pr // prepare to save predicates
1367 ;; 1369 ;;
1368 br.sptk.many dispatch_unaligned_handler 1370 br.sptk.many dispatch_unaligned_handler
diff --git a/arch/ia64/kernel/jprobes.S b/arch/ia64/kernel/jprobes.S
index 2323377e3695..5cd6226f44f2 100644
--- a/arch/ia64/kernel/jprobes.S
+++ b/arch/ia64/kernel/jprobes.S
@@ -60,3 +60,30 @@ END(jprobe_break)
60GLOBAL_ENTRY(jprobe_inst_return) 60GLOBAL_ENTRY(jprobe_inst_return)
61 br.call.sptk.many b0=jprobe_break 61 br.call.sptk.many b0=jprobe_break
62END(jprobe_inst_return) 62END(jprobe_inst_return)
63
64GLOBAL_ENTRY(invalidate_stacked_regs)
65 movl r16=invalidate_restore_cfm
66 ;;
67 mov b6=r16
68 ;;
69 br.ret.sptk.many b6
70 ;;
71invalidate_restore_cfm:
72 mov r16=ar.rsc
73 ;;
74 mov ar.rsc=r0
75 ;;
76 loadrs
77 ;;
78 mov ar.rsc=r16
79 ;;
80 br.cond.sptk.many rp
81END(invalidate_stacked_regs)
82
83GLOBAL_ENTRY(flush_register_stack)
84 // flush dirty regs to backing store (must be first in insn group)
85 flushrs
86 ;;
87 br.ret.sptk.many rp
88END(flush_register_stack)
89
diff --git a/arch/ia64/kernel/kprobes.c b/arch/ia64/kernel/kprobes.c
index 89a70400c4f6..50ae8c7d453d 100644
--- a/arch/ia64/kernel/kprobes.c
+++ b/arch/ia64/kernel/kprobes.c
@@ -467,10 +467,6 @@ void __kprobes arch_disarm_kprobe(struct kprobe *p)
467 flush_icache_range(arm_addr, arm_addr + sizeof(bundle_t)); 467 flush_icache_range(arm_addr, arm_addr + sizeof(bundle_t));
468} 468}
469 469
470void __kprobes arch_remove_kprobe(struct kprobe *p)
471{
472}
473
474/* 470/*
475 * We are resuming execution after a single step fault, so the pt_regs 471 * We are resuming execution after a single step fault, so the pt_regs
476 * structure reflects the register state after we executed the instruction 472 * structure reflects the register state after we executed the instruction
@@ -642,6 +638,13 @@ static int __kprobes pre_kprobes_handler(struct die_args *args)
642 if (p->break_handler && p->break_handler(p, regs)) { 638 if (p->break_handler && p->break_handler(p, regs)) {
643 goto ss_probe; 639 goto ss_probe;
644 } 640 }
641 } else if (!is_ia64_break_inst(regs)) {
642 /* The breakpoint instruction was removed by
643 * another cpu right after we hit, no further
644 * handling of this interrupt is appropriate
645 */
646 ret = 1;
647 goto no_kprobe;
645 } else { 648 } else {
646 /* Not our break */ 649 /* Not our break */
647 goto no_kprobe; 650 goto no_kprobe;
@@ -763,11 +766,56 @@ int __kprobes kprobe_exceptions_notify(struct notifier_block *self,
763 return ret; 766 return ret;
764} 767}
765 768
769struct param_bsp_cfm {
770 unsigned long ip;
771 unsigned long *bsp;
772 unsigned long cfm;
773};
774
775static void ia64_get_bsp_cfm(struct unw_frame_info *info, void *arg)
776{
777 unsigned long ip;
778 struct param_bsp_cfm *lp = arg;
779
780 do {
781 unw_get_ip(info, &ip);
782 if (ip == 0)
783 break;
784 if (ip == lp->ip) {
785 unw_get_bsp(info, (unsigned long*)&lp->bsp);
786 unw_get_cfm(info, (unsigned long*)&lp->cfm);
787 return;
788 }
789 } while (unw_unwind(info) >= 0);
790 lp->bsp = 0;
791 lp->cfm = 0;
792 return;
793}
794
766int __kprobes setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs) 795int __kprobes setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs)
767{ 796{
768 struct jprobe *jp = container_of(p, struct jprobe, kp); 797 struct jprobe *jp = container_of(p, struct jprobe, kp);
769 unsigned long addr = ((struct fnptr *)(jp->entry))->ip; 798 unsigned long addr = ((struct fnptr *)(jp->entry))->ip;
770 struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); 799 struct kprobe_ctlblk *kcb = get_kprobe_ctlblk();
800 struct param_bsp_cfm pa;
801 int bytes;
802
803 /*
804 * Callee owns the argument space and could overwrite it, eg
805 * tail call optimization. So to be absolutely safe
806 * we save the argument space before transfering the control
807 * to instrumented jprobe function which runs in
808 * the process context
809 */
810 pa.ip = regs->cr_iip;
811 unw_init_running(ia64_get_bsp_cfm, &pa);
812 bytes = (char *)ia64_rse_skip_regs(pa.bsp, pa.cfm & 0x3f)
813 - (char *)pa.bsp;
814 memcpy( kcb->jprobes_saved_stacked_regs,
815 pa.bsp,
816 bytes );
817 kcb->bsp = pa.bsp;
818 kcb->cfm = pa.cfm;
771 819
772 /* save architectural state */ 820 /* save architectural state */
773 kcb->jprobe_saved_regs = *regs; 821 kcb->jprobe_saved_regs = *regs;
@@ -789,8 +837,20 @@ int __kprobes setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs)
789int __kprobes longjmp_break_handler(struct kprobe *p, struct pt_regs *regs) 837int __kprobes longjmp_break_handler(struct kprobe *p, struct pt_regs *regs)
790{ 838{
791 struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); 839 struct kprobe_ctlblk *kcb = get_kprobe_ctlblk();
840 int bytes;
792 841
842 /* restoring architectural state */
793 *regs = kcb->jprobe_saved_regs; 843 *regs = kcb->jprobe_saved_regs;
844
845 /* restoring the original argument space */
846 flush_register_stack();
847 bytes = (char *)ia64_rse_skip_regs(kcb->bsp, kcb->cfm & 0x3f)
848 - (char *)kcb->bsp;
849 memcpy( kcb->bsp,
850 kcb->jprobes_saved_stacked_regs,
851 bytes );
852 invalidate_stacked_regs();
853
794 preempt_enable_no_resched(); 854 preempt_enable_no_resched();
795 return 1; 855 return 1;
796} 856}
diff --git a/arch/ia64/kernel/mca.c b/arch/ia64/kernel/mca.c
index 967571b466a2..87fb7cecead0 100644
--- a/arch/ia64/kernel/mca.c
+++ b/arch/ia64/kernel/mca.c
@@ -767,7 +767,7 @@ ia64_mca_modify_original_stack(struct pt_regs *regs,
767 l = strlen(previous_current->comm); 767 l = strlen(previous_current->comm);
768 snprintf(comm, sizeof(comm), "%s %*s %d", 768 snprintf(comm, sizeof(comm), "%s %*s %d",
769 current->comm, l, previous_current->comm, 769 current->comm, l, previous_current->comm,
770 previous_current->thread_info->cpu); 770 task_thread_info(previous_current)->cpu);
771 } 771 }
772 memcpy(current->comm, comm, sizeof(current->comm)); 772 memcpy(current->comm, comm, sizeof(current->comm));
773 773
@@ -1424,7 +1424,7 @@ format_mca_init_stack(void *mca_data, unsigned long offset,
1424 struct task_struct *p = (struct task_struct *)((char *)mca_data + offset); 1424 struct task_struct *p = (struct task_struct *)((char *)mca_data + offset);
1425 struct thread_info *ti; 1425 struct thread_info *ti;
1426 memset(p, 0, KERNEL_STACK_SIZE); 1426 memset(p, 0, KERNEL_STACK_SIZE);
1427 ti = (struct thread_info *)((char *)p + IA64_TASK_SIZE); 1427 ti = task_thread_info(p);
1428 ti->flags = _TIF_MCA_INIT; 1428 ti->flags = _TIF_MCA_INIT;
1429 ti->preempt_count = 1; 1429 ti->preempt_count = 1;
1430 ti->task = p; 1430 ti->task = p;
diff --git a/arch/ia64/kernel/mca_asm.S b/arch/ia64/kernel/mca_asm.S
index db32fc1d3935..60a464bfd9e2 100644
--- a/arch/ia64/kernel/mca_asm.S
+++ b/arch/ia64/kernel/mca_asm.S
@@ -512,7 +512,7 @@ ia64_state_save:
512 st8 [temp1]=r12 // os_status, default is cold boot 512 st8 [temp1]=r12 // os_status, default is cold boot
513 mov r6=IA64_MCA_SAME_CONTEXT 513 mov r6=IA64_MCA_SAME_CONTEXT
514 ;; 514 ;;
515 st8 [temp1]=r6 // context, default is same context 515 st8 [temp2]=r6 // context, default is same context
516 516
517 // Save the pt_regs data that is not in minstate. The previous code 517 // Save the pt_regs data that is not in minstate. The previous code
518 // left regs at sos. 518 // left regs at sos.
@@ -847,7 +847,7 @@ ia64_state_restore:
847 ;; 847 ;;
848 mov cr.iim=temp3 848 mov cr.iim=temp3
849 mov cr.iha=temp4 849 mov cr.iha=temp4
850 dep r22=0,r22,62,2 // pal_min_state, physical, uncached 850 dep r22=0,r22,62,1 // pal_min_state, physical, uncached
851 mov IA64_KR(CURRENT)=r21 851 mov IA64_KR(CURRENT)=r21
852 ld8 r8=[temp1] // os_status 852 ld8 r8=[temp1] // os_status
853 ld8 r10=[temp2] // context 853 ld8 r10=[temp2] // context
diff --git a/arch/ia64/kernel/mca_drv.c b/arch/ia64/kernel/mca_drv.c
index 3492e3211a44..e883d85906db 100644
--- a/arch/ia64/kernel/mca_drv.c
+++ b/arch/ia64/kernel/mca_drv.c
@@ -123,8 +123,9 @@ mca_page_isolate(unsigned long paddr)
123void 123void
124mca_handler_bh(unsigned long paddr) 124mca_handler_bh(unsigned long paddr)
125{ 125{
126 printk(KERN_DEBUG "OS_MCA: process [pid: %d](%s) encounters MCA.\n", 126 printk(KERN_ERR
127 current->pid, current->comm); 127 "OS_MCA: process [pid: %d](%s) encounters MCA (paddr=%lx)\n",
128 current->pid, current->comm, paddr);
128 129
129 spin_lock(&mca_bh_lock); 130 spin_lock(&mca_bh_lock);
130 switch (mca_page_isolate(paddr)) { 131 switch (mca_page_isolate(paddr)) {
@@ -132,7 +133,7 @@ mca_handler_bh(unsigned long paddr)
132 printk(KERN_DEBUG "Page isolation: ( %lx ) success.\n", paddr); 133 printk(KERN_DEBUG "Page isolation: ( %lx ) success.\n", paddr);
133 break; 134 break;
134 case ISOLATE_NG: 135 case ISOLATE_NG:
135 printk(KERN_DEBUG "Page isolation: ( %lx ) failure.\n", paddr); 136 printk(KERN_CRIT "Page isolation: ( %lx ) failure.\n", paddr);
136 break; 137 break;
137 default: 138 default:
138 break; 139 break;
@@ -437,6 +438,9 @@ recover_from_read_error(slidx_table_t *slidx,
437 * the process not have any locks of kernel. 438 * the process not have any locks of kernel.
438 */ 439 */
439 440
441 /* Is minstate valid? */
442 if (!peidx_bottom(peidx) || !(peidx_bottom(peidx)->valid.minstate))
443 return 0;
440 psr1 =(struct ia64_psr *)&(peidx_minstate_area(peidx)->pmsa_ipsr); 444 psr1 =(struct ia64_psr *)&(peidx_minstate_area(peidx)->pmsa_ipsr);
441 445
442 /* 446 /*
@@ -564,10 +568,15 @@ recover_from_processor_error(int platform, slidx_table_t *slidx,
564 return 0; 568 return 0;
565 569
566 /* 570 /*
567 * If there is no bus error, record is weird but we need not to recover. 571 * The cache check and bus check bits have four possible states
572 * cc bc
573 * 0 0 Weird record, not recovered
574 * 1 0 Cache error, not recovered
575 * 0 1 I/O error, attempt recovery
576 * 1 1 Memory error, attempt recovery
568 */ 577 */
569 if (psp->bc == 0 || pbci == NULL) 578 if (psp->bc == 0 || pbci == NULL)
570 return 1; 579 return 0;
571 580
572 /* 581 /*
573 * Sorry, we cannot handle so many. 582 * Sorry, we cannot handle so many.
diff --git a/arch/ia64/kernel/perfmon.c b/arch/ia64/kernel/perfmon.c
index 18c51c37a9a3..077f21216b65 100644
--- a/arch/ia64/kernel/perfmon.c
+++ b/arch/ia64/kernel/perfmon.c
@@ -38,7 +38,9 @@
38#include <linux/pagemap.h> 38#include <linux/pagemap.h>
39#include <linux/mount.h> 39#include <linux/mount.h>
40#include <linux/bitops.h> 40#include <linux/bitops.h>
41#include <linux/capability.h>
41#include <linux/rcupdate.h> 42#include <linux/rcupdate.h>
43#include <linux/completion.h>
42 44
43#include <asm/errno.h> 45#include <asm/errno.h>
44#include <asm/intrinsics.h> 46#include <asm/intrinsics.h>
@@ -285,7 +287,7 @@ typedef struct pfm_context {
285 287
286 unsigned long ctx_ovfl_regs[4]; /* which registers overflowed (notification) */ 288 unsigned long ctx_ovfl_regs[4]; /* which registers overflowed (notification) */
287 289
288 struct semaphore ctx_restart_sem; /* use for blocking notification mode */ 290 struct completion ctx_restart_done; /* use for blocking notification mode */
289 291
290 unsigned long ctx_used_pmds[4]; /* bitmask of PMD used */ 292 unsigned long ctx_used_pmds[4]; /* bitmask of PMD used */
291 unsigned long ctx_all_pmds[4]; /* bitmask of all accessible PMDs */ 293 unsigned long ctx_all_pmds[4]; /* bitmask of all accessible PMDs */
@@ -627,9 +629,11 @@ static int pfm_write_ibr_dbr(int mode, pfm_context_t *ctx, void *arg, int count,
627 629
628#include "perfmon_itanium.h" 630#include "perfmon_itanium.h"
629#include "perfmon_mckinley.h" 631#include "perfmon_mckinley.h"
632#include "perfmon_montecito.h"
630#include "perfmon_generic.h" 633#include "perfmon_generic.h"
631 634
632static pmu_config_t *pmu_confs[]={ 635static pmu_config_t *pmu_confs[]={
636 &pmu_conf_mont,
633 &pmu_conf_mck, 637 &pmu_conf_mck,
634 &pmu_conf_ita, 638 &pmu_conf_ita,
635 &pmu_conf_gen, /* must be last */ 639 &pmu_conf_gen, /* must be last */
@@ -1709,7 +1713,7 @@ static void
1709pfm_syswide_force_stop(void *info) 1713pfm_syswide_force_stop(void *info)
1710{ 1714{
1711 pfm_context_t *ctx = (pfm_context_t *)info; 1715 pfm_context_t *ctx = (pfm_context_t *)info;
1712 struct pt_regs *regs = ia64_task_regs(current); 1716 struct pt_regs *regs = task_pt_regs(current);
1713 struct task_struct *owner; 1717 struct task_struct *owner;
1714 unsigned long flags; 1718 unsigned long flags;
1715 int ret; 1719 int ret;
@@ -1814,7 +1818,7 @@ pfm_flush(struct file *filp)
1814 is_system = ctx->ctx_fl_system; 1818 is_system = ctx->ctx_fl_system;
1815 1819
1816 task = PFM_CTX_TASK(ctx); 1820 task = PFM_CTX_TASK(ctx);
1817 regs = ia64_task_regs(task); 1821 regs = task_pt_regs(task);
1818 1822
1819 DPRINT(("ctx_state=%d is_current=%d\n", 1823 DPRINT(("ctx_state=%d is_current=%d\n",
1820 state, 1824 state,
@@ -1944,7 +1948,7 @@ pfm_close(struct inode *inode, struct file *filp)
1944 is_system = ctx->ctx_fl_system; 1948 is_system = ctx->ctx_fl_system;
1945 1949
1946 task = PFM_CTX_TASK(ctx); 1950 task = PFM_CTX_TASK(ctx);
1947 regs = ia64_task_regs(task); 1951 regs = task_pt_regs(task);
1948 1952
1949 DPRINT(("ctx_state=%d is_current=%d\n", 1953 DPRINT(("ctx_state=%d is_current=%d\n",
1950 state, 1954 state,
@@ -1988,7 +1992,7 @@ pfm_close(struct inode *inode, struct file *filp)
1988 /* 1992 /*
1989 * force task to wake up from MASKED state 1993 * force task to wake up from MASKED state
1990 */ 1994 */
1991 up(&ctx->ctx_restart_sem); 1995 complete(&ctx->ctx_restart_done);
1992 1996
1993 DPRINT(("waking up ctx_state=%d\n", state)); 1997 DPRINT(("waking up ctx_state=%d\n", state));
1994 1998
@@ -2703,7 +2707,7 @@ pfm_context_create(pfm_context_t *ctx, void *arg, int count, struct pt_regs *reg
2703 /* 2707 /*
2704 * init restart semaphore to locked 2708 * init restart semaphore to locked
2705 */ 2709 */
2706 sema_init(&ctx->ctx_restart_sem, 0); 2710 init_completion(&ctx->ctx_restart_done);
2707 2711
2708 /* 2712 /*
2709 * activation is used in SMP only 2713 * activation is used in SMP only
@@ -3684,7 +3688,7 @@ pfm_restart(pfm_context_t *ctx, void *arg, int count, struct pt_regs *regs)
3684 */ 3688 */
3685 if (CTX_OVFL_NOBLOCK(ctx) == 0 && state == PFM_CTX_MASKED) { 3689 if (CTX_OVFL_NOBLOCK(ctx) == 0 && state == PFM_CTX_MASKED) {
3686 DPRINT(("unblocking [%d] \n", task->pid)); 3690 DPRINT(("unblocking [%d] \n", task->pid));
3687 up(&ctx->ctx_restart_sem); 3691 complete(&ctx->ctx_restart_done);
3688 } else { 3692 } else {
3689 DPRINT(("[%d] armed exit trap\n", task->pid)); 3693 DPRINT(("[%d] armed exit trap\n", task->pid));
3690 3694
@@ -4051,7 +4055,7 @@ pfm_stop(pfm_context_t *ctx, void *arg, int count, struct pt_regs *regs)
4051 */ 4055 */
4052 ia64_psr(regs)->up = 0; 4056 ia64_psr(regs)->up = 0;
4053 } else { 4057 } else {
4054 tregs = ia64_task_regs(task); 4058 tregs = task_pt_regs(task);
4055 4059
4056 /* 4060 /*
4057 * stop monitoring at the user level 4061 * stop monitoring at the user level
@@ -4133,7 +4137,7 @@ pfm_start(pfm_context_t *ctx, void *arg, int count, struct pt_regs *regs)
4133 ia64_psr(regs)->up = 1; 4137 ia64_psr(regs)->up = 1;
4134 4138
4135 } else { 4139 } else {
4136 tregs = ia64_task_regs(ctx->ctx_task); 4140 tregs = task_pt_regs(ctx->ctx_task);
4137 4141
4138 /* 4142 /*
4139 * start monitoring at the kernel level the next 4143 * start monitoring at the kernel level the next
@@ -4403,7 +4407,7 @@ pfm_context_load(pfm_context_t *ctx, void *arg, int count, struct pt_regs *regs)
4403 /* 4407 /*
4404 * when not current, task MUST be stopped, so this is safe 4408 * when not current, task MUST be stopped, so this is safe
4405 */ 4409 */
4406 regs = ia64_task_regs(task); 4410 regs = task_pt_regs(task);
4407 4411
4408 /* force a full reload */ 4412 /* force a full reload */
4409 ctx->ctx_last_activation = PFM_INVALID_ACTIVATION; 4413 ctx->ctx_last_activation = PFM_INVALID_ACTIVATION;
@@ -4529,7 +4533,7 @@ pfm_context_unload(pfm_context_t *ctx, void *arg, int count, struct pt_regs *reg
4529 /* 4533 /*
4530 * per-task mode 4534 * per-task mode
4531 */ 4535 */
4532 tregs = task == current ? regs : ia64_task_regs(task); 4536 tregs = task == current ? regs : task_pt_regs(task);
4533 4537
4534 if (task == current) { 4538 if (task == current) {
4535 /* 4539 /*
@@ -4592,7 +4596,7 @@ pfm_exit_thread(struct task_struct *task)
4592{ 4596{
4593 pfm_context_t *ctx; 4597 pfm_context_t *ctx;
4594 unsigned long flags; 4598 unsigned long flags;
4595 struct pt_regs *regs = ia64_task_regs(task); 4599 struct pt_regs *regs = task_pt_regs(task);
4596 int ret, state; 4600 int ret, state;
4597 int free_ok = 0; 4601 int free_ok = 0;
4598 4602
@@ -4925,7 +4929,7 @@ restart_args:
4925 if (unlikely(ret)) goto abort_locked; 4929 if (unlikely(ret)) goto abort_locked;
4926 4930
4927skip_fd: 4931skip_fd:
4928 ret = (*func)(ctx, args_k, count, ia64_task_regs(current)); 4932 ret = (*func)(ctx, args_k, count, task_pt_regs(current));
4929 4933
4930 call_made = 1; 4934 call_made = 1;
4931 4935
@@ -5049,7 +5053,7 @@ pfm_handle_work(void)
5049 5053
5050 pfm_clear_task_notify(); 5054 pfm_clear_task_notify();
5051 5055
5052 regs = ia64_task_regs(current); 5056 regs = task_pt_regs(current);
5053 5057
5054 /* 5058 /*
5055 * extract reason for being here and clear 5059 * extract reason for being here and clear
@@ -5086,7 +5090,7 @@ pfm_handle_work(void)
5086 * may go through without blocking on SMP systems 5090 * may go through without blocking on SMP systems
5087 * if restart has been received already by the time we call down() 5091 * if restart has been received already by the time we call down()
5088 */ 5092 */
5089 ret = down_interruptible(&ctx->ctx_restart_sem); 5093 ret = wait_for_completion_interruptible(&ctx->ctx_restart_done);
5090 5094
5091 DPRINT(("after block sleeping ret=%d\n", ret)); 5095 DPRINT(("after block sleeping ret=%d\n", ret));
5092 5096
@@ -5793,7 +5797,7 @@ pfm_syst_wide_update_task(struct task_struct *task, unsigned long info, int is_c
5793 * on every CPU, so we can rely on the pid to identify the idle task. 5797 * on every CPU, so we can rely on the pid to identify the idle task.
5794 */ 5798 */
5795 if ((info & PFM_CPUINFO_EXCL_IDLE) == 0 || task->pid) { 5799 if ((info & PFM_CPUINFO_EXCL_IDLE) == 0 || task->pid) {
5796 regs = ia64_task_regs(task); 5800 regs = task_pt_regs(task);
5797 ia64_psr(regs)->pp = is_ctxswin ? dcr_pp : 0; 5801 ia64_psr(regs)->pp = is_ctxswin ? dcr_pp : 0;
5798 return; 5802 return;
5799 } 5803 }
@@ -5876,7 +5880,7 @@ pfm_save_regs(struct task_struct *task)
5876 flags = pfm_protect_ctx_ctxsw(ctx); 5880 flags = pfm_protect_ctx_ctxsw(ctx);
5877 5881
5878 if (ctx->ctx_state == PFM_CTX_ZOMBIE) { 5882 if (ctx->ctx_state == PFM_CTX_ZOMBIE) {
5879 struct pt_regs *regs = ia64_task_regs(task); 5883 struct pt_regs *regs = task_pt_regs(task);
5880 5884
5881 pfm_clear_psr_up(); 5885 pfm_clear_psr_up();
5882 5886
@@ -6076,7 +6080,7 @@ pfm_load_regs (struct task_struct *task)
6076 BUG_ON(psr & IA64_PSR_I); 6080 BUG_ON(psr & IA64_PSR_I);
6077 6081
6078 if (unlikely(ctx->ctx_state == PFM_CTX_ZOMBIE)) { 6082 if (unlikely(ctx->ctx_state == PFM_CTX_ZOMBIE)) {
6079 struct pt_regs *regs = ia64_task_regs(task); 6083 struct pt_regs *regs = task_pt_regs(task);
6080 6084
6081 BUG_ON(ctx->ctx_smpl_hdr); 6085 BUG_ON(ctx->ctx_smpl_hdr);
6082 6086
@@ -6445,7 +6449,7 @@ pfm_alt_save_pmu_state(void *data)
6445{ 6449{
6446 struct pt_regs *regs; 6450 struct pt_regs *regs;
6447 6451
6448 regs = ia64_task_regs(current); 6452 regs = task_pt_regs(current);
6449 6453
6450 DPRINT(("called\n")); 6454 DPRINT(("called\n"));
6451 6455
@@ -6471,7 +6475,7 @@ pfm_alt_restore_pmu_state(void *data)
6471{ 6475{
6472 struct pt_regs *regs; 6476 struct pt_regs *regs;
6473 6477
6474 regs = ia64_task_regs(current); 6478 regs = task_pt_regs(current);
6475 6479
6476 DPRINT(("called\n")); 6480 DPRINT(("called\n"));
6477 6481
@@ -6756,7 +6760,7 @@ dump_pmu_state(const char *from)
6756 local_irq_save(flags); 6760 local_irq_save(flags);
6757 6761
6758 this_cpu = smp_processor_id(); 6762 this_cpu = smp_processor_id();
6759 regs = ia64_task_regs(current); 6763 regs = task_pt_regs(current);
6760 info = PFM_CPUINFO_GET(); 6764 info = PFM_CPUINFO_GET();
6761 dcr = ia64_getreg(_IA64_REG_CR_DCR); 6765 dcr = ia64_getreg(_IA64_REG_CR_DCR);
6762 6766
diff --git a/arch/ia64/kernel/perfmon_montecito.h b/arch/ia64/kernel/perfmon_montecito.h
new file mode 100644
index 000000000000..cd06ac6a686c
--- /dev/null
+++ b/arch/ia64/kernel/perfmon_montecito.h
@@ -0,0 +1,269 @@
1/*
2 * This file contains the Montecito PMU register description tables
3 * and pmc checker used by perfmon.c.
4 *
5 * Copyright (c) 2005-2006 Hewlett-Packard Development Company, L.P.
6 * Contributed by Stephane Eranian <eranian@hpl.hp.com>
7 */
8static int pfm_mont_pmc_check(struct task_struct *task, pfm_context_t *ctx, unsigned int cnum, unsigned long *val, struct pt_regs *regs);
9
10#define RDEP_MONT_ETB (RDEP(38)|RDEP(39)|RDEP(48)|RDEP(49)|RDEP(50)|RDEP(51)|RDEP(52)|RDEP(53)|RDEP(54)|\
11 RDEP(55)|RDEP(56)|RDEP(57)|RDEP(58)|RDEP(59)|RDEP(60)|RDEP(61)|RDEP(62)|RDEP(63))
12#define RDEP_MONT_DEAR (RDEP(32)|RDEP(33)|RDEP(36))
13#define RDEP_MONT_IEAR (RDEP(34)|RDEP(35))
14
15static pfm_reg_desc_t pfm_mont_pmc_desc[PMU_MAX_PMCS]={
16/* pmc0 */ { PFM_REG_CONTROL , 0, 0x0, -1, NULL, NULL, {0,0, 0, 0}, {0,0, 0, 0}},
17/* pmc1 */ { PFM_REG_CONTROL , 0, 0x0, -1, NULL, NULL, {0,0, 0, 0}, {0,0, 0, 0}},
18/* pmc2 */ { PFM_REG_CONTROL , 0, 0x0, -1, NULL, NULL, {0,0, 0, 0}, {0,0, 0, 0}},
19/* pmc3 */ { PFM_REG_CONTROL , 0, 0x0, -1, NULL, NULL, {0,0, 0, 0}, {0,0, 0, 0}},
20/* pmc4 */ { PFM_REG_COUNTING, 6, 0x2000000, 0x7c7fff7f, NULL, pfm_mont_pmc_check, {RDEP(4),0, 0, 0}, {0,0, 0, 0}},
21/* pmc5 */ { PFM_REG_COUNTING, 6, 0x2000000, 0x7c7fff7f, NULL, pfm_mont_pmc_check, {RDEP(5),0, 0, 0}, {0,0, 0, 0}},
22/* pmc6 */ { PFM_REG_COUNTING, 6, 0x2000000, 0x7c7fff7f, NULL, pfm_mont_pmc_check, {RDEP(6),0, 0, 0}, {0,0, 0, 0}},
23/* pmc7 */ { PFM_REG_COUNTING, 6, 0x2000000, 0x7c7fff7f, NULL, pfm_mont_pmc_check, {RDEP(7),0, 0, 0}, {0,0, 0, 0}},
24/* pmc8 */ { PFM_REG_COUNTING, 6, 0x2000000, 0x7c7fff7f, NULL, pfm_mont_pmc_check, {RDEP(8),0, 0, 0}, {0,0, 0, 0}},
25/* pmc9 */ { PFM_REG_COUNTING, 6, 0x2000000, 0x7c7fff7f, NULL, pfm_mont_pmc_check, {RDEP(9),0, 0, 0}, {0,0, 0, 0}},
26/* pmc10 */ { PFM_REG_COUNTING, 6, 0x2000000, 0x7c7fff7f, NULL, pfm_mont_pmc_check, {RDEP(10),0, 0, 0}, {0,0, 0, 0}},
27/* pmc11 */ { PFM_REG_COUNTING, 6, 0x2000000, 0x7c7fff7f, NULL, pfm_mont_pmc_check, {RDEP(11),0, 0, 0}, {0,0, 0, 0}},
28/* pmc12 */ { PFM_REG_COUNTING, 6, 0x2000000, 0x7c7fff7f, NULL, pfm_mont_pmc_check, {RDEP(12),0, 0, 0}, {0,0, 0, 0}},
29/* pmc13 */ { PFM_REG_COUNTING, 6, 0x2000000, 0x7c7fff7f, NULL, pfm_mont_pmc_check, {RDEP(13),0, 0, 0}, {0,0, 0, 0}},
30/* pmc14 */ { PFM_REG_COUNTING, 6, 0x2000000, 0x7c7fff7f, NULL, pfm_mont_pmc_check, {RDEP(14),0, 0, 0}, {0,0, 0, 0}},
31/* pmc15 */ { PFM_REG_COUNTING, 6, 0x2000000, 0x7c7fff7f, NULL, pfm_mont_pmc_check, {RDEP(15),0, 0, 0}, {0,0, 0, 0}},
32/* pmc16 */ { PFM_REG_NOTIMPL, },
33/* pmc17 */ { PFM_REG_NOTIMPL, },
34/* pmc18 */ { PFM_REG_NOTIMPL, },
35/* pmc19 */ { PFM_REG_NOTIMPL, },
36/* pmc20 */ { PFM_REG_NOTIMPL, },
37/* pmc21 */ { PFM_REG_NOTIMPL, },
38/* pmc22 */ { PFM_REG_NOTIMPL, },
39/* pmc23 */ { PFM_REG_NOTIMPL, },
40/* pmc24 */ { PFM_REG_NOTIMPL, },
41/* pmc25 */ { PFM_REG_NOTIMPL, },
42/* pmc26 */ { PFM_REG_NOTIMPL, },
43/* pmc27 */ { PFM_REG_NOTIMPL, },
44/* pmc28 */ { PFM_REG_NOTIMPL, },
45/* pmc29 */ { PFM_REG_NOTIMPL, },
46/* pmc30 */ { PFM_REG_NOTIMPL, },
47/* pmc31 */ { PFM_REG_NOTIMPL, },
48/* pmc32 */ { PFM_REG_CONFIG, 0, 0x30f01ffffffffff, 0x30f01ffffffffff, NULL, pfm_mont_pmc_check, {0,0, 0, 0}, {0,0, 0, 0}},
49/* pmc33 */ { PFM_REG_CONFIG, 0, 0x0, 0x1ffffffffff, NULL, pfm_mont_pmc_check, {0,0, 0, 0}, {0,0, 0, 0}},
50/* pmc34 */ { PFM_REG_CONFIG, 0, 0xf01ffffffffff, 0xf01ffffffffff, NULL, pfm_mont_pmc_check, {0,0, 0, 0}, {0,0, 0, 0}},
51/* pmc35 */ { PFM_REG_CONFIG, 0, 0x0, 0x1ffffffffff, NULL, pfm_mont_pmc_check, {0,0, 0, 0}, {0,0, 0, 0}},
52/* pmc36 */ { PFM_REG_CONFIG, 0, 0xfffffff0, 0xf, NULL, pfm_mont_pmc_check, {0,0, 0, 0}, {0,0, 0, 0}},
53/* pmc37 */ { PFM_REG_MONITOR, 4, 0x0, 0x3fff, NULL, pfm_mont_pmc_check, {RDEP_MONT_IEAR, 0, 0, 0}, {0, 0, 0, 0}},
54/* pmc38 */ { PFM_REG_CONFIG, 0, 0xdb6, 0x2492, NULL, pfm_mont_pmc_check, {0,0, 0, 0}, {0,0, 0, 0}},
55/* pmc39 */ { PFM_REG_MONITOR, 6, 0x0, 0xffcf, NULL, pfm_mont_pmc_check, {RDEP_MONT_ETB,0, 0, 0}, {0,0, 0, 0}},
56/* pmc40 */ { PFM_REG_MONITOR, 6, 0x2000000, 0xf01cf, NULL, pfm_mont_pmc_check, {RDEP_MONT_DEAR,0, 0, 0}, {0,0, 0, 0}},
57/* pmc41 */ { PFM_REG_CONFIG, 0, 0x00002078fefefefe, 0x1e00018181818, NULL, pfm_mont_pmc_check, {0,0, 0, 0}, {0,0, 0, 0}},
58/* pmc42 */ { PFM_REG_MONITOR, 6, 0x0, 0x7ff4f, NULL, pfm_mont_pmc_check, {RDEP_MONT_ETB,0, 0, 0}, {0,0, 0, 0}},
59 { PFM_REG_END , 0, 0x0, -1, NULL, NULL, {0,}, {0,}}, /* end marker */
60};
61
62static pfm_reg_desc_t pfm_mont_pmd_desc[PMU_MAX_PMDS]={
63/* pmd0 */ { PFM_REG_NOTIMPL, },
64/* pmd1 */ { PFM_REG_NOTIMPL, },
65/* pmd2 */ { PFM_REG_NOTIMPL, },
66/* pmd3 */ { PFM_REG_NOTIMPL, },
67/* pmd4 */ { PFM_REG_COUNTING, 0, 0x0, -1, NULL, NULL, {0,0, 0, 0}, {RDEP(4),0, 0, 0}},
68/* pmd5 */ { PFM_REG_COUNTING, 0, 0x0, -1, NULL, NULL, {0,0, 0, 0}, {RDEP(5),0, 0, 0}},
69/* pmd6 */ { PFM_REG_COUNTING, 0, 0x0, -1, NULL, NULL, {0,0, 0, 0}, {RDEP(6),0, 0, 0}},
70/* pmd7 */ { PFM_REG_COUNTING, 0, 0x0, -1, NULL, NULL, {0,0, 0, 0}, {RDEP(7),0, 0, 0}},
71/* pmd8 */ { PFM_REG_COUNTING, 0, 0x0, -1, NULL, NULL, {0,0, 0, 0}, {RDEP(8),0, 0, 0}},
72/* pmd9 */ { PFM_REG_COUNTING, 0, 0x0, -1, NULL, NULL, {0,0, 0, 0}, {RDEP(9),0, 0, 0}},
73/* pmd10 */ { PFM_REG_COUNTING, 0, 0x0, -1, NULL, NULL, {0,0, 0, 0}, {RDEP(10),0, 0, 0}},
74/* pmd11 */ { PFM_REG_COUNTING, 0, 0x0, -1, NULL, NULL, {0,0, 0, 0}, {RDEP(11),0, 0, 0}},
75/* pmd12 */ { PFM_REG_COUNTING, 0, 0x0, -1, NULL, NULL, {0,0, 0, 0}, {RDEP(12),0, 0, 0}},
76/* pmd13 */ { PFM_REG_COUNTING, 0, 0x0, -1, NULL, NULL, {0,0, 0, 0}, {RDEP(13),0, 0, 0}},
77/* pmd14 */ { PFM_REG_COUNTING, 0, 0x0, -1, NULL, NULL, {0,0, 0, 0}, {RDEP(14),0, 0, 0}},
78/* pmd15 */ { PFM_REG_COUNTING, 0, 0x0, -1, NULL, NULL, {0,0, 0, 0}, {RDEP(15),0, 0, 0}},
79/* pmd16 */ { PFM_REG_NOTIMPL, },
80/* pmd17 */ { PFM_REG_NOTIMPL, },
81/* pmd18 */ { PFM_REG_NOTIMPL, },
82/* pmd19 */ { PFM_REG_NOTIMPL, },
83/* pmd20 */ { PFM_REG_NOTIMPL, },
84/* pmd21 */ { PFM_REG_NOTIMPL, },
85/* pmd22 */ { PFM_REG_NOTIMPL, },
86/* pmd23 */ { PFM_REG_NOTIMPL, },
87/* pmd24 */ { PFM_REG_NOTIMPL, },
88/* pmd25 */ { PFM_REG_NOTIMPL, },
89/* pmd26 */ { PFM_REG_NOTIMPL, },
90/* pmd27 */ { PFM_REG_NOTIMPL, },
91/* pmd28 */ { PFM_REG_NOTIMPL, },
92/* pmd29 */ { PFM_REG_NOTIMPL, },
93/* pmd30 */ { PFM_REG_NOTIMPL, },
94/* pmd31 */ { PFM_REG_NOTIMPL, },
95/* pmd32 */ { PFM_REG_BUFFER, 0, 0x0, -1, NULL, NULL, {RDEP(33)|RDEP(36),0, 0, 0}, {RDEP(40),0, 0, 0}},
96/* pmd33 */ { PFM_REG_BUFFER, 0, 0x0, -1, NULL, NULL, {RDEP(32)|RDEP(36),0, 0, 0}, {RDEP(40),0, 0, 0}},
97/* pmd34 */ { PFM_REG_BUFFER, 0, 0x0, -1, NULL, NULL, {RDEP(35),0, 0, 0}, {RDEP(37),0, 0, 0}},
98/* pmd35 */ { PFM_REG_BUFFER, 0, 0x0, -1, NULL, NULL, {RDEP(34),0, 0, 0}, {RDEP(37),0, 0, 0}},
99/* pmd36 */ { PFM_REG_BUFFER, 0, 0x0, -1, NULL, NULL, {RDEP(32)|RDEP(33),0, 0, 0}, {RDEP(40),0, 0, 0}},
100/* pmd37 */ { PFM_REG_NOTIMPL, },
101/* pmd38 */ { PFM_REG_BUFFER, 0, 0x0, -1, NULL, NULL, {RDEP_MONT_ETB,0, 0, 0}, {RDEP(39),0, 0, 0}},
102/* pmd39 */ { PFM_REG_BUFFER, 0, 0x0, -1, NULL, NULL, {RDEP_MONT_ETB,0, 0, 0}, {RDEP(39),0, 0, 0}},
103/* pmd40 */ { PFM_REG_NOTIMPL, },
104/* pmd41 */ { PFM_REG_NOTIMPL, },
105/* pmd42 */ { PFM_REG_NOTIMPL, },
106/* pmd43 */ { PFM_REG_NOTIMPL, },
107/* pmd44 */ { PFM_REG_NOTIMPL, },
108/* pmd45 */ { PFM_REG_NOTIMPL, },
109/* pmd46 */ { PFM_REG_NOTIMPL, },
110/* pmd47 */ { PFM_REG_NOTIMPL, },
111/* pmd48 */ { PFM_REG_BUFFER, 0, 0x0, -1, NULL, NULL, {RDEP_MONT_ETB,0, 0, 0}, {RDEP(39),0, 0, 0}},
112/* pmd49 */ { PFM_REG_BUFFER, 0, 0x0, -1, NULL, NULL, {RDEP_MONT_ETB,0, 0, 0}, {RDEP(39),0, 0, 0}},
113/* pmd50 */ { PFM_REG_BUFFER, 0, 0x0, -1, NULL, NULL, {RDEP_MONT_ETB,0, 0, 0}, {RDEP(39),0, 0, 0}},
114/* pmd51 */ { PFM_REG_BUFFER, 0, 0x0, -1, NULL, NULL, {RDEP_MONT_ETB,0, 0, 0}, {RDEP(39),0, 0, 0}},
115/* pmd52 */ { PFM_REG_BUFFER, 0, 0x0, -1, NULL, NULL, {RDEP_MONT_ETB,0, 0, 0}, {RDEP(39),0, 0, 0}},
116/* pmd53 */ { PFM_REG_BUFFER, 0, 0x0, -1, NULL, NULL, {RDEP_MONT_ETB,0, 0, 0}, {RDEP(39),0, 0, 0}},
117/* pmd54 */ { PFM_REG_BUFFER, 0, 0x0, -1, NULL, NULL, {RDEP_MONT_ETB,0, 0, 0}, {RDEP(39),0, 0, 0}},
118/* pmd55 */ { PFM_REG_BUFFER, 0, 0x0, -1, NULL, NULL, {RDEP_MONT_ETB,0, 0, 0}, {RDEP(39),0, 0, 0}},
119/* pmd56 */ { PFM_REG_BUFFER, 0, 0x0, -1, NULL, NULL, {RDEP_MONT_ETB,0, 0, 0}, {RDEP(39),0, 0, 0}},
120/* pmd57 */ { PFM_REG_BUFFER, 0, 0x0, -1, NULL, NULL, {RDEP_MONT_ETB,0, 0, 0}, {RDEP(39),0, 0, 0}},
121/* pmd58 */ { PFM_REG_BUFFER, 0, 0x0, -1, NULL, NULL, {RDEP_MONT_ETB,0, 0, 0}, {RDEP(39),0, 0, 0}},
122/* pmd59 */ { PFM_REG_BUFFER, 0, 0x0, -1, NULL, NULL, {RDEP_MONT_ETB,0, 0, 0}, {RDEP(39),0, 0, 0}},
123/* pmd60 */ { PFM_REG_BUFFER, 0, 0x0, -1, NULL, NULL, {RDEP_MONT_ETB,0, 0, 0}, {RDEP(39),0, 0, 0}},
124/* pmd61 */ { PFM_REG_BUFFER, 0, 0x0, -1, NULL, NULL, {RDEP_MONT_ETB,0, 0, 0}, {RDEP(39),0, 0, 0}},
125/* pmd62 */ { PFM_REG_BUFFER, 0, 0x0, -1, NULL, NULL, {RDEP_MONT_ETB,0, 0, 0}, {RDEP(39),0, 0, 0}},
126/* pmd63 */ { PFM_REG_BUFFER, 0, 0x0, -1, NULL, NULL, {RDEP_MONT_ETB,0, 0, 0}, {RDEP(39),0, 0, 0}},
127 { PFM_REG_END , 0, 0x0, -1, NULL, NULL, {0,}, {0,}}, /* end marker */
128};
129
130/*
131 * PMC reserved fields must have their power-up values preserved
132 */
133static int
134pfm_mont_reserved(unsigned int cnum, unsigned long *val, struct pt_regs *regs)
135{
136 unsigned long tmp1, tmp2, ival = *val;
137
138 /* remove reserved areas from user value */
139 tmp1 = ival & PMC_RSVD_MASK(cnum);
140
141 /* get reserved fields values */
142 tmp2 = PMC_DFL_VAL(cnum) & ~PMC_RSVD_MASK(cnum);
143
144 *val = tmp1 | tmp2;
145
146 DPRINT(("pmc[%d]=0x%lx, mask=0x%lx, reset=0x%lx, val=0x%lx\n",
147 cnum, ival, PMC_RSVD_MASK(cnum), PMC_DFL_VAL(cnum), *val));
148 return 0;
149}
150
151/*
152 * task can be NULL if the context is unloaded
153 */
154static int
155pfm_mont_pmc_check(struct task_struct *task, pfm_context_t *ctx, unsigned int cnum, unsigned long *val, struct pt_regs *regs)
156{
157 int ret = 0;
158 unsigned long val32 = 0, val38 = 0, val41 = 0;
159 unsigned long tmpval;
160 int check_case1 = 0;
161 int is_loaded;
162
163 /* first preserve the reserved fields */
164 pfm_mont_reserved(cnum, val, regs);
165
166 tmpval = *val;
167
168 /* sanity check */
169 if (ctx == NULL) return -EINVAL;
170
171 is_loaded = ctx->ctx_state == PFM_CTX_LOADED || ctx->ctx_state == PFM_CTX_MASKED;
172
173 /*
174 * we must clear the debug registers if pmc41 has a value which enable
175 * memory pipeline event constraints. In this case we need to clear the
176 * the debug registers if they have not yet been accessed. This is required
177 * to avoid picking stale state.
178 * PMC41 is "active" if:
179 * one of the pmc41.cfg_dtagXX field is different from 0x3
180 * AND
181 * at the corresponding pmc41.en_dbrpXX is set.
182 * AND
183 * ctx_fl_using_dbreg == 0 (i.e., dbr not yet used)
184 */
185 DPRINT(("cnum=%u val=0x%lx, using_dbreg=%d loaded=%d\n", cnum, tmpval, ctx->ctx_fl_using_dbreg, is_loaded));
186
187 if (cnum == 41 && is_loaded
188 && (tmpval & 0x1e00000000000) && (tmpval & 0x18181818UL) != 0x18181818UL && ctx->ctx_fl_using_dbreg == 0) {
189
190 DPRINT(("pmc[%d]=0x%lx has active pmc41 settings, clearing dbr\n", cnum, tmpval));
191
192 /* don't mix debug with perfmon */
193 if (task && (task->thread.flags & IA64_THREAD_DBG_VALID) != 0) return -EINVAL;
194
195 /*
196 * a count of 0 will mark the debug registers if:
197 * AND
198 */
199 ret = pfm_write_ibr_dbr(PFM_DATA_RR, ctx, NULL, 0, regs);
200 if (ret) return ret;
201 }
202 /*
203 * we must clear the (instruction) debug registers if:
204 * pmc38.ig_ibrpX is 0 (enabled)
205 * AND
206 * ctx_fl_using_dbreg == 0 (i.e., dbr not yet used)
207 */
208 if (cnum == 38 && is_loaded && ((tmpval & 0x492UL) != 0x492UL) && ctx->ctx_fl_using_dbreg == 0) {
209
210 DPRINT(("pmc38=0x%lx has active pmc38 settings, clearing ibr\n", tmpval));
211
212 /* don't mix debug with perfmon */
213 if (task && (task->thread.flags & IA64_THREAD_DBG_VALID) != 0) return -EINVAL;
214
215 /*
216 * a count of 0 will mark the debug registers as in use and also
217 * ensure that they are properly cleared.
218 */
219 ret = pfm_write_ibr_dbr(PFM_CODE_RR, ctx, NULL, 0, regs);
220 if (ret) return ret;
221
222 }
223 switch(cnum) {
224 case 32: val32 = *val;
225 val38 = ctx->ctx_pmcs[38];
226 val41 = ctx->ctx_pmcs[41];
227 check_case1 = 1;
228 break;
229 case 38: val38 = *val;
230 val32 = ctx->ctx_pmcs[32];
231 val41 = ctx->ctx_pmcs[41];
232 check_case1 = 1;
233 break;
234 case 41: val41 = *val;
235 val32 = ctx->ctx_pmcs[32];
236 val38 = ctx->ctx_pmcs[38];
237 check_case1 = 1;
238 break;
239 }
240 /* check illegal configuration which can produce inconsistencies in tagging
241 * i-side events in L1D and L2 caches
242 */
243 if (check_case1) {
244 ret = (((val41 >> 45) & 0xf) == 0 && ((val32>>57) & 0x1) == 0)
245 && ((((val38>>1) & 0x3) == 0x2 || ((val38>>1) & 0x3) == 0)
246 || (((val38>>4) & 0x3) == 0x2 || ((val38>>4) & 0x3) == 0));
247 if (ret) {
248 DPRINT(("invalid config pmc38=0x%lx pmc41=0x%lx pmc32=0x%lx\n", val38, val41, val32));
249 return -EINVAL;
250 }
251 }
252 *val = tmpval;
253 return 0;
254}
255
256/*
257 * impl_pmcs, impl_pmds are computed at runtime to minimize errors!
258 */
259static pmu_config_t pmu_conf_mont={
260 .pmu_name = "Montecito",
261 .pmu_family = 0x20,
262 .flags = PFM_PMU_IRQ_RESEND,
263 .ovfl_val = (1UL << 47) - 1,
264 .pmd_desc = pfm_mont_pmd_desc,
265 .pmc_desc = pfm_mont_pmc_desc,
266 .num_ibrs = 8,
267 .num_dbrs = 8,
268 .use_rr_dbregs = 1 /* debug register are use for range retrictions */
269};
diff --git a/arch/ia64/kernel/process.c b/arch/ia64/kernel/process.c
index e9904c74d2ba..309d59658e5f 100644
--- a/arch/ia64/kernel/process.c
+++ b/arch/ia64/kernel/process.c
@@ -328,7 +328,7 @@ ia64_save_extra (struct task_struct *task)
328#endif 328#endif
329 329
330#ifdef CONFIG_IA32_SUPPORT 330#ifdef CONFIG_IA32_SUPPORT
331 if (IS_IA32_PROCESS(ia64_task_regs(task))) 331 if (IS_IA32_PROCESS(task_pt_regs(task)))
332 ia32_save_state(task); 332 ia32_save_state(task);
333#endif 333#endif
334} 334}
@@ -353,7 +353,7 @@ ia64_load_extra (struct task_struct *task)
353#endif 353#endif
354 354
355#ifdef CONFIG_IA32_SUPPORT 355#ifdef CONFIG_IA32_SUPPORT
356 if (IS_IA32_PROCESS(ia64_task_regs(task))) 356 if (IS_IA32_PROCESS(task_pt_regs(task)))
357 ia32_load_state(task); 357 ia32_load_state(task);
358#endif 358#endif
359} 359}
@@ -488,7 +488,7 @@ copy_thread (int nr, unsigned long clone_flags,
488 * If we're cloning an IA32 task then save the IA32 extra 488 * If we're cloning an IA32 task then save the IA32 extra
489 * state from the current task to the new task 489 * state from the current task to the new task
490 */ 490 */
491 if (IS_IA32_PROCESS(ia64_task_regs(current))) { 491 if (IS_IA32_PROCESS(task_pt_regs(current))) {
492 ia32_save_state(p); 492 ia32_save_state(p);
493 if (clone_flags & CLONE_SETTLS) 493 if (clone_flags & CLONE_SETTLS)
494 retval = ia32_clone_tls(p, child_ptregs); 494 retval = ia32_clone_tls(p, child_ptregs);
@@ -701,7 +701,7 @@ int
701kernel_thread_helper (int (*fn)(void *), void *arg) 701kernel_thread_helper (int (*fn)(void *), void *arg)
702{ 702{
703#ifdef CONFIG_IA32_SUPPORT 703#ifdef CONFIG_IA32_SUPPORT
704 if (IS_IA32_PROCESS(ia64_task_regs(current))) { 704 if (IS_IA32_PROCESS(task_pt_regs(current))) {
705 /* A kernel thread is always a 64-bit process. */ 705 /* A kernel thread is always a 64-bit process. */
706 current->thread.map_base = DEFAULT_MAP_BASE; 706 current->thread.map_base = DEFAULT_MAP_BASE;
707 current->thread.task_size = DEFAULT_TASK_SIZE; 707 current->thread.task_size = DEFAULT_TASK_SIZE;
@@ -722,7 +722,7 @@ flush_thread (void)
722 current->thread.flags &= ~(IA64_THREAD_FPH_VALID | IA64_THREAD_DBG_VALID); 722 current->thread.flags &= ~(IA64_THREAD_FPH_VALID | IA64_THREAD_DBG_VALID);
723 ia64_drop_fpu(current); 723 ia64_drop_fpu(current);
724#ifdef CONFIG_IA32_SUPPORT 724#ifdef CONFIG_IA32_SUPPORT
725 if (IS_IA32_PROCESS(ia64_task_regs(current))) { 725 if (IS_IA32_PROCESS(task_pt_regs(current))) {
726 ia32_drop_partial_page_list(current); 726 ia32_drop_partial_page_list(current);
727 current->thread.task_size = IA32_PAGE_OFFSET; 727 current->thread.task_size = IA32_PAGE_OFFSET;
728 set_fs(USER_DS); 728 set_fs(USER_DS);
@@ -755,7 +755,7 @@ exit_thread (void)
755 if (current->thread.flags & IA64_THREAD_DBG_VALID) 755 if (current->thread.flags & IA64_THREAD_DBG_VALID)
756 pfm_release_debug_registers(current); 756 pfm_release_debug_registers(current);
757#endif 757#endif
758 if (IS_IA32_PROCESS(ia64_task_regs(current))) 758 if (IS_IA32_PROCESS(task_pt_regs(current)))
759 ia32_drop_partial_page_list(current); 759 ia32_drop_partial_page_list(current);
760} 760}
761 761
diff --git a/arch/ia64/kernel/ptrace.c b/arch/ia64/kernel/ptrace.c
index 4b19d0410632..eaed14aac6aa 100644
--- a/arch/ia64/kernel/ptrace.c
+++ b/arch/ia64/kernel/ptrace.c
@@ -254,7 +254,7 @@ get_rnat (struct task_struct *task, struct switch_stack *sw,
254 long num_regs, nbits; 254 long num_regs, nbits;
255 struct pt_regs *pt; 255 struct pt_regs *pt;
256 256
257 pt = ia64_task_regs(task); 257 pt = task_pt_regs(task);
258 kbsp = (unsigned long *) sw->ar_bspstore; 258 kbsp = (unsigned long *) sw->ar_bspstore;
259 ubspstore = (unsigned long *) pt->ar_bspstore; 259 ubspstore = (unsigned long *) pt->ar_bspstore;
260 260
@@ -314,7 +314,7 @@ put_rnat (struct task_struct *task, struct switch_stack *sw,
314 struct pt_regs *pt; 314 struct pt_regs *pt;
315 unsigned long cfm, *urbs_kargs; 315 unsigned long cfm, *urbs_kargs;
316 316
317 pt = ia64_task_regs(task); 317 pt = task_pt_regs(task);
318 kbsp = (unsigned long *) sw->ar_bspstore; 318 kbsp = (unsigned long *) sw->ar_bspstore;
319 ubspstore = (unsigned long *) pt->ar_bspstore; 319 ubspstore = (unsigned long *) pt->ar_bspstore;
320 320
@@ -407,7 +407,7 @@ ia64_peek (struct task_struct *child, struct switch_stack *child_stack,
407 407
408 urbs_end = (long *) user_rbs_end; 408 urbs_end = (long *) user_rbs_end;
409 laddr = (unsigned long *) addr; 409 laddr = (unsigned long *) addr;
410 child_regs = ia64_task_regs(child); 410 child_regs = task_pt_regs(child);
411 bspstore = (unsigned long *) child_regs->ar_bspstore; 411 bspstore = (unsigned long *) child_regs->ar_bspstore;
412 krbs = (unsigned long *) child + IA64_RBS_OFFSET/8; 412 krbs = (unsigned long *) child + IA64_RBS_OFFSET/8;
413 if (on_kernel_rbs(addr, (unsigned long) bspstore, 413 if (on_kernel_rbs(addr, (unsigned long) bspstore,
@@ -467,7 +467,7 @@ ia64_poke (struct task_struct *child, struct switch_stack *child_stack,
467 struct pt_regs *child_regs; 467 struct pt_regs *child_regs;
468 468
469 laddr = (unsigned long *) addr; 469 laddr = (unsigned long *) addr;
470 child_regs = ia64_task_regs(child); 470 child_regs = task_pt_regs(child);
471 bspstore = (unsigned long *) child_regs->ar_bspstore; 471 bspstore = (unsigned long *) child_regs->ar_bspstore;
472 krbs = (unsigned long *) child + IA64_RBS_OFFSET/8; 472 krbs = (unsigned long *) child + IA64_RBS_OFFSET/8;
473 if (on_kernel_rbs(addr, (unsigned long) bspstore, 473 if (on_kernel_rbs(addr, (unsigned long) bspstore,
@@ -567,7 +567,7 @@ thread_matches (struct task_struct *thread, unsigned long addr)
567 */ 567 */
568 return 0; 568 return 0;
569 569
570 thread_regs = ia64_task_regs(thread); 570 thread_regs = task_pt_regs(thread);
571 thread_rbs_end = ia64_get_user_rbs_end(thread, thread_regs, NULL); 571 thread_rbs_end = ia64_get_user_rbs_end(thread, thread_regs, NULL);
572 if (!on_kernel_rbs(addr, thread_regs->ar_bspstore, thread_rbs_end)) 572 if (!on_kernel_rbs(addr, thread_regs->ar_bspstore, thread_rbs_end))
573 return 0; 573 return 0;
@@ -627,7 +627,7 @@ find_thread_for_addr (struct task_struct *child, unsigned long addr)
627inline void 627inline void
628ia64_flush_fph (struct task_struct *task) 628ia64_flush_fph (struct task_struct *task)
629{ 629{
630 struct ia64_psr *psr = ia64_psr(ia64_task_regs(task)); 630 struct ia64_psr *psr = ia64_psr(task_pt_regs(task));
631 631
632 /* 632 /*
633 * Prevent migrating this task while 633 * Prevent migrating this task while
@@ -653,7 +653,7 @@ ia64_flush_fph (struct task_struct *task)
653void 653void
654ia64_sync_fph (struct task_struct *task) 654ia64_sync_fph (struct task_struct *task)
655{ 655{
656 struct ia64_psr *psr = ia64_psr(ia64_task_regs(task)); 656 struct ia64_psr *psr = ia64_psr(task_pt_regs(task));
657 657
658 ia64_flush_fph(task); 658 ia64_flush_fph(task);
659 if (!(task->thread.flags & IA64_THREAD_FPH_VALID)) { 659 if (!(task->thread.flags & IA64_THREAD_FPH_VALID)) {
@@ -794,7 +794,7 @@ access_uarea (struct task_struct *child, unsigned long addr,
794 + offsetof(struct pt_regs, reg))) 794 + offsetof(struct pt_regs, reg)))
795 795
796 796
797 pt = ia64_task_regs(child); 797 pt = task_pt_regs(child);
798 sw = (struct switch_stack *) (child->thread.ksp + 16); 798 sw = (struct switch_stack *) (child->thread.ksp + 16);
799 799
800 if ((addr & 0x7) != 0) { 800 if ((addr & 0x7) != 0) {
@@ -1120,7 +1120,7 @@ ptrace_getregs (struct task_struct *child, struct pt_all_user_regs __user *ppr)
1120 if (!access_ok(VERIFY_WRITE, ppr, sizeof(struct pt_all_user_regs))) 1120 if (!access_ok(VERIFY_WRITE, ppr, sizeof(struct pt_all_user_regs)))
1121 return -EIO; 1121 return -EIO;
1122 1122
1123 pt = ia64_task_regs(child); 1123 pt = task_pt_regs(child);
1124 sw = (struct switch_stack *) (child->thread.ksp + 16); 1124 sw = (struct switch_stack *) (child->thread.ksp + 16);
1125 unw_init_from_blocked_task(&info, child); 1125 unw_init_from_blocked_task(&info, child);
1126 if (unw_unwind_to_user(&info) < 0) { 1126 if (unw_unwind_to_user(&info) < 0) {
@@ -1265,7 +1265,7 @@ ptrace_setregs (struct task_struct *child, struct pt_all_user_regs __user *ppr)
1265 if (!access_ok(VERIFY_READ, ppr, sizeof(struct pt_all_user_regs))) 1265 if (!access_ok(VERIFY_READ, ppr, sizeof(struct pt_all_user_regs)))
1266 return -EIO; 1266 return -EIO;
1267 1267
1268 pt = ia64_task_regs(child); 1268 pt = task_pt_regs(child);
1269 sw = (struct switch_stack *) (child->thread.ksp + 16); 1269 sw = (struct switch_stack *) (child->thread.ksp + 16);
1270 unw_init_from_blocked_task(&info, child); 1270 unw_init_from_blocked_task(&info, child);
1271 if (unw_unwind_to_user(&info) < 0) { 1271 if (unw_unwind_to_user(&info) < 0) {
@@ -1403,7 +1403,7 @@ ptrace_setregs (struct task_struct *child, struct pt_all_user_regs __user *ppr)
1403void 1403void
1404ptrace_disable (struct task_struct *child) 1404ptrace_disable (struct task_struct *child)
1405{ 1405{
1406 struct ia64_psr *child_psr = ia64_psr(ia64_task_regs(child)); 1406 struct ia64_psr *child_psr = ia64_psr(task_pt_regs(child));
1407 1407
1408 /* make sure the single step/taken-branch trap bits are not set: */ 1408 /* make sure the single step/taken-branch trap bits are not set: */
1409 child_psr->ss = 0; 1409 child_psr->ss = 0;
@@ -1422,14 +1422,7 @@ sys_ptrace (long request, pid_t pid, unsigned long addr, unsigned long data)
1422 lock_kernel(); 1422 lock_kernel();
1423 ret = -EPERM; 1423 ret = -EPERM;
1424 if (request == PTRACE_TRACEME) { 1424 if (request == PTRACE_TRACEME) {
1425 /* are we already being traced? */ 1425 ret = ptrace_traceme();
1426 if (current->ptrace & PT_PTRACED)
1427 goto out;
1428 ret = security_ptrace(current->parent, current);
1429 if (ret)
1430 goto out;
1431 current->ptrace |= PT_PTRACED;
1432 ret = 0;
1433 goto out; 1426 goto out;
1434 } 1427 }
1435 1428
@@ -1463,7 +1456,7 @@ sys_ptrace (long request, pid_t pid, unsigned long addr, unsigned long data)
1463 if (ret < 0) 1456 if (ret < 0)
1464 goto out_tsk; 1457 goto out_tsk;
1465 1458
1466 pt = ia64_task_regs(child); 1459 pt = task_pt_regs(child);
1467 sw = (struct switch_stack *) (child->thread.ksp + 16); 1460 sw = (struct switch_stack *) (child->thread.ksp + 16);
1468 1461
1469 switch (request) { 1462 switch (request) {
diff --git a/arch/ia64/kernel/sal.c b/arch/ia64/kernel/sal.c
index acc0f132f86c..056f7a6eedc7 100644
--- a/arch/ia64/kernel/sal.c
+++ b/arch/ia64/kernel/sal.c
@@ -14,6 +14,7 @@
14#include <linux/spinlock.h> 14#include <linux/spinlock.h>
15#include <linux/string.h> 15#include <linux/string.h>
16 16
17#include <asm/delay.h>
17#include <asm/page.h> 18#include <asm/page.h>
18#include <asm/sal.h> 19#include <asm/sal.h>
19#include <asm/pal.h> 20#include <asm/pal.h>
@@ -214,6 +215,78 @@ chk_nointroute_opt(void)
214static void __init sal_desc_ap_wakeup(void *p) { } 215static void __init sal_desc_ap_wakeup(void *p) { }
215#endif 216#endif
216 217
218/*
219 * HP rx5670 firmware polls for interrupts during SAL_CACHE_FLUSH by reading
220 * cr.ivr, but it never writes cr.eoi. This leaves any interrupt marked as
221 * "in-service" and masks other interrupts of equal or lower priority.
222 *
223 * HP internal defect reports: F1859, F2775, F3031.
224 */
225static int sal_cache_flush_drops_interrupts;
226
227static void __init
228check_sal_cache_flush (void)
229{
230 unsigned long flags, itv;
231 int cpu;
232 u64 vector;
233
234 cpu = get_cpu();
235 local_irq_save(flags);
236
237 /*
238 * Schedule a timer interrupt, wait until it's reported, and see if
239 * SAL_CACHE_FLUSH drops it.
240 */
241 itv = ia64_get_itv();
242 BUG_ON((itv & (1 << 16)) == 0);
243
244 ia64_set_itv(IA64_TIMER_VECTOR);
245 ia64_set_itm(ia64_get_itc() + 1000);
246
247 while (!ia64_get_irr(IA64_TIMER_VECTOR))
248 cpu_relax();
249
250 ia64_sal_cache_flush(3);
251
252 if (ia64_get_irr(IA64_TIMER_VECTOR)) {
253 vector = ia64_get_ivr();
254 ia64_eoi();
255 WARN_ON(vector != IA64_TIMER_VECTOR);
256 } else {
257 sal_cache_flush_drops_interrupts = 1;
258 printk(KERN_ERR "SAL: SAL_CACHE_FLUSH drops interrupts; "
259 "PAL_CACHE_FLUSH will be used instead\n");
260 ia64_eoi();
261 }
262
263 ia64_set_itv(itv);
264 local_irq_restore(flags);
265 put_cpu();
266}
267
268s64
269ia64_sal_cache_flush (u64 cache_type)
270{
271 struct ia64_sal_retval isrv;
272
273 if (sal_cache_flush_drops_interrupts) {
274 unsigned long flags;
275 u64 progress;
276 s64 rc;
277
278 progress = 0;
279 local_irq_save(flags);
280 rc = ia64_pal_cache_flush(cache_type,
281 PAL_CACHE_FLUSH_INVALIDATE, &progress, NULL);
282 local_irq_restore(flags);
283 return rc;
284 }
285
286 SAL_CALL(isrv, SAL_CACHE_FLUSH, cache_type, 0, 0, 0, 0, 0, 0);
287 return isrv.status;
288}
289
217void __init 290void __init
218ia64_sal_init (struct ia64_sal_systab *systab) 291ia64_sal_init (struct ia64_sal_systab *systab)
219{ 292{
@@ -262,6 +335,8 @@ ia64_sal_init (struct ia64_sal_systab *systab)
262 } 335 }
263 p += SAL_DESC_SIZE(*p); 336 p += SAL_DESC_SIZE(*p);
264 } 337 }
338
339 check_sal_cache_flush();
265} 340}
266 341
267int 342int
diff --git a/arch/ia64/kernel/salinfo.c b/arch/ia64/kernel/salinfo.c
index 1461dc660b43..9d5a823479a3 100644
--- a/arch/ia64/kernel/salinfo.c
+++ b/arch/ia64/kernel/salinfo.c
@@ -3,7 +3,7 @@
3 * 3 *
4 * Creates entries in /proc/sal for various system features. 4 * Creates entries in /proc/sal for various system features.
5 * 5 *
6 * Copyright (c) 2003 Silicon Graphics, Inc. All rights reserved. 6 * Copyright (c) 2003, 2006 Silicon Graphics, Inc. All rights reserved.
7 * Copyright (c) 2003 Hewlett-Packard Co 7 * Copyright (c) 2003 Hewlett-Packard Co
8 * Bjorn Helgaas <bjorn.helgaas@hp.com> 8 * Bjorn Helgaas <bjorn.helgaas@hp.com>
9 * 9 *
@@ -27,8 +27,17 @@
27 * mca.c may not pass a buffer, a NULL buffer just indicates that a new 27 * mca.c may not pass a buffer, a NULL buffer just indicates that a new
28 * record is available in SAL. 28 * record is available in SAL.
29 * Replace some NR_CPUS by cpus_online, for hotplug cpu. 29 * Replace some NR_CPUS by cpus_online, for hotplug cpu.
30 *
31 * Jan 5 2006 kaos@sgi.com
32 * Handle hotplug cpus coming online.
33 * Handle hotplug cpus going offline while they still have outstanding records.
34 * Use the cpu_* macros consistently.
35 * Replace the counting semaphore with a mutex and a test if the cpumask is non-empty.
36 * Modify the locking to make the test for "work to do" an atomic operation.
30 */ 37 */
31 38
39#include <linux/capability.h>
40#include <linux/cpu.h>
32#include <linux/types.h> 41#include <linux/types.h>
33#include <linux/proc_fs.h> 42#include <linux/proc_fs.h>
34#include <linux/module.h> 43#include <linux/module.h>
@@ -131,8 +140,8 @@ enum salinfo_state {
131}; 140};
132 141
133struct salinfo_data { 142struct salinfo_data {
134 volatile cpumask_t cpu_event; /* which cpus have outstanding events */ 143 cpumask_t cpu_event; /* which cpus have outstanding events */
135 struct semaphore sem; /* count of cpus with outstanding events (bits set in cpu_event) */ 144 struct semaphore mutex;
136 u8 *log_buffer; 145 u8 *log_buffer;
137 u64 log_size; 146 u64 log_size;
138 u8 *oemdata; /* decoded oem data */ 147 u8 *oemdata; /* decoded oem data */
@@ -173,6 +182,21 @@ struct salinfo_platform_oemdata_parms {
173 int ret; 182 int ret;
174}; 183};
175 184
185/* Kick the mutex that tells user space that there is work to do. Instead of
186 * trying to track the state of the mutex across multiple cpus, in user
187 * context, interrupt context, non-maskable interrupt context and hotplug cpu,
188 * it is far easier just to grab the mutex if it is free then release it.
189 *
190 * This routine must be called with data_saved_lock held, to make the down/up
191 * operation atomic.
192 */
193static void
194salinfo_work_to_do(struct salinfo_data *data)
195{
196 down_trylock(&data->mutex);
197 up(&data->mutex);
198}
199
176static void 200static void
177salinfo_platform_oemdata_cpu(void *context) 201salinfo_platform_oemdata_cpu(void *context)
178{ 202{
@@ -211,9 +235,9 @@ salinfo_log_wakeup(int type, u8 *buffer, u64 size, int irqsafe)
211 235
212 BUG_ON(type >= ARRAY_SIZE(salinfo_log_name)); 236 BUG_ON(type >= ARRAY_SIZE(salinfo_log_name));
213 237
238 if (irqsafe)
239 spin_lock_irqsave(&data_saved_lock, flags);
214 if (buffer) { 240 if (buffer) {
215 if (irqsafe)
216 spin_lock_irqsave(&data_saved_lock, flags);
217 for (i = 0, data_saved = data->data_saved; i < saved_size; ++i, ++data_saved) { 241 for (i = 0, data_saved = data->data_saved; i < saved_size; ++i, ++data_saved) {
218 if (!data_saved->buffer) 242 if (!data_saved->buffer)
219 break; 243 break;
@@ -231,13 +255,11 @@ salinfo_log_wakeup(int type, u8 *buffer, u64 size, int irqsafe)
231 data_saved->size = size; 255 data_saved->size = size;
232 data_saved->buffer = buffer; 256 data_saved->buffer = buffer;
233 } 257 }
234 if (irqsafe)
235 spin_unlock_irqrestore(&data_saved_lock, flags);
236 } 258 }
237 259 cpu_set(smp_processor_id(), data->cpu_event);
238 if (!test_and_set_bit(smp_processor_id(), &data->cpu_event)) { 260 if (irqsafe) {
239 if (irqsafe) 261 salinfo_work_to_do(data);
240 up(&data->sem); 262 spin_unlock_irqrestore(&data_saved_lock, flags);
241 } 263 }
242} 264}
243 265
@@ -248,20 +270,17 @@ static struct timer_list salinfo_timer;
248static void 270static void
249salinfo_timeout_check(struct salinfo_data *data) 271salinfo_timeout_check(struct salinfo_data *data)
250{ 272{
251 int i; 273 unsigned long flags;
252 if (!data->open) 274 if (!data->open)
253 return; 275 return;
254 for_each_online_cpu(i) { 276 if (!cpus_empty(data->cpu_event)) {
255 if (test_bit(i, &data->cpu_event)) { 277 spin_lock_irqsave(&data_saved_lock, flags);
256 /* double up() is not a problem, user space will see no 278 salinfo_work_to_do(data);
257 * records for the additional "events". 279 spin_unlock_irqrestore(&data_saved_lock, flags);
258 */
259 up(&data->sem);
260 }
261 } 280 }
262} 281}
263 282
264static void 283static void
265salinfo_timeout (unsigned long arg) 284salinfo_timeout (unsigned long arg)
266{ 285{
267 salinfo_timeout_check(salinfo_data + SAL_INFO_TYPE_MCA); 286 salinfo_timeout_check(salinfo_data + SAL_INFO_TYPE_MCA);
@@ -289,16 +308,20 @@ salinfo_event_read(struct file *file, char __user *buffer, size_t count, loff_t
289 int i, n, cpu = -1; 308 int i, n, cpu = -1;
290 309
291retry: 310retry:
292 if (down_trylock(&data->sem)) { 311 if (cpus_empty(data->cpu_event) && down_trylock(&data->mutex)) {
293 if (file->f_flags & O_NONBLOCK) 312 if (file->f_flags & O_NONBLOCK)
294 return -EAGAIN; 313 return -EAGAIN;
295 if (down_interruptible(&data->sem)) 314 if (down_interruptible(&data->mutex))
296 return -EINTR; 315 return -EINTR;
297 } 316 }
298 317
299 n = data->cpu_check; 318 n = data->cpu_check;
300 for (i = 0; i < NR_CPUS; i++) { 319 for (i = 0; i < NR_CPUS; i++) {
301 if (test_bit(n, &data->cpu_event) && cpu_online(n)) { 320 if (cpu_isset(n, data->cpu_event)) {
321 if (!cpu_online(n)) {
322 cpu_clear(n, data->cpu_event);
323 continue;
324 }
302 cpu = n; 325 cpu = n;
303 break; 326 break;
304 } 327 }
@@ -309,9 +332,6 @@ retry:
309 if (cpu == -1) 332 if (cpu == -1)
310 goto retry; 333 goto retry;
311 334
312 /* events are sticky until the user says "clear" */
313 up(&data->sem);
314
315 /* for next read, start checking at next CPU */ 335 /* for next read, start checking at next CPU */
316 data->cpu_check = cpu; 336 data->cpu_check = cpu;
317 if (++data->cpu_check == NR_CPUS) 337 if (++data->cpu_check == NR_CPUS)
@@ -380,10 +400,8 @@ salinfo_log_release(struct inode *inode, struct file *file)
380static void 400static void
381call_on_cpu(int cpu, void (*fn)(void *), void *arg) 401call_on_cpu(int cpu, void (*fn)(void *), void *arg)
382{ 402{
383 cpumask_t save_cpus_allowed, new_cpus_allowed; 403 cpumask_t save_cpus_allowed = current->cpus_allowed;
384 memcpy(&save_cpus_allowed, &current->cpus_allowed, sizeof(save_cpus_allowed)); 404 cpumask_t new_cpus_allowed = cpumask_of_cpu(cpu);
385 memset(&new_cpus_allowed, 0, sizeof(new_cpus_allowed));
386 set_bit(cpu, &new_cpus_allowed);
387 set_cpus_allowed(current, new_cpus_allowed); 405 set_cpus_allowed(current, new_cpus_allowed);
388 (*fn)(arg); 406 (*fn)(arg);
389 set_cpus_allowed(current, save_cpus_allowed); 407 set_cpus_allowed(current, save_cpus_allowed);
@@ -432,10 +450,10 @@ retry:
432 if (!data->saved_num) 450 if (!data->saved_num)
433 call_on_cpu(cpu, salinfo_log_read_cpu, data); 451 call_on_cpu(cpu, salinfo_log_read_cpu, data);
434 if (!data->log_size) { 452 if (!data->log_size) {
435 data->state = STATE_NO_DATA; 453 data->state = STATE_NO_DATA;
436 clear_bit(cpu, &data->cpu_event); 454 cpu_clear(cpu, data->cpu_event);
437 } else { 455 } else {
438 data->state = STATE_LOG_RECORD; 456 data->state = STATE_LOG_RECORD;
439 } 457 }
440} 458}
441 459
@@ -472,27 +490,31 @@ static int
472salinfo_log_clear(struct salinfo_data *data, int cpu) 490salinfo_log_clear(struct salinfo_data *data, int cpu)
473{ 491{
474 sal_log_record_header_t *rh; 492 sal_log_record_header_t *rh;
493 unsigned long flags;
494 spin_lock_irqsave(&data_saved_lock, flags);
475 data->state = STATE_NO_DATA; 495 data->state = STATE_NO_DATA;
476 if (!test_bit(cpu, &data->cpu_event)) 496 if (!cpu_isset(cpu, data->cpu_event)) {
497 spin_unlock_irqrestore(&data_saved_lock, flags);
477 return 0; 498 return 0;
478 down(&data->sem); 499 }
479 clear_bit(cpu, &data->cpu_event); 500 cpu_clear(cpu, data->cpu_event);
480 if (data->saved_num) { 501 if (data->saved_num) {
481 unsigned long flags; 502 shift1_data_saved(data, data->saved_num - 1);
482 spin_lock_irqsave(&data_saved_lock, flags);
483 shift1_data_saved(data, data->saved_num - 1 );
484 data->saved_num = 0; 503 data->saved_num = 0;
485 spin_unlock_irqrestore(&data_saved_lock, flags);
486 } 504 }
505 spin_unlock_irqrestore(&data_saved_lock, flags);
487 rh = (sal_log_record_header_t *)(data->log_buffer); 506 rh = (sal_log_record_header_t *)(data->log_buffer);
488 /* Corrected errors have already been cleared from SAL */ 507 /* Corrected errors have already been cleared from SAL */
489 if (rh->severity != sal_log_severity_corrected) 508 if (rh->severity != sal_log_severity_corrected)
490 call_on_cpu(cpu, salinfo_log_clear_cpu, data); 509 call_on_cpu(cpu, salinfo_log_clear_cpu, data);
491 /* clearing a record may make a new record visible */ 510 /* clearing a record may make a new record visible */
492 salinfo_log_new_read(cpu, data); 511 salinfo_log_new_read(cpu, data);
493 if (data->state == STATE_LOG_RECORD && 512 if (data->state == STATE_LOG_RECORD) {
494 !test_and_set_bit(cpu, &data->cpu_event)) 513 spin_lock_irqsave(&data_saved_lock, flags);
495 up(&data->sem); 514 cpu_set(cpu, data->cpu_event);
515 salinfo_work_to_do(data);
516 spin_unlock_irqrestore(&data_saved_lock, flags);
517 }
496 return 0; 518 return 0;
497} 519}
498 520
@@ -549,6 +571,53 @@ static struct file_operations salinfo_data_fops = {
549 .write = salinfo_log_write, 571 .write = salinfo_log_write,
550}; 572};
551 573
574#ifdef CONFIG_HOTPLUG_CPU
575static int __devinit
576salinfo_cpu_callback(struct notifier_block *nb, unsigned long action, void *hcpu)
577{
578 unsigned int i, cpu = (unsigned long)hcpu;
579 unsigned long flags;
580 struct salinfo_data *data;
581 switch (action) {
582 case CPU_ONLINE:
583 spin_lock_irqsave(&data_saved_lock, flags);
584 for (i = 0, data = salinfo_data;
585 i < ARRAY_SIZE(salinfo_data);
586 ++i, ++data) {
587 cpu_set(cpu, data->cpu_event);
588 salinfo_work_to_do(data);
589 }
590 spin_unlock_irqrestore(&data_saved_lock, flags);
591 break;
592 case CPU_DEAD:
593 spin_lock_irqsave(&data_saved_lock, flags);
594 for (i = 0, data = salinfo_data;
595 i < ARRAY_SIZE(salinfo_data);
596 ++i, ++data) {
597 struct salinfo_data_saved *data_saved;
598 int j;
599 for (j = ARRAY_SIZE(data->data_saved) - 1, data_saved = data->data_saved + j;
600 j >= 0;
601 --j, --data_saved) {
602 if (data_saved->buffer && data_saved->cpu == cpu) {
603 shift1_data_saved(data, j);
604 }
605 }
606 cpu_clear(cpu, data->cpu_event);
607 }
608 spin_unlock_irqrestore(&data_saved_lock, flags);
609 break;
610 }
611 return NOTIFY_OK;
612}
613
614static struct notifier_block salinfo_cpu_notifier =
615{
616 .notifier_call = salinfo_cpu_callback,
617 .priority = 0,
618};
619#endif /* CONFIG_HOTPLUG_CPU */
620
552static int __init 621static int __init
553salinfo_init(void) 622salinfo_init(void)
554{ 623{
@@ -556,7 +625,7 @@ salinfo_init(void)
556 struct proc_dir_entry **sdir = salinfo_proc_entries; /* keeps track of every entry */ 625 struct proc_dir_entry **sdir = salinfo_proc_entries; /* keeps track of every entry */
557 struct proc_dir_entry *dir, *entry; 626 struct proc_dir_entry *dir, *entry;
558 struct salinfo_data *data; 627 struct salinfo_data *data;
559 int i, j, online; 628 int i, j;
560 629
561 salinfo_dir = proc_mkdir("sal", NULL); 630 salinfo_dir = proc_mkdir("sal", NULL);
562 if (!salinfo_dir) 631 if (!salinfo_dir)
@@ -571,7 +640,7 @@ salinfo_init(void)
571 for (i = 0; i < ARRAY_SIZE(salinfo_log_name); i++) { 640 for (i = 0; i < ARRAY_SIZE(salinfo_log_name); i++) {
572 data = salinfo_data + i; 641 data = salinfo_data + i;
573 data->type = i; 642 data->type = i;
574 sema_init(&data->sem, 0); 643 init_MUTEX(&data->mutex);
575 dir = proc_mkdir(salinfo_log_name[i], salinfo_dir); 644 dir = proc_mkdir(salinfo_log_name[i], salinfo_dir);
576 if (!dir) 645 if (!dir)
577 continue; 646 continue;
@@ -591,12 +660,8 @@ salinfo_init(void)
591 *sdir++ = entry; 660 *sdir++ = entry;
592 661
593 /* we missed any events before now */ 662 /* we missed any events before now */
594 online = 0; 663 for_each_online_cpu(j)
595 for_each_online_cpu(j) { 664 cpu_set(j, data->cpu_event);
596 set_bit(j, &data->cpu_event);
597 ++online;
598 }
599 sema_init(&data->sem, online);
600 665
601 *sdir++ = dir; 666 *sdir++ = dir;
602 } 667 }
@@ -608,6 +673,10 @@ salinfo_init(void)
608 salinfo_timer.function = &salinfo_timeout; 673 salinfo_timer.function = &salinfo_timeout;
609 add_timer(&salinfo_timer); 674 add_timer(&salinfo_timer);
610 675
676#ifdef CONFIG_HOTPLUG_CPU
677 register_cpu_notifier(&salinfo_cpu_notifier);
678#endif
679
611 return 0; 680 return 0;
612} 681}
613 682
diff --git a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c
index 088e5dded8dc..3258e09278d0 100644
--- a/arch/ia64/kernel/setup.c
+++ b/arch/ia64/kernel/setup.c
@@ -60,6 +60,7 @@
60#include <asm/smp.h> 60#include <asm/smp.h>
61#include <asm/system.h> 61#include <asm/system.h>
62#include <asm/unistd.h> 62#include <asm/unistd.h>
63#include <asm/system.h>
63 64
64#if defined(CONFIG_SMP) && (IA64_CPU_SIZE > PAGE_SIZE) 65#if defined(CONFIG_SMP) && (IA64_CPU_SIZE > PAGE_SIZE)
65# error "struct cpuinfo_ia64 too big!" 66# error "struct cpuinfo_ia64 too big!"
@@ -70,6 +71,8 @@ unsigned long __per_cpu_offset[NR_CPUS];
70EXPORT_SYMBOL(__per_cpu_offset); 71EXPORT_SYMBOL(__per_cpu_offset);
71#endif 72#endif
72 73
74extern void ia64_setup_printk_clock(void);
75
73DEFINE_PER_CPU(struct cpuinfo_ia64, cpu_info); 76DEFINE_PER_CPU(struct cpuinfo_ia64, cpu_info);
74DEFINE_PER_CPU(unsigned long, local_per_cpu_offset); 77DEFINE_PER_CPU(unsigned long, local_per_cpu_offset);
75DEFINE_PER_CPU(unsigned long, ia64_phys_stacked_size_p8); 78DEFINE_PER_CPU(unsigned long, ia64_phys_stacked_size_p8);
@@ -427,6 +430,7 @@ setup_arch (char **cmdline_p)
427 if (early_console_setup(*cmdline_p) == 0) 430 if (early_console_setup(*cmdline_p) == 0)
428 mark_bsp_online(); 431 mark_bsp_online();
429 432
433 parse_early_param();
430#ifdef CONFIG_ACPI 434#ifdef CONFIG_ACPI
431 /* Initialize the ACPI boot-time table parser */ 435 /* Initialize the ACPI boot-time table parser */
432 acpi_table_init(); 436 acpi_table_init();
@@ -444,6 +448,8 @@ setup_arch (char **cmdline_p)
444 /* process SAL system table: */ 448 /* process SAL system table: */
445 ia64_sal_init(efi.sal_systab); 449 ia64_sal_init(efi.sal_systab);
446 450
451 ia64_setup_printk_clock();
452
447#ifdef CONFIG_SMP 453#ifdef CONFIG_SMP
448 cpu_physical_id(0) = hard_smp_processor_id(); 454 cpu_physical_id(0) = hard_smp_processor_id();
449 455
@@ -518,7 +524,7 @@ show_cpuinfo (struct seq_file *m, void *v)
518 char family[32], features[128], *cp, sep; 524 char family[32], features[128], *cp, sep;
519 struct cpuinfo_ia64 *c = v; 525 struct cpuinfo_ia64 *c = v;
520 unsigned long mask; 526 unsigned long mask;
521 unsigned int proc_freq; 527 unsigned long proc_freq;
522 int i; 528 int i;
523 529
524 mask = c->features; 530 mask = c->features;
@@ -683,6 +689,9 @@ void
683setup_per_cpu_areas (void) 689setup_per_cpu_areas (void)
684{ 690{
685 /* start_kernel() requires this... */ 691 /* start_kernel() requires this... */
692#ifdef CONFIG_ACPI_HOTPLUG_CPU
693 prefill_possible_map();
694#endif
686} 695}
687 696
688/* 697/*
@@ -695,6 +704,7 @@ static void
695get_max_cacheline_size (void) 704get_max_cacheline_size (void)
696{ 705{
697 unsigned long line_size, max = 1; 706 unsigned long line_size, max = 1;
707 unsigned int cache_size = 0;
698 u64 l, levels, unique_caches; 708 u64 l, levels, unique_caches;
699 pal_cache_config_info_t cci; 709 pal_cache_config_info_t cci;
700 s64 status; 710 s64 status;
@@ -724,6 +734,8 @@ get_max_cacheline_size (void)
724 line_size = 1 << cci.pcci_line_size; 734 line_size = 1 << cci.pcci_line_size;
725 if (line_size > max) 735 if (line_size > max)
726 max = line_size; 736 max = line_size;
737 if (cache_size < cci.pcci_cache_size)
738 cache_size = cci.pcci_cache_size;
727 if (!cci.pcci_unified) { 739 if (!cci.pcci_unified) {
728 status = ia64_pal_cache_config_info(l, 740 status = ia64_pal_cache_config_info(l,
729 /* cache_type (instruction)= */ 1, 741 /* cache_type (instruction)= */ 1,
@@ -740,6 +752,9 @@ get_max_cacheline_size (void)
740 ia64_i_cache_stride_shift = cci.pcci_stride; 752 ia64_i_cache_stride_shift = cci.pcci_stride;
741 } 753 }
742 out: 754 out:
755#ifdef CONFIG_SMP
756 max_cache_size = max(max_cache_size, cache_size);
757#endif
743 if (max > ia64_max_cacheline_size) 758 if (max > ia64_max_cacheline_size)
744 ia64_max_cacheline_size = max; 759 ia64_max_cacheline_size = max;
745} 760}
@@ -794,7 +809,7 @@ cpu_init (void)
794#endif 809#endif
795 810
796 /* Clear the stack memory reserved for pt_regs: */ 811 /* Clear the stack memory reserved for pt_regs: */
797 memset(ia64_task_regs(current), 0, sizeof(struct pt_regs)); 812 memset(task_pt_regs(current), 0, sizeof(struct pt_regs));
798 813
799 ia64_set_kr(IA64_KR_FPU_OWNER, 0); 814 ia64_set_kr(IA64_KR_FPU_OWNER, 0);
800 815
@@ -870,6 +885,15 @@ cpu_init (void)
870 pm_idle = default_idle; 885 pm_idle = default_idle;
871} 886}
872 887
888/*
889 * On SMP systems, when the scheduler does migration-cost autodetection,
890 * it needs a way to flush as much of the CPU's caches as possible.
891 */
892void sched_cacheflush(void)
893{
894 ia64_sal_cache_flush(3);
895}
896
873void 897void
874check_bugs (void) 898check_bugs (void)
875{ 899{
diff --git a/arch/ia64/kernel/signal.c b/arch/ia64/kernel/signal.c
index 58ce07efc56e..463f6bb44d07 100644
--- a/arch/ia64/kernel/signal.c
+++ b/arch/ia64/kernel/signal.c
@@ -655,11 +655,11 @@ set_sigdelayed(pid_t pid, int signo, int code, void __user *addr)
655 655
656 if (!t) 656 if (!t)
657 return; 657 return;
658 t->thread_info->sigdelayed.signo = signo; 658 task_thread_info(t)->sigdelayed.signo = signo;
659 t->thread_info->sigdelayed.code = code; 659 task_thread_info(t)->sigdelayed.code = code;
660 t->thread_info->sigdelayed.addr = addr; 660 task_thread_info(t)->sigdelayed.addr = addr;
661 t->thread_info->sigdelayed.start_time = start_time; 661 task_thread_info(t)->sigdelayed.start_time = start_time;
662 t->thread_info->sigdelayed.pid = pid; 662 task_thread_info(t)->sigdelayed.pid = pid;
663 wmb(); 663 wmb();
664 set_tsk_thread_flag(t, TIF_SIGDELAYED); 664 set_tsk_thread_flag(t, TIF_SIGDELAYED);
665 } 665 }
diff --git a/arch/ia64/kernel/smpboot.c b/arch/ia64/kernel/smpboot.c
index e9d37bf67d69..c4b633b36dab 100644
--- a/arch/ia64/kernel/smpboot.c
+++ b/arch/ia64/kernel/smpboot.c
@@ -135,7 +135,7 @@ DEFINE_PER_CPU(int, cpu_state);
135/* Bitmasks of currently online, and possible CPUs */ 135/* Bitmasks of currently online, and possible CPUs */
136cpumask_t cpu_online_map; 136cpumask_t cpu_online_map;
137EXPORT_SYMBOL(cpu_online_map); 137EXPORT_SYMBOL(cpu_online_map);
138cpumask_t cpu_possible_map; 138cpumask_t cpu_possible_map = CPU_MASK_NONE;
139EXPORT_SYMBOL(cpu_possible_map); 139EXPORT_SYMBOL(cpu_possible_map);
140 140
141cpumask_t cpu_core_map[NR_CPUS] __cacheline_aligned; 141cpumask_t cpu_core_map[NR_CPUS] __cacheline_aligned;
@@ -558,9 +558,6 @@ smp_build_cpu_map (void)
558 558
559 for (cpu = 0; cpu < NR_CPUS; cpu++) { 559 for (cpu = 0; cpu < NR_CPUS; cpu++) {
560 ia64_cpu_to_sapicid[cpu] = -1; 560 ia64_cpu_to_sapicid[cpu] = -1;
561#ifdef CONFIG_HOTPLUG_CPU
562 cpu_set(cpu, cpu_possible_map);
563#endif
564 } 561 }
565 562
566 ia64_cpu_to_sapicid[0] = boot_cpu_id; 563 ia64_cpu_to_sapicid[0] = boot_cpu_id;
diff --git a/arch/ia64/kernel/sys_ia64.c b/arch/ia64/kernel/sys_ia64.c
index f2dbcd1db0d4..c7b943f10199 100644
--- a/arch/ia64/kernel/sys_ia64.c
+++ b/arch/ia64/kernel/sys_ia64.c
@@ -151,7 +151,7 @@ out:
151asmlinkage long 151asmlinkage long
152sys_pipe (void) 152sys_pipe (void)
153{ 153{
154 struct pt_regs *regs = ia64_task_regs(current); 154 struct pt_regs *regs = task_pt_regs(current);
155 int fd[2]; 155 int fd[2];
156 int retval; 156 int retval;
157 157
diff --git a/arch/ia64/kernel/time.c b/arch/ia64/kernel/time.c
index 1ca130a83856..ac167436e936 100644
--- a/arch/ia64/kernel/time.c
+++ b/arch/ia64/kernel/time.c
@@ -255,31 +255,53 @@ time_init (void)
255 set_normalized_timespec(&wall_to_monotonic, -xtime.tv_sec, -xtime.tv_nsec); 255 set_normalized_timespec(&wall_to_monotonic, -xtime.tv_sec, -xtime.tv_nsec);
256} 256}
257 257
258#define SMALLUSECS 100 258/*
259 * Generic udelay assumes that if preemption is allowed and the thread
260 * migrates to another CPU, that the ITC values are synchronized across
261 * all CPUs.
262 */
263static void
264ia64_itc_udelay (unsigned long usecs)
265{
266 unsigned long start = ia64_get_itc();
267 unsigned long end = start + usecs*local_cpu_data->cyc_per_usec;
268
269 while (time_before(ia64_get_itc(), end))
270 cpu_relax();
271}
272
273void (*ia64_udelay)(unsigned long usecs) = &ia64_itc_udelay;
259 274
260void 275void
261udelay (unsigned long usecs) 276udelay (unsigned long usecs)
262{ 277{
263 unsigned long start; 278 (*ia64_udelay)(usecs);
264 unsigned long cycles; 279}
265 unsigned long smallusecs; 280EXPORT_SYMBOL(udelay);
266 281
267 /* 282static unsigned long long ia64_itc_printk_clock(void)
268 * Execute the non-preemptible delay loop (because the ITC might 283{
269 * not be synchronized between CPUS) in relatively short time 284 if (ia64_get_kr(IA64_KR_PER_CPU_DATA))
270 * chunks, allowing preemption between the chunks. 285 return sched_clock();
271 */ 286 return 0;
272 while (usecs > 0) { 287}
273 smallusecs = (usecs > SMALLUSECS) ? SMALLUSECS : usecs; 288
274 preempt_disable(); 289static unsigned long long ia64_default_printk_clock(void)
275 cycles = smallusecs*local_cpu_data->cyc_per_usec; 290{
276 start = ia64_get_itc(); 291 return (unsigned long long)(jiffies_64 - INITIAL_JIFFIES) *
292 (1000000000/HZ);
293}
277 294
278 while (ia64_get_itc() - start < cycles) 295unsigned long long (*ia64_printk_clock)(void) = &ia64_default_printk_clock;
279 cpu_relax();
280 296
281 preempt_enable(); 297unsigned long long printk_clock(void)
282 usecs -= smallusecs; 298{
283 } 299 return ia64_printk_clock();
300}
301
302void __init
303ia64_setup_printk_clock(void)
304{
305 if (!(sal_platform_features & IA64_SAL_PLATFORM_FEATURE_ITC_DRIFT))
306 ia64_printk_clock = ia64_itc_printk_clock;
284} 307}
285EXPORT_SYMBOL(udelay);
diff --git a/arch/ia64/kernel/topology.c b/arch/ia64/kernel/topology.c
index c9562d94b9c3..3b6fd798c4d6 100644
--- a/arch/ia64/kernel/topology.c
+++ b/arch/ia64/kernel/topology.c
@@ -71,31 +71,33 @@ static int __init topology_init(void)
71 int i, err = 0; 71 int i, err = 0;
72 72
73#ifdef CONFIG_NUMA 73#ifdef CONFIG_NUMA
74 sysfs_nodes = kmalloc(sizeof(struct node) * MAX_NUMNODES, GFP_KERNEL); 74 sysfs_nodes = kzalloc(sizeof(struct node) * MAX_NUMNODES, GFP_KERNEL);
75 if (!sysfs_nodes) { 75 if (!sysfs_nodes) {
76 err = -ENOMEM; 76 err = -ENOMEM;
77 goto out; 77 goto out;
78 } 78 }
79 memset(sysfs_nodes, 0, sizeof(struct node) * MAX_NUMNODES);
80 79
81 /* MCD - Do we want to register all ONLINE nodes, or all POSSIBLE nodes? */ 80 /*
82 for_each_online_node(i) 81 * MCD - Do we want to register all ONLINE nodes, or all POSSIBLE nodes?
82 */
83 for_each_online_node(i) {
83 if ((err = register_node(&sysfs_nodes[i], i, 0))) 84 if ((err = register_node(&sysfs_nodes[i], i, 0)))
84 goto out; 85 goto out;
86 }
85#endif 87#endif
86 88
87 sysfs_cpus = kmalloc(sizeof(struct ia64_cpu) * NR_CPUS, GFP_KERNEL); 89 sysfs_cpus = kzalloc(sizeof(struct ia64_cpu) * NR_CPUS, GFP_KERNEL);
88 if (!sysfs_cpus) { 90 if (!sysfs_cpus) {
89 err = -ENOMEM; 91 err = -ENOMEM;
90 goto out; 92 goto out;
91 } 93 }
92 memset(sysfs_cpus, 0, sizeof(struct ia64_cpu) * NR_CPUS);
93 94
94 for_each_present_cpu(i) 95 for_each_present_cpu(i) {
95 if((err = arch_register_cpu(i))) 96 if((err = arch_register_cpu(i)))
96 goto out; 97 goto out;
98 }
97out: 99out:
98 return err; 100 return err;
99} 101}
100 102
101__initcall(topology_init); 103subsys_initcall(topology_init);
diff --git a/arch/ia64/kernel/traps.c b/arch/ia64/kernel/traps.c
index d3e0ecb56d62..dabd6c32641e 100644
--- a/arch/ia64/kernel/traps.c
+++ b/arch/ia64/kernel/traps.c
@@ -16,6 +16,7 @@
16#include <linux/module.h> /* for EXPORT_SYMBOL */ 16#include <linux/module.h> /* for EXPORT_SYMBOL */
17#include <linux/hardirq.h> 17#include <linux/hardirq.h>
18#include <linux/kprobes.h> 18#include <linux/kprobes.h>
19#include <linux/delay.h> /* for ssleep() */
19 20
20#include <asm/fpswa.h> 21#include <asm/fpswa.h>
21#include <asm/ia32.h> 22#include <asm/ia32.h>
@@ -116,6 +117,13 @@ die (const char *str, struct pt_regs *regs, long err)
116 bust_spinlocks(0); 117 bust_spinlocks(0);
117 die.lock_owner = -1; 118 die.lock_owner = -1;
118 spin_unlock_irq(&die.lock); 119 spin_unlock_irq(&die.lock);
120
121 if (panic_on_oops) {
122 printk(KERN_EMERG "Fatal exception: panic in 5 seconds\n");
123 ssleep(5);
124 panic("Fatal exception");
125 }
126
119 do_exit(SIGSEGV); 127 do_exit(SIGSEGV);
120} 128}
121 129
@@ -530,12 +538,15 @@ ia64_fault (unsigned long vector, unsigned long isr, unsigned long ifa,
530 if (fsys_mode(current, &regs)) { 538 if (fsys_mode(current, &regs)) {
531 extern char __kernel_syscall_via_break[]; 539 extern char __kernel_syscall_via_break[];
532 /* 540 /*
533 * Got a trap in fsys-mode: Taken Branch Trap and Single Step trap 541 * Got a trap in fsys-mode: Taken Branch Trap
534 * need special handling; Debug trap is not supposed to happen. 542 * and Single Step trap need special handling;
543 * Debug trap is ignored (we disable it here
544 * and re-enable it in the lower-privilege trap).
535 */ 545 */
536 if (unlikely(vector == 29)) { 546 if (unlikely(vector == 29)) {
537 die("Got debug trap in fsys-mode---not supposed to happen!", 547 set_thread_flag(TIF_DB_DISABLED);
538 &regs, 0); 548 ia64_psr(&regs)->db = 0;
549 ia64_psr(&regs)->lp = 1;
539 return; 550 return;
540 } 551 }
541 /* re-do the system call via break 0x100000: */ 552 /* re-do the system call via break 0x100000: */
@@ -589,10 +600,19 @@ ia64_fault (unsigned long vector, unsigned long isr, unsigned long ifa,
589 case 34: 600 case 34:
590 if (isr & 0x2) { 601 if (isr & 0x2) {
591 /* Lower-Privilege Transfer Trap */ 602 /* Lower-Privilege Transfer Trap */
603
604 /* If we disabled debug traps during an fsyscall,
605 * re-enable them here.
606 */
607 if (test_thread_flag(TIF_DB_DISABLED)) {
608 clear_thread_flag(TIF_DB_DISABLED);
609 ia64_psr(&regs)->db = 1;
610 }
611
592 /* 612 /*
593 * Just clear PSR.lp and then return immediately: all the 613 * Just clear PSR.lp and then return immediately:
594 * interesting work (e.g., signal delivery is done in the kernel 614 * all the interesting work (e.g., signal delivery)
595 * exit path). 615 * is done in the kernel exit path.
596 */ 616 */
597 ia64_psr(&regs)->lp = 0; 617 ia64_psr(&regs)->lp = 0;
598 return; 618 return;
diff --git a/arch/ia64/kernel/unaligned.c b/arch/ia64/kernel/unaligned.c
index 43b45b65ee5a..1e357550c776 100644
--- a/arch/ia64/kernel/unaligned.c
+++ b/arch/ia64/kernel/unaligned.c
@@ -24,7 +24,7 @@
24#include <asm/uaccess.h> 24#include <asm/uaccess.h>
25#include <asm/unaligned.h> 25#include <asm/unaligned.h>
26 26
27extern void die_if_kernel(char *str, struct pt_regs *regs, long err) __attribute__ ((noreturn)); 27extern void die_if_kernel(char *str, struct pt_regs *regs, long err);
28 28
29#undef DEBUG_UNALIGNED_TRAP 29#undef DEBUG_UNALIGNED_TRAP
30 30
@@ -53,6 +53,15 @@ dump (const char *str, void *vp, size_t len)
53#define SIGN_EXT9 0xffffffffffffff00ul 53#define SIGN_EXT9 0xffffffffffffff00ul
54 54
55/* 55/*
56 * sysctl settable hook which tells the kernel whether to honor the
57 * IA64_THREAD_UAC_NOPRINT prctl. Because this is user settable, we want
58 * to allow the super user to enable/disable this for security reasons
59 * (i.e. don't allow attacker to fill up logs with unaligned accesses).
60 */
61int no_unaligned_warning;
62static int noprint_warning;
63
64/*
56 * For M-unit: 65 * For M-unit:
57 * 66 *
58 * opcode | m | x6 | 67 * opcode | m | x6 |
@@ -1283,8 +1292,9 @@ within_logging_rate_limit (void)
1283 1292
1284 if (jiffies - last_time > 5*HZ) 1293 if (jiffies - last_time > 5*HZ)
1285 count = 0; 1294 count = 0;
1286 if (++count < 5) { 1295 if (count < 5) {
1287 last_time = jiffies; 1296 last_time = jiffies;
1297 count++;
1288 return 1; 1298 return 1;
1289 } 1299 }
1290 return 0; 1300 return 0;
@@ -1323,8 +1333,9 @@ ia64_handle_unaligned (unsigned long ifa, struct pt_regs *regs)
1323 if ((current->thread.flags & IA64_THREAD_UAC_SIGBUS) != 0) 1333 if ((current->thread.flags & IA64_THREAD_UAC_SIGBUS) != 0)
1324 goto force_sigbus; 1334 goto force_sigbus;
1325 1335
1326 if (!(current->thread.flags & IA64_THREAD_UAC_NOPRINT) 1336 if (!no_unaligned_warning &&
1327 && within_logging_rate_limit()) 1337 !(current->thread.flags & IA64_THREAD_UAC_NOPRINT) &&
1338 within_logging_rate_limit())
1328 { 1339 {
1329 char buf[200]; /* comm[] is at most 16 bytes... */ 1340 char buf[200]; /* comm[] is at most 16 bytes... */
1330 size_t len; 1341 size_t len;
@@ -1339,7 +1350,22 @@ ia64_handle_unaligned (unsigned long ifa, struct pt_regs *regs)
1339 if (user_mode(regs)) 1350 if (user_mode(regs))
1340 tty_write_message(current->signal->tty, buf); 1351 tty_write_message(current->signal->tty, buf);
1341 buf[len-1] = '\0'; /* drop '\r' */ 1352 buf[len-1] = '\0'; /* drop '\r' */
1342 printk(KERN_WARNING "%s", buf); /* watch for command names containing %s */ 1353 /* watch for command names containing %s */
1354 printk(KERN_WARNING "%s", buf);
1355 } else {
1356 if (no_unaligned_warning && !noprint_warning) {
1357 noprint_warning = 1;
1358 printk(KERN_WARNING "%s(%d) encountered an "
1359 "unaligned exception which required\n"
1360 "kernel assistance, which degrades "
1361 "the performance of the application.\n"
1362 "Unaligned exception warnings have "
1363 "been disabled by the system "
1364 "administrator\n"
1365 "echo 0 > /proc/sys/kernel/ignore-"
1366 "unaligned-usertrap to re-enable\n",
1367 current->comm, current->pid);
1368 }
1343 } 1369 }
1344 } else { 1370 } else {
1345 if (within_logging_rate_limit()) 1371 if (within_logging_rate_limit())
diff --git a/arch/ia64/kernel/uncached.c b/arch/ia64/kernel/uncached.c
index b631cf86ed44..fcd2bad0286f 100644
--- a/arch/ia64/kernel/uncached.c
+++ b/arch/ia64/kernel/uncached.c
@@ -210,6 +210,7 @@ uncached_build_memmap(unsigned long start, unsigned long end, void *arg)
210 210
211 dprintk(KERN_ERR "uncached_build_memmap(%lx %lx)\n", start, end); 211 dprintk(KERN_ERR "uncached_build_memmap(%lx %lx)\n", start, end);
212 212
213 touch_softlockup_watchdog();
213 memset((char *)start, 0, length); 214 memset((char *)start, 0, length);
214 215
215 node = paddr_to_nid(start - __IA64_UNCACHED_OFFSET); 216 node = paddr_to_nid(start - __IA64_UNCACHED_OFFSET);
diff --git a/arch/ia64/mm/init.c b/arch/ia64/mm/init.c
index e3215ba64ffd..b38b6d213c15 100644
--- a/arch/ia64/mm/init.c
+++ b/arch/ia64/mm/init.c
@@ -635,3 +635,39 @@ mem_init (void)
635 ia32_mem_init(); 635 ia32_mem_init();
636#endif 636#endif
637} 637}
638
639#ifdef CONFIG_MEMORY_HOTPLUG
640void online_page(struct page *page)
641{
642 ClearPageReserved(page);
643 set_page_count(page, 1);
644 __free_page(page);
645 totalram_pages++;
646 num_physpages++;
647}
648
649int add_memory(u64 start, u64 size)
650{
651 pg_data_t *pgdat;
652 struct zone *zone;
653 unsigned long start_pfn = start >> PAGE_SHIFT;
654 unsigned long nr_pages = size >> PAGE_SHIFT;
655 int ret;
656
657 pgdat = NODE_DATA(0);
658
659 zone = pgdat->node_zones + ZONE_NORMAL;
660 ret = __add_pages(zone, start_pfn, nr_pages);
661
662 if (ret)
663 printk("%s: Problem encountered in __add_pages() as ret=%d\n",
664 __FUNCTION__, ret);
665
666 return ret;
667}
668
669int remove_memory(u64 start, u64 size)
670{
671 return -EINVAL;
672}
673#endif
diff --git a/arch/ia64/mm/tlb.c b/arch/ia64/mm/tlb.c
index 41105d454423..6a4eec9113e8 100644
--- a/arch/ia64/mm/tlb.c
+++ b/arch/ia64/mm/tlb.c
@@ -90,7 +90,7 @@ ia64_global_tlb_purge (struct mm_struct *mm, unsigned long start,
90{ 90{
91 static DEFINE_SPINLOCK(ptcg_lock); 91 static DEFINE_SPINLOCK(ptcg_lock);
92 92
93 if (mm != current->active_mm) { 93 if (mm != current->active_mm || !current->mm) {
94 flush_tlb_all(); 94 flush_tlb_all();
95 return; 95 return;
96 } 96 }
diff --git a/arch/ia64/oprofile/backtrace.c b/arch/ia64/oprofile/backtrace.c
index b7dabbfb0d61..adb01566bd57 100644
--- a/arch/ia64/oprofile/backtrace.c
+++ b/arch/ia64/oprofile/backtrace.c
@@ -32,7 +32,7 @@ typedef struct
32 u64 *prev_pfs_loc; /* state for WAR for old spinlock ool code */ 32 u64 *prev_pfs_loc; /* state for WAR for old spinlock ool code */
33} ia64_backtrace_t; 33} ia64_backtrace_t;
34 34
35#if __GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 3) 35#if (__GNUC__ == 3 && __GNUC_MINOR__ < 3)
36/* 36/*
37 * Returns non-zero if the PC is in the spinlock contention out-of-line code 37 * Returns non-zero if the PC is in the spinlock contention out-of-line code
38 * with non-standard calling sequence (on older compilers). 38 * with non-standard calling sequence (on older compilers).
diff --git a/arch/ia64/pci/pci.c b/arch/ia64/pci/pci.c
index 20d76fae24e8..9ba32b2d96d0 100644
--- a/arch/ia64/pci/pci.c
+++ b/arch/ia64/pci/pci.c
@@ -193,12 +193,12 @@ add_io_space (struct pci_root_info *info, struct acpi_resource_address64 *addr)
193 goto free_resource; 193 goto free_resource;
194 } 194 }
195 195
196 min = addr->min_address_range; 196 min = addr->minimum;
197 max = min + addr->address_length - 1; 197 max = min + addr->address_length - 1;
198 if (addr->attribute.io.translation_attribute == ACPI_SPARSE_TRANSLATION) 198 if (addr->info.io.translation_type == ACPI_SPARSE_TRANSLATION)
199 sparse = 1; 199 sparse = 1;
200 200
201 space_nr = new_space(addr->address_translation_offset, sparse); 201 space_nr = new_space(addr->translation_offset, sparse);
202 if (space_nr == ~0) 202 if (space_nr == ~0)
203 goto free_name; 203 goto free_name;
204 204
@@ -285,7 +285,7 @@ static __devinit acpi_status add_window(struct acpi_resource *res, void *data)
285 if (addr.resource_type == ACPI_MEMORY_RANGE) { 285 if (addr.resource_type == ACPI_MEMORY_RANGE) {
286 flags = IORESOURCE_MEM; 286 flags = IORESOURCE_MEM;
287 root = &iomem_resource; 287 root = &iomem_resource;
288 offset = addr.address_translation_offset; 288 offset = addr.translation_offset;
289 } else if (addr.resource_type == ACPI_IO_RANGE) { 289 } else if (addr.resource_type == ACPI_IO_RANGE) {
290 flags = IORESOURCE_IO; 290 flags = IORESOURCE_IO;
291 root = &ioport_resource; 291 root = &ioport_resource;
@@ -298,7 +298,7 @@ static __devinit acpi_status add_window(struct acpi_resource *res, void *data)
298 window = &info->controller->window[info->controller->windows++]; 298 window = &info->controller->window[info->controller->windows++];
299 window->resource.name = info->name; 299 window->resource.name = info->name;
300 window->resource.flags = flags; 300 window->resource.flags = flags;
301 window->resource.start = addr.min_address_range + offset; 301 window->resource.start = addr.minimum + offset;
302 window->resource.end = window->resource.start + addr.address_length - 1; 302 window->resource.end = window->resource.start + addr.address_length - 1;
303 window->resource.child = NULL; 303 window->resource.child = NULL;
304 window->offset = offset; 304 window->offset = offset;
@@ -454,14 +454,13 @@ static int __devinit is_valid_resource(struct pci_dev *dev, int idx)
454 return 0; 454 return 0;
455} 455}
456 456
457static void __devinit pcibios_fixup_device_resources(struct pci_dev *dev) 457static void __devinit
458pcibios_fixup_resources(struct pci_dev *dev, int start, int limit)
458{ 459{
459 struct pci_bus_region region; 460 struct pci_bus_region region;
460 int i; 461 int i;
461 int limit = (dev->hdr_type == PCI_HEADER_TYPE_NORMAL) ? \
462 PCI_BRIDGE_RESOURCES : PCI_NUM_RESOURCES;
463 462
464 for (i = 0; i < limit; i++) { 463 for (i = start; i < limit; i++) {
465 if (!dev->resource[i].flags) 464 if (!dev->resource[i].flags)
466 continue; 465 continue;
467 region.start = dev->resource[i].start; 466 region.start = dev->resource[i].start;
@@ -472,6 +471,16 @@ static void __devinit pcibios_fixup_device_resources(struct pci_dev *dev)
472 } 471 }
473} 472}
474 473
474static void __devinit pcibios_fixup_device_resources(struct pci_dev *dev)
475{
476 pcibios_fixup_resources(dev, 0, PCI_BRIDGE_RESOURCES);
477}
478
479static void __devinit pcibios_fixup_bridge_resources(struct pci_dev *dev)
480{
481 pcibios_fixup_resources(dev, PCI_BRIDGE_RESOURCES, PCI_NUM_RESOURCES);
482}
483
475/* 484/*
476 * Called after each bus is probed, but before its children are examined. 485 * Called after each bus is probed, but before its children are examined.
477 */ 486 */
@@ -482,7 +491,7 @@ pcibios_fixup_bus (struct pci_bus *b)
482 491
483 if (b->self) { 492 if (b->self) {
484 pci_read_bridge_bases(b); 493 pci_read_bridge_bases(b);
485 pcibios_fixup_device_resources(b->self); 494 pcibios_fixup_bridge_resources(b->self);
486 } 495 }
487 list_for_each_entry(dev, &b->devices, bus_list) 496 list_for_each_entry(dev, &b->devices, bus_list)
488 pcibios_fixup_device_resources(dev); 497 pcibios_fixup_device_resources(dev);
@@ -570,7 +579,7 @@ pcibios_align_resource (void *data, struct resource *res,
570char * __init 579char * __init
571pcibios_setup (char *str) 580pcibios_setup (char *str)
572{ 581{
573 return NULL; 582 return str;
574} 583}
575 584
576int 585int
@@ -700,7 +709,7 @@ int ia64_pci_legacy_read(struct pci_bus *bus, u16 port, u32 *val, u8 size)
700 */ 709 */
701int ia64_pci_legacy_write(struct pci_dev *bus, u16 port, u32 val, u8 size) 710int ia64_pci_legacy_write(struct pci_dev *bus, u16 port, u32 val, u8 size)
702{ 711{
703 int ret = 0; 712 int ret = size;
704 713
705 switch (size) { 714 switch (size) {
706 case 1: 715 case 1:
diff --git a/arch/ia64/sn/Makefile b/arch/ia64/sn/Makefile
index a269f6d84c29..79a7df02e812 100644
--- a/arch/ia64/sn/Makefile
+++ b/arch/ia64/sn/Makefile
@@ -9,6 +9,4 @@
9# Makefile for the sn ia64 subplatform 9# Makefile for the sn ia64 subplatform
10# 10#
11 11
12CPPFLAGS += -I$(srctree)/arch/ia64/sn/include
13
14obj-y += kernel/ pci/ 12obj-y += kernel/ pci/
diff --git a/arch/ia64/sn/include/xtalk/hubdev.h b/arch/ia64/sn/include/xtalk/hubdev.h
index 71c2b271b4c6..8182583c762c 100644
--- a/arch/ia64/sn/include/xtalk/hubdev.h
+++ b/arch/ia64/sn/include/xtalk/hubdev.h
@@ -26,29 +26,46 @@
26#define IIO_NUM_ITTES 7 26#define IIO_NUM_ITTES 7
27#define HUB_NUM_BIG_WINDOW (IIO_NUM_ITTES - 1) 27#define HUB_NUM_BIG_WINDOW (IIO_NUM_ITTES - 1)
28 28
29struct sn_flush_device_list { 29/* This struct is shared between the PROM and the kernel.
30 * Changes to this struct will require corresponding changes to the kernel.
31 */
32struct sn_flush_device_common {
30 int sfdl_bus; 33 int sfdl_bus;
31 int sfdl_slot; 34 int sfdl_slot;
32 int sfdl_pin; 35 int sfdl_pin;
33 struct bar_list { 36 struct common_bar_list {
34 unsigned long start; 37 unsigned long start;
35 unsigned long end; 38 unsigned long end;
36 } sfdl_bar_list[6]; 39 } sfdl_bar_list[6];
37 unsigned long sfdl_force_int_addr; 40 unsigned long sfdl_force_int_addr;
38 unsigned long sfdl_flush_value; 41 unsigned long sfdl_flush_value;
39 volatile unsigned long *sfdl_flush_addr; 42 volatile unsigned long *sfdl_flush_addr;
40 uint32_t sfdl_persistent_busnum; 43 u32 sfdl_persistent_busnum;
41 uint32_t sfdl_persistent_segment; 44 u32 sfdl_persistent_segment;
42 struct pcibus_info *sfdl_pcibus_info; 45 struct pcibus_info *sfdl_pcibus_info;
46};
47
48/* This struct is kernel only and is not used by the PROM */
49struct sn_flush_device_kernel {
43 spinlock_t sfdl_flush_lock; 50 spinlock_t sfdl_flush_lock;
51 struct sn_flush_device_common *common;
52};
53
54/* 01/16/06 This struct is the old PROM/kernel struct and needs to be included
55 * for older official PROMs to function on the new kernel base. This struct
56 * will be removed when the next official PROM release occurs. */
57
58struct sn_flush_device_war {
59 struct sn_flush_device_common common;
60 u32 filler; /* older PROMs expect the default size of a spinlock_t */
44}; 61};
45 62
46/* 63/*
47 * **widget_p - Used as an array[wid_num][device] of sn_flush_device_list. 64 * **widget_p - Used as an array[wid_num][device] of sn_flush_device_kernel.
48 */ 65 */
49struct sn_flush_nasid_entry { 66struct sn_flush_nasid_entry {
50 struct sn_flush_device_list **widget_p; /* Used as a array of wid_num */ 67 struct sn_flush_device_kernel **widget_p; // Used as an array of wid_num
51 uint64_t iio_itte[8]; 68 u64 iio_itte[8];
52}; 69};
53 70
54struct hubdev_info { 71struct hubdev_info {
@@ -62,8 +79,8 @@ struct hubdev_info {
62 79
63 void *hdi_nodepda; 80 void *hdi_nodepda;
64 void *hdi_node_vertex; 81 void *hdi_node_vertex;
65 uint32_t max_segment_number; 82 u32 max_segment_number;
66 uint32_t max_pcibus_number; 83 u32 max_pcibus_number;
67}; 84};
68 85
69extern void hubdev_init_node(nodepda_t *, cnodeid_t); 86extern void hubdev_init_node(nodepda_t *, cnodeid_t);
diff --git a/arch/ia64/sn/include/xtalk/xbow.h b/arch/ia64/sn/include/xtalk/xbow.h
index ec56b3432f17..90f37a4133d0 100644
--- a/arch/ia64/sn/include/xtalk/xbow.h
+++ b/arch/ia64/sn/include/xtalk/xbow.h
@@ -3,7 +3,8 @@
3 * License. See the file "COPYING" in the main directory of this archive 3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details. 4 * for more details.
5 * 5 *
6 * Copyright (C) 1992-1997,2000-2004 Silicon Graphics, Inc. All Rights Reserved. 6 * Copyright (C) 1992-1997,2000-2006 Silicon Graphics, Inc. All Rights
7 * Reserved.
7 */ 8 */
8#ifndef _ASM_IA64_SN_XTALK_XBOW_H 9#ifndef _ASM_IA64_SN_XTALK_XBOW_H
9#define _ASM_IA64_SN_XTALK_XBOW_H 10#define _ASM_IA64_SN_XTALK_XBOW_H
@@ -21,94 +22,94 @@
21 22
22/* Register set for each xbow link */ 23/* Register set for each xbow link */
23typedef volatile struct xb_linkregs_s { 24typedef volatile struct xb_linkregs_s {
24/* 25/*
25 * we access these through synergy unswizzled space, so the address 26 * we access these through synergy unswizzled space, so the address
26 * gets twiddled (i.e. references to 0x4 actually go to 0x0 and vv.) 27 * gets twiddled (i.e. references to 0x4 actually go to 0x0 and vv.)
27 * That's why we put the register first and filler second. 28 * That's why we put the register first and filler second.
28 */ 29 */
29 uint32_t link_ibf; 30 u32 link_ibf;
30 uint32_t filler0; /* filler for proper alignment */ 31 u32 filler0; /* filler for proper alignment */
31 uint32_t link_control; 32 u32 link_control;
32 uint32_t filler1; 33 u32 filler1;
33 uint32_t link_status; 34 u32 link_status;
34 uint32_t filler2; 35 u32 filler2;
35 uint32_t link_arb_upper; 36 u32 link_arb_upper;
36 uint32_t filler3; 37 u32 filler3;
37 uint32_t link_arb_lower; 38 u32 link_arb_lower;
38 uint32_t filler4; 39 u32 filler4;
39 uint32_t link_status_clr; 40 u32 link_status_clr;
40 uint32_t filler5; 41 u32 filler5;
41 uint32_t link_reset; 42 u32 link_reset;
42 uint32_t filler6; 43 u32 filler6;
43 uint32_t link_aux_status; 44 u32 link_aux_status;
44 uint32_t filler7; 45 u32 filler7;
45} xb_linkregs_t; 46} xb_linkregs_t;
46 47
47typedef volatile struct xbow_s { 48typedef volatile struct xbow_s {
48 /* standard widget configuration 0x000000-0x000057 */ 49 /* standard widget configuration 0x000000-0x000057 */
49 struct widget_cfg xb_widget; /* 0x000000 */ 50 struct widget_cfg xb_widget; /* 0x000000 */
50 51
51 /* helper fieldnames for accessing bridge widget */ 52 /* helper fieldnames for accessing bridge widget */
52 53
53#define xb_wid_id xb_widget.w_id 54#define xb_wid_id xb_widget.w_id
54#define xb_wid_stat xb_widget.w_status 55#define xb_wid_stat xb_widget.w_status
55#define xb_wid_err_upper xb_widget.w_err_upper_addr 56#define xb_wid_err_upper xb_widget.w_err_upper_addr
56#define xb_wid_err_lower xb_widget.w_err_lower_addr 57#define xb_wid_err_lower xb_widget.w_err_lower_addr
57#define xb_wid_control xb_widget.w_control 58#define xb_wid_control xb_widget.w_control
58#define xb_wid_req_timeout xb_widget.w_req_timeout 59#define xb_wid_req_timeout xb_widget.w_req_timeout
59#define xb_wid_int_upper xb_widget.w_intdest_upper_addr 60#define xb_wid_int_upper xb_widget.w_intdest_upper_addr
60#define xb_wid_int_lower xb_widget.w_intdest_lower_addr 61#define xb_wid_int_lower xb_widget.w_intdest_lower_addr
61#define xb_wid_err_cmdword xb_widget.w_err_cmd_word 62#define xb_wid_err_cmdword xb_widget.w_err_cmd_word
62#define xb_wid_llp xb_widget.w_llp_cfg 63#define xb_wid_llp xb_widget.w_llp_cfg
63#define xb_wid_stat_clr xb_widget.w_tflush 64#define xb_wid_stat_clr xb_widget.w_tflush
64 65
65/* 66/*
66 * we access these through synergy unswizzled space, so the address 67 * we access these through synergy unswizzled space, so the address
67 * gets twiddled (i.e. references to 0x4 actually go to 0x0 and vv.) 68 * gets twiddled (i.e. references to 0x4 actually go to 0x0 and vv.)
68 * That's why we put the register first and filler second. 69 * That's why we put the register first and filler second.
69 */ 70 */
70 /* xbow-specific widget configuration 0x000058-0x0000FF */ 71 /* xbow-specific widget configuration 0x000058-0x0000FF */
71 uint32_t xb_wid_arb_reload; /* 0x00005C */ 72 u32 xb_wid_arb_reload; /* 0x00005C */
72 uint32_t _pad_000058; 73 u32 _pad_000058;
73 uint32_t xb_perf_ctr_a; /* 0x000064 */ 74 u32 xb_perf_ctr_a; /* 0x000064 */
74 uint32_t _pad_000060; 75 u32 _pad_000060;
75 uint32_t xb_perf_ctr_b; /* 0x00006c */ 76 u32 xb_perf_ctr_b; /* 0x00006c */
76 uint32_t _pad_000068; 77 u32 _pad_000068;
77 uint32_t xb_nic; /* 0x000074 */ 78 u32 xb_nic; /* 0x000074 */
78 uint32_t _pad_000070; 79 u32 _pad_000070;
79 80
80 /* Xbridge only */ 81 /* Xbridge only */
81 uint32_t xb_w0_rst_fnc; /* 0x00007C */ 82 u32 xb_w0_rst_fnc; /* 0x00007C */
82 uint32_t _pad_000078; 83 u32 _pad_000078;
83 uint32_t xb_l8_rst_fnc; /* 0x000084 */ 84 u32 xb_l8_rst_fnc; /* 0x000084 */
84 uint32_t _pad_000080; 85 u32 _pad_000080;
85 uint32_t xb_l9_rst_fnc; /* 0x00008c */ 86 u32 xb_l9_rst_fnc; /* 0x00008c */
86 uint32_t _pad_000088; 87 u32 _pad_000088;
87 uint32_t xb_la_rst_fnc; /* 0x000094 */ 88 u32 xb_la_rst_fnc; /* 0x000094 */
88 uint32_t _pad_000090; 89 u32 _pad_000090;
89 uint32_t xb_lb_rst_fnc; /* 0x00009c */ 90 u32 xb_lb_rst_fnc; /* 0x00009c */
90 uint32_t _pad_000098; 91 u32 _pad_000098;
91 uint32_t xb_lc_rst_fnc; /* 0x0000a4 */ 92 u32 xb_lc_rst_fnc; /* 0x0000a4 */
92 uint32_t _pad_0000a0; 93 u32 _pad_0000a0;
93 uint32_t xb_ld_rst_fnc; /* 0x0000ac */ 94 u32 xb_ld_rst_fnc; /* 0x0000ac */
94 uint32_t _pad_0000a8; 95 u32 _pad_0000a8;
95 uint32_t xb_le_rst_fnc; /* 0x0000b4 */ 96 u32 xb_le_rst_fnc; /* 0x0000b4 */
96 uint32_t _pad_0000b0; 97 u32 _pad_0000b0;
97 uint32_t xb_lf_rst_fnc; /* 0x0000bc */ 98 u32 xb_lf_rst_fnc; /* 0x0000bc */
98 uint32_t _pad_0000b8; 99 u32 _pad_0000b8;
99 uint32_t xb_lock; /* 0x0000c4 */ 100 u32 xb_lock; /* 0x0000c4 */
100 uint32_t _pad_0000c0; 101 u32 _pad_0000c0;
101 uint32_t xb_lock_clr; /* 0x0000cc */ 102 u32 xb_lock_clr; /* 0x0000cc */
102 uint32_t _pad_0000c8; 103 u32 _pad_0000c8;
103 /* end of Xbridge only */ 104 /* end of Xbridge only */
104 uint32_t _pad_0000d0[12]; 105 u32 _pad_0000d0[12];
105 106
106 /* Link Specific Registers, port 8..15 0x000100-0x000300 */ 107 /* Link Specific Registers, port 8..15 0x000100-0x000300 */
107 xb_linkregs_t xb_link_raw[MAX_XBOW_PORTS]; 108 xb_linkregs_t xb_link_raw[MAX_XBOW_PORTS];
108#define xb_link(p) xb_link_raw[(p) & (MAX_XBOW_PORTS - 1)]
109
110} xbow_t; 109} xbow_t;
111 110
111#define xb_link(p) xb_link_raw[(p) & (MAX_XBOW_PORTS - 1)]
112
112#define XB_FLAGS_EXISTS 0x1 /* device exists */ 113#define XB_FLAGS_EXISTS 0x1 /* device exists */
113#define XB_FLAGS_MASTER 0x2 114#define XB_FLAGS_MASTER 0x2
114#define XB_FLAGS_SLAVE 0x0 115#define XB_FLAGS_SLAVE 0x0
@@ -160,7 +161,7 @@ typedef volatile struct xbow_s {
160/* End of Xbridge only */ 161/* End of Xbridge only */
161 162
162/* used only in ide, but defined here within the reserved portion */ 163/* used only in ide, but defined here within the reserved portion */
163/* of the widget0 address space (before 0xf4) */ 164/* of the widget0 address space (before 0xf4) */
164#define XBOW_WID_UNDEF 0xe4 165#define XBOW_WID_UNDEF 0xe4
165 166
166/* xbow link register set base, legal value for x is 0x8..0xf */ 167/* xbow link register set base, legal value for x is 0x8..0xf */
@@ -179,29 +180,37 @@ typedef volatile struct xbow_s {
179 180
180/* link_control(x) */ 181/* link_control(x) */
181#define XB_CTRL_LINKALIVE_IE 0x80000000 /* link comes alive */ 182#define XB_CTRL_LINKALIVE_IE 0x80000000 /* link comes alive */
182 /* reserved: 0x40000000 */ 183/* reserved: 0x40000000 */
183#define XB_CTRL_PERF_CTR_MODE_MSK 0x30000000 /* perf counter mode */ 184#define XB_CTRL_PERF_CTR_MODE_MSK 0x30000000 /* perf counter mode */
184#define XB_CTRL_IBUF_LEVEL_MSK 0x0e000000 /* input packet buffer level */ 185#define XB_CTRL_IBUF_LEVEL_MSK 0x0e000000 /* input packet buffer
185#define XB_CTRL_8BIT_MODE 0x01000000 /* force link into 8 bit mode */ 186 level */
186#define XB_CTRL_BAD_LLP_PKT 0x00800000 /* force bad LLP packet */ 187#define XB_CTRL_8BIT_MODE 0x01000000 /* force link into 8
187#define XB_CTRL_WIDGET_CR_MSK 0x007c0000 /* LLP widget credit mask */ 188 bit mode */
188#define XB_CTRL_WIDGET_CR_SHFT 18 /* LLP widget credit shift */ 189#define XB_CTRL_BAD_LLP_PKT 0x00800000 /* force bad LLP
189#define XB_CTRL_ILLEGAL_DST_IE 0x00020000 /* illegal destination */ 190 packet */
190#define XB_CTRL_OALLOC_IBUF_IE 0x00010000 /* overallocated input buffer */ 191#define XB_CTRL_WIDGET_CR_MSK 0x007c0000 /* LLP widget credit
191 /* reserved: 0x0000fe00 */ 192 mask */
193#define XB_CTRL_WIDGET_CR_SHFT 18 /* LLP widget credit
194 shift */
195#define XB_CTRL_ILLEGAL_DST_IE 0x00020000 /* illegal destination
196 */
197#define XB_CTRL_OALLOC_IBUF_IE 0x00010000 /* overallocated input
198 buffer */
199/* reserved: 0x0000fe00 */
192#define XB_CTRL_BNDWDTH_ALLOC_IE 0x00000100 /* bandwidth alloc */ 200#define XB_CTRL_BNDWDTH_ALLOC_IE 0x00000100 /* bandwidth alloc */
193#define XB_CTRL_RCV_CNT_OFLOW_IE 0x00000080 /* rcv retry overflow */ 201#define XB_CTRL_RCV_CNT_OFLOW_IE 0x00000080 /* rcv retry overflow */
194#define XB_CTRL_XMT_CNT_OFLOW_IE 0x00000040 /* xmt retry overflow */ 202#define XB_CTRL_XMT_CNT_OFLOW_IE 0x00000040 /* xmt retry overflow */
195#define XB_CTRL_XMT_MAX_RTRY_IE 0x00000020 /* max transmit retry */ 203#define XB_CTRL_XMT_MAX_RTRY_IE 0x00000020 /* max transmit retry */
196#define XB_CTRL_RCV_IE 0x00000010 /* receive */ 204#define XB_CTRL_RCV_IE 0x00000010 /* receive */
197#define XB_CTRL_XMT_RTRY_IE 0x00000008 /* transmit retry */ 205#define XB_CTRL_XMT_RTRY_IE 0x00000008 /* transmit retry */
198 /* reserved: 0x00000004 */ 206/* reserved: 0x00000004 */
199#define XB_CTRL_MAXREQ_TOUT_IE 0x00000002 /* maximum request timeout */ 207#define XB_CTRL_MAXREQ_TOUT_IE 0x00000002 /* maximum request
208 timeout */
200#define XB_CTRL_SRC_TOUT_IE 0x00000001 /* source timeout */ 209#define XB_CTRL_SRC_TOUT_IE 0x00000001 /* source timeout */
201 210
202/* link_status(x) */ 211/* link_status(x) */
203#define XB_STAT_LINKALIVE XB_CTRL_LINKALIVE_IE 212#define XB_STAT_LINKALIVE XB_CTRL_LINKALIVE_IE
204 /* reserved: 0x7ff80000 */ 213/* reserved: 0x7ff80000 */
205#define XB_STAT_MULTI_ERR 0x00040000 /* multi error */ 214#define XB_STAT_MULTI_ERR 0x00040000 /* multi error */
206#define XB_STAT_ILLEGAL_DST_ERR XB_CTRL_ILLEGAL_DST_IE 215#define XB_STAT_ILLEGAL_DST_ERR XB_CTRL_ILLEGAL_DST_IE
207#define XB_STAT_OALLOC_IBUF_ERR XB_CTRL_OALLOC_IBUF_IE 216#define XB_STAT_OALLOC_IBUF_ERR XB_CTRL_OALLOC_IBUF_IE
@@ -211,7 +220,7 @@ typedef volatile struct xbow_s {
211#define XB_STAT_XMT_MAX_RTRY_ERR XB_CTRL_XMT_MAX_RTRY_IE 220#define XB_STAT_XMT_MAX_RTRY_ERR XB_CTRL_XMT_MAX_RTRY_IE
212#define XB_STAT_RCV_ERR XB_CTRL_RCV_IE 221#define XB_STAT_RCV_ERR XB_CTRL_RCV_IE
213#define XB_STAT_XMT_RTRY_ERR XB_CTRL_XMT_RTRY_IE 222#define XB_STAT_XMT_RTRY_ERR XB_CTRL_XMT_RTRY_IE
214 /* reserved: 0x00000004 */ 223/* reserved: 0x00000004 */
215#define XB_STAT_MAXREQ_TOUT_ERR XB_CTRL_MAXREQ_TOUT_IE 224#define XB_STAT_MAXREQ_TOUT_ERR XB_CTRL_MAXREQ_TOUT_IE
216#define XB_STAT_SRC_TOUT_ERR XB_CTRL_SRC_TOUT_IE 225#define XB_STAT_SRC_TOUT_ERR XB_CTRL_SRC_TOUT_IE
217 226
@@ -222,7 +231,7 @@ typedef volatile struct xbow_s {
222#define XB_AUX_LINKFAIL_RST_BAD 0x00000040 231#define XB_AUX_LINKFAIL_RST_BAD 0x00000040
223#define XB_AUX_STAT_PRESENT 0x00000020 232#define XB_AUX_STAT_PRESENT 0x00000020
224#define XB_AUX_STAT_PORT_WIDTH 0x00000010 233#define XB_AUX_STAT_PORT_WIDTH 0x00000010
225 /* reserved: 0x0000000f */ 234/* reserved: 0x0000000f */
226 235
227/* 236/*
228 * link_arb_upper/link_arb_lower(x), (reg) should be the link_arb_upper 237 * link_arb_upper/link_arb_lower(x), (reg) should be the link_arb_upper
@@ -238,7 +247,8 @@ typedef volatile struct xbow_s {
238/* XBOW_WID_STAT */ 247/* XBOW_WID_STAT */
239#define XB_WID_STAT_LINK_INTR_SHFT (24) 248#define XB_WID_STAT_LINK_INTR_SHFT (24)
240#define XB_WID_STAT_LINK_INTR_MASK (0xFF << XB_WID_STAT_LINK_INTR_SHFT) 249#define XB_WID_STAT_LINK_INTR_MASK (0xFF << XB_WID_STAT_LINK_INTR_SHFT)
241#define XB_WID_STAT_LINK_INTR(x) (0x1 << (((x)&7) + XB_WID_STAT_LINK_INTR_SHFT)) 250#define XB_WID_STAT_LINK_INTR(x) \
251 (0x1 << (((x)&7) + XB_WID_STAT_LINK_INTR_SHFT))
242#define XB_WID_STAT_WIDGET0_INTR 0x00800000 252#define XB_WID_STAT_WIDGET0_INTR 0x00800000
243#define XB_WID_STAT_SRCID_MASK 0x000003c0 /* Xbridge only */ 253#define XB_WID_STAT_SRCID_MASK 0x000003c0 /* Xbridge only */
244#define XB_WID_STAT_REG_ACC_ERR 0x00000020 254#define XB_WID_STAT_REG_ACC_ERR 0x00000020
@@ -264,7 +274,7 @@ typedef volatile struct xbow_s {
264#define XXBOW_WIDGET_PART_NUM 0xd000 /* Xbridge */ 274#define XXBOW_WIDGET_PART_NUM 0xd000 /* Xbridge */
265#define XBOW_WIDGET_MFGR_NUM 0x0 275#define XBOW_WIDGET_MFGR_NUM 0x0
266#define XXBOW_WIDGET_MFGR_NUM 0x0 276#define XXBOW_WIDGET_MFGR_NUM 0x0
267#define PXBOW_WIDGET_PART_NUM 0xd100 /* PIC */ 277#define PXBOW_WIDGET_PART_NUM 0xd100 /* PIC */
268 278
269#define XBOW_REV_1_0 0x1 /* xbow rev 1.0 is "1" */ 279#define XBOW_REV_1_0 0x1 /* xbow rev 1.0 is "1" */
270#define XBOW_REV_1_1 0x2 /* xbow rev 1.1 is "2" */ 280#define XBOW_REV_1_1 0x2 /* xbow rev 1.1 is "2" */
@@ -279,13 +289,13 @@ typedef volatile struct xbow_s {
279#define XBOW_WID_ARB_RELOAD_INT 0x3f /* GBR reload interval */ 289#define XBOW_WID_ARB_RELOAD_INT 0x3f /* GBR reload interval */
280 290
281#define IS_XBRIDGE_XBOW(wid) \ 291#define IS_XBRIDGE_XBOW(wid) \
282 (XWIDGET_PART_NUM(wid) == XXBOW_WIDGET_PART_NUM && \ 292 (XWIDGET_PART_NUM(wid) == XXBOW_WIDGET_PART_NUM && \
283 XWIDGET_MFG_NUM(wid) == XXBOW_WIDGET_MFGR_NUM) 293 XWIDGET_MFG_NUM(wid) == XXBOW_WIDGET_MFGR_NUM)
284 294
285#define IS_PIC_XBOW(wid) \ 295#define IS_PIC_XBOW(wid) \
286 (XWIDGET_PART_NUM(wid) == PXBOW_WIDGET_PART_NUM && \ 296 (XWIDGET_PART_NUM(wid) == PXBOW_WIDGET_PART_NUM && \
287 XWIDGET_MFG_NUM(wid) == XXBOW_WIDGET_MFGR_NUM) 297 XWIDGET_MFG_NUM(wid) == XXBOW_WIDGET_MFGR_NUM)
288 298
289#define XBOW_WAR_ENABLED(pv, widid) ((1 << XWIDGET_REV_NUM(widid)) & pv) 299#define XBOW_WAR_ENABLED(pv, widid) ((1 << XWIDGET_REV_NUM(widid)) & pv)
290 300
291#endif /* _ASM_IA64_SN_XTALK_XBOW_H */ 301#endif /* _ASM_IA64_SN_XTALK_XBOW_H */
diff --git a/arch/ia64/sn/include/xtalk/xwidgetdev.h b/arch/ia64/sn/include/xtalk/xwidgetdev.h
index c5f4bc5cc033..2800eda0fd68 100644
--- a/arch/ia64/sn/include/xtalk/xwidgetdev.h
+++ b/arch/ia64/sn/include/xtalk/xwidgetdev.h
@@ -25,28 +25,28 @@
25 25
26/* widget configuration registers */ 26/* widget configuration registers */
27struct widget_cfg{ 27struct widget_cfg{
28 uint32_t w_id; /* 0x04 */ 28 u32 w_id; /* 0x04 */
29 uint32_t w_pad_0; /* 0x00 */ 29 u32 w_pad_0; /* 0x00 */
30 uint32_t w_status; /* 0x0c */ 30 u32 w_status; /* 0x0c */
31 uint32_t w_pad_1; /* 0x08 */ 31 u32 w_pad_1; /* 0x08 */
32 uint32_t w_err_upper_addr; /* 0x14 */ 32 u32 w_err_upper_addr; /* 0x14 */
33 uint32_t w_pad_2; /* 0x10 */ 33 u32 w_pad_2; /* 0x10 */
34 uint32_t w_err_lower_addr; /* 0x1c */ 34 u32 w_err_lower_addr; /* 0x1c */
35 uint32_t w_pad_3; /* 0x18 */ 35 u32 w_pad_3; /* 0x18 */
36 uint32_t w_control; /* 0x24 */ 36 u32 w_control; /* 0x24 */
37 uint32_t w_pad_4; /* 0x20 */ 37 u32 w_pad_4; /* 0x20 */
38 uint32_t w_req_timeout; /* 0x2c */ 38 u32 w_req_timeout; /* 0x2c */
39 uint32_t w_pad_5; /* 0x28 */ 39 u32 w_pad_5; /* 0x28 */
40 uint32_t w_intdest_upper_addr; /* 0x34 */ 40 u32 w_intdest_upper_addr; /* 0x34 */
41 uint32_t w_pad_6; /* 0x30 */ 41 u32 w_pad_6; /* 0x30 */
42 uint32_t w_intdest_lower_addr; /* 0x3c */ 42 u32 w_intdest_lower_addr; /* 0x3c */
43 uint32_t w_pad_7; /* 0x38 */ 43 u32 w_pad_7; /* 0x38 */
44 uint32_t w_err_cmd_word; /* 0x44 */ 44 u32 w_err_cmd_word; /* 0x44 */
45 uint32_t w_pad_8; /* 0x40 */ 45 u32 w_pad_8; /* 0x40 */
46 uint32_t w_llp_cfg; /* 0x4c */ 46 u32 w_llp_cfg; /* 0x4c */
47 uint32_t w_pad_9; /* 0x48 */ 47 u32 w_pad_9; /* 0x48 */
48 uint32_t w_tflush; /* 0x54 */ 48 u32 w_tflush; /* 0x54 */
49 uint32_t w_pad_10; /* 0x50 */ 49 u32 w_pad_10; /* 0x50 */
50}; 50};
51 51
52/* 52/*
@@ -63,7 +63,7 @@ struct xwidget_info{
63 struct xwidget_hwid xwi_hwid; /* Widget Identification */ 63 struct xwidget_hwid xwi_hwid; /* Widget Identification */
64 char xwi_masterxid; /* Hub's Widget Port Number */ 64 char xwi_masterxid; /* Hub's Widget Port Number */
65 void *xwi_hubinfo; /* Hub's provider private info */ 65 void *xwi_hubinfo; /* Hub's provider private info */
66 uint64_t *xwi_hub_provider; /* prom provider functions */ 66 u64 *xwi_hub_provider; /* prom provider functions */
67 void *xwi_vertex; 67 void *xwi_vertex;
68}; 68};
69 69
diff --git a/arch/ia64/sn/kernel/Makefile b/arch/ia64/sn/kernel/Makefile
index 4351c4ff9845..3e9b4eea7418 100644
--- a/arch/ia64/sn/kernel/Makefile
+++ b/arch/ia64/sn/kernel/Makefile
@@ -7,6 +7,8 @@
7# Copyright (C) 1999,2001-2005 Silicon Graphics, Inc. All Rights Reserved. 7# Copyright (C) 1999,2001-2005 Silicon Graphics, Inc. All Rights Reserved.
8# 8#
9 9
10CPPFLAGS += -I$(srctree)/arch/ia64/sn/include
11
10obj-y += setup.o bte.o bte_error.o irq.o mca.o idle.o \ 12obj-y += setup.o bte.o bte_error.o irq.o mca.o idle.o \
11 huberror.o io_init.o iomv.o klconflib.o sn2/ 13 huberror.o io_init.o iomv.o klconflib.o sn2/
12obj-$(CONFIG_IA64_GENERIC) += machvec.o 14obj-$(CONFIG_IA64_GENERIC) += machvec.o
diff --git a/arch/ia64/sn/kernel/bte.c b/arch/ia64/sn/kernel/bte.c
index dd73c0cb754b..1f11db470d90 100644
--- a/arch/ia64/sn/kernel/bte.c
+++ b/arch/ia64/sn/kernel/bte.c
@@ -3,7 +3,7 @@
3 * License. See the file "COPYING" in the main directory of this archive 3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details. 4 * for more details.
5 * 5 *
6 * Copyright (c) 2000-2005 Silicon Graphics, Inc. All Rights Reserved. 6 * Copyright (c) 2000-2006 Silicon Graphics, Inc. All Rights Reserved.
7 */ 7 */
8 8
9#include <linux/config.h> 9#include <linux/config.h>
@@ -186,18 +186,13 @@ retry_bteop:
186 186
187 /* Initialize the notification to a known value. */ 187 /* Initialize the notification to a known value. */
188 *bte->most_rcnt_na = BTE_WORD_BUSY; 188 *bte->most_rcnt_na = BTE_WORD_BUSY;
189 notif_phys_addr = TO_PHYS(ia64_tpa((unsigned long)bte->most_rcnt_na)); 189 notif_phys_addr = (u64)bte->most_rcnt_na;
190 190
191 if (is_shub2()) {
192 src = SH2_TIO_PHYS_TO_DMA(src);
193 dest = SH2_TIO_PHYS_TO_DMA(dest);
194 notif_phys_addr = SH2_TIO_PHYS_TO_DMA(notif_phys_addr);
195 }
196 /* Set the source and destination registers */ 191 /* Set the source and destination registers */
197 BTE_PRINTKV(("IBSA = 0x%lx)\n", (TO_PHYS(src)))); 192 BTE_PRINTKV(("IBSA = 0x%lx)\n", src));
198 BTE_SRC_STORE(bte, TO_PHYS(src)); 193 BTE_SRC_STORE(bte, src);
199 BTE_PRINTKV(("IBDA = 0x%lx)\n", (TO_PHYS(dest)))); 194 BTE_PRINTKV(("IBDA = 0x%lx)\n", dest));
200 BTE_DEST_STORE(bte, TO_PHYS(dest)); 195 BTE_DEST_STORE(bte, dest);
201 196
202 /* Set the notification register */ 197 /* Set the notification register */
203 BTE_PRINTKV(("IBNA = 0x%lx)\n", notif_phys_addr)); 198 BTE_PRINTKV(("IBNA = 0x%lx)\n", notif_phys_addr));
diff --git a/arch/ia64/sn/kernel/bte_error.c b/arch/ia64/sn/kernel/bte_error.c
index fcbc748ae433..f1ec1370b3e3 100644
--- a/arch/ia64/sn/kernel/bte_error.c
+++ b/arch/ia64/sn/kernel/bte_error.c
@@ -33,7 +33,7 @@ void bte_error_handler(unsigned long);
33 * Wait until all BTE related CRBs are completed 33 * Wait until all BTE related CRBs are completed
34 * and then reset the interfaces. 34 * and then reset the interfaces.
35 */ 35 */
36void shub1_bte_error_handler(unsigned long _nodepda) 36int shub1_bte_error_handler(unsigned long _nodepda)
37{ 37{
38 struct nodepda_s *err_nodepda = (struct nodepda_s *)_nodepda; 38 struct nodepda_s *err_nodepda = (struct nodepda_s *)_nodepda;
39 struct timer_list *recovery_timer = &err_nodepda->bte_recovery_timer; 39 struct timer_list *recovery_timer = &err_nodepda->bte_recovery_timer;
@@ -53,7 +53,7 @@ void shub1_bte_error_handler(unsigned long _nodepda)
53 (err_nodepda->bte_if[1].bh_error == BTE_SUCCESS)) { 53 (err_nodepda->bte_if[1].bh_error == BTE_SUCCESS)) {
54 BTE_PRINTK(("eh:%p:%d Nothing to do.\n", err_nodepda, 54 BTE_PRINTK(("eh:%p:%d Nothing to do.\n", err_nodepda,
55 smp_processor_id())); 55 smp_processor_id()));
56 return; 56 return 1;
57 } 57 }
58 58
59 /* Determine information about our hub */ 59 /* Determine information about our hub */
@@ -81,7 +81,7 @@ void shub1_bte_error_handler(unsigned long _nodepda)
81 mod_timer(recovery_timer, HZ * 5); 81 mod_timer(recovery_timer, HZ * 5);
82 BTE_PRINTK(("eh:%p:%d Marked Giving up\n", err_nodepda, 82 BTE_PRINTK(("eh:%p:%d Marked Giving up\n", err_nodepda,
83 smp_processor_id())); 83 smp_processor_id()));
84 return; 84 return 1;
85 } 85 }
86 if (icmr.ii_icmr_fld_s.i_crb_vld != 0) { 86 if (icmr.ii_icmr_fld_s.i_crb_vld != 0) {
87 87
@@ -99,7 +99,7 @@ void shub1_bte_error_handler(unsigned long _nodepda)
99 BTE_PRINTK(("eh:%p:%d Valid %d, Giving up\n", 99 BTE_PRINTK(("eh:%p:%d Valid %d, Giving up\n",
100 err_nodepda, smp_processor_id(), 100 err_nodepda, smp_processor_id(),
101 i)); 101 i));
102 return; 102 return 1;
103 } 103 }
104 } 104 }
105 } 105 }
@@ -124,6 +124,42 @@ void shub1_bte_error_handler(unsigned long _nodepda)
124 REMOTE_HUB_S(nasid, IIO_IBCR, ibcr.ii_ibcr_regval); 124 REMOTE_HUB_S(nasid, IIO_IBCR, ibcr.ii_ibcr_regval);
125 125
126 del_timer(recovery_timer); 126 del_timer(recovery_timer);
127 return 0;
128}
129
130/*
131 * Wait until all BTE related CRBs are completed
132 * and then reset the interfaces.
133 */
134int shub2_bte_error_handler(unsigned long _nodepda)
135{
136 struct nodepda_s *err_nodepda = (struct nodepda_s *)_nodepda;
137 struct timer_list *recovery_timer = &err_nodepda->bte_recovery_timer;
138 struct bteinfo_s *bte;
139 nasid_t nasid;
140 u64 status;
141 int i;
142
143 nasid = cnodeid_to_nasid(err_nodepda->bte_if[0].bte_cnode);
144
145 /*
146 * Verify that all the BTEs are complete
147 */
148 for (i = 0; i < BTES_PER_NODE; i++) {
149 bte = &err_nodepda->bte_if[i];
150 status = BTE_LNSTAT_LOAD(bte);
151 if ((status & IBLS_ERROR) || !(status & IBLS_BUSY))
152 continue;
153 mod_timer(recovery_timer, HZ * 5);
154 BTE_PRINTK(("eh:%p:%d Marked Giving up\n", err_nodepda,
155 smp_processor_id()));
156 return 1;
157 }
158 if (ia64_sn_bte_recovery(nasid))
159 panic("bte_error_handler(): Fatal BTE Error");
160
161 del_timer(recovery_timer);
162 return 0;
127} 163}
128 164
129/* 165/*
@@ -135,7 +171,6 @@ void bte_error_handler(unsigned long _nodepda)
135 struct nodepda_s *err_nodepda = (struct nodepda_s *)_nodepda; 171 struct nodepda_s *err_nodepda = (struct nodepda_s *)_nodepda;
136 spinlock_t *recovery_lock = &err_nodepda->bte_recovery_lock; 172 spinlock_t *recovery_lock = &err_nodepda->bte_recovery_lock;
137 int i; 173 int i;
138 nasid_t nasid;
139 unsigned long irq_flags; 174 unsigned long irq_flags;
140 volatile u64 *notify; 175 volatile u64 *notify;
141 bte_result_t bh_error; 176 bte_result_t bh_error;
@@ -160,12 +195,15 @@ void bte_error_handler(unsigned long _nodepda)
160 } 195 }
161 196
162 if (is_shub1()) { 197 if (is_shub1()) {
163 shub1_bte_error_handler(_nodepda); 198 if (shub1_bte_error_handler(_nodepda)) {
199 spin_unlock_irqrestore(recovery_lock, irq_flags);
200 return;
201 }
164 } else { 202 } else {
165 nasid = cnodeid_to_nasid(err_nodepda->bte_if[0].bte_cnode); 203 if (shub2_bte_error_handler(_nodepda)) {
166 204 spin_unlock_irqrestore(recovery_lock, irq_flags);
167 if (ia64_sn_bte_recovery(nasid)) 205 return;
168 panic("bte_error_handler(): Fatal BTE Error"); 206 }
169 } 207 }
170 208
171 for (i = 0; i < BTES_PER_NODE; i++) { 209 for (i = 0; i < BTES_PER_NODE; i++) {
diff --git a/arch/ia64/sn/kernel/huberror.c b/arch/ia64/sn/kernel/huberror.c
index 5c5eb01c50f0..56ab6bae00ee 100644
--- a/arch/ia64/sn/kernel/huberror.c
+++ b/arch/ia64/sn/kernel/huberror.c
@@ -32,13 +32,14 @@ static irqreturn_t hub_eint_handler(int irq, void *arg, struct pt_regs *ep)
32 ret_stuff.v0 = 0; 32 ret_stuff.v0 = 0;
33 hubdev_info = (struct hubdev_info *)arg; 33 hubdev_info = (struct hubdev_info *)arg;
34 nasid = hubdev_info->hdi_nasid; 34 nasid = hubdev_info->hdi_nasid;
35 SAL_CALL_NOLOCK(ret_stuff, SN_SAL_HUB_ERROR_INTERRUPT, 35
36 if (is_shub1()) {
37 SAL_CALL_NOLOCK(ret_stuff, SN_SAL_HUB_ERROR_INTERRUPT,
36 (u64) nasid, 0, 0, 0, 0, 0, 0); 38 (u64) nasid, 0, 0, 0, 0, 0, 0);
37 39
38 if ((int)ret_stuff.v0) 40 if ((int)ret_stuff.v0)
39 panic("hubii_eint_handler(): Fatal TIO Error"); 41 panic("hubii_eint_handler(): Fatal TIO Error");
40 42
41 if (is_shub1()) {
42 if (!(nasid & 1)) /* Not a TIO, handle CRB errors */ 43 if (!(nasid & 1)) /* Not a TIO, handle CRB errors */
43 (void)hubiio_crb_error_handler(hubdev_info); 44 (void)hubiio_crb_error_handler(hubdev_info);
44 } else 45 } else
diff --git a/arch/ia64/sn/kernel/io_init.c b/arch/ia64/sn/kernel/io_init.c
index 318087e35b66..dfb3f2902379 100644
--- a/arch/ia64/sn/kernel/io_init.c
+++ b/arch/ia64/sn/kernel/io_init.c
@@ -10,6 +10,7 @@
10#include <linux/nodemask.h> 10#include <linux/nodemask.h>
11#include <asm/sn/types.h> 11#include <asm/sn/types.h>
12#include <asm/sn/addrs.h> 12#include <asm/sn/addrs.h>
13#include <asm/sn/sn_feature_sets.h>
13#include <asm/sn/geo.h> 14#include <asm/sn/geo.h>
14#include <asm/sn/io.h> 15#include <asm/sn/io.h>
15#include <asm/sn/pcibr_provider.h> 16#include <asm/sn/pcibr_provider.h>
@@ -22,6 +23,10 @@
22#include "xtalk/hubdev.h" 23#include "xtalk/hubdev.h"
23#include "xtalk/xwidgetdev.h" 24#include "xtalk/xwidgetdev.h"
24 25
26
27extern void sn_init_cpei_timer(void);
28extern void register_sn_procfs(void);
29
25static struct list_head sn_sysdata_list; 30static struct list_head sn_sysdata_list;
26 31
27/* sysdata list struct */ 32/* sysdata list struct */
@@ -39,12 +44,12 @@ struct brick {
39 struct slab_info slab_info[MAX_SLABS + 1]; 44 struct slab_info slab_info[MAX_SLABS + 1];
40}; 45};
41 46
42int sn_ioif_inited = 0; /* SN I/O infrastructure initialized? */ 47int sn_ioif_inited; /* SN I/O infrastructure initialized? */
43 48
44struct sn_pcibus_provider *sn_pci_provider[PCIIO_ASIC_MAX_TYPES]; /* indexed by asic type */ 49struct sn_pcibus_provider *sn_pci_provider[PCIIO_ASIC_MAX_TYPES]; /* indexed by asic type */
45 50
46static int max_segment_number = 0; /* Default highest segment number */ 51static int max_segment_number; /* Default highest segment number */
47static int max_pcibus_number = 255; /* Default highest pci bus number */ 52static int max_pcibus_number = 255; /* Default highest pci bus number */
48 53
49/* 54/*
50 * Hooks and struct for unsupported pci providers 55 * Hooks and struct for unsupported pci providers
@@ -76,31 +81,29 @@ static struct sn_pcibus_provider sn_pci_default_provider = {
76}; 81};
77 82
78/* 83/*
79 * Retrieve the DMA Flush List given nasid. This list is needed 84 * Retrieve the DMA Flush List given nasid, widget, and device.
80 * to implement the WAR - Flush DMA data on PIO Reads. 85 * This list is needed to implement the WAR - Flush DMA data on PIO Reads.
81 */ 86 */
82static inline uint64_t 87static inline u64
83sal_get_widget_dmaflush_list(u64 nasid, u64 widget_num, u64 address) 88sal_get_device_dmaflush_list(u64 nasid, u64 widget_num, u64 device_num,
89 u64 address)
84{ 90{
85
86 struct ia64_sal_retval ret_stuff; 91 struct ia64_sal_retval ret_stuff;
87 ret_stuff.status = 0; 92 ret_stuff.status = 0;
88 ret_stuff.v0 = 0; 93 ret_stuff.v0 = 0;
89 94
90 SAL_CALL_NOLOCK(ret_stuff, 95 SAL_CALL_NOLOCK(ret_stuff,
91 (u64) SN_SAL_IOIF_GET_WIDGET_DMAFLUSH_LIST, 96 (u64) SN_SAL_IOIF_GET_DEVICE_DMAFLUSH_LIST,
92 (u64) nasid, (u64) widget_num, (u64) address, 0, 0, 0, 97 (u64) nasid, (u64) widget_num,
93 0); 98 (u64) device_num, (u64) address, 0, 0, 0);
94 return ret_stuff.v0; 99 return ret_stuff.status;
95
96} 100}
97 101
98/* 102/*
99 * Retrieve the hub device info structure for the given nasid. 103 * Retrieve the hub device info structure for the given nasid.
100 */ 104 */
101static inline uint64_t sal_get_hubdev_info(u64 handle, u64 address) 105static inline u64 sal_get_hubdev_info(u64 handle, u64 address)
102{ 106{
103
104 struct ia64_sal_retval ret_stuff; 107 struct ia64_sal_retval ret_stuff;
105 ret_stuff.status = 0; 108 ret_stuff.status = 0;
106 ret_stuff.v0 = 0; 109 ret_stuff.v0 = 0;
@@ -114,9 +117,8 @@ static inline uint64_t sal_get_hubdev_info(u64 handle, u64 address)
114/* 117/*
115 * Retrieve the pci bus information given the bus number. 118 * Retrieve the pci bus information given the bus number.
116 */ 119 */
117static inline uint64_t sal_get_pcibus_info(u64 segment, u64 busnum, u64 address) 120static inline u64 sal_get_pcibus_info(u64 segment, u64 busnum, u64 address)
118{ 121{
119
120 struct ia64_sal_retval ret_stuff; 122 struct ia64_sal_retval ret_stuff;
121 ret_stuff.status = 0; 123 ret_stuff.status = 0;
122 ret_stuff.v0 = 0; 124 ret_stuff.v0 = 0;
@@ -130,9 +132,9 @@ static inline uint64_t sal_get_pcibus_info(u64 segment, u64 busnum, u64 address)
130/* 132/*
131 * Retrieve the pci device information given the bus and device|function number. 133 * Retrieve the pci device information given the bus and device|function number.
132 */ 134 */
133static inline uint64_t 135static inline u64
134sal_get_pcidev_info(u64 segment, u64 bus_number, u64 devfn, u64 pci_dev, 136sal_get_pcidev_info(u64 segment, u64 bus_number, u64 devfn, u64 pci_dev,
135 u64 sn_irq_info) 137 u64 sn_irq_info)
136{ 138{
137 struct ia64_sal_retval ret_stuff; 139 struct ia64_sal_retval ret_stuff;
138 ret_stuff.status = 0; 140 ret_stuff.status = 0;
@@ -140,7 +142,7 @@ sal_get_pcidev_info(u64 segment, u64 bus_number, u64 devfn, u64 pci_dev,
140 142
141 SAL_CALL_NOLOCK(ret_stuff, 143 SAL_CALL_NOLOCK(ret_stuff,
142 (u64) SN_SAL_IOIF_GET_PCIDEV_INFO, 144 (u64) SN_SAL_IOIF_GET_PCIDEV_INFO,
143 (u64) segment, (u64) bus_number, (u64) devfn, 145 (u64) segment, (u64) bus_number, (u64) devfn,
144 (u64) pci_dev, 146 (u64) pci_dev,
145 sn_irq_info, 0, 0); 147 sn_irq_info, 0, 0);
146 return ret_stuff.v0; 148 return ret_stuff.v0;
@@ -164,18 +166,56 @@ sn_pcidev_info_get(struct pci_dev *dev)
164 return NULL; 166 return NULL;
165} 167}
166 168
169/* Older PROM flush WAR
170 *
171 * 01/16/06 -- This war will be in place until a new official PROM is released.
172 * Additionally note that the struct sn_flush_device_war also has to be
173 * removed from arch/ia64/sn/include/xtalk/hubdev.h
174 */
175static u8 war_implemented = 0;
176
177static s64 sn_device_fixup_war(u64 nasid, u64 widget, int device,
178 struct sn_flush_device_common *common)
179{
180 struct sn_flush_device_war *war_list;
181 struct sn_flush_device_war *dev_entry;
182 struct ia64_sal_retval isrv = {0,0,0,0};
183
184 if (!war_implemented) {
185 printk(KERN_WARNING "PROM version < 4.50 -- implementing old "
186 "PROM flush WAR\n");
187 war_implemented = 1;
188 }
189
190 war_list = kzalloc(DEV_PER_WIDGET * sizeof(*war_list), GFP_KERNEL);
191 if (!war_list)
192 BUG();
193
194 SAL_CALL_NOLOCK(isrv, SN_SAL_IOIF_GET_WIDGET_DMAFLUSH_LIST,
195 nasid, widget, __pa(war_list), 0, 0, 0 ,0);
196 if (isrv.status)
197 panic("sn_device_fixup_war failed: %s\n",
198 ia64_sal_strerror(isrv.status));
199
200 dev_entry = war_list + device;
201 memcpy(common,dev_entry, sizeof(*common));
202 kfree(war_list);
203
204 return isrv.status;
205}
206
167/* 207/*
168 * sn_fixup_ionodes() - This routine initializes the HUB data strcuture for 208 * sn_fixup_ionodes() - This routine initializes the HUB data strcuture for
169 * each node in the system. 209 * each node in the system.
170 */ 210 */
171static void sn_fixup_ionodes(void) 211static void __init sn_fixup_ionodes(void)
172{ 212{
173 213 struct sn_flush_device_kernel *sn_flush_device_kernel;
174 struct sn_flush_device_list *sn_flush_device_list; 214 struct sn_flush_device_kernel *dev_entry;
175 struct hubdev_info *hubdev; 215 struct hubdev_info *hubdev;
176 uint64_t status; 216 u64 status;
177 uint64_t nasid; 217 u64 nasid;
178 int i, widget; 218 int i, widget, device, size;
179 219
180 /* 220 /*
181 * Get SGI Specific HUB chipset information. 221 * Get SGI Specific HUB chipset information.
@@ -186,7 +226,7 @@ static void sn_fixup_ionodes(void)
186 nasid = cnodeid_to_nasid(i); 226 nasid = cnodeid_to_nasid(i);
187 hubdev->max_segment_number = 0xffffffff; 227 hubdev->max_segment_number = 0xffffffff;
188 hubdev->max_pcibus_number = 0xff; 228 hubdev->max_pcibus_number = 0xff;
189 status = sal_get_hubdev_info(nasid, (uint64_t) __pa(hubdev)); 229 status = sal_get_hubdev_info(nasid, (u64) __pa(hubdev));
190 if (status) 230 if (status)
191 continue; 231 continue;
192 232
@@ -211,40 +251,49 @@ static void sn_fixup_ionodes(void)
211 if (!hubdev->hdi_flush_nasid_list.widget_p) 251 if (!hubdev->hdi_flush_nasid_list.widget_p)
212 continue; 252 continue;
213 253
254 size = (HUB_WIDGET_ID_MAX + 1) *
255 sizeof(struct sn_flush_device_kernel *);
214 hubdev->hdi_flush_nasid_list.widget_p = 256 hubdev->hdi_flush_nasid_list.widget_p =
215 kmalloc((HUB_WIDGET_ID_MAX + 1) * 257 kzalloc(size, GFP_KERNEL);
216 sizeof(struct sn_flush_device_list *), GFP_KERNEL); 258 if (!hubdev->hdi_flush_nasid_list.widget_p)
217 259 BUG();
218 memset(hubdev->hdi_flush_nasid_list.widget_p, 0x0,
219 (HUB_WIDGET_ID_MAX + 1) *
220 sizeof(struct sn_flush_device_list *));
221 260
222 for (widget = 0; widget <= HUB_WIDGET_ID_MAX; widget++) { 261 for (widget = 0; widget <= HUB_WIDGET_ID_MAX; widget++) {
223 sn_flush_device_list = kmalloc(DEV_PER_WIDGET * 262 size = DEV_PER_WIDGET *
224 sizeof(struct 263 sizeof(struct sn_flush_device_kernel);
225 sn_flush_device_list), 264 sn_flush_device_kernel = kzalloc(size, GFP_KERNEL);
226 GFP_KERNEL); 265 if (!sn_flush_device_kernel)
227 memset(sn_flush_device_list, 0x0, 266 BUG();
228 DEV_PER_WIDGET * 267
229 sizeof(struct sn_flush_device_list)); 268 dev_entry = sn_flush_device_kernel;
230 269 for (device = 0; device < DEV_PER_WIDGET;
231 status = 270 device++,dev_entry++) {
232 sal_get_widget_dmaflush_list(nasid, widget, 271 size = sizeof(struct sn_flush_device_common);
233 (uint64_t) 272 dev_entry->common = kzalloc(size, GFP_KERNEL);
234 __pa 273 if (!dev_entry->common)
235 (sn_flush_device_list)); 274 BUG();
236 if (status) { 275
237 kfree(sn_flush_device_list); 276 if (sn_prom_feature_available(
238 continue; 277 PRF_DEVICE_FLUSH_LIST))
278 status = sal_get_device_dmaflush_list(
279 nasid, widget, device,
280 (u64)(dev_entry->common));
281 else
282 status = sn_device_fixup_war(nasid,
283 widget, device,
284 dev_entry->common);
285 if (status != SALRET_OK)
286 panic("SAL call failed: %s\n",
287 ia64_sal_strerror(status));
288
289 spin_lock_init(&dev_entry->sfdl_flush_lock);
239 } 290 }
240 291
241 spin_lock_init(&sn_flush_device_list->sfdl_flush_lock); 292 if (sn_flush_device_kernel)
242 hubdev->hdi_flush_nasid_list.widget_p[widget] = 293 hubdev->hdi_flush_nasid_list.widget_p[widget] =
243 sn_flush_device_list; 294 sn_flush_device_kernel;
244 } 295 }
245
246 } 296 }
247
248} 297}
249 298
250/* 299/*
@@ -256,7 +305,7 @@ static void sn_fixup_ionodes(void)
256 */ 305 */
257static void 306static void
258sn_pci_window_fixup(struct pci_dev *dev, unsigned int count, 307sn_pci_window_fixup(struct pci_dev *dev, unsigned int count,
259 int64_t * pci_addrs) 308 s64 * pci_addrs)
260{ 309{
261 struct pci_controller *controller = PCI_CONTROLLER(dev->bus); 310 struct pci_controller *controller = PCI_CONTROLLER(dev->bus);
262 unsigned int i; 311 unsigned int i;
@@ -316,20 +365,19 @@ void sn_pci_fixup_slot(struct pci_dev *dev)
316 struct pci_bus *host_pci_bus; 365 struct pci_bus *host_pci_bus;
317 struct pci_dev *host_pci_dev; 366 struct pci_dev *host_pci_dev;
318 struct pcidev_info *pcidev_info; 367 struct pcidev_info *pcidev_info;
319 int64_t pci_addrs[PCI_ROM_RESOURCE + 1]; 368 s64 pci_addrs[PCI_ROM_RESOURCE + 1];
320 struct sn_irq_info *sn_irq_info; 369 struct sn_irq_info *sn_irq_info;
321 unsigned long size; 370 unsigned long size;
322 unsigned int bus_no, devfn; 371 unsigned int bus_no, devfn;
323 372
324 pci_dev_get(dev); /* for the sysdata pointer */ 373 pci_dev_get(dev); /* for the sysdata pointer */
325 pcidev_info = kzalloc(sizeof(struct pcidev_info), GFP_KERNEL); 374 pcidev_info = kzalloc(sizeof(struct pcidev_info), GFP_KERNEL);
326 if (pcidev_info <= 0) 375 if (!pcidev_info)
327 BUG(); /* Cannot afford to run out of memory */ 376 BUG(); /* Cannot afford to run out of memory */
328 377
329 sn_irq_info = kmalloc(sizeof(struct sn_irq_info), GFP_KERNEL); 378 sn_irq_info = kzalloc(sizeof(struct sn_irq_info), GFP_KERNEL);
330 if (sn_irq_info <= 0) 379 if (!sn_irq_info)
331 BUG(); /* Cannot afford to run out of memory */ 380 BUG(); /* Cannot afford to run out of memory */
332 memset(sn_irq_info, 0, sizeof(struct sn_irq_info));
333 381
334 /* Call to retrieve pci device information needed by kernel. */ 382 /* Call to retrieve pci device information needed by kernel. */
335 status = sal_get_pcidev_info((u64) segment, (u64) dev->bus->number, 383 status = sal_get_pcidev_info((u64) segment, (u64) dev->bus->number,
@@ -407,6 +455,13 @@ void sn_pci_fixup_slot(struct pci_dev *dev)
407 pcidev_info->pdi_sn_irq_info = NULL; 455 pcidev_info->pdi_sn_irq_info = NULL;
408 kfree(sn_irq_info); 456 kfree(sn_irq_info);
409 } 457 }
458
459 /*
460 * MSI currently not supported on altix. Remove this when
461 * the MSI abstraction patches are integrated into the kernel
462 * (sometime after 2.6.16 releases)
463 */
464 dev->no_msi = 1;
410} 465}
411 466
412/* 467/*
@@ -415,13 +470,13 @@ void sn_pci_fixup_slot(struct pci_dev *dev)
415 */ 470 */
416void sn_pci_controller_fixup(int segment, int busnum, struct pci_bus *bus) 471void sn_pci_controller_fixup(int segment, int busnum, struct pci_bus *bus)
417{ 472{
418 int status = 0; 473 int status;
419 int nasid, cnode; 474 int nasid, cnode;
420 struct pci_controller *controller; 475 struct pci_controller *controller;
421 struct sn_pci_controller *sn_controller; 476 struct sn_pci_controller *sn_controller;
422 struct pcibus_bussoft *prom_bussoft_ptr; 477 struct pcibus_bussoft *prom_bussoft_ptr;
423 struct hubdev_info *hubdev_info; 478 struct hubdev_info *hubdev_info;
424 void *provider_soft = NULL; 479 void *provider_soft;
425 struct sn_pcibus_provider *provider; 480 struct sn_pcibus_provider *provider;
426 481
427 status = sal_get_pcibus_info((u64) segment, (u64) busnum, 482 status = sal_get_pcibus_info((u64) segment, (u64) busnum,
@@ -468,6 +523,8 @@ void sn_pci_controller_fixup(int segment, int busnum, struct pci_bus *bus)
468 bus->sysdata = controller; 523 bus->sysdata = controller;
469 if (provider->bus_fixup) 524 if (provider->bus_fixup)
470 provider_soft = (*provider->bus_fixup) (prom_bussoft_ptr, controller); 525 provider_soft = (*provider->bus_fixup) (prom_bussoft_ptr, controller);
526 else
527 provider_soft = NULL;
471 528
472 if (provider_soft == NULL) { 529 if (provider_soft == NULL) {
473 /* fixup failed or not applicable */ 530 /* fixup failed or not applicable */
@@ -550,15 +607,15 @@ void sn_bus_store_sysdata(struct pci_dev *dev)
550void sn_bus_free_sysdata(void) 607void sn_bus_free_sysdata(void)
551{ 608{
552 struct sysdata_el *element; 609 struct sysdata_el *element;
553 struct list_head *list; 610 struct list_head *list, *safe;
554 611
555sn_sysdata_free_start: 612 list_for_each_safe(list, safe, &sn_sysdata_list) {
556 list_for_each(list, &sn_sysdata_list) {
557 element = list_entry(list, struct sysdata_el, entry); 613 element = list_entry(list, struct sysdata_el, entry);
558 list_del(&element->entry); 614 list_del(&element->entry);
615 list_del(&(((struct pcidev_info *)
616 (element->sysdata))->pdi_list));
559 kfree(element->sysdata); 617 kfree(element->sysdata);
560 kfree(element); 618 kfree(element);
561 goto sn_sysdata_free_start;
562 } 619 }
563 return; 620 return;
564} 621}
@@ -571,13 +628,8 @@ sn_sysdata_free_start:
571 628
572static int __init sn_pci_init(void) 629static int __init sn_pci_init(void)
573{ 630{
574 int i = 0; 631 int i, j;
575 int j = 0;
576 struct pci_dev *pci_dev = NULL; 632 struct pci_dev *pci_dev = NULL;
577 extern void sn_init_cpei_timer(void);
578#ifdef CONFIG_PROC_FS
579 extern void register_sn_procfs(void);
580#endif
581 633
582 if (!ia64_platform_is("sn2") || IS_RUNNING_ON_FAKE_PROM()) 634 if (!ia64_platform_is("sn2") || IS_RUNNING_ON_FAKE_PROM())
583 return 0; 635 return 0;
@@ -633,32 +685,29 @@ static int __init sn_pci_init(void)
633 */ 685 */
634void hubdev_init_node(nodepda_t * npda, cnodeid_t node) 686void hubdev_init_node(nodepda_t * npda, cnodeid_t node)
635{ 687{
636
637 struct hubdev_info *hubdev_info; 688 struct hubdev_info *hubdev_info;
689 int size;
690 pg_data_t *pg;
691
692 size = sizeof(struct hubdev_info);
638 693
639 if (node >= num_online_nodes()) /* Headless/memless IO nodes */ 694 if (node >= num_online_nodes()) /* Headless/memless IO nodes */
640 hubdev_info = 695 pg = NODE_DATA(0);
641 (struct hubdev_info *)alloc_bootmem_node(NODE_DATA(0),
642 sizeof(struct
643 hubdev_info));
644 else 696 else
645 hubdev_info = 697 pg = NODE_DATA(node);
646 (struct hubdev_info *)alloc_bootmem_node(NODE_DATA(node),
647 sizeof(struct
648 hubdev_info));
649 npda->pdinfo = (void *)hubdev_info;
650 698
699 hubdev_info = (struct hubdev_info *)alloc_bootmem_node(pg, size);
700
701 npda->pdinfo = (void *)hubdev_info;
651} 702}
652 703
653geoid_t 704geoid_t
654cnodeid_get_geoid(cnodeid_t cnode) 705cnodeid_get_geoid(cnodeid_t cnode)
655{ 706{
656
657 struct hubdev_info *hubdev; 707 struct hubdev_info *hubdev;
658 708
659 hubdev = (struct hubdev_info *)(NODEPDA(cnode)->pdinfo); 709 hubdev = (struct hubdev_info *)(NODEPDA(cnode)->pdinfo);
660 return hubdev->hdi_geoid; 710 return hubdev->hdi_geoid;
661
662} 711}
663 712
664subsys_initcall(sn_pci_init); 713subsys_initcall(sn_pci_init);
diff --git a/arch/ia64/sn/kernel/irq.c b/arch/ia64/sn/kernel/irq.c
index 01d18b7b5bb3..c373113d073a 100644
--- a/arch/ia64/sn/kernel/irq.c
+++ b/arch/ia64/sn/kernel/irq.c
@@ -5,11 +5,12 @@
5 * License. See the file "COPYING" in the main directory of this archive 5 * License. See the file "COPYING" in the main directory of this archive
6 * for more details. 6 * for more details.
7 * 7 *
8 * Copyright (c) 2000-2005 Silicon Graphics, Inc. All Rights Reserved. 8 * Copyright (c) 2000-2006 Silicon Graphics, Inc. All Rights Reserved.
9 */ 9 */
10 10
11#include <linux/irq.h> 11#include <linux/irq.h>
12#include <linux/spinlock.h> 12#include <linux/spinlock.h>
13#include <linux/init.h>
13#include <asm/sn/addrs.h> 14#include <asm/sn/addrs.h>
14#include <asm/sn/arch.h> 15#include <asm/sn/arch.h>
15#include <asm/sn/intr.h> 16#include <asm/sn/intr.h>
@@ -28,7 +29,7 @@ extern int sn_ioif_inited;
28static struct list_head **sn_irq_lh; 29static struct list_head **sn_irq_lh;
29static spinlock_t sn_irq_info_lock = SPIN_LOCK_UNLOCKED; /* non-IRQ lock */ 30static spinlock_t sn_irq_info_lock = SPIN_LOCK_UNLOCKED; /* non-IRQ lock */
30 31
31static inline uint64_t sn_intr_alloc(nasid_t local_nasid, int local_widget, 32static inline u64 sn_intr_alloc(nasid_t local_nasid, int local_widget,
32 u64 sn_irq_info, 33 u64 sn_irq_info,
33 int req_irq, nasid_t req_nasid, 34 int req_irq, nasid_t req_nasid,
34 int req_slice) 35 int req_slice)
@@ -76,17 +77,15 @@ static void sn_enable_irq(unsigned int irq)
76 77
77static void sn_ack_irq(unsigned int irq) 78static void sn_ack_irq(unsigned int irq)
78{ 79{
79 u64 event_occurred, mask = 0; 80 u64 event_occurred, mask;
80 81
81 irq = irq & 0xff; 82 irq = irq & 0xff;
82 event_occurred = 83 event_occurred = HUB_L((u64*)LOCAL_MMR_ADDR(SH_EVENT_OCCURRED));
83 HUB_L((u64*)LOCAL_MMR_ADDR(SH_EVENT_OCCURRED));
84 mask = event_occurred & SH_ALL_INT_MASK; 84 mask = event_occurred & SH_ALL_INT_MASK;
85 HUB_S((u64*)LOCAL_MMR_ADDR(SH_EVENT_OCCURRED_ALIAS), 85 HUB_S((u64*)LOCAL_MMR_ADDR(SH_EVENT_OCCURRED_ALIAS), mask);
86 mask);
87 __set_bit(irq, (volatile void *)pda->sn_in_service_ivecs); 86 __set_bit(irq, (volatile void *)pda->sn_in_service_ivecs);
88 87
89 move_irq(irq); 88 move_native_irq(irq);
90} 89}
91 90
92static void sn_end_irq(unsigned int irq) 91static void sn_end_irq(unsigned int irq)
@@ -123,7 +122,7 @@ static void sn_set_affinity_irq(unsigned int irq, cpumask_t mask)
123 122
124 list_for_each_entry_safe(sn_irq_info, sn_irq_info_safe, 123 list_for_each_entry_safe(sn_irq_info, sn_irq_info_safe,
125 sn_irq_lh[irq], list) { 124 sn_irq_lh[irq], list) {
126 uint64_t bridge; 125 u64 bridge;
127 int local_widget, status; 126 int local_widget, status;
128 nasid_t local_nasid; 127 nasid_t local_nasid;
129 struct sn_irq_info *new_irq_info; 128 struct sn_irq_info *new_irq_info;
@@ -134,7 +133,7 @@ static void sn_set_affinity_irq(unsigned int irq, cpumask_t mask)
134 break; 133 break;
135 memcpy(new_irq_info, sn_irq_info, sizeof(struct sn_irq_info)); 134 memcpy(new_irq_info, sn_irq_info, sizeof(struct sn_irq_info));
136 135
137 bridge = (uint64_t) new_irq_info->irq_bridge; 136 bridge = (u64) new_irq_info->irq_bridge;
138 if (!bridge) { 137 if (!bridge) {
139 kfree(new_irq_info); 138 kfree(new_irq_info);
140 break; /* irq is not a device interrupt */ 139 break; /* irq is not a device interrupt */
@@ -219,9 +218,8 @@ static void register_intr_pda(struct sn_irq_info *sn_irq_info)
219 pdacpu(cpu)->sn_last_irq = irq; 218 pdacpu(cpu)->sn_last_irq = irq;
220 } 219 }
221 220
222 if (pdacpu(cpu)->sn_first_irq == 0 || pdacpu(cpu)->sn_first_irq > irq) { 221 if (pdacpu(cpu)->sn_first_irq == 0 || pdacpu(cpu)->sn_first_irq > irq)
223 pdacpu(cpu)->sn_first_irq = irq; 222 pdacpu(cpu)->sn_first_irq = irq;
224 }
225} 223}
226 224
227static void unregister_intr_pda(struct sn_irq_info *sn_irq_info) 225static void unregister_intr_pda(struct sn_irq_info *sn_irq_info)
@@ -289,7 +287,7 @@ void sn_irq_fixup(struct pci_dev *pci_dev, struct sn_irq_info *sn_irq_info)
289 list_add_rcu(&sn_irq_info->list, sn_irq_lh[sn_irq_info->irq_irq]); 287 list_add_rcu(&sn_irq_info->list, sn_irq_lh[sn_irq_info->irq_irq]);
290 spin_unlock(&sn_irq_info_lock); 288 spin_unlock(&sn_irq_info_lock);
291 289
292 (void)register_intr_pda(sn_irq_info); 290 register_intr_pda(sn_irq_info);
293} 291}
294 292
295void sn_irq_unfixup(struct pci_dev *pci_dev) 293void sn_irq_unfixup(struct pci_dev *pci_dev)
@@ -301,7 +299,9 @@ void sn_irq_unfixup(struct pci_dev *pci_dev)
301 return; 299 return;
302 300
303 sn_irq_info = SN_PCIDEV_INFO(pci_dev)->pdi_sn_irq_info; 301 sn_irq_info = SN_PCIDEV_INFO(pci_dev)->pdi_sn_irq_info;
304 if (!sn_irq_info || !sn_irq_info->irq_irq) { 302 if (!sn_irq_info)
303 return;
304 if (!sn_irq_info->irq_irq) {
305 kfree(sn_irq_info); 305 kfree(sn_irq_info);
306 return; 306 return;
307 } 307 }
@@ -349,10 +349,10 @@ static void force_interrupt(int irq)
349 */ 349 */
350static void sn_check_intr(int irq, struct sn_irq_info *sn_irq_info) 350static void sn_check_intr(int irq, struct sn_irq_info *sn_irq_info)
351{ 351{
352 uint64_t regval; 352 u64 regval;
353 int irr_reg_num; 353 int irr_reg_num;
354 int irr_bit; 354 int irr_bit;
355 uint64_t irr_reg; 355 u64 irr_reg;
356 struct pcidev_info *pcidev_info; 356 struct pcidev_info *pcidev_info;
357 struct pcibus_info *pcibus_info; 357 struct pcibus_info *pcibus_info;
358 358
@@ -419,7 +419,7 @@ void sn_lb_int_war_check(void)
419 rcu_read_unlock(); 419 rcu_read_unlock();
420} 420}
421 421
422void sn_irq_lh_init(void) 422void __init sn_irq_lh_init(void)
423{ 423{
424 int i; 424 int i;
425 425
@@ -434,5 +434,4 @@ void sn_irq_lh_init(void)
434 434
435 INIT_LIST_HEAD(sn_irq_lh[i]); 435 INIT_LIST_HEAD(sn_irq_lh[i]);
436 } 436 }
437
438} 437}
diff --git a/arch/ia64/sn/kernel/klconflib.c b/arch/ia64/sn/kernel/klconflib.c
index 0f11a3299cd2..87682b48ef83 100644
--- a/arch/ia64/sn/kernel/klconflib.c
+++ b/arch/ia64/sn/kernel/klconflib.c
@@ -78,31 +78,30 @@ format_module_id(char *buffer, moduleid_t m, int fmt)
78 position = MODULE_GET_BPOS(m); 78 position = MODULE_GET_BPOS(m);
79 79
80 if ((fmt == MODULE_FORMAT_BRIEF) || (fmt == MODULE_FORMAT_LCD)) { 80 if ((fmt == MODULE_FORMAT_BRIEF) || (fmt == MODULE_FORMAT_LCD)) {
81 /* Brief module number format, eg. 002c15 */ 81 /* Brief module number format, eg. 002c15 */
82 82
83 /* Decompress the rack number */ 83 /* Decompress the rack number */
84 *buffer++ = '0' + RACK_GET_CLASS(rack); 84 *buffer++ = '0' + RACK_GET_CLASS(rack);
85 *buffer++ = '0' + RACK_GET_GROUP(rack); 85 *buffer++ = '0' + RACK_GET_GROUP(rack);
86 *buffer++ = '0' + RACK_GET_NUM(rack); 86 *buffer++ = '0' + RACK_GET_NUM(rack);
87 87
88 /* Add the brick type */ 88 /* Add the brick type */
89 *buffer++ = brickchar; 89 *buffer++ = brickchar;
90 } 90 }
91 else if (fmt == MODULE_FORMAT_LONG) { 91 else if (fmt == MODULE_FORMAT_LONG) {
92 /* Fuller hwgraph format, eg. rack/002/bay/15 */ 92 /* Fuller hwgraph format, eg. rack/002/bay/15 */
93 93
94 strcpy(buffer, "rack" "/"); buffer += strlen(buffer); 94 strcpy(buffer, "rack" "/"); buffer += strlen(buffer);
95 95
96 *buffer++ = '0' + RACK_GET_CLASS(rack); 96 *buffer++ = '0' + RACK_GET_CLASS(rack);
97 *buffer++ = '0' + RACK_GET_GROUP(rack); 97 *buffer++ = '0' + RACK_GET_GROUP(rack);
98 *buffer++ = '0' + RACK_GET_NUM(rack); 98 *buffer++ = '0' + RACK_GET_NUM(rack);
99 99
100 strcpy(buffer, "/" "bay" "/"); buffer += strlen(buffer); 100 strcpy(buffer, "/" "bay" "/"); buffer += strlen(buffer);
101 } 101 }
102 102
103 /* Add the bay position, using at least two digits */ 103 /* Add the bay position, using at least two digits */
104 if (position < 10) 104 if (position < 10)
105 *buffer++ = '0'; 105 *buffer++ = '0';
106 sprintf(buffer, "%d", position); 106 sprintf(buffer, "%d", position);
107
108} 107}
diff --git a/arch/ia64/sn/kernel/mca.c b/arch/ia64/sn/kernel/mca.c
index 6546db6abdba..3db62f24596c 100644
--- a/arch/ia64/sn/kernel/mca.c
+++ b/arch/ia64/sn/kernel/mca.c
@@ -3,13 +3,14 @@
3 * License. See the file "COPYING" in the main directory of this archive 3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details. 4 * for more details.
5 * 5 *
6 * Copyright (c) 2000-2004 Silicon Graphics, Inc. All Rights Reserved. 6 * Copyright (c) 2000-2006 Silicon Graphics, Inc. All Rights Reserved.
7 */ 7 */
8 8
9#include <linux/types.h> 9#include <linux/types.h>
10#include <linux/kernel.h> 10#include <linux/kernel.h>
11#include <linux/timer.h> 11#include <linux/timer.h>
12#include <linux/vmalloc.h> 12#include <linux/vmalloc.h>
13#include <linux/mutex.h>
13#include <asm/mca.h> 14#include <asm/mca.h>
14#include <asm/sal.h> 15#include <asm/sal.h>
15#include <asm/sn/sn_sal.h> 16#include <asm/sn/sn_sal.h>
@@ -27,7 +28,7 @@ void sn_init_cpei_timer(void);
27/* Printing oemdata from mca uses data that is not passed through SAL, it is 28/* Printing oemdata from mca uses data that is not passed through SAL, it is
28 * global. Only one user at a time. 29 * global. Only one user at a time.
29 */ 30 */
30static DECLARE_MUTEX(sn_oemdata_mutex); 31static DEFINE_MUTEX(sn_oemdata_mutex);
31static u8 **sn_oemdata; 32static u8 **sn_oemdata;
32static u64 *sn_oemdata_size, sn_oemdata_bufsize; 33static u64 *sn_oemdata_size, sn_oemdata_bufsize;
33 34
@@ -89,7 +90,7 @@ static int
89sn_platform_plat_specific_err_print(const u8 * sect_header, u8 ** oemdata, 90sn_platform_plat_specific_err_print(const u8 * sect_header, u8 ** oemdata,
90 u64 * oemdata_size) 91 u64 * oemdata_size)
91{ 92{
92 down(&sn_oemdata_mutex); 93 mutex_lock(&sn_oemdata_mutex);
93 sn_oemdata = oemdata; 94 sn_oemdata = oemdata;
94 sn_oemdata_size = oemdata_size; 95 sn_oemdata_size = oemdata_size;
95 sn_oemdata_bufsize = 0; 96 sn_oemdata_bufsize = 0;
@@ -107,7 +108,7 @@ sn_platform_plat_specific_err_print(const u8 * sect_header, u8 ** oemdata,
107 *sn_oemdata_size = 0; 108 *sn_oemdata_size = 0;
108 ia64_sn_plat_specific_err_print(print_hook, (char *)sect_header); 109 ia64_sn_plat_specific_err_print(print_hook, (char *)sect_header);
109 } 110 }
110 up(&sn_oemdata_mutex); 111 mutex_unlock(&sn_oemdata_mutex);
111 return 0; 112 return 0;
112} 113}
113 114
@@ -136,7 +137,8 @@ int sn_salinfo_platform_oemdata(const u8 *sect_header, u8 **oemdata, u64 *oemdat
136 137
137static int __init sn_salinfo_init(void) 138static int __init sn_salinfo_init(void)
138{ 139{
139 salinfo_platform_oemdata = &sn_salinfo_platform_oemdata; 140 if (ia64_platform_is("sn2"))
141 salinfo_platform_oemdata = &sn_salinfo_platform_oemdata;
140 return 0; 142 return 0;
141} 143}
142 144
diff --git a/arch/ia64/sn/kernel/setup.c b/arch/ia64/sn/kernel/setup.c
index e510dce9971f..5b84836c2171 100644
--- a/arch/ia64/sn/kernel/setup.c
+++ b/arch/ia64/sn/kernel/setup.c
@@ -67,6 +67,7 @@ extern unsigned long last_time_offset;
67extern void (*ia64_mark_idle) (int); 67extern void (*ia64_mark_idle) (int);
68extern void snidle(int); 68extern void snidle(int);
69extern unsigned char acpi_kbd_controller_present; 69extern unsigned char acpi_kbd_controller_present;
70extern unsigned long long (*ia64_printk_clock)(void);
70 71
71unsigned long sn_rtc_cycles_per_second; 72unsigned long sn_rtc_cycles_per_second;
72EXPORT_SYMBOL(sn_rtc_cycles_per_second); 73EXPORT_SYMBOL(sn_rtc_cycles_per_second);
@@ -74,7 +75,7 @@ EXPORT_SYMBOL(sn_rtc_cycles_per_second);
74DEFINE_PER_CPU(struct sn_hub_info_s, __sn_hub_info); 75DEFINE_PER_CPU(struct sn_hub_info_s, __sn_hub_info);
75EXPORT_PER_CPU_SYMBOL(__sn_hub_info); 76EXPORT_PER_CPU_SYMBOL(__sn_hub_info);
76 77
77DEFINE_PER_CPU(short, __sn_cnodeid_to_nasid[MAX_NUMNODES]); 78DEFINE_PER_CPU(short, __sn_cnodeid_to_nasid[MAX_COMPACT_NODES]);
78EXPORT_PER_CPU_SYMBOL(__sn_cnodeid_to_nasid); 79EXPORT_PER_CPU_SYMBOL(__sn_cnodeid_to_nasid);
79 80
80DEFINE_PER_CPU(struct nodepda_s *, __sn_nodepda); 81DEFINE_PER_CPU(struct nodepda_s *, __sn_nodepda);
@@ -125,20 +126,6 @@ struct screen_info sn_screen_info = {
125}; 126};
126 127
127/* 128/*
128 * This is here so we can use the CMOS detection in ide-probe.c to
129 * determine what drives are present. In theory, we don't need this
130 * as the auto-detection could be done via ide-probe.c:do_probe() but
131 * in practice that would be much slower, which is painful when
132 * running in the simulator. Note that passing zeroes in DRIVE_INFO
133 * is sufficient (the IDE driver will autodetect the drive geometry).
134 */
135#ifdef CONFIG_IA64_GENERIC
136extern char drive_info[4 * 16];
137#else
138char drive_info[4 * 16];
139#endif
140
141/*
142 * This routine can only be used during init, since 129 * This routine can only be used during init, since
143 * smp_boot_data is an init data structure. 130 * smp_boot_data is an init data structure.
144 * We have to use smp_boot_data.cpu_phys_id to find 131 * We have to use smp_boot_data.cpu_phys_id to find
@@ -209,7 +196,7 @@ void __init early_sn_setup(void)
209} 196}
210 197
211extern int platform_intr_list[]; 198extern int platform_intr_list[];
212static int __initdata shub_1_1_found = 0; 199static int __initdata shub_1_1_found;
213 200
214/* 201/*
215 * sn_check_for_wars 202 * sn_check_for_wars
@@ -330,6 +317,7 @@ struct pcdp_vga_device {
330#define PCDP_PCI_TRANS_IOPORT 0x02 317#define PCDP_PCI_TRANS_IOPORT 0x02
331#define PCDP_PCI_TRANS_MMIO 0x01 318#define PCDP_PCI_TRANS_MMIO 0x01
332 319
320#if defined(CONFIG_VT) && defined(CONFIG_VGA_CONSOLE)
333static void 321static void
334sn_scan_pcdp(void) 322sn_scan_pcdp(void)
335{ 323{
@@ -371,6 +359,17 @@ sn_scan_pcdp(void)
371 break; /* once we find the primary, we're done */ 359 break; /* once we find the primary, we're done */
372 } 360 }
373} 361}
362#endif
363
364static unsigned long sn2_rtc_initial;
365
366static unsigned long long ia64_sn2_printk_clock(void)
367{
368 unsigned long rtc_now = rtc_time();
369
370 return (rtc_now - sn2_rtc_initial) *
371 (1000000000 / sn_rtc_cycles_per_second);
372}
374 373
375/** 374/**
376 * sn_setup - SN platform setup routine 375 * sn_setup - SN platform setup routine
@@ -386,6 +385,7 @@ void __init sn_setup(char **cmdline_p)
386 u32 version = sn_sal_rev(); 385 u32 version = sn_sal_rev();
387 extern void sn_cpu_init(void); 386 extern void sn_cpu_init(void);
388 387
388 sn2_rtc_initial = rtc_time();
389 ia64_sn_plat_set_error_handling_features(); // obsolete 389 ia64_sn_plat_set_error_handling_features(); // obsolete
390 ia64_sn_set_os_feature(OSF_MCA_SLV_TO_OS_INIT_SLV); 390 ia64_sn_set_os_feature(OSF_MCA_SLV_TO_OS_INIT_SLV);
391 ia64_sn_set_os_feature(OSF_FEAT_LOG_SBES); 391 ia64_sn_set_os_feature(OSF_FEAT_LOG_SBES);
@@ -437,19 +437,6 @@ void __init sn_setup(char **cmdline_p)
437 */ 437 */
438 build_cnode_tables(); 438 build_cnode_tables();
439 439
440 /*
441 * Old PROMs do not provide an ACPI FADT. Disable legacy keyboard
442 * support here so we don't have to listen to failed keyboard probe
443 * messages.
444 */
445 if (version <= 0x0209 && acpi_kbd_controller_present) {
446 printk(KERN_INFO "Disabling legacy keyboard support as prom "
447 "is too old and doesn't provide FADT\n");
448 acpi_kbd_controller_present = 0;
449 }
450
451 printk("SGI SAL version %x.%02x\n", version >> 8, version & 0x00FF);
452
453 status = 440 status =
454 ia64_sal_freq_base(SAL_FREQ_BASE_REALTIME_CLOCK, &ticks_per_sec, 441 ia64_sal_freq_base(SAL_FREQ_BASE_REALTIME_CLOCK, &ticks_per_sec,
455 &drift); 442 &drift);
@@ -463,6 +450,21 @@ void __init sn_setup(char **cmdline_p)
463 450
464 platform_intr_list[ACPI_INTERRUPT_CPEI] = IA64_CPE_VECTOR; 451 platform_intr_list[ACPI_INTERRUPT_CPEI] = IA64_CPE_VECTOR;
465 452
453 ia64_printk_clock = ia64_sn2_printk_clock;
454
455 /*
456 * Old PROMs do not provide an ACPI FADT. Disable legacy keyboard
457 * support here so we don't have to listen to failed keyboard probe
458 * messages.
459 */
460 if (version <= 0x0209 && acpi_kbd_controller_present) {
461 printk(KERN_INFO "Disabling legacy keyboard support as prom "
462 "is too old and doesn't provide FADT\n");
463 acpi_kbd_controller_present = 0;
464 }
465
466 printk("SGI SAL version %x.%02x\n", version >> 8, version & 0x00FF);
467
466 /* 468 /*
467 * we set the default root device to /dev/hda 469 * we set the default root device to /dev/hda
468 * to make simulation easy 470 * to make simulation easy
@@ -578,13 +580,17 @@ void __init sn_cpu_init(void)
578 sn_prom_type = 2; 580 sn_prom_type = 2;
579 else 581 else
580 sn_prom_type = 1; 582 sn_prom_type = 1;
581 printk("Running on medusa with %s PROM\n", (sn_prom_type == 1) ? "real" : "fake"); 583 printk(KERN_INFO "Running on medusa with %s PROM\n",
584 (sn_prom_type == 1) ? "real" : "fake");
582 } 585 }
583 586
584 memset(pda, 0, sizeof(pda)); 587 memset(pda, 0, sizeof(pda));
585 if (ia64_sn_get_sn_info(0, &sn_hub_info->shub2, &sn_hub_info->nasid_bitmask, &sn_hub_info->nasid_shift, 588 if (ia64_sn_get_sn_info(0, &sn_hub_info->shub2,
586 &sn_system_size, &sn_sharing_domain_size, &sn_partition_id, 589 &sn_hub_info->nasid_bitmask,
587 &sn_coherency_id, &sn_region_size)) 590 &sn_hub_info->nasid_shift,
591 &sn_system_size, &sn_sharing_domain_size,
592 &sn_partition_id, &sn_coherency_id,
593 &sn_region_size))
588 BUG(); 594 BUG();
589 sn_hub_info->as_shift = sn_hub_info->nasid_shift - 2; 595 sn_hub_info->as_shift = sn_hub_info->nasid_shift - 2;
590 596
@@ -716,7 +722,8 @@ void __init build_cnode_tables(void)
716 for_each_online_node(node) { 722 for_each_online_node(node) {
717 kl_config_hdr_t *klgraph_header; 723 kl_config_hdr_t *klgraph_header;
718 nasid = cnodeid_to_nasid(node); 724 nasid = cnodeid_to_nasid(node);
719 if ((klgraph_header = ia64_sn_get_klconfig_addr(nasid)) == NULL) 725 klgraph_header = ia64_sn_get_klconfig_addr(nasid);
726 if (klgraph_header == NULL)
720 BUG(); 727 BUG();
721 brd = NODE_OFFSET_TO_LBOARD(nasid, klgraph_header->ch_board_info); 728 brd = NODE_OFFSET_TO_LBOARD(nasid, klgraph_header->ch_board_info);
722 while (brd) { 729 while (brd) {
@@ -734,7 +741,7 @@ nasid_slice_to_cpuid(int nasid, int slice)
734{ 741{
735 long cpu; 742 long cpu;
736 743
737 for (cpu=0; cpu < NR_CPUS; cpu++) 744 for (cpu = 0; cpu < NR_CPUS; cpu++)
738 if (cpuid_to_nasid(cpu) == nasid && 745 if (cpuid_to_nasid(cpu) == nasid &&
739 cpuid_to_slice(cpu) == slice) 746 cpuid_to_slice(cpu) == slice)
740 return cpu; 747 return cpu;
diff --git a/arch/ia64/sn/kernel/sn2/Makefile b/arch/ia64/sn/kernel/sn2/Makefile
index 170bde4549da..99e177693234 100644
--- a/arch/ia64/sn/kernel/sn2/Makefile
+++ b/arch/ia64/sn/kernel/sn2/Makefile
@@ -9,5 +9,7 @@
9# sn2 specific kernel files 9# sn2 specific kernel files
10# 10#
11 11
12CPPFLAGS += -I$(srctree)/arch/ia64/sn/include
13
12obj-y += cache.o io.o ptc_deadlock.o sn2_smp.o sn_proc_fs.o \ 14obj-y += cache.o io.o ptc_deadlock.o sn2_smp.o sn_proc_fs.o \
13 prominfo_proc.o timer.o timer_interrupt.o sn_hwperf.o 15 prominfo_proc.o timer.o timer_interrupt.o sn_hwperf.o
diff --git a/arch/ia64/sn/kernel/sn2/prominfo_proc.c b/arch/ia64/sn/kernel/sn2/prominfo_proc.c
index 81c63b2f8ae9..6ae276d5d50c 100644
--- a/arch/ia64/sn/kernel/sn2/prominfo_proc.c
+++ b/arch/ia64/sn/kernel/sn2/prominfo_proc.c
@@ -3,7 +3,7 @@
3 * License. See the file "COPYING" in the main directory of this archive 3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details. 4 * for more details.
5 * 5 *
6 * Copyright (C) 1999,2001-2004 Silicon Graphics, Inc. All Rights Reserved. 6 * Copyright (C) 1999,2001-2004, 2006 Silicon Graphics, Inc. All Rights Reserved.
7 * 7 *
8 * Module to export the system's Firmware Interface Tables, including 8 * Module to export the system's Firmware Interface Tables, including
9 * PROM revision numbers and banners, in /proc 9 * PROM revision numbers and banners, in /proc
@@ -190,7 +190,7 @@ static int
190read_version_entry(char *page, char **start, off_t off, int count, int *eof, 190read_version_entry(char *page, char **start, off_t off, int count, int *eof,
191 void *data) 191 void *data)
192{ 192{
193 int len = 0; 193 int len;
194 194
195 /* data holds the NASID of the node */ 195 /* data holds the NASID of the node */
196 len = dump_version(page, (unsigned long)data); 196 len = dump_version(page, (unsigned long)data);
@@ -202,7 +202,7 @@ static int
202read_fit_entry(char *page, char **start, off_t off, int count, int *eof, 202read_fit_entry(char *page, char **start, off_t off, int count, int *eof,
203 void *data) 203 void *data)
204{ 204{
205 int len = 0; 205 int len;
206 206
207 /* data holds the NASID of the node */ 207 /* data holds the NASID of the node */
208 len = dump_fit(page, (unsigned long)data); 208 len = dump_fit(page, (unsigned long)data);
@@ -229,13 +229,16 @@ int __init prominfo_init(void)
229 struct proc_dir_entry *p; 229 struct proc_dir_entry *p;
230 cnodeid_t cnodeid; 230 cnodeid_t cnodeid;
231 unsigned long nasid; 231 unsigned long nasid;
232 int size;
232 char name[NODE_NAME_LEN]; 233 char name[NODE_NAME_LEN];
233 234
234 if (!ia64_platform_is("sn2")) 235 if (!ia64_platform_is("sn2"))
235 return 0; 236 return 0;
236 237
237 proc_entries = kmalloc(num_online_nodes() * sizeof(struct proc_dir_entry *), 238 size = num_online_nodes() * sizeof(struct proc_dir_entry *);
238 GFP_KERNEL); 239 proc_entries = kzalloc(size, GFP_KERNEL);
240 if (!proc_entries)
241 return -ENOMEM;
239 242
240 sgi_prominfo_entry = proc_mkdir("sgi_prominfo", NULL); 243 sgi_prominfo_entry = proc_mkdir("sgi_prominfo", NULL);
241 244
@@ -244,14 +247,12 @@ int __init prominfo_init(void)
244 sprintf(name, "node%d", cnodeid); 247 sprintf(name, "node%d", cnodeid);
245 *entp = proc_mkdir(name, sgi_prominfo_entry); 248 *entp = proc_mkdir(name, sgi_prominfo_entry);
246 nasid = cnodeid_to_nasid(cnodeid); 249 nasid = cnodeid_to_nasid(cnodeid);
247 p = create_proc_read_entry( 250 p = create_proc_read_entry("fit", 0, *entp, read_fit_entry,
248 "fit", 0, *entp, read_fit_entry, 251 (void *)nasid);
249 (void *)nasid);
250 if (p) 252 if (p)
251 p->owner = THIS_MODULE; 253 p->owner = THIS_MODULE;
252 p = create_proc_read_entry( 254 p = create_proc_read_entry("version", 0, *entp,
253 "version", 0, *entp, read_version_entry, 255 read_version_entry, (void *)nasid);
254 (void *)nasid);
255 if (p) 256 if (p)
256 p->owner = THIS_MODULE; 257 p->owner = THIS_MODULE;
257 entp++; 258 entp++;
@@ -263,7 +264,7 @@ int __init prominfo_init(void)
263void __exit prominfo_exit(void) 264void __exit prominfo_exit(void)
264{ 265{
265 struct proc_dir_entry **entp; 266 struct proc_dir_entry **entp;
266 unsigned cnodeid; 267 unsigned int cnodeid;
267 char name[NODE_NAME_LEN]; 268 char name[NODE_NAME_LEN];
268 269
269 entp = proc_entries; 270 entp = proc_entries;
diff --git a/arch/ia64/sn/kernel/sn2/sn2_smp.c b/arch/ia64/sn/kernel/sn2/sn2_smp.c
index 471bbaa65d1b..b2e1e746b47f 100644
--- a/arch/ia64/sn/kernel/sn2/sn2_smp.c
+++ b/arch/ia64/sn/kernel/sn2/sn2_smp.c
@@ -5,7 +5,7 @@
5 * License. See the file "COPYING" in the main directory of this archive 5 * License. See the file "COPYING" in the main directory of this archive
6 * for more details. 6 * for more details.
7 * 7 *
8 * Copyright (C) 2000-2005 Silicon Graphics, Inc. All rights reserved. 8 * Copyright (C) 2000-2006 Silicon Graphics, Inc. All rights reserved.
9 */ 9 */
10 10
11#include <linux/init.h> 11#include <linux/init.h>
@@ -46,104 +46,24 @@ DECLARE_PER_CPU(struct ptc_stats, ptcstats);
46 46
47static __cacheline_aligned DEFINE_SPINLOCK(sn2_global_ptc_lock); 47static __cacheline_aligned DEFINE_SPINLOCK(sn2_global_ptc_lock);
48 48
49void sn2_ptc_deadlock_recovery(short *, short, int, volatile unsigned long *, unsigned long data0, 49extern unsigned long
50 volatile unsigned long *, unsigned long data1); 50sn2_ptc_deadlock_recovery_core(volatile unsigned long *, unsigned long,
51 volatile unsigned long *, unsigned long,
52 volatile unsigned long *, unsigned long);
53void
54sn2_ptc_deadlock_recovery(short *, short, short, int,
55 volatile unsigned long *, unsigned long,
56 volatile unsigned long *, unsigned long);
51 57
52#ifdef DEBUG_PTC
53/* 58/*
54 * ptctest: 59 * Note: some is the following is captured here to make degugging easier
55 * 60 * (the macros make more sense if you see the debug patch - not posted)
56 * xyz - 3 digit hex number:
57 * x - Force PTC purges to use shub:
58 * 0 - no force
59 * 1 - force
60 * y - interupt enable
61 * 0 - disable interrupts
62 * 1 - leave interuupts enabled
63 * z - type of lock:
64 * 0 - global lock
65 * 1 - node local lock
66 * 2 - no lock
67 *
68 * Note: on shub1, only ptctest == 0 is supported. Don't try other values!
69 */ 61 */
70
71static unsigned int sn2_ptctest = 0;
72
73static int __init ptc_test(char *str)
74{
75 get_option(&str, &sn2_ptctest);
76 return 1;
77}
78__setup("ptctest=", ptc_test);
79
80static inline int ptc_lock(unsigned long *flagp)
81{
82 unsigned long opt = sn2_ptctest & 255;
83
84 switch (opt) {
85 case 0x00:
86 spin_lock_irqsave(&sn2_global_ptc_lock, *flagp);
87 break;
88 case 0x01:
89 spin_lock_irqsave(&sn_nodepda->ptc_lock, *flagp);
90 break;
91 case 0x02:
92 local_irq_save(*flagp);
93 break;
94 case 0x10:
95 spin_lock(&sn2_global_ptc_lock);
96 break;
97 case 0x11:
98 spin_lock(&sn_nodepda->ptc_lock);
99 break;
100 case 0x12:
101 break;
102 default:
103 BUG();
104 }
105 return opt;
106}
107
108static inline void ptc_unlock(unsigned long flags, int opt)
109{
110 switch (opt) {
111 case 0x00:
112 spin_unlock_irqrestore(&sn2_global_ptc_lock, flags);
113 break;
114 case 0x01:
115 spin_unlock_irqrestore(&sn_nodepda->ptc_lock, flags);
116 break;
117 case 0x02:
118 local_irq_restore(flags);
119 break;
120 case 0x10:
121 spin_unlock(&sn2_global_ptc_lock);
122 break;
123 case 0x11:
124 spin_unlock(&sn_nodepda->ptc_lock);
125 break;
126 case 0x12:
127 break;
128 default:
129 BUG();
130 }
131}
132#else
133
134#define sn2_ptctest 0 62#define sn2_ptctest 0
135 63#define local_node_uses_ptc_ga(sh1) ((sh1) ? 1 : 0)
136static inline int ptc_lock(unsigned long *flagp) 64#define max_active_pio(sh1) ((sh1) ? 32 : 7)
137{ 65#define reset_max_active_on_deadlock() 1
138 spin_lock_irqsave(&sn2_global_ptc_lock, *flagp); 66#define PTC_LOCK(sh1) ((sh1) ? &sn2_global_ptc_lock : &sn_nodepda->ptc_lock)
139 return 0;
140}
141
142static inline void ptc_unlock(unsigned long flags, int opt)
143{
144 spin_unlock_irqrestore(&sn2_global_ptc_lock, flags);
145}
146#endif
147 67
148struct ptc_stats { 68struct ptc_stats {
149 unsigned long ptc_l; 69 unsigned long ptc_l;
@@ -151,27 +71,32 @@ struct ptc_stats {
151 unsigned long shub_ptc_flushes; 71 unsigned long shub_ptc_flushes;
152 unsigned long nodes_flushed; 72 unsigned long nodes_flushed;
153 unsigned long deadlocks; 73 unsigned long deadlocks;
74 unsigned long deadlocks2;
154 unsigned long lock_itc_clocks; 75 unsigned long lock_itc_clocks;
155 unsigned long shub_itc_clocks; 76 unsigned long shub_itc_clocks;
156 unsigned long shub_itc_clocks_max; 77 unsigned long shub_itc_clocks_max;
78 unsigned long shub_ptc_flushes_not_my_mm;
157}; 79};
158 80
81#define sn2_ptctest 0
82
159static inline unsigned long wait_piowc(void) 83static inline unsigned long wait_piowc(void)
160{ 84{
161 volatile unsigned long *piows, zeroval; 85 volatile unsigned long *piows;
162 unsigned long ws; 86 unsigned long zeroval, ws;
163 87
164 piows = pda->pio_write_status_addr; 88 piows = pda->pio_write_status_addr;
165 zeroval = pda->pio_write_status_val; 89 zeroval = pda->pio_write_status_val;
166 do { 90 do {
167 cpu_relax(); 91 cpu_relax();
168 } while (((ws = *piows) & SH_PIO_WRITE_STATUS_PENDING_WRITE_COUNT_MASK) != zeroval); 92 } while (((ws = *piows) & SH_PIO_WRITE_STATUS_PENDING_WRITE_COUNT_MASK) != zeroval);
169 return ws; 93 return (ws & SH_PIO_WRITE_STATUS_WRITE_DEADLOCK_MASK) != 0;
170} 94}
171 95
172void sn_tlb_migrate_finish(struct mm_struct *mm) 96void sn_tlb_migrate_finish(struct mm_struct *mm)
173{ 97{
174 if (mm == current->mm) 98 /* flush_tlb_mm is inefficient if more than 1 users of mm */
99 if (mm == current->mm && mm && atomic_read(&mm->mm_users) == 1)
175 flush_tlb_mm(mm); 100 flush_tlb_mm(mm);
176} 101}
177 102
@@ -201,12 +126,14 @@ void
201sn2_global_tlb_purge(struct mm_struct *mm, unsigned long start, 126sn2_global_tlb_purge(struct mm_struct *mm, unsigned long start,
202 unsigned long end, unsigned long nbits) 127 unsigned long end, unsigned long nbits)
203{ 128{
204 int i, opt, shub1, cnode, mynasid, cpu, lcpu = 0, nasid, flushed = 0; 129 int i, ibegin, shub1, cnode, mynasid, cpu, lcpu = 0, nasid;
205 int mymm = (mm == current->active_mm && current->mm); 130 int mymm = (mm == current->active_mm && mm == current->mm);
131 int use_cpu_ptcga;
206 volatile unsigned long *ptc0, *ptc1; 132 volatile unsigned long *ptc0, *ptc1;
207 unsigned long itc, itc2, flags, data0 = 0, data1 = 0, rr_value; 133 unsigned long itc, itc2, flags, data0 = 0, data1 = 0, rr_value, old_rr = 0;
208 short nasids[MAX_NUMNODES], nix; 134 short nasids[MAX_NUMNODES], nix;
209 nodemask_t nodes_flushed; 135 nodemask_t nodes_flushed;
136 int active, max_active, deadlock;
210 137
211 nodes_clear(nodes_flushed); 138 nodes_clear(nodes_flushed);
212 i = 0; 139 i = 0;
@@ -267,41 +194,56 @@ sn2_global_tlb_purge(struct mm_struct *mm, unsigned long start,
267 194
268 195
269 mynasid = get_nasid(); 196 mynasid = get_nasid();
197 use_cpu_ptcga = local_node_uses_ptc_ga(shub1);
198 max_active = max_active_pio(shub1);
270 199
271 itc = ia64_get_itc(); 200 itc = ia64_get_itc();
272 opt = ptc_lock(&flags); 201 spin_lock_irqsave(PTC_LOCK(shub1), flags);
273 itc2 = ia64_get_itc(); 202 itc2 = ia64_get_itc();
203
274 __get_cpu_var(ptcstats).lock_itc_clocks += itc2 - itc; 204 __get_cpu_var(ptcstats).lock_itc_clocks += itc2 - itc;
275 __get_cpu_var(ptcstats).shub_ptc_flushes++; 205 __get_cpu_var(ptcstats).shub_ptc_flushes++;
276 __get_cpu_var(ptcstats).nodes_flushed += nix; 206 __get_cpu_var(ptcstats).nodes_flushed += nix;
207 if (!mymm)
208 __get_cpu_var(ptcstats).shub_ptc_flushes_not_my_mm++;
277 209
210 if (use_cpu_ptcga && !mymm) {
211 old_rr = ia64_get_rr(start);
212 ia64_set_rr(start, (old_rr & 0xff) | (rr_value << 8));
213 ia64_srlz_d();
214 }
215
216 wait_piowc();
278 do { 217 do {
279 if (shub1) 218 if (shub1)
280 data1 = start | (1UL << SH1_PTC_1_START_SHFT); 219 data1 = start | (1UL << SH1_PTC_1_START_SHFT);
281 else 220 else
282 data0 = (data0 & ~SH2_PTC_ADDR_MASK) | (start & SH2_PTC_ADDR_MASK); 221 data0 = (data0 & ~SH2_PTC_ADDR_MASK) | (start & SH2_PTC_ADDR_MASK);
283 for (i = 0; i < nix; i++) { 222 deadlock = 0;
223 active = 0;
224 for (ibegin = 0, i = 0; i < nix; i++) {
284 nasid = nasids[i]; 225 nasid = nasids[i];
285 if ((!(sn2_ptctest & 3)) && unlikely(nasid == mynasid && mymm)) { 226 if (use_cpu_ptcga && unlikely(nasid == mynasid)) {
286 ia64_ptcga(start, nbits << 2); 227 ia64_ptcga(start, nbits << 2);
287 ia64_srlz_i(); 228 ia64_srlz_i();
288 } else { 229 } else {
289 ptc0 = CHANGE_NASID(nasid, ptc0); 230 ptc0 = CHANGE_NASID(nasid, ptc0);
290 if (ptc1) 231 if (ptc1)
291 ptc1 = CHANGE_NASID(nasid, ptc1); 232 ptc1 = CHANGE_NASID(nasid, ptc1);
292 pio_atomic_phys_write_mmrs(ptc0, data0, ptc1, 233 pio_atomic_phys_write_mmrs(ptc0, data0, ptc1, data1);
293 data1); 234 active++;
294 flushed = 1; 235 }
236 if (active >= max_active || i == (nix - 1)) {
237 if ((deadlock = wait_piowc())) {
238 sn2_ptc_deadlock_recovery(nasids, ibegin, i, mynasid, ptc0, data0, ptc1, data1);
239 if (reset_max_active_on_deadlock())
240 max_active = 1;
241 }
242 active = 0;
243 ibegin = i + 1;
295 } 244 }
296 } 245 }
297 if (flushed
298 && (wait_piowc() &
299 (SH_PIO_WRITE_STATUS_WRITE_DEADLOCK_MASK))) {
300 sn2_ptc_deadlock_recovery(nasids, nix, mynasid, ptc0, data0, ptc1, data1);
301 }
302
303 start += (1UL << nbits); 246 start += (1UL << nbits);
304
305 } while (start < end); 247 } while (start < end);
306 248
307 itc2 = ia64_get_itc() - itc2; 249 itc2 = ia64_get_itc() - itc2;
@@ -309,7 +251,12 @@ sn2_global_tlb_purge(struct mm_struct *mm, unsigned long start,
309 if (itc2 > __get_cpu_var(ptcstats).shub_itc_clocks_max) 251 if (itc2 > __get_cpu_var(ptcstats).shub_itc_clocks_max)
310 __get_cpu_var(ptcstats).shub_itc_clocks_max = itc2; 252 __get_cpu_var(ptcstats).shub_itc_clocks_max = itc2;
311 253
312 ptc_unlock(flags, opt); 254 if (old_rr) {
255 ia64_set_rr(start, old_rr);
256 ia64_srlz_d();
257 }
258
259 spin_unlock_irqrestore(PTC_LOCK(shub1), flags);
313 260
314 preempt_enable(); 261 preempt_enable();
315} 262}
@@ -321,27 +268,31 @@ sn2_global_tlb_purge(struct mm_struct *mm, unsigned long start,
321 * TLB flush transaction. The recovery sequence is somewhat tricky & is 268 * TLB flush transaction. The recovery sequence is somewhat tricky & is
322 * coded in assembly language. 269 * coded in assembly language.
323 */ 270 */
324void sn2_ptc_deadlock_recovery(short *nasids, short nix, int mynasid, volatile unsigned long *ptc0, unsigned long data0, 271
325 volatile unsigned long *ptc1, unsigned long data1) 272void
273sn2_ptc_deadlock_recovery(short *nasids, short ib, short ie, int mynasid,
274 volatile unsigned long *ptc0, unsigned long data0,
275 volatile unsigned long *ptc1, unsigned long data1)
326{ 276{
327 extern void sn2_ptc_deadlock_recovery_core(volatile unsigned long *, unsigned long,
328 volatile unsigned long *, unsigned long, volatile unsigned long *, unsigned long);
329 short nasid, i; 277 short nasid, i;
330 unsigned long *piows, zeroval; 278 unsigned long *piows, zeroval, n;
331 279
332 __get_cpu_var(ptcstats).deadlocks++; 280 __get_cpu_var(ptcstats).deadlocks++;
333 281
334 piows = (unsigned long *) pda->pio_write_status_addr; 282 piows = (unsigned long *) pda->pio_write_status_addr;
335 zeroval = pda->pio_write_status_val; 283 zeroval = pda->pio_write_status_val;
336 284
337 for (i=0; i < nix; i++) { 285
286 for (i=ib; i <= ie; i++) {
338 nasid = nasids[i]; 287 nasid = nasids[i];
339 if (!(sn2_ptctest & 3) && nasid == mynasid) 288 if (local_node_uses_ptc_ga(is_shub1()) && nasid == mynasid)
340 continue; 289 continue;
341 ptc0 = CHANGE_NASID(nasid, ptc0); 290 ptc0 = CHANGE_NASID(nasid, ptc0);
342 if (ptc1) 291 if (ptc1)
343 ptc1 = CHANGE_NASID(nasid, ptc1); 292 ptc1 = CHANGE_NASID(nasid, ptc1);
344 sn2_ptc_deadlock_recovery_core(ptc0, data0, ptc1, data1, piows, zeroval); 293
294 n = sn2_ptc_deadlock_recovery_core(ptc0, data0, ptc1, data1, piows, zeroval);
295 __get_cpu_var(ptcstats).deadlocks2 += n;
345 } 296 }
346 297
347} 298}
@@ -452,20 +403,22 @@ static int sn2_ptc_seq_show(struct seq_file *file, void *data)
452 cpu = *(loff_t *) data; 403 cpu = *(loff_t *) data;
453 404
454 if (!cpu) { 405 if (!cpu) {
455 seq_printf(file, "# ptc_l change_rid shub_ptc_flushes shub_nodes_flushed deadlocks lock_nsec shub_nsec shub_nsec_max\n"); 406 seq_printf(file,
407 "# cpu ptc_l newrid ptc_flushes nodes_flushed deadlocks lock_nsec shub_nsec shub_nsec_max not_my_mm deadlock2\n");
456 seq_printf(file, "# ptctest %d\n", sn2_ptctest); 408 seq_printf(file, "# ptctest %d\n", sn2_ptctest);
457 } 409 }
458 410
459 if (cpu < NR_CPUS && cpu_online(cpu)) { 411 if (cpu < NR_CPUS && cpu_online(cpu)) {
460 stat = &per_cpu(ptcstats, cpu); 412 stat = &per_cpu(ptcstats, cpu);
461 seq_printf(file, "cpu %d %ld %ld %ld %ld %ld %ld %ld %ld\n", cpu, stat->ptc_l, 413 seq_printf(file, "cpu %d %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld\n", cpu, stat->ptc_l,
462 stat->change_rid, stat->shub_ptc_flushes, stat->nodes_flushed, 414 stat->change_rid, stat->shub_ptc_flushes, stat->nodes_flushed,
463 stat->deadlocks, 415 stat->deadlocks,
464 1000 * stat->lock_itc_clocks / per_cpu(cpu_info, cpu).cyc_per_usec, 416 1000 * stat->lock_itc_clocks / per_cpu(cpu_info, cpu).cyc_per_usec,
465 1000 * stat->shub_itc_clocks / per_cpu(cpu_info, cpu).cyc_per_usec, 417 1000 * stat->shub_itc_clocks / per_cpu(cpu_info, cpu).cyc_per_usec,
466 1000 * stat->shub_itc_clocks_max / per_cpu(cpu_info, cpu).cyc_per_usec); 418 1000 * stat->shub_itc_clocks_max / per_cpu(cpu_info, cpu).cyc_per_usec,
419 stat->shub_ptc_flushes_not_my_mm,
420 stat->deadlocks2);
467 } 421 }
468
469 return 0; 422 return 0;
470} 423}
471 424
@@ -476,7 +429,7 @@ static struct seq_operations sn2_ptc_seq_ops = {
476 .show = sn2_ptc_seq_show 429 .show = sn2_ptc_seq_show
477}; 430};
478 431
479int sn2_ptc_proc_open(struct inode *inode, struct file *file) 432static int sn2_ptc_proc_open(struct inode *inode, struct file *file)
480{ 433{
481 return seq_open(file, &sn2_ptc_seq_ops); 434 return seq_open(file, &sn2_ptc_seq_ops);
482} 435}
@@ -493,7 +446,7 @@ static struct proc_dir_entry *proc_sn2_ptc;
493static int __init sn2_ptc_init(void) 446static int __init sn2_ptc_init(void)
494{ 447{
495 if (!ia64_platform_is("sn2")) 448 if (!ia64_platform_is("sn2"))
496 return -ENOSYS; 449 return 0;
497 450
498 if (!(proc_sn2_ptc = create_proc_entry(PTC_BASENAME, 0444, NULL))) { 451 if (!(proc_sn2_ptc = create_proc_entry(PTC_BASENAME, 0444, NULL))) {
499 printk(KERN_ERR "unable to create %s proc entry", PTC_BASENAME); 452 printk(KERN_ERR "unable to create %s proc entry", PTC_BASENAME);
diff --git a/arch/ia64/sn/kernel/sn2/sn_hwperf.c b/arch/ia64/sn/kernel/sn2/sn_hwperf.c
index 19b54fbcd7ea..70db21f3df21 100644
--- a/arch/ia64/sn/kernel/sn2/sn_hwperf.c
+++ b/arch/ia64/sn/kernel/sn2/sn_hwperf.c
@@ -3,7 +3,7 @@
3 * License. See the file "COPYING" in the main directory of this archive 3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details. 4 * for more details.
5 * 5 *
6 * Copyright (C) 2004-2005 Silicon Graphics, Inc. All rights reserved. 6 * Copyright (C) 2004-2006 Silicon Graphics, Inc. All rights reserved.
7 * 7 *
8 * SGI Altix topology and hardware performance monitoring API. 8 * SGI Altix topology and hardware performance monitoring API.
9 * Mark Goodwin <markgw@sgi.com>. 9 * Mark Goodwin <markgw@sgi.com>.
@@ -973,6 +973,9 @@ static int __devinit sn_hwperf_misc_register_init(void)
973{ 973{
974 int e; 974 int e;
975 975
976 if (!ia64_platform_is("sn2"))
977 return 0;
978
976 sn_hwperf_init(); 979 sn_hwperf_init();
977 980
978 /* 981 /*
diff --git a/arch/ia64/sn/kernel/sn2/sn_proc_fs.c b/arch/ia64/sn/kernel/sn2/sn_proc_fs.c
index a06719d752a0..c686d9c12f7b 100644
--- a/arch/ia64/sn/kernel/sn2/sn_proc_fs.c
+++ b/arch/ia64/sn/kernel/sn2/sn_proc_fs.c
@@ -6,11 +6,11 @@
6 * Copyright (C) 2000-2005 Silicon Graphics, Inc. All rights reserved. 6 * Copyright (C) 2000-2005 Silicon Graphics, Inc. All rights reserved.
7 */ 7 */
8#include <linux/config.h> 8#include <linux/config.h>
9#include <asm/uaccess.h>
10 9
11#ifdef CONFIG_PROC_FS 10#ifdef CONFIG_PROC_FS
12#include <linux/proc_fs.h> 11#include <linux/proc_fs.h>
13#include <linux/seq_file.h> 12#include <linux/seq_file.h>
13#include <asm/uaccess.h>
14#include <asm/sn/sn_sal.h> 14#include <asm/sn/sn_sal.h>
15 15
16static int partition_id_show(struct seq_file *s, void *p) 16static int partition_id_show(struct seq_file *s, void *p)
@@ -90,10 +90,10 @@ static int coherence_id_open(struct inode *inode, struct file *file)
90 return single_open(file, coherence_id_show, NULL); 90 return single_open(file, coherence_id_show, NULL);
91} 91}
92 92
93static struct proc_dir_entry *sn_procfs_create_entry( 93static struct proc_dir_entry
94 const char *name, struct proc_dir_entry *parent, 94*sn_procfs_create_entry(const char *name, struct proc_dir_entry *parent,
95 int (*openfunc)(struct inode *, struct file *), 95 int (*openfunc)(struct inode *, struct file *),
96 int (*releasefunc)(struct inode *, struct file *)) 96 int (*releasefunc)(struct inode *, struct file *))
97{ 97{
98 struct proc_dir_entry *e = create_proc_entry(name, 0444, parent); 98 struct proc_dir_entry *e = create_proc_entry(name, 0444, parent);
99 99
@@ -126,24 +126,24 @@ void register_sn_procfs(void)
126 return; 126 return;
127 127
128 sn_procfs_create_entry("partition_id", sgi_proc_dir, 128 sn_procfs_create_entry("partition_id", sgi_proc_dir,
129 partition_id_open, single_release); 129 partition_id_open, single_release);
130 130
131 sn_procfs_create_entry("system_serial_number", sgi_proc_dir, 131 sn_procfs_create_entry("system_serial_number", sgi_proc_dir,
132 system_serial_number_open, single_release); 132 system_serial_number_open, single_release);
133 133
134 sn_procfs_create_entry("licenseID", sgi_proc_dir, 134 sn_procfs_create_entry("licenseID", sgi_proc_dir,
135 licenseID_open, single_release); 135 licenseID_open, single_release);
136 136
137 e = sn_procfs_create_entry("sn_force_interrupt", sgi_proc_dir, 137 e = sn_procfs_create_entry("sn_force_interrupt", sgi_proc_dir,
138 sn_force_interrupt_open, single_release); 138 sn_force_interrupt_open, single_release);
139 if (e) 139 if (e)
140 e->proc_fops->write = sn_force_interrupt_write_proc; 140 e->proc_fops->write = sn_force_interrupt_write_proc;
141 141
142 sn_procfs_create_entry("coherence_id", sgi_proc_dir, 142 sn_procfs_create_entry("coherence_id", sgi_proc_dir,
143 coherence_id_open, single_release); 143 coherence_id_open, single_release);
144 144
145 sn_procfs_create_entry("sn_topology", sgi_proc_dir, 145 sn_procfs_create_entry("sn_topology", sgi_proc_dir,
146 sn_topology_open, sn_topology_release); 146 sn_topology_open, sn_topology_release);
147} 147}
148 148
149#endif /* CONFIG_PROC_FS */ 149#endif /* CONFIG_PROC_FS */
diff --git a/arch/ia64/sn/kernel/sn2/timer.c b/arch/ia64/sn/kernel/sn2/timer.c
index deb9baf4d473..56a88b6df4b4 100644
--- a/arch/ia64/sn/kernel/sn2/timer.c
+++ b/arch/ia64/sn/kernel/sn2/timer.c
@@ -14,6 +14,7 @@
14 14
15#include <asm/hw_irq.h> 15#include <asm/hw_irq.h>
16#include <asm/system.h> 16#include <asm/system.h>
17#include <asm/timex.h>
17 18
18#include <asm/sn/leds.h> 19#include <asm/sn/leds.h>
19#include <asm/sn/shub_mmr.h> 20#include <asm/sn/shub_mmr.h>
@@ -28,9 +29,27 @@ static struct time_interpolator sn2_interpolator = {
28 .source = TIME_SOURCE_MMIO64 29 .source = TIME_SOURCE_MMIO64
29}; 30};
30 31
32/*
33 * sn udelay uses the RTC instead of the ITC because the ITC is not
34 * synchronized across all CPUs, and the thread may migrate to another CPU
35 * if preemption is enabled.
36 */
37static void
38ia64_sn_udelay (unsigned long usecs)
39{
40 unsigned long start = rtc_time();
41 unsigned long end = start +
42 usecs * sn_rtc_cycles_per_second / 1000000;
43
44 while (time_before((unsigned long)rtc_time(), end))
45 cpu_relax();
46}
47
31void __init sn_timer_init(void) 48void __init sn_timer_init(void)
32{ 49{
33 sn2_interpolator.frequency = sn_rtc_cycles_per_second; 50 sn2_interpolator.frequency = sn_rtc_cycles_per_second;
34 sn2_interpolator.addr = RTC_COUNTER_ADDR; 51 sn2_interpolator.addr = RTC_COUNTER_ADDR;
35 register_time_interpolator(&sn2_interpolator); 52 register_time_interpolator(&sn2_interpolator);
53
54 ia64_udelay = &ia64_sn_udelay;
36} 55}
diff --git a/arch/ia64/sn/kernel/sn2/timer_interrupt.c b/arch/ia64/sn/kernel/sn2/timer_interrupt.c
index adf5db2e2afe..fa7f69945917 100644
--- a/arch/ia64/sn/kernel/sn2/timer_interrupt.c
+++ b/arch/ia64/sn/kernel/sn2/timer_interrupt.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * 2 *
3 * 3 *
4 * Copyright (c) 2005 Silicon Graphics, Inc. All Rights Reserved. 4 * Copyright (c) 2005, 2006 Silicon Graphics, Inc. All Rights Reserved.
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify it 6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of version 2 of the GNU General Public License 7 * under the terms of version 2 of the GNU General Public License
@@ -22,11 +22,6 @@
22 * License along with this program; if not, write the Free Software 22 * License along with this program; if not, write the Free Software
23 * Foundation, Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. 23 * Foundation, Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
24 * 24 *
25 * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
26 * Mountain View, CA 94043, or:
27 *
28 * http://www.sgi.com
29 *
30 * For further information regarding this notice, see: 25 * For further information regarding this notice, see:
31 * 26 *
32 * http://oss.sgi.com/projects/GenInfo/NoticeExplan 27 * http://oss.sgi.com/projects/GenInfo/NoticeExplan
diff --git a/arch/ia64/sn/kernel/tiocx.c b/arch/ia64/sn/kernel/tiocx.c
index 768c21deb2e5..99cb28e74295 100644
--- a/arch/ia64/sn/kernel/tiocx.c
+++ b/arch/ia64/sn/kernel/tiocx.c
@@ -11,6 +11,7 @@
11#include <linux/slab.h> 11#include <linux/slab.h>
12#include <linux/spinlock.h> 12#include <linux/spinlock.h>
13#include <linux/proc_fs.h> 13#include <linux/proc_fs.h>
14#include <linux/capability.h>
14#include <linux/device.h> 15#include <linux/device.h>
15#include <linux/delay.h> 16#include <linux/delay.h>
16#include <asm/system.h> 17#include <asm/system.h>
@@ -76,12 +77,6 @@ static void tiocx_bus_release(struct device *dev)
76 kfree(to_cx_dev(dev)); 77 kfree(to_cx_dev(dev));
77} 78}
78 79
79struct bus_type tiocx_bus_type = {
80 .name = "tiocx",
81 .match = tiocx_match,
82 .uevent = tiocx_uevent,
83};
84
85/** 80/**
86 * cx_device_match - Find cx_device in the id table. 81 * cx_device_match - Find cx_device in the id table.
87 * @ids: id table from driver 82 * @ids: id table from driver
@@ -148,6 +143,14 @@ static int cx_driver_remove(struct device *dev)
148 return 0; 143 return 0;
149} 144}
150 145
146struct bus_type tiocx_bus_type = {
147 .name = "tiocx",
148 .match = tiocx_match,
149 .uevent = tiocx_uevent,
150 .probe = cx_device_probe,
151 .remove = cx_driver_remove,
152};
153
151/** 154/**
152 * cx_driver_register - Register the driver. 155 * cx_driver_register - Register the driver.
153 * @cx_driver: driver table (cx_drv struct) from driver 156 * @cx_driver: driver table (cx_drv struct) from driver
@@ -161,8 +164,6 @@ int cx_driver_register(struct cx_drv *cx_driver)
161{ 164{
162 cx_driver->driver.name = cx_driver->name; 165 cx_driver->driver.name = cx_driver->name;
163 cx_driver->driver.bus = &tiocx_bus_type; 166 cx_driver->driver.bus = &tiocx_bus_type;
164 cx_driver->driver.probe = cx_device_probe;
165 cx_driver->driver.remove = cx_driver_remove;
166 167
167 return driver_register(&cx_driver->driver); 168 return driver_register(&cx_driver->driver);
168} 169}
@@ -244,7 +245,7 @@ static int cx_device_reload(struct cx_dev *cx_dev)
244 cx_dev->bt); 245 cx_dev->bt);
245} 246}
246 247
247static inline uint64_t tiocx_intr_alloc(nasid_t nasid, int widget, 248static inline u64 tiocx_intr_alloc(nasid_t nasid, int widget,
248 u64 sn_irq_info, 249 u64 sn_irq_info,
249 int req_irq, nasid_t req_nasid, 250 int req_irq, nasid_t req_nasid,
250 int req_slice) 251 int req_slice)
@@ -283,12 +284,10 @@ struct sn_irq_info *tiocx_irq_alloc(nasid_t nasid, int widget, int irq,
283 if ((nasid & 1) == 0) 284 if ((nasid & 1) == 0)
284 return NULL; 285 return NULL;
285 286
286 sn_irq_info = kmalloc(sn_irq_size, GFP_KERNEL); 287 sn_irq_info = kzalloc(sn_irq_size, GFP_KERNEL);
287 if (sn_irq_info == NULL) 288 if (sn_irq_info == NULL)
288 return NULL; 289 return NULL;
289 290
290 memset(sn_irq_info, 0x0, sn_irq_size);
291
292 status = tiocx_intr_alloc(nasid, widget, __pa(sn_irq_info), irq, 291 status = tiocx_intr_alloc(nasid, widget, __pa(sn_irq_info), irq,
293 req_nasid, slice); 292 req_nasid, slice);
294 if (status) { 293 if (status) {
@@ -301,7 +300,7 @@ struct sn_irq_info *tiocx_irq_alloc(nasid_t nasid, int widget, int irq,
301 300
302void tiocx_irq_free(struct sn_irq_info *sn_irq_info) 301void tiocx_irq_free(struct sn_irq_info *sn_irq_info)
303{ 302{
304 uint64_t bridge = (uint64_t) sn_irq_info->irq_bridge; 303 u64 bridge = (u64) sn_irq_info->irq_bridge;
305 nasid_t nasid = NASID_GET(bridge); 304 nasid_t nasid = NASID_GET(bridge);
306 int widget; 305 int widget;
307 306
@@ -312,12 +311,12 @@ void tiocx_irq_free(struct sn_irq_info *sn_irq_info)
312 } 311 }
313} 312}
314 313
315uint64_t tiocx_dma_addr(uint64_t addr) 314u64 tiocx_dma_addr(u64 addr)
316{ 315{
317 return PHYS_TO_TIODMA(addr); 316 return PHYS_TO_TIODMA(addr);
318} 317}
319 318
320uint64_t tiocx_swin_base(int nasid) 319u64 tiocx_swin_base(int nasid)
321{ 320{
322 return TIO_SWIN_BASE(nasid, TIOCX_CORELET); 321 return TIO_SWIN_BASE(nasid, TIOCX_CORELET);
323} 322}
@@ -334,8 +333,8 @@ EXPORT_SYMBOL(tiocx_swin_base);
334 333
335static void tio_conveyor_set(nasid_t nasid, int enable_flag) 334static void tio_conveyor_set(nasid_t nasid, int enable_flag)
336{ 335{
337 uint64_t ice_frz; 336 u64 ice_frz;
338 uint64_t disable_cb = (1ull << 61); 337 u64 disable_cb = (1ull << 61);
339 338
340 if (!(nasid & 1)) 339 if (!(nasid & 1))
341 return; 340 return;
@@ -387,7 +386,7 @@ static int is_fpga_tio(int nasid, int *bt)
387 386
388static int bitstream_loaded(nasid_t nasid) 387static int bitstream_loaded(nasid_t nasid)
389{ 388{
390 uint64_t cx_credits; 389 u64 cx_credits;
391 390
392 cx_credits = REMOTE_HUB_L(nasid, TIO_ICE_PMI_TX_DYN_CREDIT_STAT_CB3); 391 cx_credits = REMOTE_HUB_L(nasid, TIO_ICE_PMI_TX_DYN_CREDIT_STAT_CB3);
393 cx_credits &= TIO_ICE_PMI_TX_DYN_CREDIT_STAT_CB3_CREDIT_CNT_MASK; 392 cx_credits &= TIO_ICE_PMI_TX_DYN_CREDIT_STAT_CB3_CREDIT_CNT_MASK;
@@ -403,14 +402,14 @@ static int tiocx_reload(struct cx_dev *cx_dev)
403 nasid_t nasid = cx_dev->cx_id.nasid; 402 nasid_t nasid = cx_dev->cx_id.nasid;
404 403
405 if (bitstream_loaded(nasid)) { 404 if (bitstream_loaded(nasid)) {
406 uint64_t cx_id; 405 u64 cx_id;
407 int rv; 406 int rv;
408 407
409 rv = ia64_sn_sysctl_tio_clock_reset(nasid); 408 rv = ia64_sn_sysctl_tio_clock_reset(nasid);
410 if (rv) { 409 if (rv) {
411 printk(KERN_ALERT "CX port JTAG reset failed.\n"); 410 printk(KERN_ALERT "CX port JTAG reset failed.\n");
412 } else { 411 } else {
413 cx_id = *(volatile uint64_t *) 412 cx_id = *(volatile u64 *)
414 (TIO_SWIN_BASE(nasid, TIOCX_CORELET) + 413 (TIO_SWIN_BASE(nasid, TIOCX_CORELET) +
415 WIDGET_ID); 414 WIDGET_ID);
416 part_num = XWIDGET_PART_NUM(cx_id); 415 part_num = XWIDGET_PART_NUM(cx_id);
@@ -485,7 +484,7 @@ static int __init tiocx_init(void)
485 int found_tiocx_device = 0; 484 int found_tiocx_device = 0;
486 485
487 if (!ia64_platform_is("sn2")) 486 if (!ia64_platform_is("sn2"))
488 return -ENODEV; 487 return 0;
489 488
490 bus_register(&tiocx_bus_type); 489 bus_register(&tiocx_bus_type);
491 490
diff --git a/arch/ia64/sn/kernel/xp_main.c b/arch/ia64/sn/kernel/xp_main.c
index 3be52a34c80f..b7ea46645e12 100644
--- a/arch/ia64/sn/kernel/xp_main.c
+++ b/arch/ia64/sn/kernel/xp_main.c
@@ -19,6 +19,7 @@
19#include <linux/kernel.h> 19#include <linux/kernel.h>
20#include <linux/interrupt.h> 20#include <linux/interrupt.h>
21#include <linux/module.h> 21#include <linux/module.h>
22#include <linux/mutex.h>
22#include <asm/sn/intr.h> 23#include <asm/sn/intr.h>
23#include <asm/sn/sn_sal.h> 24#include <asm/sn/sn_sal.h>
24#include <asm/sn/xp.h> 25#include <asm/sn/xp.h>
@@ -136,13 +137,13 @@ xpc_connect(int ch_number, xpc_channel_func func, void *key, u16 payload_size,
136 137
137 registration = &xpc_registrations[ch_number]; 138 registration = &xpc_registrations[ch_number];
138 139
139 if (down_interruptible(&registration->sema) != 0) { 140 if (mutex_lock_interruptible(&registration->mutex) != 0) {
140 return xpcInterrupted; 141 return xpcInterrupted;
141 } 142 }
142 143
143 /* if XPC_CHANNEL_REGISTERED(ch_number) */ 144 /* if XPC_CHANNEL_REGISTERED(ch_number) */
144 if (registration->func != NULL) { 145 if (registration->func != NULL) {
145 up(&registration->sema); 146 mutex_unlock(&registration->mutex);
146 return xpcAlreadyRegistered; 147 return xpcAlreadyRegistered;
147 } 148 }
148 149
@@ -154,7 +155,7 @@ xpc_connect(int ch_number, xpc_channel_func func, void *key, u16 payload_size,
154 registration->key = key; 155 registration->key = key;
155 registration->func = func; 156 registration->func = func;
156 157
157 up(&registration->sema); 158 mutex_unlock(&registration->mutex);
158 159
159 xpc_interface.connect(ch_number); 160 xpc_interface.connect(ch_number);
160 161
@@ -190,11 +191,11 @@ xpc_disconnect(int ch_number)
190 * figured XPC's users will just turn around and call xpc_disconnect() 191 * figured XPC's users will just turn around and call xpc_disconnect()
191 * again anyways, so we might as well wait, if need be. 192 * again anyways, so we might as well wait, if need be.
192 */ 193 */
193 down(&registration->sema); 194 mutex_lock(&registration->mutex);
194 195
195 /* if !XPC_CHANNEL_REGISTERED(ch_number) */ 196 /* if !XPC_CHANNEL_REGISTERED(ch_number) */
196 if (registration->func == NULL) { 197 if (registration->func == NULL) {
197 up(&registration->sema); 198 mutex_unlock(&registration->mutex);
198 return; 199 return;
199 } 200 }
200 201
@@ -208,7 +209,7 @@ xpc_disconnect(int ch_number)
208 209
209 xpc_interface.disconnect(ch_number); 210 xpc_interface.disconnect(ch_number);
210 211
211 up(&registration->sema); 212 mutex_unlock(&registration->mutex);
212 213
213 return; 214 return;
214} 215}
@@ -250,9 +251,9 @@ xp_init(void)
250 xp_nofault_PIOR_target = SH1_IPI_ACCESS; 251 xp_nofault_PIOR_target = SH1_IPI_ACCESS;
251 } 252 }
252 253
253 /* initialize the connection registration semaphores */ 254 /* initialize the connection registration mutex */
254 for (ch_number = 0; ch_number < XPC_NCHANNELS; ch_number++) { 255 for (ch_number = 0; ch_number < XPC_NCHANNELS; ch_number++) {
255 sema_init(&xpc_registrations[ch_number].sema, 1); /* mutex */ 256 mutex_init(&xpc_registrations[ch_number].mutex);
256 } 257 }
257 258
258 return 0; 259 return 0;
diff --git a/arch/ia64/sn/kernel/xpc.h b/arch/ia64/sn/kernel/xpc.h
deleted file mode 100644
index 5483a9f227d4..000000000000
--- a/arch/ia64/sn/kernel/xpc.h
+++ /dev/null
@@ -1,1273 +0,0 @@
1/*
2 * This file is subject to the terms and conditions of the GNU General Public
3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details.
5 *
6 * Copyright (c) 2004-2005 Silicon Graphics, Inc. All Rights Reserved.
7 */
8
9
10/*
11 * Cross Partition Communication (XPC) structures and macros.
12 */
13
14#ifndef _IA64_SN_KERNEL_XPC_H
15#define _IA64_SN_KERNEL_XPC_H
16
17
18#include <linux/config.h>
19#include <linux/interrupt.h>
20#include <linux/sysctl.h>
21#include <linux/device.h>
22#include <asm/pgtable.h>
23#include <asm/processor.h>
24#include <asm/sn/bte.h>
25#include <asm/sn/clksupport.h>
26#include <asm/sn/addrs.h>
27#include <asm/sn/mspec.h>
28#include <asm/sn/shub_mmr.h>
29#include <asm/sn/xp.h>
30
31
32/*
33 * XPC Version numbers consist of a major and minor number. XPC can always
34 * talk to versions with same major #, and never talk to versions with a
35 * different major #.
36 */
37#define _XPC_VERSION(_maj, _min) (((_maj) << 4) | ((_min) & 0xf))
38#define XPC_VERSION_MAJOR(_v) ((_v) >> 4)
39#define XPC_VERSION_MINOR(_v) ((_v) & 0xf)
40
41
42/*
43 * The next macros define word or bit representations for given
44 * C-brick nasid in either the SAL provided bit array representing
45 * nasids in the partition/machine or the AMO_t array used for
46 * inter-partition initiation communications.
47 *
48 * For SN2 machines, C-Bricks are alway even numbered NASIDs. As
49 * such, some space will be saved by insisting that nasid information
50 * passed from SAL always be packed for C-Bricks and the
51 * cross-partition interrupts use the same packing scheme.
52 */
53#define XPC_NASID_W_INDEX(_n) (((_n) / 64) / 2)
54#define XPC_NASID_B_INDEX(_n) (((_n) / 2) & (64 - 1))
55#define XPC_NASID_IN_ARRAY(_n, _p) ((_p)[XPC_NASID_W_INDEX(_n)] & \
56 (1UL << XPC_NASID_B_INDEX(_n)))
57#define XPC_NASID_FROM_W_B(_w, _b) (((_w) * 64 + (_b)) * 2)
58
59#define XPC_HB_DEFAULT_INTERVAL 5 /* incr HB every x secs */
60#define XPC_HB_CHECK_DEFAULT_INTERVAL 20 /* check HB every x secs */
61
62/* define the process name of HB checker and the CPU it is pinned to */
63#define XPC_HB_CHECK_THREAD_NAME "xpc_hb"
64#define XPC_HB_CHECK_CPU 0
65
66/* define the process name of the discovery thread */
67#define XPC_DISCOVERY_THREAD_NAME "xpc_discovery"
68
69
70/*
71 * the reserved page
72 *
73 * SAL reserves one page of memory per partition for XPC. Though a full page
74 * in length (16384 bytes), its starting address is not page aligned, but it
75 * is cacheline aligned. The reserved page consists of the following:
76 *
77 * reserved page header
78 *
79 * The first cacheline of the reserved page contains the header
80 * (struct xpc_rsvd_page). Before SAL initialization has completed,
81 * SAL has set up the following fields of the reserved page header:
82 * SAL_signature, SAL_version, partid, and nasids_size. The other
83 * fields are set up by XPC. (xpc_rsvd_page points to the local
84 * partition's reserved page.)
85 *
86 * part_nasids mask
87 * mach_nasids mask
88 *
89 * SAL also sets up two bitmaps (or masks), one that reflects the actual
90 * nasids in this partition (part_nasids), and the other that reflects
91 * the actual nasids in the entire machine (mach_nasids). We're only
92 * interested in the even numbered nasids (which contain the processors
93 * and/or memory), so we only need half as many bits to represent the
94 * nasids. The part_nasids mask is located starting at the first cacheline
95 * following the reserved page header. The mach_nasids mask follows right
96 * after the part_nasids mask. The size in bytes of each mask is reflected
97 * by the reserved page header field 'nasids_size'. (Local partition's
98 * mask pointers are xpc_part_nasids and xpc_mach_nasids.)
99 *
100 * vars
101 * vars part
102 *
103 * Immediately following the mach_nasids mask are the XPC variables
104 * required by other partitions. First are those that are generic to all
105 * partitions (vars), followed on the next available cacheline by those
106 * which are partition specific (vars part). These are setup by XPC.
107 * (Local partition's vars pointers are xpc_vars and xpc_vars_part.)
108 *
109 * Note: Until vars_pa is set, the partition XPC code has not been initialized.
110 */
111struct xpc_rsvd_page {
112 u64 SAL_signature; /* SAL: unique signature */
113 u64 SAL_version; /* SAL: version */
114 u8 partid; /* SAL: partition ID */
115 u8 version;
116 u8 pad1[6]; /* align to next u64 in cacheline */
117 volatile u64 vars_pa;
118 struct timespec stamp; /* time when reserved page was setup by XPC */
119 u64 pad2[9]; /* align to last u64 in cacheline */
120 u64 nasids_size; /* SAL: size of each nasid mask in bytes */
121};
122
123#define XPC_RP_VERSION _XPC_VERSION(1,1) /* version 1.1 of the reserved page */
124
125#define XPC_SUPPORTS_RP_STAMP(_version) \
126 (_version >= _XPC_VERSION(1,1))
127
128/*
129 * compare stamps - the return value is:
130 *
131 * < 0, if stamp1 < stamp2
132 * = 0, if stamp1 == stamp2
133 * > 0, if stamp1 > stamp2
134 */
135static inline int
136xpc_compare_stamps(struct timespec *stamp1, struct timespec *stamp2)
137{
138 int ret;
139
140
141 if ((ret = stamp1->tv_sec - stamp2->tv_sec) == 0) {
142 ret = stamp1->tv_nsec - stamp2->tv_nsec;
143 }
144 return ret;
145}
146
147
148/*
149 * Define the structures by which XPC variables can be exported to other
150 * partitions. (There are two: struct xpc_vars and struct xpc_vars_part)
151 */
152
153/*
154 * The following structure describes the partition generic variables
155 * needed by other partitions in order to properly initialize.
156 *
157 * struct xpc_vars version number also applies to struct xpc_vars_part.
158 * Changes to either structure and/or related functionality should be
159 * reflected by incrementing either the major or minor version numbers
160 * of struct xpc_vars.
161 */
162struct xpc_vars {
163 u8 version;
164 u64 heartbeat;
165 u64 heartbeating_to_mask;
166 u64 heartbeat_offline; /* if 0, heartbeat should be changing */
167 int act_nasid;
168 int act_phys_cpuid;
169 u64 vars_part_pa;
170 u64 amos_page_pa; /* paddr of page of AMOs from MSPEC driver */
171 AMO_t *amos_page; /* vaddr of page of AMOs from MSPEC driver */
172};
173
174#define XPC_V_VERSION _XPC_VERSION(3,1) /* version 3.1 of the cross vars */
175
176#define XPC_SUPPORTS_DISENGAGE_REQUEST(_version) \
177 (_version >= _XPC_VERSION(3,1))
178
179
180static inline int
181xpc_hb_allowed(partid_t partid, struct xpc_vars *vars)
182{
183 return ((vars->heartbeating_to_mask & (1UL << partid)) != 0);
184}
185
186static inline void
187xpc_allow_hb(partid_t partid, struct xpc_vars *vars)
188{
189 u64 old_mask, new_mask;
190
191 do {
192 old_mask = vars->heartbeating_to_mask;
193 new_mask = (old_mask | (1UL << partid));
194 } while (cmpxchg(&vars->heartbeating_to_mask, old_mask, new_mask) !=
195 old_mask);
196}
197
198static inline void
199xpc_disallow_hb(partid_t partid, struct xpc_vars *vars)
200{
201 u64 old_mask, new_mask;
202
203 do {
204 old_mask = vars->heartbeating_to_mask;
205 new_mask = (old_mask & ~(1UL << partid));
206 } while (cmpxchg(&vars->heartbeating_to_mask, old_mask, new_mask) !=
207 old_mask);
208}
209
210
211/*
212 * The AMOs page consists of a number of AMO variables which are divided into
213 * four groups, The first two groups are used to identify an IRQ's sender.
214 * These two groups consist of 64 and 128 AMO variables respectively. The last
215 * two groups, consisting of just one AMO variable each, are used to identify
216 * the remote partitions that are currently engaged (from the viewpoint of
217 * the XPC running on the remote partition).
218 */
219#define XPC_NOTIFY_IRQ_AMOS 0
220#define XPC_ACTIVATE_IRQ_AMOS (XPC_NOTIFY_IRQ_AMOS + XP_MAX_PARTITIONS)
221#define XPC_ENGAGED_PARTITIONS_AMO (XPC_ACTIVATE_IRQ_AMOS + XP_NASID_MASK_WORDS)
222#define XPC_DISENGAGE_REQUEST_AMO (XPC_ENGAGED_PARTITIONS_AMO + 1)
223
224
225/*
226 * The following structure describes the per partition specific variables.
227 *
228 * An array of these structures, one per partition, will be defined. As a
229 * partition becomes active XPC will copy the array entry corresponding to
230 * itself from that partition. It is desirable that the size of this
231 * structure evenly divide into a cacheline, such that none of the entries
232 * in this array crosses a cacheline boundary. As it is now, each entry
233 * occupies half a cacheline.
234 */
235struct xpc_vars_part {
236 volatile u64 magic;
237
238 u64 openclose_args_pa; /* physical address of open and close args */
239 u64 GPs_pa; /* physical address of Get/Put values */
240
241 u64 IPI_amo_pa; /* physical address of IPI AMO_t structure */
242 int IPI_nasid; /* nasid of where to send IPIs */
243 int IPI_phys_cpuid; /* physical CPU ID of where to send IPIs */
244
245 u8 nchannels; /* #of defined channels supported */
246
247 u8 reserved[23]; /* pad to a full 64 bytes */
248};
249
250/*
251 * The vars_part MAGIC numbers play a part in the first contact protocol.
252 *
253 * MAGIC1 indicates that the per partition specific variables for a remote
254 * partition have been initialized by this partition.
255 *
256 * MAGIC2 indicates that this partition has pulled the remote partititions
257 * per partition variables that pertain to this partition.
258 */
259#define XPC_VP_MAGIC1 0x0053524156435058L /* 'XPCVARS\0'L (little endian) */
260#define XPC_VP_MAGIC2 0x0073726176435058L /* 'XPCvars\0'L (little endian) */
261
262
263/* the reserved page sizes and offsets */
264
265#define XPC_RP_HEADER_SIZE L1_CACHE_ALIGN(sizeof(struct xpc_rsvd_page))
266#define XPC_RP_VARS_SIZE L1_CACHE_ALIGN(sizeof(struct xpc_vars))
267
268#define XPC_RP_PART_NASIDS(_rp) (u64 *) ((u8 *) _rp + XPC_RP_HEADER_SIZE)
269#define XPC_RP_MACH_NASIDS(_rp) (XPC_RP_PART_NASIDS(_rp) + xp_nasid_mask_words)
270#define XPC_RP_VARS(_rp) ((struct xpc_vars *) XPC_RP_MACH_NASIDS(_rp) + xp_nasid_mask_words)
271#define XPC_RP_VARS_PART(_rp) (struct xpc_vars_part *) ((u8 *) XPC_RP_VARS(rp) + XPC_RP_VARS_SIZE)
272
273
274/*
275 * Functions registered by add_timer() or called by kernel_thread() only
276 * allow for a single 64-bit argument. The following macros can be used to
277 * pack and unpack two (32-bit, 16-bit or 8-bit) arguments into or out from
278 * the passed argument.
279 */
280#define XPC_PACK_ARGS(_arg1, _arg2) \
281 ((((u64) _arg1) & 0xffffffff) | \
282 ((((u64) _arg2) & 0xffffffff) << 32))
283
284#define XPC_UNPACK_ARG1(_args) (((u64) _args) & 0xffffffff)
285#define XPC_UNPACK_ARG2(_args) ((((u64) _args) >> 32) & 0xffffffff)
286
287
288
289/*
290 * Define a Get/Put value pair (pointers) used with a message queue.
291 */
292struct xpc_gp {
293 volatile s64 get; /* Get value */
294 volatile s64 put; /* Put value */
295};
296
297#define XPC_GP_SIZE \
298 L1_CACHE_ALIGN(sizeof(struct xpc_gp) * XPC_NCHANNELS)
299
300
301
302/*
303 * Define a structure that contains arguments associated with opening and
304 * closing a channel.
305 */
306struct xpc_openclose_args {
307 u16 reason; /* reason why channel is closing */
308 u16 msg_size; /* sizeof each message entry */
309 u16 remote_nentries; /* #of message entries in remote msg queue */
310 u16 local_nentries; /* #of message entries in local msg queue */
311 u64 local_msgqueue_pa; /* physical address of local message queue */
312};
313
314#define XPC_OPENCLOSE_ARGS_SIZE \
315 L1_CACHE_ALIGN(sizeof(struct xpc_openclose_args) * XPC_NCHANNELS)
316
317
318
319/* struct xpc_msg flags */
320
321#define XPC_M_DONE 0x01 /* msg has been received/consumed */
322#define XPC_M_READY 0x02 /* msg is ready to be sent */
323#define XPC_M_INTERRUPT 0x04 /* send interrupt when msg consumed */
324
325
326#define XPC_MSG_ADDRESS(_payload) \
327 ((struct xpc_msg *)((u8 *)(_payload) - XPC_MSG_PAYLOAD_OFFSET))
328
329
330
331/*
332 * Defines notify entry.
333 *
334 * This is used to notify a message's sender that their message was received
335 * and consumed by the intended recipient.
336 */
337struct xpc_notify {
338 struct semaphore sema; /* notify semaphore */
339 volatile u8 type; /* type of notification */
340
341 /* the following two fields are only used if type == XPC_N_CALL */
342 xpc_notify_func func; /* user's notify function */
343 void *key; /* pointer to user's key */
344};
345
346/* struct xpc_notify type of notification */
347
348#define XPC_N_CALL 0x01 /* notify function provided by user */
349
350
351
352/*
353 * Define the structure that manages all the stuff required by a channel. In
354 * particular, they are used to manage the messages sent across the channel.
355 *
356 * This structure is private to a partition, and is NOT shared across the
357 * partition boundary.
358 *
359 * There is an array of these structures for each remote partition. It is
360 * allocated at the time a partition becomes active. The array contains one
361 * of these structures for each potential channel connection to that partition.
362 *
363 * Each of these structures manages two message queues (circular buffers).
364 * They are allocated at the time a channel connection is made. One of
365 * these message queues (local_msgqueue) holds the locally created messages
366 * that are destined for the remote partition. The other of these message
367 * queues (remote_msgqueue) is a locally cached copy of the remote partition's
368 * own local_msgqueue.
369 *
370 * The following is a description of the Get/Put pointers used to manage these
371 * two message queues. Consider the local_msgqueue to be on one partition
372 * and the remote_msgqueue to be its cached copy on another partition. A
373 * description of what each of the lettered areas contains is included.
374 *
375 *
376 * local_msgqueue remote_msgqueue
377 *
378 * |/////////| |/////////|
379 * w_remote_GP.get --> +---------+ |/////////|
380 * | F | |/////////|
381 * remote_GP.get --> +---------+ +---------+ <-- local_GP->get
382 * | | | |
383 * | | | E |
384 * | | | |
385 * | | +---------+ <-- w_local_GP.get
386 * | B | |/////////|
387 * | | |////D////|
388 * | | |/////////|
389 * | | +---------+ <-- w_remote_GP.put
390 * | | |////C////|
391 * local_GP->put --> +---------+ +---------+ <-- remote_GP.put
392 * | | |/////////|
393 * | A | |/////////|
394 * | | |/////////|
395 * w_local_GP.put --> +---------+ |/////////|
396 * |/////////| |/////////|
397 *
398 *
399 * ( remote_GP.[get|put] are cached copies of the remote
400 * partition's local_GP->[get|put], and thus their values can
401 * lag behind their counterparts on the remote partition. )
402 *
403 *
404 * A - Messages that have been allocated, but have not yet been sent to the
405 * remote partition.
406 *
407 * B - Messages that have been sent, but have not yet been acknowledged by the
408 * remote partition as having been received.
409 *
410 * C - Area that needs to be prepared for the copying of sent messages, by
411 * the clearing of the message flags of any previously received messages.
412 *
413 * D - Area into which sent messages are to be copied from the remote
414 * partition's local_msgqueue and then delivered to their intended
415 * recipients. [ To allow for a multi-message copy, another pointer
416 * (next_msg_to_pull) has been added to keep track of the next message
417 * number needing to be copied (pulled). It chases after w_remote_GP.put.
418 * Any messages lying between w_local_GP.get and next_msg_to_pull have
419 * been copied and are ready to be delivered. ]
420 *
421 * E - Messages that have been copied and delivered, but have not yet been
422 * acknowledged by the recipient as having been received.
423 *
424 * F - Messages that have been acknowledged, but XPC has not yet notified the
425 * sender that the message was received by its intended recipient.
426 * This is also an area that needs to be prepared for the allocating of
427 * new messages, by the clearing of the message flags of the acknowledged
428 * messages.
429 */
430struct xpc_channel {
431 partid_t partid; /* ID of remote partition connected */
432 spinlock_t lock; /* lock for updating this structure */
433 u32 flags; /* general flags */
434
435 enum xpc_retval reason; /* reason why channel is disconnect'g */
436 int reason_line; /* line# disconnect initiated from */
437
438 u16 number; /* channel # */
439
440 u16 msg_size; /* sizeof each msg entry */
441 u16 local_nentries; /* #of msg entries in local msg queue */
442 u16 remote_nentries; /* #of msg entries in remote msg queue*/
443
444 void *local_msgqueue_base; /* base address of kmalloc'd space */
445 struct xpc_msg *local_msgqueue; /* local message queue */
446 void *remote_msgqueue_base; /* base address of kmalloc'd space */
447 struct xpc_msg *remote_msgqueue;/* cached copy of remote partition's */
448 /* local message queue */
449 u64 remote_msgqueue_pa; /* phys addr of remote partition's */
450 /* local message queue */
451
452 atomic_t references; /* #of external references to queues */
453
454 atomic_t n_on_msg_allocate_wq; /* #on msg allocation wait queue */
455 wait_queue_head_t msg_allocate_wq; /* msg allocation wait queue */
456
457 u8 delayed_IPI_flags; /* IPI flags received, but delayed */
458 /* action until channel disconnected */
459
460 /* queue of msg senders who want to be notified when msg received */
461
462 atomic_t n_to_notify; /* #of msg senders to notify */
463 struct xpc_notify *notify_queue;/* notify queue for messages sent */
464
465 xpc_channel_func func; /* user's channel function */
466 void *key; /* pointer to user's key */
467
468 struct semaphore msg_to_pull_sema; /* next msg to pull serialization */
469 struct semaphore wdisconnect_sema; /* wait for channel disconnect */
470
471 struct xpc_openclose_args *local_openclose_args; /* args passed on */
472 /* opening or closing of channel */
473
474 /* various flavors of local and remote Get/Put values */
475
476 struct xpc_gp *local_GP; /* local Get/Put values */
477 struct xpc_gp remote_GP; /* remote Get/Put values */
478 struct xpc_gp w_local_GP; /* working local Get/Put values */
479 struct xpc_gp w_remote_GP; /* working remote Get/Put values */
480 s64 next_msg_to_pull; /* Put value of next msg to pull */
481
482 /* kthread management related fields */
483
484// >>> rethink having kthreads_assigned_limit and kthreads_idle_limit; perhaps
485// >>> allow the assigned limit be unbounded and let the idle limit be dynamic
486// >>> dependent on activity over the last interval of time
487 atomic_t kthreads_assigned; /* #of kthreads assigned to channel */
488 u32 kthreads_assigned_limit; /* limit on #of kthreads assigned */
489 atomic_t kthreads_idle; /* #of kthreads idle waiting for work */
490 u32 kthreads_idle_limit; /* limit on #of kthreads idle */
491 atomic_t kthreads_active; /* #of kthreads actively working */
492 // >>> following field is temporary
493 u32 kthreads_created; /* total #of kthreads created */
494
495 wait_queue_head_t idle_wq; /* idle kthread wait queue */
496
497} ____cacheline_aligned;
498
499
500/* struct xpc_channel flags */
501
502#define XPC_C_WASCONNECTED 0x00000001 /* channel was connected */
503
504#define XPC_C_ROPENREPLY 0x00000002 /* remote open channel reply */
505#define XPC_C_OPENREPLY 0x00000004 /* local open channel reply */
506#define XPC_C_ROPENREQUEST 0x00000008 /* remote open channel request */
507#define XPC_C_OPENREQUEST 0x00000010 /* local open channel request */
508
509#define XPC_C_SETUP 0x00000020 /* channel's msgqueues are alloc'd */
510#define XPC_C_CONNECTCALLOUT 0x00000040 /* channel connected callout made */
511#define XPC_C_CONNECTED 0x00000080 /* local channel is connected */
512#define XPC_C_CONNECTING 0x00000100 /* channel is being connected */
513
514#define XPC_C_RCLOSEREPLY 0x00000200 /* remote close channel reply */
515#define XPC_C_CLOSEREPLY 0x00000400 /* local close channel reply */
516#define XPC_C_RCLOSEREQUEST 0x00000800 /* remote close channel request */
517#define XPC_C_CLOSEREQUEST 0x00001000 /* local close channel request */
518
519#define XPC_C_DISCONNECTED 0x00002000 /* channel is disconnected */
520#define XPC_C_DISCONNECTING 0x00004000 /* channel is being disconnected */
521#define XPC_C_DISCONNECTCALLOUT 0x00008000 /* chan disconnected callout made */
522#define XPC_C_WDISCONNECT 0x00010000 /* waiting for channel disconnect */
523
524
525
526/*
527 * Manages channels on a partition basis. There is one of these structures
528 * for each partition (a partition will never utilize the structure that
529 * represents itself).
530 */
531struct xpc_partition {
532
533 /* XPC HB infrastructure */
534
535 u8 remote_rp_version; /* version# of partition's rsvd pg */
536 struct timespec remote_rp_stamp;/* time when rsvd pg was initialized */
537 u64 remote_rp_pa; /* phys addr of partition's rsvd pg */
538 u64 remote_vars_pa; /* phys addr of partition's vars */
539 u64 remote_vars_part_pa; /* phys addr of partition's vars part */
540 u64 last_heartbeat; /* HB at last read */
541 u64 remote_amos_page_pa; /* phys addr of partition's amos page */
542 int remote_act_nasid; /* active part's act/deact nasid */
543 int remote_act_phys_cpuid; /* active part's act/deact phys cpuid */
544 u32 act_IRQ_rcvd; /* IRQs since activation */
545 spinlock_t act_lock; /* protect updating of act_state */
546 u8 act_state; /* from XPC HB viewpoint */
547 u8 remote_vars_version; /* version# of partition's vars */
548 enum xpc_retval reason; /* reason partition is deactivating */
549 int reason_line; /* line# deactivation initiated from */
550 int reactivate_nasid; /* nasid in partition to reactivate */
551
552 unsigned long disengage_request_timeout; /* timeout in jiffies */
553 struct timer_list disengage_request_timer;
554
555
556 /* XPC infrastructure referencing and teardown control */
557
558 volatile u8 setup_state; /* infrastructure setup state */
559 wait_queue_head_t teardown_wq; /* kthread waiting to teardown infra */
560 atomic_t references; /* #of references to infrastructure */
561
562
563 /*
564 * NONE OF THE PRECEDING FIELDS OF THIS STRUCTURE WILL BE CLEARED WHEN
565 * XPC SETS UP THE NECESSARY INFRASTRUCTURE TO SUPPORT CROSS PARTITION
566 * COMMUNICATION. ALL OF THE FOLLOWING FIELDS WILL BE CLEARED. (THE
567 * 'nchannels' FIELD MUST BE THE FIRST OF THE FIELDS TO BE CLEARED.)
568 */
569
570
571 u8 nchannels; /* #of defined channels supported */
572 atomic_t nchannels_active; /* #of channels that are not DISCONNECTED */
573 atomic_t nchannels_engaged;/* #of channels engaged with remote part */
574 struct xpc_channel *channels;/* array of channel structures */
575
576 void *local_GPs_base; /* base address of kmalloc'd space */
577 struct xpc_gp *local_GPs; /* local Get/Put values */
578 void *remote_GPs_base; /* base address of kmalloc'd space */
579 struct xpc_gp *remote_GPs;/* copy of remote partition's local Get/Put */
580 /* values */
581 u64 remote_GPs_pa; /* phys address of remote partition's local */
582 /* Get/Put values */
583
584
585 /* fields used to pass args when opening or closing a channel */
586
587 void *local_openclose_args_base; /* base address of kmalloc'd space */
588 struct xpc_openclose_args *local_openclose_args; /* local's args */
589 void *remote_openclose_args_base; /* base address of kmalloc'd space */
590 struct xpc_openclose_args *remote_openclose_args; /* copy of remote's */
591 /* args */
592 u64 remote_openclose_args_pa; /* phys addr of remote's args */
593
594
595 /* IPI sending, receiving and handling related fields */
596
597 int remote_IPI_nasid; /* nasid of where to send IPIs */
598 int remote_IPI_phys_cpuid; /* phys CPU ID of where to send IPIs */
599 AMO_t *remote_IPI_amo_va; /* address of remote IPI AMO_t structure */
600
601 AMO_t *local_IPI_amo_va; /* address of IPI AMO_t structure */
602 u64 local_IPI_amo; /* IPI amo flags yet to be handled */
603 char IPI_owner[8]; /* IPI owner's name */
604 struct timer_list dropped_IPI_timer; /* dropped IPI timer */
605
606 spinlock_t IPI_lock; /* IPI handler lock */
607
608
609 /* channel manager related fields */
610
611 atomic_t channel_mgr_requests; /* #of requests to activate chan mgr */
612 wait_queue_head_t channel_mgr_wq; /* channel mgr's wait queue */
613
614} ____cacheline_aligned;
615
616
617/* struct xpc_partition act_state values (for XPC HB) */
618
619#define XPC_P_INACTIVE 0x00 /* partition is not active */
620#define XPC_P_ACTIVATION_REQ 0x01 /* created thread to activate */
621#define XPC_P_ACTIVATING 0x02 /* activation thread started */
622#define XPC_P_ACTIVE 0x03 /* xpc_partition_up() was called */
623#define XPC_P_DEACTIVATING 0x04 /* partition deactivation initiated */
624
625
626#define XPC_DEACTIVATE_PARTITION(_p, _reason) \
627 xpc_deactivate_partition(__LINE__, (_p), (_reason))
628
629
630/* struct xpc_partition setup_state values */
631
632#define XPC_P_UNSET 0x00 /* infrastructure was never setup */
633#define XPC_P_SETUP 0x01 /* infrastructure is setup */
634#define XPC_P_WTEARDOWN 0x02 /* waiting to teardown infrastructure */
635#define XPC_P_TORNDOWN 0x03 /* infrastructure is torndown */
636
637
638
639/*
640 * struct xpc_partition IPI_timer #of seconds to wait before checking for
641 * dropped IPIs. These occur whenever an IPI amo write doesn't complete until
642 * after the IPI was received.
643 */
644#define XPC_P_DROPPED_IPI_WAIT (0.25 * HZ)
645
646
647/* number of seconds to wait for other partitions to disengage */
648#define XPC_DISENGAGE_REQUEST_DEFAULT_TIMELIMIT 90
649
650/* interval in seconds to print 'waiting disengagement' messages */
651#define XPC_DISENGAGE_PRINTMSG_INTERVAL 10
652
653
654#define XPC_PARTID(_p) ((partid_t) ((_p) - &xpc_partitions[0]))
655
656
657
658/* found in xp_main.c */
659extern struct xpc_registration xpc_registrations[];
660
661
662/* found in xpc_main.c */
663extern struct device *xpc_part;
664extern struct device *xpc_chan;
665extern int xpc_disengage_request_timelimit;
666extern irqreturn_t xpc_notify_IRQ_handler(int, void *, struct pt_regs *);
667extern void xpc_dropped_IPI_check(struct xpc_partition *);
668extern void xpc_activate_partition(struct xpc_partition *);
669extern void xpc_activate_kthreads(struct xpc_channel *, int);
670extern void xpc_create_kthreads(struct xpc_channel *, int);
671extern void xpc_disconnect_wait(int);
672
673
674/* found in xpc_partition.c */
675extern int xpc_exiting;
676extern struct xpc_vars *xpc_vars;
677extern struct xpc_rsvd_page *xpc_rsvd_page;
678extern struct xpc_vars_part *xpc_vars_part;
679extern struct xpc_partition xpc_partitions[XP_MAX_PARTITIONS + 1];
680extern char xpc_remote_copy_buffer[];
681extern struct xpc_rsvd_page *xpc_rsvd_page_init(void);
682extern void xpc_allow_IPI_ops(void);
683extern void xpc_restrict_IPI_ops(void);
684extern int xpc_identify_act_IRQ_sender(void);
685extern int xpc_partition_disengaged(struct xpc_partition *);
686extern enum xpc_retval xpc_mark_partition_active(struct xpc_partition *);
687extern void xpc_mark_partition_inactive(struct xpc_partition *);
688extern void xpc_discovery(void);
689extern void xpc_check_remote_hb(void);
690extern void xpc_deactivate_partition(const int, struct xpc_partition *,
691 enum xpc_retval);
692extern enum xpc_retval xpc_initiate_partid_to_nasids(partid_t, void *);
693
694
695/* found in xpc_channel.c */
696extern void xpc_initiate_connect(int);
697extern void xpc_initiate_disconnect(int);
698extern enum xpc_retval xpc_initiate_allocate(partid_t, int, u32, void **);
699extern enum xpc_retval xpc_initiate_send(partid_t, int, void *);
700extern enum xpc_retval xpc_initiate_send_notify(partid_t, int, void *,
701 xpc_notify_func, void *);
702extern void xpc_initiate_received(partid_t, int, void *);
703extern enum xpc_retval xpc_setup_infrastructure(struct xpc_partition *);
704extern enum xpc_retval xpc_pull_remote_vars_part(struct xpc_partition *);
705extern void xpc_process_channel_activity(struct xpc_partition *);
706extern void xpc_connected_callout(struct xpc_channel *);
707extern void xpc_deliver_msg(struct xpc_channel *);
708extern void xpc_disconnect_channel(const int, struct xpc_channel *,
709 enum xpc_retval, unsigned long *);
710extern void xpc_disconnecting_callout(struct xpc_channel *);
711extern void xpc_partition_going_down(struct xpc_partition *, enum xpc_retval);
712extern void xpc_teardown_infrastructure(struct xpc_partition *);
713
714
715
716static inline void
717xpc_wakeup_channel_mgr(struct xpc_partition *part)
718{
719 if (atomic_inc_return(&part->channel_mgr_requests) == 1) {
720 wake_up(&part->channel_mgr_wq);
721 }
722}
723
724
725
726/*
727 * These next two inlines are used to keep us from tearing down a channel's
728 * msg queues while a thread may be referencing them.
729 */
730static inline void
731xpc_msgqueue_ref(struct xpc_channel *ch)
732{
733 atomic_inc(&ch->references);
734}
735
736static inline void
737xpc_msgqueue_deref(struct xpc_channel *ch)
738{
739 s32 refs = atomic_dec_return(&ch->references);
740
741 DBUG_ON(refs < 0);
742 if (refs == 0) {
743 xpc_wakeup_channel_mgr(&xpc_partitions[ch->partid]);
744 }
745}
746
747
748
749#define XPC_DISCONNECT_CHANNEL(_ch, _reason, _irqflgs) \
750 xpc_disconnect_channel(__LINE__, _ch, _reason, _irqflgs)
751
752
753/*
754 * These two inlines are used to keep us from tearing down a partition's
755 * setup infrastructure while a thread may be referencing it.
756 */
757static inline void
758xpc_part_deref(struct xpc_partition *part)
759{
760 s32 refs = atomic_dec_return(&part->references);
761
762
763 DBUG_ON(refs < 0);
764 if (refs == 0 && part->setup_state == XPC_P_WTEARDOWN) {
765 wake_up(&part->teardown_wq);
766 }
767}
768
769static inline int
770xpc_part_ref(struct xpc_partition *part)
771{
772 int setup;
773
774
775 atomic_inc(&part->references);
776 setup = (part->setup_state == XPC_P_SETUP);
777 if (!setup) {
778 xpc_part_deref(part);
779 }
780 return setup;
781}
782
783
784
785/*
786 * The following macro is to be used for the setting of the reason and
787 * reason_line fields in both the struct xpc_channel and struct xpc_partition
788 * structures.
789 */
790#define XPC_SET_REASON(_p, _reason, _line) \
791 { \
792 (_p)->reason = _reason; \
793 (_p)->reason_line = _line; \
794 }
795
796
797
798/*
799 * This next set of inlines are used to keep track of when a partition is
800 * potentially engaged in accessing memory belonging to another partition.
801 */
802
803static inline void
804xpc_mark_partition_engaged(struct xpc_partition *part)
805{
806 unsigned long irq_flags;
807 AMO_t *amo = (AMO_t *) __va(part->remote_amos_page_pa +
808 (XPC_ENGAGED_PARTITIONS_AMO * sizeof(AMO_t)));
809
810
811 local_irq_save(irq_flags);
812
813 /* set bit corresponding to our partid in remote partition's AMO */
814 FETCHOP_STORE_OP(TO_AMO((u64) &amo->variable), FETCHOP_OR,
815 (1UL << sn_partition_id));
816 /*
817 * We must always use the nofault function regardless of whether we
818 * are on a Shub 1.1 system or a Shub 1.2 slice 0xc processor. If we
819 * didn't, we'd never know that the other partition is down and would
820 * keep sending IPIs and AMOs to it until the heartbeat times out.
821 */
822 (void) xp_nofault_PIOR((u64 *) GLOBAL_MMR_ADDR(NASID_GET(&amo->
823 variable), xp_nofault_PIOR_target));
824
825 local_irq_restore(irq_flags);
826}
827
828static inline void
829xpc_mark_partition_disengaged(struct xpc_partition *part)
830{
831 unsigned long irq_flags;
832 AMO_t *amo = (AMO_t *) __va(part->remote_amos_page_pa +
833 (XPC_ENGAGED_PARTITIONS_AMO * sizeof(AMO_t)));
834
835
836 local_irq_save(irq_flags);
837
838 /* clear bit corresponding to our partid in remote partition's AMO */
839 FETCHOP_STORE_OP(TO_AMO((u64) &amo->variable), FETCHOP_AND,
840 ~(1UL << sn_partition_id));
841 /*
842 * We must always use the nofault function regardless of whether we
843 * are on a Shub 1.1 system or a Shub 1.2 slice 0xc processor. If we
844 * didn't, we'd never know that the other partition is down and would
845 * keep sending IPIs and AMOs to it until the heartbeat times out.
846 */
847 (void) xp_nofault_PIOR((u64 *) GLOBAL_MMR_ADDR(NASID_GET(&amo->
848 variable), xp_nofault_PIOR_target));
849
850 local_irq_restore(irq_flags);
851}
852
853static inline void
854xpc_request_partition_disengage(struct xpc_partition *part)
855{
856 unsigned long irq_flags;
857 AMO_t *amo = (AMO_t *) __va(part->remote_amos_page_pa +
858 (XPC_DISENGAGE_REQUEST_AMO * sizeof(AMO_t)));
859
860
861 local_irq_save(irq_flags);
862
863 /* set bit corresponding to our partid in remote partition's AMO */
864 FETCHOP_STORE_OP(TO_AMO((u64) &amo->variable), FETCHOP_OR,
865 (1UL << sn_partition_id));
866 /*
867 * We must always use the nofault function regardless of whether we
868 * are on a Shub 1.1 system or a Shub 1.2 slice 0xc processor. If we
869 * didn't, we'd never know that the other partition is down and would
870 * keep sending IPIs and AMOs to it until the heartbeat times out.
871 */
872 (void) xp_nofault_PIOR((u64 *) GLOBAL_MMR_ADDR(NASID_GET(&amo->
873 variable), xp_nofault_PIOR_target));
874
875 local_irq_restore(irq_flags);
876}
877
878static inline void
879xpc_cancel_partition_disengage_request(struct xpc_partition *part)
880{
881 unsigned long irq_flags;
882 AMO_t *amo = (AMO_t *) __va(part->remote_amos_page_pa +
883 (XPC_DISENGAGE_REQUEST_AMO * sizeof(AMO_t)));
884
885
886 local_irq_save(irq_flags);
887
888 /* clear bit corresponding to our partid in remote partition's AMO */
889 FETCHOP_STORE_OP(TO_AMO((u64) &amo->variable), FETCHOP_AND,
890 ~(1UL << sn_partition_id));
891 /*
892 * We must always use the nofault function regardless of whether we
893 * are on a Shub 1.1 system or a Shub 1.2 slice 0xc processor. If we
894 * didn't, we'd never know that the other partition is down and would
895 * keep sending IPIs and AMOs to it until the heartbeat times out.
896 */
897 (void) xp_nofault_PIOR((u64 *) GLOBAL_MMR_ADDR(NASID_GET(&amo->
898 variable), xp_nofault_PIOR_target));
899
900 local_irq_restore(irq_flags);
901}
902
903static inline u64
904xpc_partition_engaged(u64 partid_mask)
905{
906 AMO_t *amo = xpc_vars->amos_page + XPC_ENGAGED_PARTITIONS_AMO;
907
908
909 /* return our partition's AMO variable ANDed with partid_mask */
910 return (FETCHOP_LOAD_OP(TO_AMO((u64) &amo->variable), FETCHOP_LOAD) &
911 partid_mask);
912}
913
914static inline u64
915xpc_partition_disengage_requested(u64 partid_mask)
916{
917 AMO_t *amo = xpc_vars->amos_page + XPC_DISENGAGE_REQUEST_AMO;
918
919
920 /* return our partition's AMO variable ANDed with partid_mask */
921 return (FETCHOP_LOAD_OP(TO_AMO((u64) &amo->variable), FETCHOP_LOAD) &
922 partid_mask);
923}
924
925static inline void
926xpc_clear_partition_engaged(u64 partid_mask)
927{
928 AMO_t *amo = xpc_vars->amos_page + XPC_ENGAGED_PARTITIONS_AMO;
929
930
931 /* clear bit(s) based on partid_mask in our partition's AMO */
932 FETCHOP_STORE_OP(TO_AMO((u64) &amo->variable), FETCHOP_AND,
933 ~partid_mask);
934}
935
936static inline void
937xpc_clear_partition_disengage_request(u64 partid_mask)
938{
939 AMO_t *amo = xpc_vars->amos_page + XPC_DISENGAGE_REQUEST_AMO;
940
941
942 /* clear bit(s) based on partid_mask in our partition's AMO */
943 FETCHOP_STORE_OP(TO_AMO((u64) &amo->variable), FETCHOP_AND,
944 ~partid_mask);
945}
946
947
948
949/*
950 * The following set of macros and inlines are used for the sending and
951 * receiving of IPIs (also known as IRQs). There are two flavors of IPIs,
952 * one that is associated with partition activity (SGI_XPC_ACTIVATE) and
953 * the other that is associated with channel activity (SGI_XPC_NOTIFY).
954 */
955
956static inline u64
957xpc_IPI_receive(AMO_t *amo)
958{
959 return FETCHOP_LOAD_OP(TO_AMO((u64) &amo->variable), FETCHOP_CLEAR);
960}
961
962
963static inline enum xpc_retval
964xpc_IPI_send(AMO_t *amo, u64 flag, int nasid, int phys_cpuid, int vector)
965{
966 int ret = 0;
967 unsigned long irq_flags;
968
969
970 local_irq_save(irq_flags);
971
972 FETCHOP_STORE_OP(TO_AMO((u64) &amo->variable), FETCHOP_OR, flag);
973 sn_send_IPI_phys(nasid, phys_cpuid, vector, 0);
974
975 /*
976 * We must always use the nofault function regardless of whether we
977 * are on a Shub 1.1 system or a Shub 1.2 slice 0xc processor. If we
978 * didn't, we'd never know that the other partition is down and would
979 * keep sending IPIs and AMOs to it until the heartbeat times out.
980 */
981 ret = xp_nofault_PIOR((u64 *) GLOBAL_MMR_ADDR(NASID_GET(&amo->variable),
982 xp_nofault_PIOR_target));
983
984 local_irq_restore(irq_flags);
985
986 return ((ret == 0) ? xpcSuccess : xpcPioReadError);
987}
988
989
990/*
991 * IPIs associated with SGI_XPC_ACTIVATE IRQ.
992 */
993
994/*
995 * Flag the appropriate AMO variable and send an IPI to the specified node.
996 */
997static inline void
998xpc_activate_IRQ_send(u64 amos_page_pa, int from_nasid, int to_nasid,
999 int to_phys_cpuid)
1000{
1001 int w_index = XPC_NASID_W_INDEX(from_nasid);
1002 int b_index = XPC_NASID_B_INDEX(from_nasid);
1003 AMO_t *amos = (AMO_t *) __va(amos_page_pa +
1004 (XPC_ACTIVATE_IRQ_AMOS * sizeof(AMO_t)));
1005
1006
1007 (void) xpc_IPI_send(&amos[w_index], (1UL << b_index), to_nasid,
1008 to_phys_cpuid, SGI_XPC_ACTIVATE);
1009}
1010
1011static inline void
1012xpc_IPI_send_activate(struct xpc_vars *vars)
1013{
1014 xpc_activate_IRQ_send(vars->amos_page_pa, cnodeid_to_nasid(0),
1015 vars->act_nasid, vars->act_phys_cpuid);
1016}
1017
1018static inline void
1019xpc_IPI_send_activated(struct xpc_partition *part)
1020{
1021 xpc_activate_IRQ_send(part->remote_amos_page_pa, cnodeid_to_nasid(0),
1022 part->remote_act_nasid, part->remote_act_phys_cpuid);
1023}
1024
1025static inline void
1026xpc_IPI_send_reactivate(struct xpc_partition *part)
1027{
1028 xpc_activate_IRQ_send(xpc_vars->amos_page_pa, part->reactivate_nasid,
1029 xpc_vars->act_nasid, xpc_vars->act_phys_cpuid);
1030}
1031
1032static inline void
1033xpc_IPI_send_disengage(struct xpc_partition *part)
1034{
1035 xpc_activate_IRQ_send(part->remote_amos_page_pa, cnodeid_to_nasid(0),
1036 part->remote_act_nasid, part->remote_act_phys_cpuid);
1037}
1038
1039
1040/*
1041 * IPIs associated with SGI_XPC_NOTIFY IRQ.
1042 */
1043
1044/*
1045 * Send an IPI to the remote partition that is associated with the
1046 * specified channel.
1047 */
1048#define XPC_NOTIFY_IRQ_SEND(_ch, _ipi_f, _irq_f) \
1049 xpc_notify_IRQ_send(_ch, _ipi_f, #_ipi_f, _irq_f)
1050
1051static inline void
1052xpc_notify_IRQ_send(struct xpc_channel *ch, u8 ipi_flag, char *ipi_flag_string,
1053 unsigned long *irq_flags)
1054{
1055 struct xpc_partition *part = &xpc_partitions[ch->partid];
1056 enum xpc_retval ret;
1057
1058
1059 if (likely(part->act_state != XPC_P_DEACTIVATING)) {
1060 ret = xpc_IPI_send(part->remote_IPI_amo_va,
1061 (u64) ipi_flag << (ch->number * 8),
1062 part->remote_IPI_nasid,
1063 part->remote_IPI_phys_cpuid,
1064 SGI_XPC_NOTIFY);
1065 dev_dbg(xpc_chan, "%s sent to partid=%d, channel=%d, ret=%d\n",
1066 ipi_flag_string, ch->partid, ch->number, ret);
1067 if (unlikely(ret != xpcSuccess)) {
1068 if (irq_flags != NULL) {
1069 spin_unlock_irqrestore(&ch->lock, *irq_flags);
1070 }
1071 XPC_DEACTIVATE_PARTITION(part, ret);
1072 if (irq_flags != NULL) {
1073 spin_lock_irqsave(&ch->lock, *irq_flags);
1074 }
1075 }
1076 }
1077}
1078
1079
1080/*
1081 * Make it look like the remote partition, which is associated with the
1082 * specified channel, sent us an IPI. This faked IPI will be handled
1083 * by xpc_dropped_IPI_check().
1084 */
1085#define XPC_NOTIFY_IRQ_SEND_LOCAL(_ch, _ipi_f) \
1086 xpc_notify_IRQ_send_local(_ch, _ipi_f, #_ipi_f)
1087
1088static inline void
1089xpc_notify_IRQ_send_local(struct xpc_channel *ch, u8 ipi_flag,
1090 char *ipi_flag_string)
1091{
1092 struct xpc_partition *part = &xpc_partitions[ch->partid];
1093
1094
1095 FETCHOP_STORE_OP(TO_AMO((u64) &part->local_IPI_amo_va->variable),
1096 FETCHOP_OR, ((u64) ipi_flag << (ch->number * 8)));
1097 dev_dbg(xpc_chan, "%s sent local from partid=%d, channel=%d\n",
1098 ipi_flag_string, ch->partid, ch->number);
1099}
1100
1101
1102/*
1103 * The sending and receiving of IPIs includes the setting of an AMO variable
1104 * to indicate the reason the IPI was sent. The 64-bit variable is divided
1105 * up into eight bytes, ordered from right to left. Byte zero pertains to
1106 * channel 0, byte one to channel 1, and so on. Each byte is described by
1107 * the following IPI flags.
1108 */
1109
1110#define XPC_IPI_CLOSEREQUEST 0x01
1111#define XPC_IPI_CLOSEREPLY 0x02
1112#define XPC_IPI_OPENREQUEST 0x04
1113#define XPC_IPI_OPENREPLY 0x08
1114#define XPC_IPI_MSGREQUEST 0x10
1115
1116
1117/* given an AMO variable and a channel#, get its associated IPI flags */
1118#define XPC_GET_IPI_FLAGS(_amo, _c) ((u8) (((_amo) >> ((_c) * 8)) & 0xff))
1119#define XPC_SET_IPI_FLAGS(_amo, _c, _f) (_amo) |= ((u64) (_f) << ((_c) * 8))
1120
1121#define XPC_ANY_OPENCLOSE_IPI_FLAGS_SET(_amo) ((_amo) & 0x0f0f0f0f0f0f0f0f)
1122#define XPC_ANY_MSG_IPI_FLAGS_SET(_amo) ((_amo) & 0x1010101010101010)
1123
1124
1125static inline void
1126xpc_IPI_send_closerequest(struct xpc_channel *ch, unsigned long *irq_flags)
1127{
1128 struct xpc_openclose_args *args = ch->local_openclose_args;
1129
1130
1131 args->reason = ch->reason;
1132
1133 XPC_NOTIFY_IRQ_SEND(ch, XPC_IPI_CLOSEREQUEST, irq_flags);
1134}
1135
1136static inline void
1137xpc_IPI_send_closereply(struct xpc_channel *ch, unsigned long *irq_flags)
1138{
1139 XPC_NOTIFY_IRQ_SEND(ch, XPC_IPI_CLOSEREPLY, irq_flags);
1140}
1141
1142static inline void
1143xpc_IPI_send_openrequest(struct xpc_channel *ch, unsigned long *irq_flags)
1144{
1145 struct xpc_openclose_args *args = ch->local_openclose_args;
1146
1147
1148 args->msg_size = ch->msg_size;
1149 args->local_nentries = ch->local_nentries;
1150
1151 XPC_NOTIFY_IRQ_SEND(ch, XPC_IPI_OPENREQUEST, irq_flags);
1152}
1153
1154static inline void
1155xpc_IPI_send_openreply(struct xpc_channel *ch, unsigned long *irq_flags)
1156{
1157 struct xpc_openclose_args *args = ch->local_openclose_args;
1158
1159
1160 args->remote_nentries = ch->remote_nentries;
1161 args->local_nentries = ch->local_nentries;
1162 args->local_msgqueue_pa = __pa(ch->local_msgqueue);
1163
1164 XPC_NOTIFY_IRQ_SEND(ch, XPC_IPI_OPENREPLY, irq_flags);
1165}
1166
1167static inline void
1168xpc_IPI_send_msgrequest(struct xpc_channel *ch)
1169{
1170 XPC_NOTIFY_IRQ_SEND(ch, XPC_IPI_MSGREQUEST, NULL);
1171}
1172
1173static inline void
1174xpc_IPI_send_local_msgrequest(struct xpc_channel *ch)
1175{
1176 XPC_NOTIFY_IRQ_SEND_LOCAL(ch, XPC_IPI_MSGREQUEST);
1177}
1178
1179
1180/*
1181 * Memory for XPC's AMO variables is allocated by the MSPEC driver. These
1182 * pages are located in the lowest granule. The lowest granule uses 4k pages
1183 * for cached references and an alternate TLB handler to never provide a
1184 * cacheable mapping for the entire region. This will prevent speculative
1185 * reading of cached copies of our lines from being issued which will cause
1186 * a PI FSB Protocol error to be generated by the SHUB. For XPC, we need 64
1187 * AMO variables (based on XP_MAX_PARTITIONS) for message notification and an
1188 * additional 128 AMO variables (based on XP_NASID_MASK_WORDS) for partition
1189 * activation and 2 AMO variables for partition deactivation.
1190 */
1191static inline AMO_t *
1192xpc_IPI_init(int index)
1193{
1194 AMO_t *amo = xpc_vars->amos_page + index;
1195
1196
1197 (void) xpc_IPI_receive(amo); /* clear AMO variable */
1198 return amo;
1199}
1200
1201
1202
1203static inline enum xpc_retval
1204xpc_map_bte_errors(bte_result_t error)
1205{
1206 switch (error) {
1207 case BTE_SUCCESS: return xpcSuccess;
1208 case BTEFAIL_DIR: return xpcBteDirectoryError;
1209 case BTEFAIL_POISON: return xpcBtePoisonError;
1210 case BTEFAIL_WERR: return xpcBteWriteError;
1211 case BTEFAIL_ACCESS: return xpcBteAccessError;
1212 case BTEFAIL_PWERR: return xpcBtePWriteError;
1213 case BTEFAIL_PRERR: return xpcBtePReadError;
1214 case BTEFAIL_TOUT: return xpcBteTimeOutError;
1215 case BTEFAIL_XTERR: return xpcBteXtalkError;
1216 case BTEFAIL_NOTAVAIL: return xpcBteNotAvailable;
1217 default: return xpcBteUnmappedError;
1218 }
1219}
1220
1221
1222
1223static inline void *
1224xpc_kmalloc_cacheline_aligned(size_t size, gfp_t flags, void **base)
1225{
1226 /* see if kmalloc will give us cachline aligned memory by default */
1227 *base = kmalloc(size, flags);
1228 if (*base == NULL) {
1229 return NULL;
1230 }
1231 if ((u64) *base == L1_CACHE_ALIGN((u64) *base)) {
1232 return *base;
1233 }
1234 kfree(*base);
1235
1236 /* nope, we'll have to do it ourselves */
1237 *base = kmalloc(size + L1_CACHE_BYTES, flags);
1238 if (*base == NULL) {
1239 return NULL;
1240 }
1241 return (void *) L1_CACHE_ALIGN((u64) *base);
1242}
1243
1244
1245/*
1246 * Check to see if there is any channel activity to/from the specified
1247 * partition.
1248 */
1249static inline void
1250xpc_check_for_channel_activity(struct xpc_partition *part)
1251{
1252 u64 IPI_amo;
1253 unsigned long irq_flags;
1254
1255
1256 IPI_amo = xpc_IPI_receive(part->local_IPI_amo_va);
1257 if (IPI_amo == 0) {
1258 return;
1259 }
1260
1261 spin_lock_irqsave(&part->IPI_lock, irq_flags);
1262 part->local_IPI_amo |= IPI_amo;
1263 spin_unlock_irqrestore(&part->IPI_lock, irq_flags);
1264
1265 dev_dbg(xpc_chan, "received IPI from partid=%d, IPI_amo=0x%lx\n",
1266 XPC_PARTID(part), IPI_amo);
1267
1268 xpc_wakeup_channel_mgr(part);
1269}
1270
1271
1272#endif /* _IA64_SN_KERNEL_XPC_H */
1273
diff --git a/arch/ia64/sn/kernel/xpc_channel.c b/arch/ia64/sn/kernel/xpc_channel.c
index abf4fc2a87bb..cdf6856ce089 100644
--- a/arch/ia64/sn/kernel/xpc_channel.c
+++ b/arch/ia64/sn/kernel/xpc_channel.c
@@ -3,7 +3,7 @@
3 * License. See the file "COPYING" in the main directory of this archive 3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details. 4 * for more details.
5 * 5 *
6 * Copyright (c) 2004-2005 Silicon Graphics, Inc. All Rights Reserved. 6 * Copyright (c) 2004-2006 Silicon Graphics, Inc. All Rights Reserved.
7 */ 7 */
8 8
9 9
@@ -22,9 +22,11 @@
22#include <linux/cache.h> 22#include <linux/cache.h>
23#include <linux/interrupt.h> 23#include <linux/interrupt.h>
24#include <linux/slab.h> 24#include <linux/slab.h>
25#include <linux/mutex.h>
26#include <linux/completion.h>
25#include <asm/sn/bte.h> 27#include <asm/sn/bte.h>
26#include <asm/sn/sn_sal.h> 28#include <asm/sn/sn_sal.h>
27#include "xpc.h" 29#include <asm/sn/xpc.h>
28 30
29 31
30/* 32/*
@@ -56,8 +58,8 @@ xpc_initialize_channels(struct xpc_partition *part, partid_t partid)
56 atomic_set(&ch->n_to_notify, 0); 58 atomic_set(&ch->n_to_notify, 0);
57 59
58 spin_lock_init(&ch->lock); 60 spin_lock_init(&ch->lock);
59 sema_init(&ch->msg_to_pull_sema, 1); /* mutex */ 61 mutex_init(&ch->msg_to_pull_mutex);
60 sema_init(&ch->wdisconnect_sema, 0); /* event wait */ 62 init_completion(&ch->wdisconnect_wait);
61 63
62 atomic_set(&ch->n_on_msg_allocate_wq, 0); 64 atomic_set(&ch->n_on_msg_allocate_wq, 0);
63 init_waitqueue_head(&ch->msg_allocate_wq); 65 init_waitqueue_head(&ch->msg_allocate_wq);
@@ -445,7 +447,7 @@ xpc_allocate_local_msgqueue(struct xpc_channel *ch)
445 447
446 nbytes = nentries * ch->msg_size; 448 nbytes = nentries * ch->msg_size;
447 ch->local_msgqueue = xpc_kmalloc_cacheline_aligned(nbytes, 449 ch->local_msgqueue = xpc_kmalloc_cacheline_aligned(nbytes,
448 (GFP_KERNEL | GFP_DMA), 450 GFP_KERNEL,
449 &ch->local_msgqueue_base); 451 &ch->local_msgqueue_base);
450 if (ch->local_msgqueue == NULL) { 452 if (ch->local_msgqueue == NULL) {
451 continue; 453 continue;
@@ -453,7 +455,7 @@ xpc_allocate_local_msgqueue(struct xpc_channel *ch)
453 memset(ch->local_msgqueue, 0, nbytes); 455 memset(ch->local_msgqueue, 0, nbytes);
454 456
455 nbytes = nentries * sizeof(struct xpc_notify); 457 nbytes = nentries * sizeof(struct xpc_notify);
456 ch->notify_queue = kmalloc(nbytes, (GFP_KERNEL | GFP_DMA)); 458 ch->notify_queue = kmalloc(nbytes, GFP_KERNEL);
457 if (ch->notify_queue == NULL) { 459 if (ch->notify_queue == NULL) {
458 kfree(ch->local_msgqueue_base); 460 kfree(ch->local_msgqueue_base);
459 ch->local_msgqueue = NULL; 461 ch->local_msgqueue = NULL;
@@ -500,7 +502,7 @@ xpc_allocate_remote_msgqueue(struct xpc_channel *ch)
500 502
501 nbytes = nentries * ch->msg_size; 503 nbytes = nentries * ch->msg_size;
502 ch->remote_msgqueue = xpc_kmalloc_cacheline_aligned(nbytes, 504 ch->remote_msgqueue = xpc_kmalloc_cacheline_aligned(nbytes,
503 (GFP_KERNEL | GFP_DMA), 505 GFP_KERNEL,
504 &ch->remote_msgqueue_base); 506 &ch->remote_msgqueue_base);
505 if (ch->remote_msgqueue == NULL) { 507 if (ch->remote_msgqueue == NULL) {
506 continue; 508 continue;
@@ -534,7 +536,6 @@ static enum xpc_retval
534xpc_allocate_msgqueues(struct xpc_channel *ch) 536xpc_allocate_msgqueues(struct xpc_channel *ch)
535{ 537{
536 unsigned long irq_flags; 538 unsigned long irq_flags;
537 int i;
538 enum xpc_retval ret; 539 enum xpc_retval ret;
539 540
540 541
@@ -552,11 +553,6 @@ xpc_allocate_msgqueues(struct xpc_channel *ch)
552 return ret; 553 return ret;
553 } 554 }
554 555
555 for (i = 0; i < ch->local_nentries; i++) {
556 /* use a semaphore as an event wait queue */
557 sema_init(&ch->notify_queue[i].sema, 0);
558 }
559
560 spin_lock_irqsave(&ch->lock, irq_flags); 556 spin_lock_irqsave(&ch->lock, irq_flags);
561 ch->flags |= XPC_C_SETUP; 557 ch->flags |= XPC_C_SETUP;
562 spin_unlock_irqrestore(&ch->lock, irq_flags); 558 spin_unlock_irqrestore(&ch->lock, irq_flags);
@@ -742,7 +738,9 @@ xpc_process_disconnect(struct xpc_channel *ch, unsigned long *irq_flags)
742 738
743 /* make sure all activity has settled down first */ 739 /* make sure all activity has settled down first */
744 740
745 if (atomic_read(&ch->references) > 0) { 741 if (atomic_read(&ch->references) > 0 ||
742 ((ch->flags & XPC_C_CONNECTEDCALLOUT_MADE) &&
743 !(ch->flags & XPC_C_DISCONNECTINGCALLOUT_MADE))) {
746 return; 744 return;
747 } 745 }
748 DBUG_ON(atomic_read(&ch->kthreads_assigned) != 0); 746 DBUG_ON(atomic_read(&ch->kthreads_assigned) != 0);
@@ -779,6 +777,12 @@ xpc_process_disconnect(struct xpc_channel *ch, unsigned long *irq_flags)
779 777
780 /* both sides are disconnected now */ 778 /* both sides are disconnected now */
781 779
780 if (ch->flags & XPC_C_DISCONNECTINGCALLOUT_MADE) {
781 spin_unlock_irqrestore(&ch->lock, *irq_flags);
782 xpc_disconnect_callout(ch, xpcDisconnected);
783 spin_lock_irqsave(&ch->lock, *irq_flags);
784 }
785
782 /* it's now safe to free the channel's message queues */ 786 /* it's now safe to free the channel's message queues */
783 xpc_free_msgqueues(ch); 787 xpc_free_msgqueues(ch);
784 788
@@ -793,10 +797,8 @@ xpc_process_disconnect(struct xpc_channel *ch, unsigned long *irq_flags)
793 } 797 }
794 798
795 if (ch->flags & XPC_C_WDISCONNECT) { 799 if (ch->flags & XPC_C_WDISCONNECT) {
796 spin_unlock_irqrestore(&ch->lock, *irq_flags); 800 /* we won't lose the CPU since we're holding ch->lock */
797 up(&ch->wdisconnect_sema); 801 complete(&ch->wdisconnect_wait);
798 spin_lock_irqsave(&ch->lock, *irq_flags);
799
800 } else if (ch->delayed_IPI_flags) { 802 } else if (ch->delayed_IPI_flags) {
801 if (part->act_state != XPC_P_DEACTIVATING) { 803 if (part->act_state != XPC_P_DEACTIVATING) {
802 /* time to take action on any delayed IPI flags */ 804 /* time to take action on any delayed IPI flags */
@@ -1086,12 +1088,12 @@ xpc_connect_channel(struct xpc_channel *ch)
1086 struct xpc_registration *registration = &xpc_registrations[ch->number]; 1088 struct xpc_registration *registration = &xpc_registrations[ch->number];
1087 1089
1088 1090
1089 if (down_trylock(&registration->sema) != 0) { 1091 if (mutex_trylock(&registration->mutex) == 0) {
1090 return xpcRetry; 1092 return xpcRetry;
1091 } 1093 }
1092 1094
1093 if (!XPC_CHANNEL_REGISTERED(ch->number)) { 1095 if (!XPC_CHANNEL_REGISTERED(ch->number)) {
1094 up(&registration->sema); 1096 mutex_unlock(&registration->mutex);
1095 return xpcUnregistered; 1097 return xpcUnregistered;
1096 } 1098 }
1097 1099
@@ -1102,7 +1104,7 @@ xpc_connect_channel(struct xpc_channel *ch)
1102 1104
1103 if (ch->flags & XPC_C_DISCONNECTING) { 1105 if (ch->flags & XPC_C_DISCONNECTING) {
1104 spin_unlock_irqrestore(&ch->lock, irq_flags); 1106 spin_unlock_irqrestore(&ch->lock, irq_flags);
1105 up(&registration->sema); 1107 mutex_unlock(&registration->mutex);
1106 return ch->reason; 1108 return ch->reason;
1107 } 1109 }
1108 1110
@@ -1134,7 +1136,7 @@ xpc_connect_channel(struct xpc_channel *ch)
1134 * channel lock be locked and will unlock and relock 1136 * channel lock be locked and will unlock and relock
1135 * the channel lock as needed. 1137 * the channel lock as needed.
1136 */ 1138 */
1137 up(&registration->sema); 1139 mutex_unlock(&registration->mutex);
1138 XPC_DISCONNECT_CHANNEL(ch, xpcUnequalMsgSizes, 1140 XPC_DISCONNECT_CHANNEL(ch, xpcUnequalMsgSizes,
1139 &irq_flags); 1141 &irq_flags);
1140 spin_unlock_irqrestore(&ch->lock, irq_flags); 1142 spin_unlock_irqrestore(&ch->lock, irq_flags);
@@ -1149,7 +1151,7 @@ xpc_connect_channel(struct xpc_channel *ch)
1149 atomic_inc(&xpc_partitions[ch->partid].nchannels_active); 1151 atomic_inc(&xpc_partitions[ch->partid].nchannels_active);
1150 } 1152 }
1151 1153
1152 up(&registration->sema); 1154 mutex_unlock(&registration->mutex);
1153 1155
1154 1156
1155 /* initiate the connection */ 1157 /* initiate the connection */
@@ -1300,7 +1302,7 @@ xpc_process_msg_IPI(struct xpc_partition *part, int ch_number)
1300 "delivered=%d, partid=%d, channel=%d\n", 1302 "delivered=%d, partid=%d, channel=%d\n",
1301 nmsgs_sent, ch->partid, ch->number); 1303 nmsgs_sent, ch->partid, ch->number);
1302 1304
1303 if (ch->flags & XPC_C_CONNECTCALLOUT) { 1305 if (ch->flags & XPC_C_CONNECTEDCALLOUT_MADE) {
1304 xpc_activate_kthreads(ch, nmsgs_sent); 1306 xpc_activate_kthreads(ch, nmsgs_sent);
1305 } 1307 }
1306 } 1308 }
@@ -1645,7 +1647,7 @@ xpc_disconnect_channel(const int line, struct xpc_channel *ch,
1645 1647
1646 1648
1647void 1649void
1648xpc_disconnecting_callout(struct xpc_channel *ch) 1650xpc_disconnect_callout(struct xpc_channel *ch, enum xpc_retval reason)
1649{ 1651{
1650 /* 1652 /*
1651 * Let the channel's registerer know that the channel is being 1653 * Let the channel's registerer know that the channel is being
@@ -1654,15 +1656,13 @@ xpc_disconnecting_callout(struct xpc_channel *ch)
1654 */ 1656 */
1655 1657
1656 if (ch->func != NULL) { 1658 if (ch->func != NULL) {
1657 dev_dbg(xpc_chan, "ch->func() called, reason=xpcDisconnecting," 1659 dev_dbg(xpc_chan, "ch->func() called, reason=%d, partid=%d, "
1658 " partid=%d, channel=%d\n", ch->partid, ch->number); 1660 "channel=%d\n", reason, ch->partid, ch->number);
1659 1661
1660 ch->func(xpcDisconnecting, ch->partid, ch->number, NULL, 1662 ch->func(reason, ch->partid, ch->number, NULL, ch->key);
1661 ch->key);
1662 1663
1663 dev_dbg(xpc_chan, "ch->func() returned, reason=" 1664 dev_dbg(xpc_chan, "ch->func() returned, reason=%d, partid=%d, "
1664 "xpcDisconnecting, partid=%d, channel=%d\n", 1665 "channel=%d\n", reason, ch->partid, ch->number);
1665 ch->partid, ch->number);
1666 } 1666 }
1667} 1667}
1668 1668
@@ -2085,7 +2085,7 @@ xpc_pull_remote_msg(struct xpc_channel *ch, s64 get)
2085 enum xpc_retval ret; 2085 enum xpc_retval ret;
2086 2086
2087 2087
2088 if (down_interruptible(&ch->msg_to_pull_sema) != 0) { 2088 if (mutex_lock_interruptible(&ch->msg_to_pull_mutex) != 0) {
2089 /* we were interrupted by a signal */ 2089 /* we were interrupted by a signal */
2090 return NULL; 2090 return NULL;
2091 } 2091 }
@@ -2121,7 +2121,7 @@ xpc_pull_remote_msg(struct xpc_channel *ch, s64 get)
2121 2121
2122 XPC_DEACTIVATE_PARTITION(part, ret); 2122 XPC_DEACTIVATE_PARTITION(part, ret);
2123 2123
2124 up(&ch->msg_to_pull_sema); 2124 mutex_unlock(&ch->msg_to_pull_mutex);
2125 return NULL; 2125 return NULL;
2126 } 2126 }
2127 2127
@@ -2130,7 +2130,7 @@ xpc_pull_remote_msg(struct xpc_channel *ch, s64 get)
2130 ch->next_msg_to_pull += nmsgs; 2130 ch->next_msg_to_pull += nmsgs;
2131 } 2131 }
2132 2132
2133 up(&ch->msg_to_pull_sema); 2133 mutex_unlock(&ch->msg_to_pull_mutex);
2134 2134
2135 /* return the message we were looking for */ 2135 /* return the message we were looking for */
2136 msg_offset = (get % ch->remote_nentries) * ch->msg_size; 2136 msg_offset = (get % ch->remote_nentries) * ch->msg_size;
diff --git a/arch/ia64/sn/kernel/xpc_main.c b/arch/ia64/sn/kernel/xpc_main.c
index b617236524c6..8cbf16432570 100644
--- a/arch/ia64/sn/kernel/xpc_main.c
+++ b/arch/ia64/sn/kernel/xpc_main.c
@@ -3,7 +3,7 @@
3 * License. See the file "COPYING" in the main directory of this archive 3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details. 4 * for more details.
5 * 5 *
6 * Copyright (c) 2004-2005 Silicon Graphics, Inc. All Rights Reserved. 6 * Copyright (c) 2004-2006 Silicon Graphics, Inc. All Rights Reserved.
7 */ 7 */
8 8
9 9
@@ -55,11 +55,12 @@
55#include <linux/slab.h> 55#include <linux/slab.h>
56#include <linux/delay.h> 56#include <linux/delay.h>
57#include <linux/reboot.h> 57#include <linux/reboot.h>
58#include <linux/completion.h>
58#include <asm/sn/intr.h> 59#include <asm/sn/intr.h>
59#include <asm/sn/sn_sal.h> 60#include <asm/sn/sn_sal.h>
60#include <asm/kdebug.h> 61#include <asm/kdebug.h>
61#include <asm/uaccess.h> 62#include <asm/uaccess.h>
62#include "xpc.h" 63#include <asm/sn/xpc.h>
63 64
64 65
65/* define two XPC debug device structures to be used with dev_dbg() et al */ 66/* define two XPC debug device structures to be used with dev_dbg() et al */
@@ -82,6 +83,9 @@ struct device *xpc_part = &xpc_part_dbg_subname;
82struct device *xpc_chan = &xpc_chan_dbg_subname; 83struct device *xpc_chan = &xpc_chan_dbg_subname;
83 84
84 85
86static int xpc_kdebug_ignore;
87
88
85/* systune related variables for /proc/sys directories */ 89/* systune related variables for /proc/sys directories */
86 90
87static int xpc_hb_interval = XPC_HB_DEFAULT_INTERVAL; 91static int xpc_hb_interval = XPC_HB_DEFAULT_INTERVAL;
@@ -162,6 +166,8 @@ static ctl_table xpc_sys_dir[] = {
162}; 166};
163static struct ctl_table_header *xpc_sysctl; 167static struct ctl_table_header *xpc_sysctl;
164 168
169/* non-zero if any remote partition disengage request was timed out */
170int xpc_disengage_request_timedout;
165 171
166/* #of IRQs received */ 172/* #of IRQs received */
167static atomic_t xpc_act_IRQ_rcvd; 173static atomic_t xpc_act_IRQ_rcvd;
@@ -172,10 +178,10 @@ static DECLARE_WAIT_QUEUE_HEAD(xpc_act_IRQ_wq);
172static unsigned long xpc_hb_check_timeout; 178static unsigned long xpc_hb_check_timeout;
173 179
174/* notification that the xpc_hb_checker thread has exited */ 180/* notification that the xpc_hb_checker thread has exited */
175static DECLARE_MUTEX_LOCKED(xpc_hb_checker_exited); 181static DECLARE_COMPLETION(xpc_hb_checker_exited);
176 182
177/* notification that the xpc_discovery thread has exited */ 183/* notification that the xpc_discovery thread has exited */
178static DECLARE_MUTEX_LOCKED(xpc_discovery_exited); 184static DECLARE_COMPLETION(xpc_discovery_exited);
179 185
180 186
181static struct timer_list xpc_hb_timer; 187static struct timer_list xpc_hb_timer;
@@ -316,7 +322,7 @@ xpc_hb_checker(void *ignore)
316 322
317 323
318 /* mark this thread as having exited */ 324 /* mark this thread as having exited */
319 up(&xpc_hb_checker_exited); 325 complete(&xpc_hb_checker_exited);
320 return 0; 326 return 0;
321} 327}
322 328
@@ -336,7 +342,7 @@ xpc_initiate_discovery(void *ignore)
336 dev_dbg(xpc_part, "discovery thread is exiting\n"); 342 dev_dbg(xpc_part, "discovery thread is exiting\n");
337 343
338 /* mark this thread as having exited */ 344 /* mark this thread as having exited */
339 up(&xpc_discovery_exited); 345 complete(&xpc_discovery_exited);
340 return 0; 346 return 0;
341} 347}
342 348
@@ -569,18 +575,21 @@ xpc_activate_partition(struct xpc_partition *part)
569 575
570 spin_lock_irqsave(&part->act_lock, irq_flags); 576 spin_lock_irqsave(&part->act_lock, irq_flags);
571 577
572 pid = kernel_thread(xpc_activating, (void *) ((u64) partid), 0);
573
574 DBUG_ON(part->act_state != XPC_P_INACTIVE); 578 DBUG_ON(part->act_state != XPC_P_INACTIVE);
575 579
576 if (pid > 0) { 580 part->act_state = XPC_P_ACTIVATION_REQ;
577 part->act_state = XPC_P_ACTIVATION_REQ; 581 XPC_SET_REASON(part, xpcCloneKThread, __LINE__);
578 XPC_SET_REASON(part, xpcCloneKThread, __LINE__);
579 } else {
580 XPC_SET_REASON(part, xpcCloneKThreadFailed, __LINE__);
581 }
582 582
583 spin_unlock_irqrestore(&part->act_lock, irq_flags); 583 spin_unlock_irqrestore(&part->act_lock, irq_flags);
584
585 pid = kernel_thread(xpc_activating, (void *) ((u64) partid), 0);
586
587 if (unlikely(pid <= 0)) {
588 spin_lock_irqsave(&part->act_lock, irq_flags);
589 part->act_state = XPC_P_INACTIVE;
590 XPC_SET_REASON(part, xpcCloneKThreadFailed, __LINE__);
591 spin_unlock_irqrestore(&part->act_lock, irq_flags);
592 }
584} 593}
585 594
586 595
@@ -741,12 +750,16 @@ xpc_daemonize_kthread(void *args)
741 /* let registerer know that connection has been established */ 750 /* let registerer know that connection has been established */
742 751
743 spin_lock_irqsave(&ch->lock, irq_flags); 752 spin_lock_irqsave(&ch->lock, irq_flags);
744 if (!(ch->flags & XPC_C_CONNECTCALLOUT)) { 753 if (!(ch->flags & XPC_C_CONNECTEDCALLOUT)) {
745 ch->flags |= XPC_C_CONNECTCALLOUT; 754 ch->flags |= XPC_C_CONNECTEDCALLOUT;
746 spin_unlock_irqrestore(&ch->lock, irq_flags); 755 spin_unlock_irqrestore(&ch->lock, irq_flags);
747 756
748 xpc_connected_callout(ch); 757 xpc_connected_callout(ch);
749 758
759 spin_lock_irqsave(&ch->lock, irq_flags);
760 ch->flags |= XPC_C_CONNECTEDCALLOUT_MADE;
761 spin_unlock_irqrestore(&ch->lock, irq_flags);
762
750 /* 763 /*
751 * It is possible that while the callout was being 764 * It is possible that while the callout was being
752 * made that the remote partition sent some messages. 765 * made that the remote partition sent some messages.
@@ -768,15 +781,17 @@ xpc_daemonize_kthread(void *args)
768 781
769 if (atomic_dec_return(&ch->kthreads_assigned) == 0) { 782 if (atomic_dec_return(&ch->kthreads_assigned) == 0) {
770 spin_lock_irqsave(&ch->lock, irq_flags); 783 spin_lock_irqsave(&ch->lock, irq_flags);
771 if ((ch->flags & XPC_C_CONNECTCALLOUT) && 784 if ((ch->flags & XPC_C_CONNECTEDCALLOUT_MADE) &&
772 !(ch->flags & XPC_C_DISCONNECTCALLOUT)) { 785 !(ch->flags & XPC_C_DISCONNECTINGCALLOUT)) {
773 ch->flags |= XPC_C_DISCONNECTCALLOUT; 786 ch->flags |= XPC_C_DISCONNECTINGCALLOUT;
774 spin_unlock_irqrestore(&ch->lock, irq_flags); 787 spin_unlock_irqrestore(&ch->lock, irq_flags);
775 788
776 xpc_disconnecting_callout(ch); 789 xpc_disconnect_callout(ch, xpcDisconnecting);
777 } else { 790
778 spin_unlock_irqrestore(&ch->lock, irq_flags); 791 spin_lock_irqsave(&ch->lock, irq_flags);
792 ch->flags |= XPC_C_DISCONNECTINGCALLOUT_MADE;
779 } 793 }
794 spin_unlock_irqrestore(&ch->lock, irq_flags);
780 if (atomic_dec_return(&part->nchannels_engaged) == 0) { 795 if (atomic_dec_return(&part->nchannels_engaged) == 0) {
781 xpc_mark_partition_disengaged(part); 796 xpc_mark_partition_disengaged(part);
782 xpc_IPI_send_disengage(part); 797 xpc_IPI_send_disengage(part);
@@ -888,7 +903,7 @@ xpc_disconnect_wait(int ch_number)
888 continue; 903 continue;
889 } 904 }
890 905
891 (void) down(&ch->wdisconnect_sema); 906 wait_for_completion(&ch->wdisconnect_wait);
892 907
893 spin_lock_irqsave(&ch->lock, irq_flags); 908 spin_lock_irqsave(&ch->lock, irq_flags);
894 DBUG_ON(!(ch->flags & XPC_C_DISCONNECTED)); 909 DBUG_ON(!(ch->flags & XPC_C_DISCONNECTED));
@@ -921,9 +936,9 @@ static void
921xpc_do_exit(enum xpc_retval reason) 936xpc_do_exit(enum xpc_retval reason)
922{ 937{
923 partid_t partid; 938 partid_t partid;
924 int active_part_count; 939 int active_part_count, printed_waiting_msg = 0;
925 struct xpc_partition *part; 940 struct xpc_partition *part;
926 unsigned long printmsg_time; 941 unsigned long printmsg_time, disengage_request_timeout = 0;
927 942
928 943
929 /* a 'rmmod XPC' and a 'reboot' cannot both end up here together */ 944 /* a 'rmmod XPC' and a 'reboot' cannot both end up here together */
@@ -941,10 +956,10 @@ xpc_do_exit(enum xpc_retval reason)
941 free_irq(SGI_XPC_ACTIVATE, NULL); 956 free_irq(SGI_XPC_ACTIVATE, NULL);
942 957
943 /* wait for the discovery thread to exit */ 958 /* wait for the discovery thread to exit */
944 down(&xpc_discovery_exited); 959 wait_for_completion(&xpc_discovery_exited);
945 960
946 /* wait for the heartbeat checker thread to exit */ 961 /* wait for the heartbeat checker thread to exit */
947 down(&xpc_hb_checker_exited); 962 wait_for_completion(&xpc_hb_checker_exited);
948 963
949 964
950 /* sleep for a 1/3 of a second or so */ 965 /* sleep for a 1/3 of a second or so */
@@ -953,7 +968,8 @@ xpc_do_exit(enum xpc_retval reason)
953 968
954 /* wait for all partitions to become inactive */ 969 /* wait for all partitions to become inactive */
955 970
956 printmsg_time = jiffies; 971 printmsg_time = jiffies + (XPC_DISENGAGE_PRINTMSG_INTERVAL * HZ);
972 xpc_disengage_request_timedout = 0;
957 973
958 do { 974 do {
959 active_part_count = 0; 975 active_part_count = 0;
@@ -969,20 +985,39 @@ xpc_do_exit(enum xpc_retval reason)
969 active_part_count++; 985 active_part_count++;
970 986
971 XPC_DEACTIVATE_PARTITION(part, reason); 987 XPC_DEACTIVATE_PARTITION(part, reason);
972 }
973 988
974 if (active_part_count == 0) { 989 if (part->disengage_request_timeout >
975 break; 990 disengage_request_timeout) {
991 disengage_request_timeout =
992 part->disengage_request_timeout;
993 }
976 } 994 }
977 995
978 if (jiffies >= printmsg_time) { 996 if (xpc_partition_engaged(-1UL)) {
979 dev_info(xpc_part, "waiting for partitions to " 997 if (time_after(jiffies, printmsg_time)) {
980 "deactivate/disengage, active count=%d, remote " 998 dev_info(xpc_part, "waiting for remote "
981 "engaged=0x%lx\n", active_part_count, 999 "partitions to disengage, timeout in "
982 xpc_partition_engaged(1UL << partid)); 1000 "%ld seconds\n",
983 1001 (disengage_request_timeout - jiffies)
984 printmsg_time = jiffies + 1002 / HZ);
1003 printmsg_time = jiffies +
985 (XPC_DISENGAGE_PRINTMSG_INTERVAL * HZ); 1004 (XPC_DISENGAGE_PRINTMSG_INTERVAL * HZ);
1005 printed_waiting_msg = 1;
1006 }
1007
1008 } else if (active_part_count > 0) {
1009 if (printed_waiting_msg) {
1010 dev_info(xpc_part, "waiting for local partition"
1011 " to disengage\n");
1012 printed_waiting_msg = 0;
1013 }
1014
1015 } else {
1016 if (!xpc_disengage_request_timedout) {
1017 dev_info(xpc_part, "all partitions have "
1018 "disengaged\n");
1019 }
1020 break;
986 } 1021 }
987 1022
988 /* sleep for a 1/3 of a second or so */ 1023 /* sleep for a 1/3 of a second or so */
@@ -1000,11 +1035,13 @@ xpc_do_exit(enum xpc_retval reason)
1000 del_timer_sync(&xpc_hb_timer); 1035 del_timer_sync(&xpc_hb_timer);
1001 DBUG_ON(xpc_vars->heartbeating_to_mask != 0); 1036 DBUG_ON(xpc_vars->heartbeating_to_mask != 0);
1002 1037
1003 /* take ourselves off of the reboot_notifier_list */ 1038 if (reason == xpcUnloading) {
1004 (void) unregister_reboot_notifier(&xpc_reboot_notifier); 1039 /* take ourselves off of the reboot_notifier_list */
1040 (void) unregister_reboot_notifier(&xpc_reboot_notifier);
1005 1041
1006 /* take ourselves off of the die_notifier list */ 1042 /* take ourselves off of the die_notifier list */
1007 (void) unregister_die_notifier(&xpc_die_notifier); 1043 (void) unregister_die_notifier(&xpc_die_notifier);
1044 }
1008 1045
1009 /* close down protections for IPI operations */ 1046 /* close down protections for IPI operations */
1010 xpc_restrict_IPI_ops(); 1047 xpc_restrict_IPI_ops();
@@ -1020,7 +1057,35 @@ xpc_do_exit(enum xpc_retval reason)
1020 1057
1021 1058
1022/* 1059/*
1023 * Called when the system is about to be either restarted or halted. 1060 * This function is called when the system is being rebooted.
1061 */
1062static int
1063xpc_system_reboot(struct notifier_block *nb, unsigned long event, void *unused)
1064{
1065 enum xpc_retval reason;
1066
1067
1068 switch (event) {
1069 case SYS_RESTART:
1070 reason = xpcSystemReboot;
1071 break;
1072 case SYS_HALT:
1073 reason = xpcSystemHalt;
1074 break;
1075 case SYS_POWER_OFF:
1076 reason = xpcSystemPoweroff;
1077 break;
1078 default:
1079 reason = xpcSystemGoingDown;
1080 }
1081
1082 xpc_do_exit(reason);
1083 return NOTIFY_DONE;
1084}
1085
1086
1087/*
1088 * Notify other partitions to disengage from all references to our memory.
1024 */ 1089 */
1025static void 1090static void
1026xpc_die_disengage(void) 1091xpc_die_disengage(void)
@@ -1028,7 +1093,7 @@ xpc_die_disengage(void)
1028 struct xpc_partition *part; 1093 struct xpc_partition *part;
1029 partid_t partid; 1094 partid_t partid;
1030 unsigned long engaged; 1095 unsigned long engaged;
1031 long time, print_time, disengage_request_timeout; 1096 long time, printmsg_time, disengage_request_timeout;
1032 1097
1033 1098
1034 /* keep xpc_hb_checker thread from doing anything (just in case) */ 1099 /* keep xpc_hb_checker thread from doing anything (just in case) */
@@ -1055,57 +1120,53 @@ xpc_die_disengage(void)
1055 } 1120 }
1056 } 1121 }
1057 1122
1058 print_time = rtc_time(); 1123 time = rtc_time();
1059 disengage_request_timeout = print_time + 1124 printmsg_time = time +
1125 (XPC_DISENGAGE_PRINTMSG_INTERVAL * sn_rtc_cycles_per_second);
1126 disengage_request_timeout = time +
1060 (xpc_disengage_request_timelimit * sn_rtc_cycles_per_second); 1127 (xpc_disengage_request_timelimit * sn_rtc_cycles_per_second);
1061 1128
1062 /* wait for all other partitions to disengage from us */ 1129 /* wait for all other partitions to disengage from us */
1063 1130
1064 while ((engaged = xpc_partition_engaged(-1UL)) && 1131 while (1) {
1065 (time = rtc_time()) < disengage_request_timeout) { 1132 engaged = xpc_partition_engaged(-1UL);
1133 if (!engaged) {
1134 dev_info(xpc_part, "all partitions have disengaged\n");
1135 break;
1136 }
1066 1137
1067 if (time >= print_time) { 1138 time = rtc_time();
1139 if (time >= disengage_request_timeout) {
1140 for (partid = 1; partid < XP_MAX_PARTITIONS; partid++) {
1141 if (engaged & (1UL << partid)) {
1142 dev_info(xpc_part, "disengage from "
1143 "remote partition %d timed "
1144 "out\n", partid);
1145 }
1146 }
1147 break;
1148 }
1149
1150 if (time >= printmsg_time) {
1068 dev_info(xpc_part, "waiting for remote partitions to " 1151 dev_info(xpc_part, "waiting for remote partitions to "
1069 "disengage, engaged=0x%lx\n", engaged); 1152 "disengage, timeout in %ld seconds\n",
1070 print_time = time + (XPC_DISENGAGE_PRINTMSG_INTERVAL * 1153 (disengage_request_timeout - time) /
1154 sn_rtc_cycles_per_second);
1155 printmsg_time = time +
1156 (XPC_DISENGAGE_PRINTMSG_INTERVAL *
1071 sn_rtc_cycles_per_second); 1157 sn_rtc_cycles_per_second);
1072 } 1158 }
1073 } 1159 }
1074 dev_info(xpc_part, "finished waiting for remote partitions to "
1075 "disengage, engaged=0x%lx\n", engaged);
1076} 1160}
1077 1161
1078 1162
1079/* 1163/*
1080 * This function is called when the system is being rebooted. 1164 * This function is called when the system is being restarted or halted due
1081 */ 1165 * to some sort of system failure. If this is the case we need to notify the
1082static int 1166 * other partitions to disengage from all references to our memory.
1083xpc_system_reboot(struct notifier_block *nb, unsigned long event, void *unused) 1167 * This function can also be called when our heartbeater could be offlined
1084{ 1168 * for a time. In this case we need to notify other partitions to not worry
1085 enum xpc_retval reason; 1169 * about the lack of a heartbeat.
1086
1087
1088 switch (event) {
1089 case SYS_RESTART:
1090 reason = xpcSystemReboot;
1091 break;
1092 case SYS_HALT:
1093 reason = xpcSystemHalt;
1094 break;
1095 case SYS_POWER_OFF:
1096 reason = xpcSystemPoweroff;
1097 break;
1098 default:
1099 reason = xpcSystemGoingDown;
1100 }
1101
1102 xpc_do_exit(reason);
1103 return NOTIFY_DONE;
1104}
1105
1106
1107/*
1108 * This function is called when the system is being rebooted.
1109 */ 1170 */
1110static int 1171static int
1111xpc_system_die(struct notifier_block *nb, unsigned long event, void *unused) 1172xpc_system_die(struct notifier_block *nb, unsigned long event, void *unused)
@@ -1115,11 +1176,25 @@ xpc_system_die(struct notifier_block *nb, unsigned long event, void *unused)
1115 case DIE_MACHINE_HALT: 1176 case DIE_MACHINE_HALT:
1116 xpc_die_disengage(); 1177 xpc_die_disengage();
1117 break; 1178 break;
1179
1180 case DIE_KDEBUG_ENTER:
1181 /* Should lack of heartbeat be ignored by other partitions? */
1182 if (!xpc_kdebug_ignore) {
1183 break;
1184 }
1185 /* fall through */
1118 case DIE_MCA_MONARCH_ENTER: 1186 case DIE_MCA_MONARCH_ENTER:
1119 case DIE_INIT_MONARCH_ENTER: 1187 case DIE_INIT_MONARCH_ENTER:
1120 xpc_vars->heartbeat++; 1188 xpc_vars->heartbeat++;
1121 xpc_vars->heartbeat_offline = 1; 1189 xpc_vars->heartbeat_offline = 1;
1122 break; 1190 break;
1191
1192 case DIE_KDEBUG_LEAVE:
1193 /* Is lack of heartbeat being ignored by other partitions? */
1194 if (!xpc_kdebug_ignore) {
1195 break;
1196 }
1197 /* fall through */
1123 case DIE_MCA_MONARCH_LEAVE: 1198 case DIE_MCA_MONARCH_LEAVE:
1124 case DIE_INIT_MONARCH_LEAVE: 1199 case DIE_INIT_MONARCH_LEAVE:
1125 xpc_vars->heartbeat++; 1200 xpc_vars->heartbeat++;
@@ -1302,7 +1377,7 @@ xpc_init(void)
1302 dev_err(xpc_part, "failed while forking discovery thread\n"); 1377 dev_err(xpc_part, "failed while forking discovery thread\n");
1303 1378
1304 /* mark this new thread as a non-starter */ 1379 /* mark this new thread as a non-starter */
1305 up(&xpc_discovery_exited); 1380 complete(&xpc_discovery_exited);
1306 1381
1307 xpc_do_exit(xpcUnloading); 1382 xpc_do_exit(xpcUnloading);
1308 return -EBUSY; 1383 return -EBUSY;
@@ -1344,3 +1419,7 @@ module_param(xpc_disengage_request_timelimit, int, 0);
1344MODULE_PARM_DESC(xpc_disengage_request_timelimit, "Number of seconds to wait " 1419MODULE_PARM_DESC(xpc_disengage_request_timelimit, "Number of seconds to wait "
1345 "for disengage request to complete."); 1420 "for disengage request to complete.");
1346 1421
1422module_param(xpc_kdebug_ignore, int, 0);
1423MODULE_PARM_DESC(xpc_kdebug_ignore, "Should lack of heartbeat be ignored by "
1424 "other partitions when dropping into kdebug.");
1425
diff --git a/arch/ia64/sn/kernel/xpc_partition.c b/arch/ia64/sn/kernel/xpc_partition.c
index cdd6431853a1..88a730e6cfdb 100644
--- a/arch/ia64/sn/kernel/xpc_partition.c
+++ b/arch/ia64/sn/kernel/xpc_partition.c
@@ -3,7 +3,7 @@
3 * License. See the file "COPYING" in the main directory of this archive 3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details. 4 * for more details.
5 * 5 *
6 * Copyright (c) 2004-2005 Silicon Graphics, Inc. All Rights Reserved. 6 * Copyright (c) 2004-2006 Silicon Graphics, Inc. All Rights Reserved.
7 */ 7 */
8 8
9 9
@@ -28,7 +28,7 @@
28#include <asm/sn/sn_sal.h> 28#include <asm/sn/sn_sal.h>
29#include <asm/sn/nodepda.h> 29#include <asm/sn/nodepda.h>
30#include <asm/sn/addrs.h> 30#include <asm/sn/addrs.h>
31#include "xpc.h" 31#include <asm/sn/xpc.h>
32 32
33 33
34/* XPC is exiting flag */ 34/* XPC is exiting flag */
@@ -771,7 +771,8 @@ xpc_identify_act_IRQ_req(int nasid)
771 } 771 }
772 } 772 }
773 773
774 if (!xpc_partition_disengaged(part)) { 774 if (part->disengage_request_timeout > 0 &&
775 !xpc_partition_disengaged(part)) {
775 /* still waiting on other side to disengage from us */ 776 /* still waiting on other side to disengage from us */
776 return; 777 return;
777 } 778 }
@@ -873,6 +874,9 @@ xpc_partition_disengaged(struct xpc_partition *part)
873 * request in a timely fashion, so assume it's dead. 874 * request in a timely fashion, so assume it's dead.
874 */ 875 */
875 876
877 dev_info(xpc_part, "disengage from remote partition %d "
878 "timed out\n", partid);
879 xpc_disengage_request_timedout = 1;
876 xpc_clear_partition_engaged(1UL << partid); 880 xpc_clear_partition_engaged(1UL << partid);
877 disengaged = 1; 881 disengaged = 1;
878 } 882 }
diff --git a/arch/ia64/sn/pci/Makefile b/arch/ia64/sn/pci/Makefile
index 321576b1b425..c6946784a6a8 100644
--- a/arch/ia64/sn/pci/Makefile
+++ b/arch/ia64/sn/pci/Makefile
@@ -7,4 +7,6 @@
7# 7#
8# Makefile for the sn pci general routines. 8# Makefile for the sn pci general routines.
9 9
10CPPFLAGS += -I$(srctree)/arch/ia64/sn/include
11
10obj-y := pci_dma.o tioca_provider.o tioce_provider.o pcibr/ 12obj-y := pci_dma.o tioca_provider.o tioce_provider.o pcibr/
diff --git a/arch/ia64/sn/pci/pci_dma.c b/arch/ia64/sn/pci/pci_dma.c
index 9bf9f23b9a1f..b4b84c269210 100644
--- a/arch/ia64/sn/pci/pci_dma.c
+++ b/arch/ia64/sn/pci/pci_dma.c
@@ -90,14 +90,14 @@ void *sn_dma_alloc_coherent(struct device *dev, size_t size,
90 */ 90 */
91 node = pcibus_to_node(pdev->bus); 91 node = pcibus_to_node(pdev->bus);
92 if (likely(node >=0)) { 92 if (likely(node >=0)) {
93 struct page *p = alloc_pages_node(node, GFP_ATOMIC, get_order(size)); 93 struct page *p = alloc_pages_node(node, flags, get_order(size));
94 94
95 if (likely(p)) 95 if (likely(p))
96 cpuaddr = page_address(p); 96 cpuaddr = page_address(p);
97 else 97 else
98 return NULL; 98 return NULL;
99 } else 99 } else
100 cpuaddr = (void *)__get_free_pages(GFP_ATOMIC, get_order(size)); 100 cpuaddr = (void *)__get_free_pages(flags, get_order(size));
101 101
102 if (unlikely(!cpuaddr)) 102 if (unlikely(!cpuaddr))
103 return NULL; 103 return NULL;
@@ -335,10 +335,10 @@ int sn_pci_legacy_read(struct pci_bus *bus, u16 port, u32 *val, u8 size)
335 */ 335 */
336 336
337 SAL_CALL(isrv, SN_SAL_IOIF_PCI_SAFE, 337 SAL_CALL(isrv, SN_SAL_IOIF_PCI_SAFE,
338 pci_domain_nr(bus), bus->number, 338 pci_domain_nr(bus), bus->number,
339 0, /* io */ 339 0, /* io */
340 0, /* read */ 340 0, /* read */
341 port, size, __pa(val)); 341 port, size, __pa(val));
342 342
343 if (isrv.status == 0) 343 if (isrv.status == 0)
344 return size; 344 return size;
@@ -381,10 +381,10 @@ int sn_pci_legacy_write(struct pci_bus *bus, u16 port, u32 val, u8 size)
381 */ 381 */
382 382
383 SAL_CALL(isrv, SN_SAL_IOIF_PCI_SAFE, 383 SAL_CALL(isrv, SN_SAL_IOIF_PCI_SAFE,
384 pci_domain_nr(bus), bus->number, 384 pci_domain_nr(bus), bus->number,
385 0, /* io */ 385 0, /* io */
386 1, /* write */ 386 1, /* write */
387 port, size, __pa(&val)); 387 port, size, __pa(&val));
388 388
389 if (isrv.status == 0) 389 if (isrv.status == 0)
390 return size; 390 return size;
diff --git a/arch/ia64/sn/pci/pcibr/Makefile b/arch/ia64/sn/pci/pcibr/Makefile
index 1850c4a94c41..3b403ea456f9 100644
--- a/arch/ia64/sn/pci/pcibr/Makefile
+++ b/arch/ia64/sn/pci/pcibr/Makefile
@@ -7,5 +7,7 @@
7# 7#
8# Makefile for the sn2 io routines. 8# Makefile for the sn2 io routines.
9 9
10CPPFLAGS += -I$(srctree)/arch/ia64/sn/include
11
10obj-y += pcibr_dma.o pcibr_reg.o \ 12obj-y += pcibr_dma.o pcibr_reg.o \
11 pcibr_ate.o pcibr_provider.o 13 pcibr_ate.o pcibr_provider.o
diff --git a/arch/ia64/sn/pci/pcibr/pcibr_ate.c b/arch/ia64/sn/pci/pcibr/pcibr_ate.c
index d1647b863e61..1f0253bfe0a0 100644
--- a/arch/ia64/sn/pci/pcibr/pcibr_ate.c
+++ b/arch/ia64/sn/pci/pcibr/pcibr_ate.c
@@ -3,7 +3,7 @@
3 * License. See the file "COPYING" in the main directory of this archive 3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details. 4 * for more details.
5 * 5 *
6 * Copyright (C) 2001-2004 Silicon Graphics, Inc. All rights reserved. 6 * Copyright (C) 2001-2006 Silicon Graphics, Inc. All rights reserved.
7 */ 7 */
8 8
9#include <linux/types.h> 9#include <linux/types.h>
@@ -12,22 +12,20 @@
12#include <asm/sn/pcibus_provider_defs.h> 12#include <asm/sn/pcibus_provider_defs.h>
13#include <asm/sn/pcidev.h> 13#include <asm/sn/pcidev.h>
14 14
15int pcibr_invalidate_ate = 0; /* by default don't invalidate ATE on free */ 15int pcibr_invalidate_ate; /* by default don't invalidate ATE on free */
16 16
17/* 17/*
18 * mark_ate: Mark the ate as either free or inuse. 18 * mark_ate: Mark the ate as either free or inuse.
19 */ 19 */
20static void mark_ate(struct ate_resource *ate_resource, int start, int number, 20static void mark_ate(struct ate_resource *ate_resource, int start, int number,
21 uint64_t value) 21 u64 value)
22{ 22{
23 23 u64 *ate = ate_resource->ate;
24 uint64_t *ate = ate_resource->ate;
25 int index; 24 int index;
26 int length = 0; 25 int length = 0;
27 26
28 for (index = start; length < number; index++, length++) 27 for (index = start; length < number; index++, length++)
29 ate[index] = value; 28 ate[index] = value;
30
31} 29}
32 30
33/* 31/*
@@ -37,8 +35,7 @@ static void mark_ate(struct ate_resource *ate_resource, int start, int number,
37static int find_free_ate(struct ate_resource *ate_resource, int start, 35static int find_free_ate(struct ate_resource *ate_resource, int start,
38 int count) 36 int count)
39{ 37{
40 38 u64 *ate = ate_resource->ate;
41 uint64_t *ate = ate_resource->ate;
42 int index; 39 int index;
43 int start_free; 40 int start_free;
44 41
@@ -70,12 +67,10 @@ static int find_free_ate(struct ate_resource *ate_resource, int start,
70static inline void free_ate_resource(struct ate_resource *ate_resource, 67static inline void free_ate_resource(struct ate_resource *ate_resource,
71 int start) 68 int start)
72{ 69{
73
74 mark_ate(ate_resource, start, ate_resource->ate[start], 0); 70 mark_ate(ate_resource, start, ate_resource->ate[start], 0);
75 if ((ate_resource->lowest_free_index > start) || 71 if ((ate_resource->lowest_free_index > start) ||
76 (ate_resource->lowest_free_index < 0)) 72 (ate_resource->lowest_free_index < 0))
77 ate_resource->lowest_free_index = start; 73 ate_resource->lowest_free_index = start;
78
79} 74}
80 75
81/* 76/*
@@ -84,7 +79,6 @@ static inline void free_ate_resource(struct ate_resource *ate_resource,
84static inline int alloc_ate_resource(struct ate_resource *ate_resource, 79static inline int alloc_ate_resource(struct ate_resource *ate_resource,
85 int ate_needed) 80 int ate_needed)
86{ 81{
87
88 int start_index; 82 int start_index;
89 83
90 /* 84 /*
@@ -118,19 +112,12 @@ static inline int alloc_ate_resource(struct ate_resource *ate_resource,
118 */ 112 */
119int pcibr_ate_alloc(struct pcibus_info *pcibus_info, int count) 113int pcibr_ate_alloc(struct pcibus_info *pcibus_info, int count)
120{ 114{
121 int status = 0; 115 int status;
122 uint64_t flag; 116 unsigned long flags;
123 117
124 flag = pcibr_lock(pcibus_info); 118 spin_lock_irqsave(&pcibus_info->pbi_lock, flags);
125 status = alloc_ate_resource(&pcibus_info->pbi_int_ate_resource, count); 119 status = alloc_ate_resource(&pcibus_info->pbi_int_ate_resource, count);
126 120 spin_unlock_irqrestore(&pcibus_info->pbi_lock, flags);
127 if (status < 0) {
128 /* Failed to allocate */
129 pcibr_unlock(pcibus_info, flag);
130 return -1;
131 }
132
133 pcibr_unlock(pcibus_info, flag);
134 121
135 return status; 122 return status;
136} 123}
@@ -139,7 +126,7 @@ int pcibr_ate_alloc(struct pcibus_info *pcibus_info, int count)
139 * Setup an Address Translation Entry as specified. Use either the Bridge 126 * Setup an Address Translation Entry as specified. Use either the Bridge
140 * internal maps or the external map RAM, as appropriate. 127 * internal maps or the external map RAM, as appropriate.
141 */ 128 */
142static inline uint64_t *pcibr_ate_addr(struct pcibus_info *pcibus_info, 129static inline u64 *pcibr_ate_addr(struct pcibus_info *pcibus_info,
143 int ate_index) 130 int ate_index)
144{ 131{
145 if (ate_index < pcibus_info->pbi_int_ate_size) { 132 if (ate_index < pcibus_info->pbi_int_ate_size) {
@@ -153,7 +140,7 @@ static inline uint64_t *pcibr_ate_addr(struct pcibus_info *pcibus_info,
153 */ 140 */
154void inline 141void inline
155ate_write(struct pcibus_info *pcibus_info, int ate_index, int count, 142ate_write(struct pcibus_info *pcibus_info, int ate_index, int count,
156 volatile uint64_t ate) 143 volatile u64 ate)
157{ 144{
158 while (count-- > 0) { 145 while (count-- > 0) {
159 if (ate_index < pcibus_info->pbi_int_ate_size) { 146 if (ate_index < pcibus_info->pbi_int_ate_size) {
@@ -171,9 +158,9 @@ ate_write(struct pcibus_info *pcibus_info, int ate_index, int count,
171void pcibr_ate_free(struct pcibus_info *pcibus_info, int index) 158void pcibr_ate_free(struct pcibus_info *pcibus_info, int index)
172{ 159{
173 160
174 volatile uint64_t ate; 161 volatile u64 ate;
175 int count; 162 int count;
176 uint64_t flags; 163 u64 flags;
177 164
178 if (pcibr_invalidate_ate) { 165 if (pcibr_invalidate_ate) {
179 /* For debugging purposes, clear the valid bit in the ATE */ 166 /* For debugging purposes, clear the valid bit in the ATE */
@@ -182,7 +169,7 @@ void pcibr_ate_free(struct pcibus_info *pcibus_info, int index)
182 ate_write(pcibus_info, index, count, (ate & ~PCI32_ATE_V)); 169 ate_write(pcibus_info, index, count, (ate & ~PCI32_ATE_V));
183 } 170 }
184 171
185 flags = pcibr_lock(pcibus_info); 172 spin_lock_irqsave(&pcibus_info->pbi_lock, flags);
186 free_ate_resource(&pcibus_info->pbi_int_ate_resource, index); 173 free_ate_resource(&pcibus_info->pbi_int_ate_resource, index);
187 pcibr_unlock(pcibus_info, flags); 174 spin_unlock_irqrestore(&pcibus_info->pbi_lock, flags);
188} 175}
diff --git a/arch/ia64/sn/pci/pcibr/pcibr_dma.c b/arch/ia64/sn/pci/pcibr/pcibr_dma.c
index 34093476e965..9f86bb6519aa 100644
--- a/arch/ia64/sn/pci/pcibr/pcibr_dma.c
+++ b/arch/ia64/sn/pci/pcibr/pcibr_dma.c
@@ -41,21 +41,21 @@ extern int sn_ioif_inited;
41 41
42static dma_addr_t 42static dma_addr_t
43pcibr_dmamap_ate32(struct pcidev_info *info, 43pcibr_dmamap_ate32(struct pcidev_info *info,
44 uint64_t paddr, size_t req_size, uint64_t flags) 44 u64 paddr, size_t req_size, u64 flags)
45{ 45{
46 46
47 struct pcidev_info *pcidev_info = info->pdi_host_pcidev_info; 47 struct pcidev_info *pcidev_info = info->pdi_host_pcidev_info;
48 struct pcibus_info *pcibus_info = (struct pcibus_info *)pcidev_info-> 48 struct pcibus_info *pcibus_info = (struct pcibus_info *)pcidev_info->
49 pdi_pcibus_info; 49 pdi_pcibus_info;
50 uint8_t internal_device = (PCI_SLOT(pcidev_info->pdi_host_pcidev_info-> 50 u8 internal_device = (PCI_SLOT(pcidev_info->pdi_host_pcidev_info->
51 pdi_linux_pcidev->devfn)) - 1; 51 pdi_linux_pcidev->devfn)) - 1;
52 int ate_count; 52 int ate_count;
53 int ate_index; 53 int ate_index;
54 uint64_t ate_flags = flags | PCI32_ATE_V; 54 u64 ate_flags = flags | PCI32_ATE_V;
55 uint64_t ate; 55 u64 ate;
56 uint64_t pci_addr; 56 u64 pci_addr;
57 uint64_t xio_addr; 57 u64 xio_addr;
58 uint64_t offset; 58 u64 offset;
59 59
60 /* PIC in PCI-X mode does not supports 32bit PageMap mode */ 60 /* PIC in PCI-X mode does not supports 32bit PageMap mode */
61 if (IS_PIC_SOFT(pcibus_info) && IS_PCIX(pcibus_info)) { 61 if (IS_PIC_SOFT(pcibus_info) && IS_PCIX(pcibus_info)) {
@@ -109,12 +109,12 @@ pcibr_dmamap_ate32(struct pcidev_info *info,
109} 109}
110 110
111static dma_addr_t 111static dma_addr_t
112pcibr_dmatrans_direct64(struct pcidev_info * info, uint64_t paddr, 112pcibr_dmatrans_direct64(struct pcidev_info * info, u64 paddr,
113 uint64_t dma_attributes) 113 u64 dma_attributes)
114{ 114{
115 struct pcibus_info *pcibus_info = (struct pcibus_info *) 115 struct pcibus_info *pcibus_info = (struct pcibus_info *)
116 ((info->pdi_host_pcidev_info)->pdi_pcibus_info); 116 ((info->pdi_host_pcidev_info)->pdi_pcibus_info);
117 uint64_t pci_addr; 117 u64 pci_addr;
118 118
119 /* Translate to Crosstalk View of Physical Address */ 119 /* Translate to Crosstalk View of Physical Address */
120 pci_addr = (IS_PIC_SOFT(pcibus_info) ? PHYS_TO_DMA(paddr) : 120 pci_addr = (IS_PIC_SOFT(pcibus_info) ? PHYS_TO_DMA(paddr) :
@@ -127,7 +127,7 @@ pcibr_dmatrans_direct64(struct pcidev_info * info, uint64_t paddr,
127 /* Handle Bridge Chipset differences */ 127 /* Handle Bridge Chipset differences */
128 if (IS_PIC_SOFT(pcibus_info)) { 128 if (IS_PIC_SOFT(pcibus_info)) {
129 pci_addr |= 129 pci_addr |=
130 ((uint64_t) pcibus_info-> 130 ((u64) pcibus_info->
131 pbi_hub_xid << PIC_PCI64_ATTR_TARG_SHFT); 131 pbi_hub_xid << PIC_PCI64_ATTR_TARG_SHFT);
132 } else 132 } else
133 pci_addr |= TIOCP_PCI64_CMDTYPE_MEM; 133 pci_addr |= TIOCP_PCI64_CMDTYPE_MEM;
@@ -137,22 +137,20 @@ pcibr_dmatrans_direct64(struct pcidev_info * info, uint64_t paddr,
137 pci_addr |= PCI64_ATTR_VIRTUAL; 137 pci_addr |= PCI64_ATTR_VIRTUAL;
138 138
139 return pci_addr; 139 return pci_addr;
140
141} 140}
142 141
143static dma_addr_t 142static dma_addr_t
144pcibr_dmatrans_direct32(struct pcidev_info * info, 143pcibr_dmatrans_direct32(struct pcidev_info * info,
145 uint64_t paddr, size_t req_size, uint64_t flags) 144 u64 paddr, size_t req_size, u64 flags)
146{ 145{
147
148 struct pcidev_info *pcidev_info = info->pdi_host_pcidev_info; 146 struct pcidev_info *pcidev_info = info->pdi_host_pcidev_info;
149 struct pcibus_info *pcibus_info = (struct pcibus_info *)pcidev_info-> 147 struct pcibus_info *pcibus_info = (struct pcibus_info *)pcidev_info->
150 pdi_pcibus_info; 148 pdi_pcibus_info;
151 uint64_t xio_addr; 149 u64 xio_addr;
152 150
153 uint64_t xio_base; 151 u64 xio_base;
154 uint64_t offset; 152 u64 offset;
155 uint64_t endoff; 153 u64 endoff;
156 154
157 if (IS_PCIX(pcibus_info)) { 155 if (IS_PCIX(pcibus_info)) {
158 return 0; 156 return 0;
@@ -171,7 +169,6 @@ pcibr_dmatrans_direct32(struct pcidev_info * info,
171 } 169 }
172 170
173 return PCI32_DIRECT_BASE | offset; 171 return PCI32_DIRECT_BASE | offset;
174
175} 172}
176 173
177/* 174/*
@@ -209,16 +206,17 @@ pcibr_dma_unmap(struct pci_dev *hwdev, dma_addr_t dma_handle, int direction)
209 * unlike the PIC Device(x) Write Request Buffer Flush register. 206 * unlike the PIC Device(x) Write Request Buffer Flush register.
210 */ 207 */
211 208
212void sn_dma_flush(uint64_t addr) 209void sn_dma_flush(u64 addr)
213{ 210{
214 nasid_t nasid; 211 nasid_t nasid;
215 int is_tio; 212 int is_tio;
216 int wid_num; 213 int wid_num;
217 int i, j; 214 int i, j;
218 uint64_t flags; 215 u64 flags;
219 uint64_t itte; 216 u64 itte;
220 struct hubdev_info *hubinfo; 217 struct hubdev_info *hubinfo;
221 volatile struct sn_flush_device_list *p; 218 struct sn_flush_device_kernel *p;
219 struct sn_flush_device_common *common;
222 struct sn_flush_nasid_entry *flush_nasid_list; 220 struct sn_flush_nasid_entry *flush_nasid_list;
223 221
224 if (!sn_ioif_inited) 222 if (!sn_ioif_inited)
@@ -268,17 +266,17 @@ void sn_dma_flush(uint64_t addr)
268 p = &flush_nasid_list->widget_p[wid_num][0]; 266 p = &flush_nasid_list->widget_p[wid_num][0];
269 267
270 /* find a matching BAR */ 268 /* find a matching BAR */
271 for (i = 0; i < DEV_PER_WIDGET; i++) { 269 for (i = 0; i < DEV_PER_WIDGET; i++,p++) {
270 common = p->common;
272 for (j = 0; j < PCI_ROM_RESOURCE; j++) { 271 for (j = 0; j < PCI_ROM_RESOURCE; j++) {
273 if (p->sfdl_bar_list[j].start == 0) 272 if (common->sfdl_bar_list[j].start == 0)
274 break; 273 break;
275 if (addr >= p->sfdl_bar_list[j].start 274 if (addr >= common->sfdl_bar_list[j].start
276 && addr <= p->sfdl_bar_list[j].end) 275 && addr <= common->sfdl_bar_list[j].end)
277 break; 276 break;
278 } 277 }
279 if (j < PCI_ROM_RESOURCE && p->sfdl_bar_list[j].start != 0) 278 if (j < PCI_ROM_RESOURCE && common->sfdl_bar_list[j].start != 0)
280 break; 279 break;
281 p++;
282 } 280 }
283 281
284 /* if no matching BAR, return without doing anything. */ 282 /* if no matching BAR, return without doing anything. */
@@ -297,31 +295,29 @@ void sn_dma_flush(uint64_t addr)
297 * If CE ever needs the sn_dma_flush mechanism, we will have 295 * If CE ever needs the sn_dma_flush mechanism, we will have
298 * to account for that here and in tioce_bus_fixup(). 296 * to account for that here and in tioce_bus_fixup().
299 */ 297 */
300 uint32_t tio_id = HUB_L(TIO_IOSPACE_ADDR(nasid, TIO_NODE_ID)); 298 u32 tio_id = HUB_L(TIO_IOSPACE_ADDR(nasid, TIO_NODE_ID));
301 uint32_t revnum = XWIDGET_PART_REV_NUM(tio_id); 299 u32 revnum = XWIDGET_PART_REV_NUM(tio_id);
302 300
303 /* TIOCP BRINGUP WAR (PV907516): Don't write buffer flush reg */ 301 /* TIOCP BRINGUP WAR (PV907516): Don't write buffer flush reg */
304 if ((1 << XWIDGET_PART_REV_NUM_REV(revnum)) & PV907516) { 302 if ((1 << XWIDGET_PART_REV_NUM_REV(revnum)) & PV907516) {
305 return; 303 return;
306 } else { 304 } else {
307 pcireg_wrb_flush_get(p->sfdl_pcibus_info, 305 pcireg_wrb_flush_get(common->sfdl_pcibus_info,
308 (p->sfdl_slot - 1)); 306 (common->sfdl_slot - 1));
309 } 307 }
310 } else { 308 } else {
311 spin_lock_irqsave(&((struct sn_flush_device_list *)p)-> 309 spin_lock_irqsave(&p->sfdl_flush_lock, flags);
312 sfdl_flush_lock, flags); 310 *common->sfdl_flush_addr = 0;
313
314 *p->sfdl_flush_addr = 0;
315 311
316 /* force an interrupt. */ 312 /* force an interrupt. */
317 *(volatile uint32_t *)(p->sfdl_force_int_addr) = 1; 313 *(volatile u32 *)(common->sfdl_force_int_addr) = 1;
318 314
319 /* wait for the interrupt to come back. */ 315 /* wait for the interrupt to come back. */
320 while (*(p->sfdl_flush_addr) != 0x10f) 316 while (*(common->sfdl_flush_addr) != 0x10f)
321 cpu_relax(); 317 cpu_relax();
322 318
323 /* okay, everything is synched up. */ 319 /* okay, everything is synched up. */
324 spin_unlock_irqrestore((spinlock_t *)&p->sfdl_flush_lock, flags); 320 spin_unlock_irqrestore(&p->sfdl_flush_lock, flags);
325 } 321 }
326 return; 322 return;
327} 323}
diff --git a/arch/ia64/sn/pci/pcibr/pcibr_provider.c b/arch/ia64/sn/pci/pcibr/pcibr_provider.c
index 1f500c81002c..98f716bd92f0 100644
--- a/arch/ia64/sn/pci/pcibr/pcibr_provider.c
+++ b/arch/ia64/sn/pci/pcibr/pcibr_provider.c
@@ -23,14 +23,16 @@ int
23sal_pcibr_slot_enable(struct pcibus_info *soft, int device, void *resp) 23sal_pcibr_slot_enable(struct pcibus_info *soft, int device, void *resp)
24{ 24{
25 struct ia64_sal_retval ret_stuff; 25 struct ia64_sal_retval ret_stuff;
26 uint64_t busnum; 26 u64 busnum;
27 u64 segment;
27 28
28 ret_stuff.status = 0; 29 ret_stuff.status = 0;
29 ret_stuff.v0 = 0; 30 ret_stuff.v0 = 0;
30 31
32 segment = soft->pbi_buscommon.bs_persist_segment;
31 busnum = soft->pbi_buscommon.bs_persist_busnum; 33 busnum = soft->pbi_buscommon.bs_persist_busnum;
32 SAL_CALL_NOLOCK(ret_stuff, (u64) SN_SAL_IOIF_SLOT_ENABLE, (u64) busnum, 34 SAL_CALL_NOLOCK(ret_stuff, (u64) SN_SAL_IOIF_SLOT_ENABLE, segment,
33 (u64) device, (u64) resp, 0, 0, 0, 0); 35 busnum, (u64) device, (u64) resp, 0, 0, 0);
34 36
35 return (int)ret_stuff.v0; 37 return (int)ret_stuff.v0;
36} 38}
@@ -40,15 +42,17 @@ sal_pcibr_slot_disable(struct pcibus_info *soft, int device, int action,
40 void *resp) 42 void *resp)
41{ 43{
42 struct ia64_sal_retval ret_stuff; 44 struct ia64_sal_retval ret_stuff;
43 uint64_t busnum; 45 u64 busnum;
46 u64 segment;
44 47
45 ret_stuff.status = 0; 48 ret_stuff.status = 0;
46 ret_stuff.v0 = 0; 49 ret_stuff.v0 = 0;
47 50
51 segment = soft->pbi_buscommon.bs_persist_segment;
48 busnum = soft->pbi_buscommon.bs_persist_busnum; 52 busnum = soft->pbi_buscommon.bs_persist_busnum;
49 SAL_CALL_NOLOCK(ret_stuff, (u64) SN_SAL_IOIF_SLOT_DISABLE, 53 SAL_CALL_NOLOCK(ret_stuff, (u64) SN_SAL_IOIF_SLOT_DISABLE,
50 (u64) busnum, (u64) device, (u64) action, 54 segment, busnum, (u64) device, (u64) action,
51 (u64) resp, 0, 0, 0); 55 (u64) resp, 0, 0);
52 56
53 return (int)ret_stuff.v0; 57 return (int)ret_stuff.v0;
54} 58}
@@ -56,7 +60,7 @@ sal_pcibr_slot_disable(struct pcibus_info *soft, int device, int action,
56static int sal_pcibr_error_interrupt(struct pcibus_info *soft) 60static int sal_pcibr_error_interrupt(struct pcibus_info *soft)
57{ 61{
58 struct ia64_sal_retval ret_stuff; 62 struct ia64_sal_retval ret_stuff;
59 uint64_t busnum; 63 u64 busnum;
60 int segment; 64 int segment;
61 ret_stuff.status = 0; 65 ret_stuff.status = 0;
62 ret_stuff.v0 = 0; 66 ret_stuff.v0 = 0;
@@ -92,7 +96,8 @@ pcibr_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont
92 cnodeid_t near_cnode; 96 cnodeid_t near_cnode;
93 struct hubdev_info *hubdev_info; 97 struct hubdev_info *hubdev_info;
94 struct pcibus_info *soft; 98 struct pcibus_info *soft;
95 struct sn_flush_device_list *sn_flush_device_list; 99 struct sn_flush_device_kernel *sn_flush_device_kernel;
100 struct sn_flush_device_common *common;
96 101
97 if (! IS_PCI_BRIDGE_ASIC(prom_bussoft->bs_asic_type)) { 102 if (! IS_PCI_BRIDGE_ASIC(prom_bussoft->bs_asic_type)) {
98 return NULL; 103 return NULL;
@@ -137,20 +142,19 @@ pcibr_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont
137 hubdev_info = (struct hubdev_info *)(NODEPDA(cnode)->pdinfo); 142 hubdev_info = (struct hubdev_info *)(NODEPDA(cnode)->pdinfo);
138 143
139 if (hubdev_info->hdi_flush_nasid_list.widget_p) { 144 if (hubdev_info->hdi_flush_nasid_list.widget_p) {
140 sn_flush_device_list = hubdev_info->hdi_flush_nasid_list. 145 sn_flush_device_kernel = hubdev_info->hdi_flush_nasid_list.
141 widget_p[(int)soft->pbi_buscommon.bs_xid]; 146 widget_p[(int)soft->pbi_buscommon.bs_xid];
142 if (sn_flush_device_list) { 147 if (sn_flush_device_kernel) {
143 for (j = 0; j < DEV_PER_WIDGET; 148 for (j = 0; j < DEV_PER_WIDGET;
144 j++, sn_flush_device_list++) { 149 j++, sn_flush_device_kernel++) {
145 if (sn_flush_device_list->sfdl_slot == -1) 150 common = sn_flush_device_kernel->common;
151 if (common->sfdl_slot == -1)
146 continue; 152 continue;
147 if ((sn_flush_device_list-> 153 if ((common->sfdl_persistent_segment ==
148 sfdl_persistent_segment ==
149 soft->pbi_buscommon.bs_persist_segment) && 154 soft->pbi_buscommon.bs_persist_segment) &&
150 (sn_flush_device_list-> 155 (common->sfdl_persistent_busnum ==
151 sfdl_persistent_busnum ==
152 soft->pbi_buscommon.bs_persist_busnum)) 156 soft->pbi_buscommon.bs_persist_busnum))
153 sn_flush_device_list->sfdl_pcibus_info = 157 common->sfdl_pcibus_info =
154 soft; 158 soft;
155 } 159 }
156 } 160 }
@@ -159,9 +163,12 @@ pcibr_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont
159 /* Setup the PMU ATE map */ 163 /* Setup the PMU ATE map */
160 soft->pbi_int_ate_resource.lowest_free_index = 0; 164 soft->pbi_int_ate_resource.lowest_free_index = 0;
161 soft->pbi_int_ate_resource.ate = 165 soft->pbi_int_ate_resource.ate =
162 kmalloc(soft->pbi_int_ate_size * sizeof(uint64_t), GFP_KERNEL); 166 kzalloc(soft->pbi_int_ate_size * sizeof(u64), GFP_KERNEL);
163 memset(soft->pbi_int_ate_resource.ate, 0, 167
164 (soft->pbi_int_ate_size * sizeof(uint64_t))); 168 if (!soft->pbi_int_ate_resource.ate) {
169 kfree(soft);
170 return NULL;
171 }
165 172
166 if (prom_bussoft->bs_asic_type == PCIIO_ASIC_TYPE_TIOCP) { 173 if (prom_bussoft->bs_asic_type == PCIIO_ASIC_TYPE_TIOCP) {
167 /* TIO PCI Bridge: find nearest node with CPUs */ 174 /* TIO PCI Bridge: find nearest node with CPUs */
@@ -203,7 +210,7 @@ void pcibr_target_interrupt(struct sn_irq_info *sn_irq_info)
203 struct pcidev_info *pcidev_info; 210 struct pcidev_info *pcidev_info;
204 struct pcibus_info *pcibus_info; 211 struct pcibus_info *pcibus_info;
205 int bit = sn_irq_info->irq_int_bit; 212 int bit = sn_irq_info->irq_int_bit;
206 uint64_t xtalk_addr = sn_irq_info->irq_xtalkaddr; 213 u64 xtalk_addr = sn_irq_info->irq_xtalkaddr;
207 214
208 pcidev_info = (struct pcidev_info *)sn_irq_info->irq_pciioinfo; 215 pcidev_info = (struct pcidev_info *)sn_irq_info->irq_pciioinfo;
209 if (pcidev_info) { 216 if (pcidev_info) {
diff --git a/arch/ia64/sn/pci/pcibr/pcibr_reg.c b/arch/ia64/sn/pci/pcibr/pcibr_reg.c
index 79fdb91d7259..8b8bbd51d433 100644
--- a/arch/ia64/sn/pci/pcibr/pcibr_reg.c
+++ b/arch/ia64/sn/pci/pcibr/pcibr_reg.c
@@ -23,7 +23,7 @@ union br_ptr {
23/* 23/*
24 * Control Register Access -- Read/Write 0000_0020 24 * Control Register Access -- Read/Write 0000_0020
25 */ 25 */
26void pcireg_control_bit_clr(struct pcibus_info *pcibus_info, uint64_t bits) 26void pcireg_control_bit_clr(struct pcibus_info *pcibus_info, u64 bits)
27{ 27{
28 union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base; 28 union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base;
29 29
@@ -43,7 +43,7 @@ void pcireg_control_bit_clr(struct pcibus_info *pcibus_info, uint64_t bits)
43 } 43 }
44} 44}
45 45
46void pcireg_control_bit_set(struct pcibus_info *pcibus_info, uint64_t bits) 46void pcireg_control_bit_set(struct pcibus_info *pcibus_info, u64 bits)
47{ 47{
48 union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base; 48 union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base;
49 49
@@ -66,10 +66,10 @@ void pcireg_control_bit_set(struct pcibus_info *pcibus_info, uint64_t bits)
66/* 66/*
67 * PCI/PCIX Target Flush Register Access -- Read Only 0000_0050 67 * PCI/PCIX Target Flush Register Access -- Read Only 0000_0050
68 */ 68 */
69uint64_t pcireg_tflush_get(struct pcibus_info *pcibus_info) 69u64 pcireg_tflush_get(struct pcibus_info *pcibus_info)
70{ 70{
71 union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base; 71 union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base;
72 uint64_t ret = 0; 72 u64 ret = 0;
73 73
74 if (pcibus_info) { 74 if (pcibus_info) {
75 switch (pcibus_info->pbi_bridge_type) { 75 switch (pcibus_info->pbi_bridge_type) {
@@ -96,10 +96,10 @@ uint64_t pcireg_tflush_get(struct pcibus_info *pcibus_info)
96/* 96/*
97 * Interrupt Status Register Access -- Read Only 0000_0100 97 * Interrupt Status Register Access -- Read Only 0000_0100
98 */ 98 */
99uint64_t pcireg_intr_status_get(struct pcibus_info * pcibus_info) 99u64 pcireg_intr_status_get(struct pcibus_info * pcibus_info)
100{ 100{
101 union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base; 101 union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base;
102 uint64_t ret = 0; 102 u64 ret = 0;
103 103
104 if (pcibus_info) { 104 if (pcibus_info) {
105 switch (pcibus_info->pbi_bridge_type) { 105 switch (pcibus_info->pbi_bridge_type) {
@@ -121,7 +121,7 @@ uint64_t pcireg_intr_status_get(struct pcibus_info * pcibus_info)
121/* 121/*
122 * Interrupt Enable Register Access -- Read/Write 0000_0108 122 * Interrupt Enable Register Access -- Read/Write 0000_0108
123 */ 123 */
124void pcireg_intr_enable_bit_clr(struct pcibus_info *pcibus_info, uint64_t bits) 124void pcireg_intr_enable_bit_clr(struct pcibus_info *pcibus_info, u64 bits)
125{ 125{
126 union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base; 126 union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base;
127 127
@@ -141,7 +141,7 @@ void pcireg_intr_enable_bit_clr(struct pcibus_info *pcibus_info, uint64_t bits)
141 } 141 }
142} 142}
143 143
144void pcireg_intr_enable_bit_set(struct pcibus_info *pcibus_info, uint64_t bits) 144void pcireg_intr_enable_bit_set(struct pcibus_info *pcibus_info, u64 bits)
145{ 145{
146 union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base; 146 union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base;
147 147
@@ -165,7 +165,7 @@ void pcireg_intr_enable_bit_set(struct pcibus_info *pcibus_info, uint64_t bits)
165 * Intr Host Address Register (int_addr) -- Read/Write 0000_0130 - 0000_0168 165 * Intr Host Address Register (int_addr) -- Read/Write 0000_0130 - 0000_0168
166 */ 166 */
167void pcireg_intr_addr_addr_set(struct pcibus_info *pcibus_info, int int_n, 167void pcireg_intr_addr_addr_set(struct pcibus_info *pcibus_info, int int_n,
168 uint64_t addr) 168 u64 addr)
169{ 169{
170 union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base; 170 union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base;
171 171
@@ -217,10 +217,10 @@ void pcireg_force_intr_set(struct pcibus_info *pcibus_info, int int_n)
217/* 217/*
218 * Device(x) Write Buffer Flush Reg Access -- Read Only 0000_0240 - 0000_0258 218 * Device(x) Write Buffer Flush Reg Access -- Read Only 0000_0240 - 0000_0258
219 */ 219 */
220uint64_t pcireg_wrb_flush_get(struct pcibus_info *pcibus_info, int device) 220u64 pcireg_wrb_flush_get(struct pcibus_info *pcibus_info, int device)
221{ 221{
222 union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base; 222 union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base;
223 uint64_t ret = 0; 223 u64 ret = 0;
224 224
225 if (pcibus_info) { 225 if (pcibus_info) {
226 switch (pcibus_info->pbi_bridge_type) { 226 switch (pcibus_info->pbi_bridge_type) {
@@ -242,7 +242,7 @@ uint64_t pcireg_wrb_flush_get(struct pcibus_info *pcibus_info, int device)
242} 242}
243 243
244void pcireg_int_ate_set(struct pcibus_info *pcibus_info, int ate_index, 244void pcireg_int_ate_set(struct pcibus_info *pcibus_info, int ate_index,
245 uint64_t val) 245 u64 val)
246{ 246{
247 union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base; 247 union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base;
248 248
@@ -262,10 +262,10 @@ void pcireg_int_ate_set(struct pcibus_info *pcibus_info, int ate_index,
262 } 262 }
263} 263}
264 264
265uint64_t __iomem *pcireg_int_ate_addr(struct pcibus_info *pcibus_info, int ate_index) 265u64 __iomem *pcireg_int_ate_addr(struct pcibus_info *pcibus_info, int ate_index)
266{ 266{
267 union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base; 267 union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base;
268 uint64_t __iomem *ret = NULL; 268 u64 __iomem *ret = NULL;
269 269
270 if (pcibus_info) { 270 if (pcibus_info) {
271 switch (pcibus_info->pbi_bridge_type) { 271 switch (pcibus_info->pbi_bridge_type) {
diff --git a/arch/ia64/sn/pci/tioca_provider.c b/arch/ia64/sn/pci/tioca_provider.c
index 27aa1842dacc..7571a4025529 100644
--- a/arch/ia64/sn/pci/tioca_provider.c
+++ b/arch/ia64/sn/pci/tioca_provider.c
@@ -16,7 +16,7 @@
16#include <asm/sn/pcibus_provider_defs.h> 16#include <asm/sn/pcibus_provider_defs.h>
17#include <asm/sn/tioca_provider.h> 17#include <asm/sn/tioca_provider.h>
18 18
19uint32_t tioca_gart_found; 19u32 tioca_gart_found;
20EXPORT_SYMBOL(tioca_gart_found); /* used by agp-sgi */ 20EXPORT_SYMBOL(tioca_gart_found); /* used by agp-sgi */
21 21
22LIST_HEAD(tioca_list); 22LIST_HEAD(tioca_list);
@@ -34,8 +34,8 @@ static int tioca_gart_init(struct tioca_kernel *);
34static int 34static int
35tioca_gart_init(struct tioca_kernel *tioca_kern) 35tioca_gart_init(struct tioca_kernel *tioca_kern)
36{ 36{
37 uint64_t ap_reg; 37 u64 ap_reg;
38 uint64_t offset; 38 u64 offset;
39 struct page *tmp; 39 struct page *tmp;
40 struct tioca_common *tioca_common; 40 struct tioca_common *tioca_common;
41 struct tioca __iomem *ca_base; 41 struct tioca __iomem *ca_base;
@@ -214,7 +214,7 @@ void
214tioca_fastwrite_enable(struct tioca_kernel *tioca_kern) 214tioca_fastwrite_enable(struct tioca_kernel *tioca_kern)
215{ 215{
216 int cap_ptr; 216 int cap_ptr;
217 uint32_t reg; 217 u32 reg;
218 struct tioca __iomem *tioca_base; 218 struct tioca __iomem *tioca_base;
219 struct pci_dev *pdev; 219 struct pci_dev *pdev;
220 struct tioca_common *common; 220 struct tioca_common *common;
@@ -276,7 +276,7 @@ EXPORT_SYMBOL(tioca_fastwrite_enable); /* used by agp-sgi */
276 * We will always use 0x1 276 * We will always use 0x1
277 * 55:55 - Swap bytes Currently unused 277 * 55:55 - Swap bytes Currently unused
278 */ 278 */
279static uint64_t 279static u64
280tioca_dma_d64(unsigned long paddr) 280tioca_dma_d64(unsigned long paddr)
281{ 281{
282 dma_addr_t bus_addr; 282 dma_addr_t bus_addr;
@@ -318,15 +318,15 @@ tioca_dma_d64(unsigned long paddr)
318 * and so a given CA can only directly target nodes in the range 318 * and so a given CA can only directly target nodes in the range
319 * xxx - xxx+255. 319 * xxx - xxx+255.
320 */ 320 */
321static uint64_t 321static u64
322tioca_dma_d48(struct pci_dev *pdev, uint64_t paddr) 322tioca_dma_d48(struct pci_dev *pdev, u64 paddr)
323{ 323{
324 struct tioca_common *tioca_common; 324 struct tioca_common *tioca_common;
325 struct tioca __iomem *ca_base; 325 struct tioca __iomem *ca_base;
326 uint64_t ct_addr; 326 u64 ct_addr;
327 dma_addr_t bus_addr; 327 dma_addr_t bus_addr;
328 uint32_t node_upper; 328 u32 node_upper;
329 uint64_t agp_dma_extn; 329 u64 agp_dma_extn;
330 struct pcidev_info *pcidev_info = SN_PCIDEV_INFO(pdev); 330 struct pcidev_info *pcidev_info = SN_PCIDEV_INFO(pdev);
331 331
332 tioca_common = (struct tioca_common *)pcidev_info->pdi_pcibus_info; 332 tioca_common = (struct tioca_common *)pcidev_info->pdi_pcibus_info;
@@ -367,10 +367,10 @@ tioca_dma_d48(struct pci_dev *pdev, uint64_t paddr)
367 * dma_addr_t is guarenteed to be contiguous in CA bus space. 367 * dma_addr_t is guarenteed to be contiguous in CA bus space.
368 */ 368 */
369static dma_addr_t 369static dma_addr_t
370tioca_dma_mapped(struct pci_dev *pdev, uint64_t paddr, size_t req_size) 370tioca_dma_mapped(struct pci_dev *pdev, u64 paddr, size_t req_size)
371{ 371{
372 int i, ps, ps_shift, entry, entries, mapsize, last_entry; 372 int i, ps, ps_shift, entry, entries, mapsize, last_entry;
373 uint64_t xio_addr, end_xio_addr; 373 u64 xio_addr, end_xio_addr;
374 struct tioca_common *tioca_common; 374 struct tioca_common *tioca_common;
375 struct tioca_kernel *tioca_kern; 375 struct tioca_kernel *tioca_kern;
376 dma_addr_t bus_addr = 0; 376 dma_addr_t bus_addr = 0;
@@ -514,10 +514,10 @@ tioca_dma_unmap(struct pci_dev *pdev, dma_addr_t bus_addr, int dir)
514 * The mapping mode used is based on the devices dma_mask. As a last resort 514 * The mapping mode used is based on the devices dma_mask. As a last resort
515 * use the GART mapped mode. 515 * use the GART mapped mode.
516 */ 516 */
517static uint64_t 517static u64
518tioca_dma_map(struct pci_dev *pdev, uint64_t paddr, size_t byte_count) 518tioca_dma_map(struct pci_dev *pdev, u64 paddr, size_t byte_count)
519{ 519{
520 uint64_t mapaddr; 520 u64 mapaddr;
521 521
522 /* 522 /*
523 * If card is 64 or 48 bit addresable, use a direct mapping. 32 523 * If card is 64 or 48 bit addresable, use a direct mapping. 32
@@ -554,8 +554,8 @@ tioca_error_intr_handler(int irq, void *arg, struct pt_regs *pt)
554{ 554{
555 struct tioca_common *soft = arg; 555 struct tioca_common *soft = arg;
556 struct ia64_sal_retval ret_stuff; 556 struct ia64_sal_retval ret_stuff;
557 uint64_t segment; 557 u64 segment;
558 uint64_t busnum; 558 u64 busnum;
559 ret_stuff.status = 0; 559 ret_stuff.status = 0;
560 ret_stuff.v0 = 0; 560 ret_stuff.v0 = 0;
561 561
@@ -620,7 +620,7 @@ tioca_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont
620 INIT_LIST_HEAD(&tioca_kern->ca_dmamaps); 620 INIT_LIST_HEAD(&tioca_kern->ca_dmamaps);
621 tioca_kern->ca_closest_node = 621 tioca_kern->ca_closest_node =
622 nasid_to_cnodeid(tioca_common->ca_closest_nasid); 622 nasid_to_cnodeid(tioca_common->ca_closest_nasid);
623 tioca_common->ca_kernel_private = (uint64_t) tioca_kern; 623 tioca_common->ca_kernel_private = (u64) tioca_kern;
624 624
625 bus = pci_find_bus(tioca_common->ca_common.bs_persist_segment, 625 bus = pci_find_bus(tioca_common->ca_common.bs_persist_segment,
626 tioca_common->ca_common.bs_persist_busnum); 626 tioca_common->ca_common.bs_persist_busnum);
diff --git a/arch/ia64/sn/pci/tioce_provider.c b/arch/ia64/sn/pci/tioce_provider.c
index dda196c9e324..e52831ed93eb 100644
--- a/arch/ia64/sn/pci/tioce_provider.c
+++ b/arch/ia64/sn/pci/tioce_provider.c
@@ -81,10 +81,10 @@
81 * 61 - 0 since this is not an MSI transaction 81 * 61 - 0 since this is not an MSI transaction
82 * 60:54 - reserved, MBZ 82 * 60:54 - reserved, MBZ
83 */ 83 */
84static uint64_t 84static u64
85tioce_dma_d64(unsigned long ct_addr) 85tioce_dma_d64(unsigned long ct_addr)
86{ 86{
87 uint64_t bus_addr; 87 u64 bus_addr;
88 88
89 bus_addr = ct_addr | (1UL << 63); 89 bus_addr = ct_addr | (1UL << 63);
90 90
@@ -141,9 +141,9 @@ pcidev_to_tioce(struct pci_dev *pdev, struct tioce **base,
141 * length, and if enough resources exist, fill in the ATE's and construct a 141 * length, and if enough resources exist, fill in the ATE's and construct a
142 * tioce_dmamap struct to track the mapping. 142 * tioce_dmamap struct to track the mapping.
143 */ 143 */
144static uint64_t 144static u64
145tioce_alloc_map(struct tioce_kernel *ce_kern, int type, int port, 145tioce_alloc_map(struct tioce_kernel *ce_kern, int type, int port,
146 uint64_t ct_addr, int len) 146 u64 ct_addr, int len)
147{ 147{
148 int i; 148 int i;
149 int j; 149 int j;
@@ -152,11 +152,11 @@ tioce_alloc_map(struct tioce_kernel *ce_kern, int type, int port,
152 int entries; 152 int entries;
153 int nates; 153 int nates;
154 int pagesize; 154 int pagesize;
155 uint64_t *ate_shadow; 155 u64 *ate_shadow;
156 uint64_t *ate_reg; 156 u64 *ate_reg;
157 uint64_t addr; 157 u64 addr;
158 struct tioce *ce_mmr; 158 struct tioce *ce_mmr;
159 uint64_t bus_base; 159 u64 bus_base;
160 struct tioce_dmamap *map; 160 struct tioce_dmamap *map;
161 161
162 ce_mmr = (struct tioce *)ce_kern->ce_common->ce_pcibus.bs_base; 162 ce_mmr = (struct tioce *)ce_kern->ce_common->ce_pcibus.bs_base;
@@ -224,7 +224,7 @@ tioce_alloc_map(struct tioce_kernel *ce_kern, int type, int port,
224 224
225 addr = ct_addr; 225 addr = ct_addr;
226 for (j = 0; j < nates; j++) { 226 for (j = 0; j < nates; j++) {
227 uint64_t ate; 227 u64 ate;
228 228
229 ate = ATE_MAKE(addr, pagesize); 229 ate = ATE_MAKE(addr, pagesize);
230 ate_shadow[i + j] = ate; 230 ate_shadow[i + j] = ate;
@@ -252,15 +252,15 @@ tioce_alloc_map(struct tioce_kernel *ce_kern, int type, int port,
252 * 252 *
253 * Map @paddr into 32-bit bus space of the CE associated with @pcidev_info. 253 * Map @paddr into 32-bit bus space of the CE associated with @pcidev_info.
254 */ 254 */
255static uint64_t 255static u64
256tioce_dma_d32(struct pci_dev *pdev, uint64_t ct_addr) 256tioce_dma_d32(struct pci_dev *pdev, u64 ct_addr)
257{ 257{
258 int dma_ok; 258 int dma_ok;
259 int port; 259 int port;
260 struct tioce *ce_mmr; 260 struct tioce *ce_mmr;
261 struct tioce_kernel *ce_kern; 261 struct tioce_kernel *ce_kern;
262 uint64_t ct_upper; 262 u64 ct_upper;
263 uint64_t ct_lower; 263 u64 ct_lower;
264 dma_addr_t bus_addr; 264 dma_addr_t bus_addr;
265 265
266 ct_upper = ct_addr & ~0x3fffffffUL; 266 ct_upper = ct_addr & ~0x3fffffffUL;
@@ -269,7 +269,7 @@ tioce_dma_d32(struct pci_dev *pdev, uint64_t ct_addr)
269 pcidev_to_tioce(pdev, &ce_mmr, &ce_kern, &port); 269 pcidev_to_tioce(pdev, &ce_mmr, &ce_kern, &port);
270 270
271 if (ce_kern->ce_port[port].dirmap_refcnt == 0) { 271 if (ce_kern->ce_port[port].dirmap_refcnt == 0) {
272 uint64_t tmp; 272 u64 tmp;
273 273
274 ce_kern->ce_port[port].dirmap_shadow = ct_upper; 274 ce_kern->ce_port[port].dirmap_shadow = ct_upper;
275 writeq(ct_upper, &ce_mmr->ce_ure_dir_map[port]); 275 writeq(ct_upper, &ce_mmr->ce_ure_dir_map[port]);
@@ -295,10 +295,10 @@ tioce_dma_d32(struct pci_dev *pdev, uint64_t ct_addr)
295 * Given a TIOCE bus address, set the appropriate bit to indicate barrier 295 * Given a TIOCE bus address, set the appropriate bit to indicate barrier
296 * attributes. 296 * attributes.
297 */ 297 */
298static uint64_t 298static u64
299tioce_dma_barrier(uint64_t bus_addr, int on) 299tioce_dma_barrier(u64 bus_addr, int on)
300{ 300{
301 uint64_t barrier_bit; 301 u64 barrier_bit;
302 302
303 /* barrier not supported in M40/M40S mode */ 303 /* barrier not supported in M40/M40S mode */
304 if (TIOCE_M40_ADDR(bus_addr) || TIOCE_M40S_ADDR(bus_addr)) 304 if (TIOCE_M40_ADDR(bus_addr) || TIOCE_M40S_ADDR(bus_addr))
@@ -351,7 +351,7 @@ tioce_dma_unmap(struct pci_dev *pdev, dma_addr_t bus_addr, int dir)
351 351
352 list_for_each_entry(map, &ce_kern->ce_dmamap_list, 352 list_for_each_entry(map, &ce_kern->ce_dmamap_list,
353 ce_dmamap_list) { 353 ce_dmamap_list) {
354 uint64_t last; 354 u64 last;
355 355
356 last = map->pci_start + map->nbytes - 1; 356 last = map->pci_start + map->nbytes - 1;
357 if (bus_addr >= map->pci_start && bus_addr <= last) 357 if (bus_addr >= map->pci_start && bus_addr <= last)
@@ -385,17 +385,17 @@ tioce_dma_unmap(struct pci_dev *pdev, dma_addr_t bus_addr, int dir)
385 * This is the main wrapper for mapping host physical pages to CE PCI space. 385 * This is the main wrapper for mapping host physical pages to CE PCI space.
386 * The mapping mode used is based on the device's dma_mask. 386 * The mapping mode used is based on the device's dma_mask.
387 */ 387 */
388static uint64_t 388static u64
389tioce_do_dma_map(struct pci_dev *pdev, uint64_t paddr, size_t byte_count, 389tioce_do_dma_map(struct pci_dev *pdev, u64 paddr, size_t byte_count,
390 int barrier) 390 int barrier)
391{ 391{
392 unsigned long flags; 392 unsigned long flags;
393 uint64_t ct_addr; 393 u64 ct_addr;
394 uint64_t mapaddr = 0; 394 u64 mapaddr = 0;
395 struct tioce_kernel *ce_kern; 395 struct tioce_kernel *ce_kern;
396 struct tioce_dmamap *map; 396 struct tioce_dmamap *map;
397 int port; 397 int port;
398 uint64_t dma_mask; 398 u64 dma_mask;
399 399
400 dma_mask = (barrier) ? pdev->dev.coherent_dma_mask : pdev->dma_mask; 400 dma_mask = (barrier) ? pdev->dev.coherent_dma_mask : pdev->dma_mask;
401 401
@@ -425,7 +425,7 @@ tioce_do_dma_map(struct pci_dev *pdev, uint64_t paddr, size_t byte_count,
425 * address bits than this device can support. 425 * address bits than this device can support.
426 */ 426 */
427 list_for_each_entry(map, &ce_kern->ce_dmamap_list, ce_dmamap_list) { 427 list_for_each_entry(map, &ce_kern->ce_dmamap_list, ce_dmamap_list) {
428 uint64_t last; 428 u64 last;
429 429
430 last = map->ct_start + map->nbytes - 1; 430 last = map->ct_start + map->nbytes - 1;
431 if (ct_addr >= map->ct_start && 431 if (ct_addr >= map->ct_start &&
@@ -501,8 +501,8 @@ dma_map_done:
501 * Simply call tioce_do_dma_map() to create a map with the barrier bit clear 501 * Simply call tioce_do_dma_map() to create a map with the barrier bit clear
502 * in the address. 502 * in the address.
503 */ 503 */
504static uint64_t 504static u64
505tioce_dma(struct pci_dev *pdev, uint64_t paddr, size_t byte_count) 505tioce_dma(struct pci_dev *pdev, u64 paddr, size_t byte_count)
506{ 506{
507 return tioce_do_dma_map(pdev, paddr, byte_count, 0); 507 return tioce_do_dma_map(pdev, paddr, byte_count, 0);
508} 508}
@@ -515,8 +515,8 @@ tioce_dma(struct pci_dev *pdev, uint64_t paddr, size_t byte_count)
515 * 515 *
516 * Simply call tioce_do_dma_map() to create a map with the barrier bit set 516 * Simply call tioce_do_dma_map() to create a map with the barrier bit set
517 * in the address. 517 * in the address.
518 */ static uint64_t 518 */ static u64
519tioce_dma_consistent(struct pci_dev *pdev, uint64_t paddr, size_t byte_count) 519tioce_dma_consistent(struct pci_dev *pdev, u64 paddr, size_t byte_count)
520{ 520{
521 return tioce_do_dma_map(pdev, paddr, byte_count, 1); 521 return tioce_do_dma_map(pdev, paddr, byte_count, 1);
522} 522}
@@ -551,7 +551,7 @@ tioce_error_intr_handler(int irq, void *arg, struct pt_regs *pt)
551tioce_kern_init(struct tioce_common *tioce_common) 551tioce_kern_init(struct tioce_common *tioce_common)
552{ 552{
553 int i; 553 int i;
554 uint32_t tmp; 554 u32 tmp;
555 struct tioce *tioce_mmr; 555 struct tioce *tioce_mmr;
556 struct tioce_kernel *tioce_kern; 556 struct tioce_kernel *tioce_kern;
557 557
@@ -563,7 +563,7 @@ tioce_kern_init(struct tioce_common *tioce_common)
563 tioce_kern->ce_common = tioce_common; 563 tioce_kern->ce_common = tioce_common;
564 spin_lock_init(&tioce_kern->ce_lock); 564 spin_lock_init(&tioce_kern->ce_lock);
565 INIT_LIST_HEAD(&tioce_kern->ce_dmamap_list); 565 INIT_LIST_HEAD(&tioce_kern->ce_dmamap_list);
566 tioce_common->ce_kernel_private = (uint64_t) tioce_kern; 566 tioce_common->ce_kernel_private = (u64) tioce_kern;
567 567
568 /* 568 /*
569 * Determine the secondary bus number of the port2 logical PPB. 569 * Determine the secondary bus number of the port2 logical PPB.
@@ -575,7 +575,7 @@ tioce_kern_init(struct tioce_common *tioce_common)
575 raw_pci_ops->read(tioce_common->ce_pcibus.bs_persist_segment, 575 raw_pci_ops->read(tioce_common->ce_pcibus.bs_persist_segment,
576 tioce_common->ce_pcibus.bs_persist_busnum, 576 tioce_common->ce_pcibus.bs_persist_busnum,
577 PCI_DEVFN(2, 0), PCI_SECONDARY_BUS, 1, &tmp); 577 PCI_DEVFN(2, 0), PCI_SECONDARY_BUS, 1, &tmp);
578 tioce_kern->ce_port1_secondary = (uint8_t) tmp; 578 tioce_kern->ce_port1_secondary = (u8) tmp;
579 579
580 /* 580 /*
581 * Set PMU pagesize to the largest size available, and zero out 581 * Set PMU pagesize to the largest size available, and zero out
@@ -615,7 +615,7 @@ tioce_force_interrupt(struct sn_irq_info *sn_irq_info)
615 struct pcidev_info *pcidev_info; 615 struct pcidev_info *pcidev_info;
616 struct tioce_common *ce_common; 616 struct tioce_common *ce_common;
617 struct tioce *ce_mmr; 617 struct tioce *ce_mmr;
618 uint64_t force_int_val; 618 u64 force_int_val;
619 619
620 if (!sn_irq_info->irq_bridge) 620 if (!sn_irq_info->irq_bridge)
621 return; 621 return;
@@ -687,7 +687,7 @@ tioce_target_interrupt(struct sn_irq_info *sn_irq_info)
687 struct tioce_common *ce_common; 687 struct tioce_common *ce_common;
688 struct tioce *ce_mmr; 688 struct tioce *ce_mmr;
689 int bit; 689 int bit;
690 uint64_t vector; 690 u64 vector;
691 691
692 pcidev_info = (struct pcidev_info *)sn_irq_info->irq_pciioinfo; 692 pcidev_info = (struct pcidev_info *)sn_irq_info->irq_pciioinfo;
693 if (!pcidev_info) 693 if (!pcidev_info)
@@ -699,7 +699,7 @@ tioce_target_interrupt(struct sn_irq_info *sn_irq_info)
699 bit = sn_irq_info->irq_int_bit; 699 bit = sn_irq_info->irq_int_bit;
700 700
701 __sn_setq_relaxed(&ce_mmr->ce_adm_int_mask, (1UL << bit)); 701 __sn_setq_relaxed(&ce_mmr->ce_adm_int_mask, (1UL << bit));
702 vector = (uint64_t)sn_irq_info->irq_irq << INTR_VECTOR_SHFT; 702 vector = (u64)sn_irq_info->irq_irq << INTR_VECTOR_SHFT;
703 vector |= sn_irq_info->irq_xtalkaddr; 703 vector |= sn_irq_info->irq_xtalkaddr;
704 writeq(vector, &ce_mmr->ce_adm_int_dest[bit]); 704 writeq(vector, &ce_mmr->ce_adm_int_dest[bit]);
705 __sn_clrq_relaxed(&ce_mmr->ce_adm_int_mask, (1UL << bit)); 705 __sn_clrq_relaxed(&ce_mmr->ce_adm_int_mask, (1UL << bit));