diff options
Diffstat (limited to 'arch/ia64')
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 | ||
198 | config IA64_CYCLONE | 197 | config 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 | ||
395 | config SGI_SN | ||
396 | def_bool y if (IA64_SGI_SN2 || IA64_GENERIC) | ||
397 | |||
396 | source "drivers/firmware/Kconfig" | 398 | source "drivers/firmware/Kconfig" |
397 | 399 | ||
398 | source "fs/Kconfig.binfmt" | 400 | source "fs/Kconfig.binfmt" |
@@ -470,6 +472,7 @@ source "arch/ia64/oprofile/Kconfig" | |||
470 | 472 | ||
471 | config KPROBES | 473 | config 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 |
26 | CFLAGS_KERNEL := -mconstant-gp | 26 | CFLAGS_KERNEL := -mconstant-gp |
27 | 27 | ||
28 | GCC_VERSION := $(call cc-version) | ||
29 | GAS_STATUS = $(shell $(srctree)/arch/ia64/scripts/check-gas "$(CC)" "$(OBJDUMP)") | 28 | GAS_STATUS = $(shell $(srctree)/arch/ia64/scripts/check-gas "$(CC)" "$(OBJDUMP)") |
30 | CPPFLAGS += $(shell $(srctree)/arch/ia64/scripts/toolchain-flags "$(CC)" "$(OBJDUMP)" "$(READELF)") | 29 | CPPFLAGS += $(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) |
38 | endif | 37 | endif |
39 | 38 | ||
40 | ifneq ($(shell if [ $(GCC_VERSION) -lt 0300 ] ; then echo "bad"; fi ;),) | 39 | ifeq ($(call cc-version),0304) |
41 | $(error Sorry, your compiler is too old. GCC v2.96 is known to generate bad code.) | ||
42 | endif | ||
43 | |||
44 | ifeq ($(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 |
47 | endif | 42 | endif |
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 | # |
10 | CONFIG_EXPERIMENTAL=y | 10 | CONFIG_EXPERIMENTAL=y |
11 | CONFIG_CLEAN_COMPILE=y | ||
12 | CONFIG_LOCK_KERNEL=y | 11 | CONFIG_LOCK_KERNEL=y |
13 | CONFIG_INIT_ENV_ARG_LIMIT=32 | 12 | CONFIG_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 |
24 | CONFIG_SYSCTL=y | 23 | CONFIG_SYSCTL=y |
25 | # CONFIG_AUDIT is not set | 24 | # CONFIG_AUDIT is not set |
26 | CONFIG_HOTPLUG=y | ||
27 | CONFIG_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 |
30 | CONFIG_INITRAMFS_SOURCE="" | 27 | CONFIG_INITRAMFS_SOURCE="" |
28 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
31 | # CONFIG_EMBEDDED is not set | 29 | # CONFIG_EMBEDDED is not set |
32 | CONFIG_KALLSYMS=y | 30 | CONFIG_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 |
33 | CONFIG_HOTPLUG=y | ||
35 | CONFIG_PRINTK=y | 34 | CONFIG_PRINTK=y |
36 | CONFIG_BUG=y | 35 | CONFIG_BUG=y |
36 | CONFIG_ELF_CORE=y | ||
37 | CONFIG_BASE_FULL=y | 37 | CONFIG_BASE_FULL=y |
38 | CONFIG_FUTEX=y | 38 | CONFIG_FUTEX=y |
39 | CONFIG_EPOLL=y | 39 | CONFIG_EPOLL=y |
@@ -42,8 +42,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0 | |||
42 | CONFIG_CC_ALIGN_LABELS=0 | 42 | CONFIG_CC_ALIGN_LABELS=0 |
43 | CONFIG_CC_ALIGN_LOOPS=0 | 43 | CONFIG_CC_ALIGN_LOOPS=0 |
44 | CONFIG_CC_ALIGN_JUMPS=0 | 44 | CONFIG_CC_ALIGN_JUMPS=0 |
45 | CONFIG_SLAB=y | ||
45 | # CONFIG_TINY_SHMEM is not set | 46 | # CONFIG_TINY_SHMEM is not set |
46 | CONFIG_BASE_SMALL=0 | 47 | CONFIG_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 | |||
58 | CONFIG_STOP_MACHINE=y | 60 | CONFIG_STOP_MACHINE=y |
59 | 61 | ||
60 | # | 62 | # |
63 | # Block layer | ||
64 | # | ||
65 | |||
66 | # | ||
67 | # IO Schedulers | ||
68 | # | ||
69 | CONFIG_IOSCHED_NOOP=y | ||
70 | CONFIG_IOSCHED_AS=y | ||
71 | CONFIG_IOSCHED_DEADLINE=y | ||
72 | CONFIG_IOSCHED_CFQ=y | ||
73 | CONFIG_DEFAULT_AS=y | ||
74 | # CONFIG_DEFAULT_DEADLINE is not set | ||
75 | # CONFIG_DEFAULT_CFQ is not set | ||
76 | # CONFIG_DEFAULT_NOOP is not set | ||
77 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
78 | |||
79 | # | ||
61 | # Processor type and features | 80 | # Processor type and features |
62 | # | 81 | # |
63 | CONFIG_IA64=y | 82 | CONFIG_IA64=y |
64 | CONFIG_64BIT=y | 83 | CONFIG_64BIT=y |
65 | CONFIG_MMU=y | 84 | CONFIG_MMU=y |
85 | CONFIG_SWIOTLB=y | ||
66 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | 86 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y |
67 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 87 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
68 | CONFIG_TIME_INTERPOLATION=y | 88 | CONFIG_TIME_INTERPOLATION=y |
69 | CONFIG_EFI=y | 89 | CONFIG_EFI=y |
70 | CONFIG_GENERIC_IOMAP=y | 90 | CONFIG_GENERIC_IOMAP=y |
71 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | 91 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y |
92 | CONFIG_DMA_IS_DMA32=y | ||
72 | # CONFIG_IA64_GENERIC is not set | 93 | # CONFIG_IA64_GENERIC is not set |
73 | CONFIG_IA64_DIG=y | 94 | CONFIG_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 |
82 | CONFIG_IA64_PAGE_SIZE_16KB=y | 103 | CONFIG_IA64_PAGE_SIZE_16KB=y |
83 | # CONFIG_IA64_PAGE_SIZE_64KB is not set | 104 | # CONFIG_IA64_PAGE_SIZE_64KB is not set |
105 | CONFIG_PGTABLE_3=y | ||
106 | # CONFIG_PGTABLE_4 is not set | ||
84 | # CONFIG_HZ_100 is not set | 107 | # CONFIG_HZ_100 is not set |
85 | CONFIG_HZ_250=y | 108 | CONFIG_HZ_250=y |
86 | # CONFIG_HZ_1000 is not set | 109 | # CONFIG_HZ_1000 is not set |
87 | CONFIG_HZ=250 | 110 | CONFIG_HZ=250 |
88 | CONFIG_IA64_BRL_EMU=y | 111 | CONFIG_IA64_BRL_EMU=y |
89 | CONFIG_IA64_L1_CACHE_SHIFT=6 | 112 | CONFIG_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 |
93 | CONFIG_IOSAPIC=y | 114 | CONFIG_IOSAPIC=y |
94 | # CONFIG_IA64_SGI_SN_XP is not set | 115 | CONFIG_FORCE_MAX_ZONEORDER=17 |
95 | CONFIG_FORCE_MAX_ZONEORDER=18 | ||
96 | CONFIG_SMP=y | 116 | CONFIG_SMP=y |
97 | CONFIG_NR_CPUS=2 | 117 | CONFIG_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 | |||
105 | CONFIG_FLATMEM=y | 125 | CONFIG_FLATMEM=y |
106 | CONFIG_FLAT_NODE_MEM_MAP=y | 126 | CONFIG_FLAT_NODE_MEM_MAP=y |
107 | # CONFIG_SPARSEMEM_STATIC is not set | 127 | # CONFIG_SPARSEMEM_STATIC is not set |
108 | CONFIG_HAVE_DEC_LOCK=y | 128 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
129 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | ||
130 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y | ||
131 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
132 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | ||
133 | # CONFIG_VIRTUAL_MEM_MAP is not set | ||
109 | CONFIG_IA32_SUPPORT=y | 134 | CONFIG_IA32_SUPPORT=y |
110 | CONFIG_COMPAT=y | 135 | CONFIG_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 | # |
118 | CONFIG_EFI_VARS=y | 143 | CONFIG_EFI_VARS=y |
119 | CONFIG_EFI_PCDP=y | 144 | CONFIG_EFI_PCDP=y |
120 | # CONFIG_DELL_RBU is not set | ||
121 | CONFIG_BINFMT_ELF=y | 145 | CONFIG_BINFMT_ELF=y |
122 | CONFIG_BINFMT_MISC=m | 146 | CONFIG_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 | # |
127 | CONFIG_PM=y | 151 | CONFIG_PM=y |
152 | CONFIG_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 | |||
137 | CONFIG_ACPI_THERMAL=m | 162 | CONFIG_ACPI_THERMAL=m |
138 | CONFIG_ACPI_BLACKLIST_YEAR=0 | 163 | CONFIG_ACPI_BLACKLIST_YEAR=0 |
139 | # CONFIG_ACPI_DEBUG is not set | 164 | # CONFIG_ACPI_DEBUG is not set |
165 | CONFIG_ACPI_EC=y | ||
140 | CONFIG_ACPI_POWER=y | 166 | CONFIG_ACPI_POWER=y |
141 | CONFIG_ACPI_SYSTEM=y | 167 | CONFIG_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 | ||
176 | CONFIG_PACKET=y | 203 | CONFIG_PACKET=y |
177 | CONFIG_PACKET_MMAP=y | 204 | CONFIG_PACKET_MMAP=y |
178 | CONFIG_UNIX=y | 205 | CONFIG_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 | |||
286 | CONFIG_BLK_DEV_RAM_COUNT=16 | 320 | CONFIG_BLK_DEV_RAM_COUNT=16 |
287 | CONFIG_BLK_DEV_RAM_SIZE=4096 | 321 | CONFIG_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 | # | ||
293 | CONFIG_IOSCHED_NOOP=y | ||
294 | CONFIG_IOSCHED_AS=y | ||
295 | CONFIG_IOSCHED_DEADLINE=y | ||
296 | CONFIG_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 | # |
302 | CONFIG_IDE=m | 328 | CONFIG_IDE=m |
329 | CONFIG_IDE_MAX_HWIFS=4 | ||
303 | CONFIG_BLK_DEV_IDE=m | 330 | CONFIG_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 |
411 | CONFIG_SCSI_QLOGIC_1280=y | 440 | CONFIG_SCSI_QLOGIC_1280=y |
412 | # CONFIG_SCSI_QLOGIC_1280_1040 is not set | 441 | # CONFIG_SCSI_QLA_FC is not set |
413 | CONFIG_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 | |||
486 | CONFIG_MII=y | 509 | CONFIG_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 | |||
630 | CONFIG_SERIAL_8250_CONSOLE=y | 655 | CONFIG_SERIAL_8250_CONSOLE=y |
631 | CONFIG_SERIAL_8250_ACPI=y | 656 | CONFIG_SERIAL_8250_ACPI=y |
632 | CONFIG_SERIAL_8250_NR_UARTS=4 | 657 | CONFIG_SERIAL_8250_NR_UARTS=4 |
658 | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | ||
633 | CONFIG_SERIAL_8250_EXTENDED=y | 659 | CONFIG_SERIAL_8250_EXTENDED=y |
634 | CONFIG_SERIAL_8250_SHARE_IRQ=y | 660 | CONFIG_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 | |||
830 | CONFIG_SND_MIXER_OSS=m | 866 | CONFIG_SND_MIXER_OSS=m |
831 | CONFIG_SND_PCM_OSS=m | 867 | CONFIG_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 | ||
870 | CONFIG_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 | # |
839 | CONFIG_SND_OPL3_LIB=m | 877 | CONFIG_SND_OPL3_LIB=m |
878 | CONFIG_SND_AC97_CODEC=m | ||
879 | CONFIG_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 |
845 | CONFIG_SND_AC97_CODEC=m | ||
846 | CONFIG_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 | ||
860 | CONFIG_SND_CS4281=m | 900 | CONFIG_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 |
932 | CONFIG_USB_BLUETOOTH_TTY=m | ||
933 | CONFIG_USB_ACM=m | 971 | CONFIG_USB_ACM=m |
934 | CONFIG_USB_PRINTER=m | 972 | CONFIG_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 | # |
939 | CONFIG_USB_STORAGE=m | 981 | CONFIG_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 | # |
954 | CONFIG_USB_HID=m | 997 | CONFIG_USB_HID=m |
955 | CONFIG_USB_HIDINPUT=y | 998 | CONFIG_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 |
957 | CONFIG_USB_HIDDEV=y | 1001 | CONFIG_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 | |||
1071 | CONFIG_XFS_SECURITY=y | 1116 | CONFIG_XFS_SECURITY=y |
1072 | CONFIG_XFS_POSIX_ACL=y | 1117 | CONFIG_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 |
1076 | CONFIG_INOTIFY=y | 1122 | CONFIG_INOTIFY=y |
@@ -1111,6 +1157,7 @@ CONFIG_HUGETLBFS=y | |||
1111 | CONFIG_HUGETLB_PAGE=y | 1157 | CONFIG_HUGETLB_PAGE=y |
1112 | CONFIG_RAMFS=y | 1158 | CONFIG_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 |
1154 | CONFIG_CIFS=m | 1201 | CONFIG_CIFS=m |
1155 | CONFIG_CIFS_STATS=y | 1202 | CONFIG_CIFS_STATS=y |
1203 | # CONFIG_CIFS_STATS2 is not set | ||
1156 | CONFIG_CIFS_XATTR=y | 1204 | CONFIG_CIFS_XATTR=y |
1157 | CONFIG_CIFS_POSIX=y | 1205 | CONFIG_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 | |||
1179 | CONFIG_SGI_PARTITION=y | 1227 | CONFIG_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 | ||
1182 | CONFIG_EFI_PARTITION=y | 1231 | CONFIG_EFI_PARTITION=y |
1183 | 1232 | ||
1184 | # | 1233 | # |
@@ -1237,28 +1286,32 @@ CONFIG_GENERIC_IRQ_PROBE=y | |||
1237 | CONFIG_GENERIC_PENDING_IRQ=y | 1286 | CONFIG_GENERIC_PENDING_IRQ=y |
1238 | 1287 | ||
1239 | # | 1288 | # |
1240 | # Profiling support | 1289 | # Instrumentation Support |
1241 | # | 1290 | # |
1242 | CONFIG_PROFILING=y | 1291 | CONFIG_PROFILING=y |
1243 | CONFIG_OPROFILE=y | 1292 | CONFIG_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 |
1249 | CONFIG_DEBUG_KERNEL=y | ||
1250 | CONFIG_MAGIC_SYSRQ=y | 1299 | CONFIG_MAGIC_SYSRQ=y |
1300 | CONFIG_DEBUG_KERNEL=y | ||
1251 | CONFIG_LOG_BUF_SHIFT=16 | 1301 | CONFIG_LOG_BUF_SHIFT=16 |
1252 | CONFIG_DETECT_SOFTLOCKUP=y | 1302 | CONFIG_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 |
1255 | CONFIG_DEBUG_PREEMPT=y | 1305 | CONFIG_DEBUG_PREEMPT=y |
1306 | CONFIG_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 |
1313 | CONFIG_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 |
1263 | CONFIG_IA64_GRANULE_64MB=y | 1316 | CONFIG_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 | # |
10 | CONFIG_EXPERIMENTAL=y | 10 | CONFIG_EXPERIMENTAL=y |
11 | CONFIG_CLEAN_COMPILE=y | ||
12 | CONFIG_LOCK_KERNEL=y | 11 | CONFIG_LOCK_KERNEL=y |
13 | CONFIG_INIT_ENV_ARG_LIMIT=32 | 12 | CONFIG_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 |
24 | CONFIG_SYSCTL=y | 23 | CONFIG_SYSCTL=y |
25 | # CONFIG_AUDIT is not set | 24 | # CONFIG_AUDIT is not set |
26 | CONFIG_HOTPLUG=y | ||
27 | CONFIG_KOBJECT_UEVENT=y | ||
28 | CONFIG_IKCONFIG=y | 25 | CONFIG_IKCONFIG=y |
29 | CONFIG_IKCONFIG_PROC=y | 26 | CONFIG_IKCONFIG_PROC=y |
30 | # CONFIG_CPUSETS is not set | 27 | # CONFIG_CPUSETS is not set |
31 | CONFIG_INITRAMFS_SOURCE="" | 28 | CONFIG_INITRAMFS_SOURCE="" |
29 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
32 | # CONFIG_EMBEDDED is not set | 30 | # CONFIG_EMBEDDED is not set |
33 | CONFIG_KALLSYMS=y | 31 | CONFIG_KALLSYMS=y |
34 | CONFIG_KALLSYMS_ALL=y | 32 | CONFIG_KALLSYMS_ALL=y |
35 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 33 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
34 | CONFIG_HOTPLUG=y | ||
36 | CONFIG_PRINTK=y | 35 | CONFIG_PRINTK=y |
37 | CONFIG_BUG=y | 36 | CONFIG_BUG=y |
37 | CONFIG_ELF_CORE=y | ||
38 | CONFIG_BASE_FULL=y | 38 | CONFIG_BASE_FULL=y |
39 | CONFIG_FUTEX=y | 39 | CONFIG_FUTEX=y |
40 | CONFIG_EPOLL=y | 40 | CONFIG_EPOLL=y |
@@ -43,8 +43,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0 | |||
43 | CONFIG_CC_ALIGN_LABELS=0 | 43 | CONFIG_CC_ALIGN_LABELS=0 |
44 | CONFIG_CC_ALIGN_LOOPS=0 | 44 | CONFIG_CC_ALIGN_LOOPS=0 |
45 | CONFIG_CC_ALIGN_JUMPS=0 | 45 | CONFIG_CC_ALIGN_JUMPS=0 |
46 | CONFIG_SLAB=y | ||
46 | # CONFIG_TINY_SHMEM is not set | 47 | # CONFIG_TINY_SHMEM is not set |
47 | CONFIG_BASE_SMALL=0 | 48 | CONFIG_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 | |||
59 | CONFIG_STOP_MACHINE=y | 61 | CONFIG_STOP_MACHINE=y |
60 | 62 | ||
61 | # | 63 | # |
64 | # Block layer | ||
65 | # | ||
66 | |||
67 | # | ||
68 | # IO Schedulers | ||
69 | # | ||
70 | CONFIG_IOSCHED_NOOP=y | ||
71 | CONFIG_IOSCHED_AS=y | ||
72 | CONFIG_IOSCHED_DEADLINE=y | ||
73 | CONFIG_IOSCHED_CFQ=y | ||
74 | CONFIG_DEFAULT_AS=y | ||
75 | # CONFIG_DEFAULT_DEADLINE is not set | ||
76 | # CONFIG_DEFAULT_CFQ is not set | ||
77 | # CONFIG_DEFAULT_NOOP is not set | ||
78 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
79 | |||
80 | # | ||
62 | # Processor type and features | 81 | # Processor type and features |
63 | # | 82 | # |
64 | CONFIG_IA64=y | 83 | CONFIG_IA64=y |
65 | CONFIG_64BIT=y | 84 | CONFIG_64BIT=y |
66 | CONFIG_MMU=y | 85 | CONFIG_MMU=y |
86 | CONFIG_SWIOTLB=y | ||
67 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | 87 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y |
68 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 88 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
69 | CONFIG_TIME_INTERPOLATION=y | 89 | CONFIG_TIME_INTERPOLATION=y |
70 | CONFIG_EFI=y | 90 | CONFIG_EFI=y |
71 | CONFIG_GENERIC_IOMAP=y | 91 | CONFIG_GENERIC_IOMAP=y |
72 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | 92 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y |
93 | CONFIG_DMA_IS_DMA32=y | ||
73 | CONFIG_IA64_GENERIC=y | 94 | CONFIG_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 |
83 | CONFIG_IA64_PAGE_SIZE_16KB=y | 104 | CONFIG_IA64_PAGE_SIZE_16KB=y |
84 | # CONFIG_IA64_PAGE_SIZE_64KB is not set | 105 | # CONFIG_IA64_PAGE_SIZE_64KB is not set |
106 | CONFIG_PGTABLE_3=y | ||
107 | # CONFIG_PGTABLE_4 is not set | ||
85 | # CONFIG_HZ_100 is not set | 108 | # CONFIG_HZ_100 is not set |
86 | CONFIG_HZ_250=y | 109 | CONFIG_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 | |||
105 | CONFIG_HAVE_MEMORY_PRESENT=y | 128 | CONFIG_HAVE_MEMORY_PRESENT=y |
106 | # CONFIG_SPARSEMEM_STATIC is not set | 129 | # CONFIG_SPARSEMEM_STATIC is not set |
107 | CONFIG_SPARSEMEM_EXTREME=y | 130 | CONFIG_SPARSEMEM_EXTREME=y |
131 | # CONFIG_MEMORY_HOTPLUG is not set | ||
132 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
133 | CONFIG_MIGRATION=y | ||
108 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | 134 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y |
109 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y | 135 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y |
110 | CONFIG_ARCH_FLATMEM_ENABLE=y | 136 | CONFIG_ARCH_FLATMEM_ENABLE=y |
@@ -117,13 +143,13 @@ CONFIG_COMPAT=y | |||
117 | CONFIG_IA64_MCA_RECOVERY=y | 143 | CONFIG_IA64_MCA_RECOVERY=y |
118 | CONFIG_PERFMON=y | 144 | CONFIG_PERFMON=y |
119 | CONFIG_IA64_PALINFO=y | 145 | CONFIG_IA64_PALINFO=y |
146 | CONFIG_SGI_SN=y | ||
120 | 147 | ||
121 | # | 148 | # |
122 | # Firmware Drivers | 149 | # Firmware Drivers |
123 | # | 150 | # |
124 | CONFIG_EFI_VARS=y | 151 | CONFIG_EFI_VARS=y |
125 | CONFIG_EFI_PCDP=y | 152 | CONFIG_EFI_PCDP=y |
126 | # CONFIG_DELL_RBU is not set | ||
127 | CONFIG_BINFMT_ELF=y | 153 | CONFIG_BINFMT_ELF=y |
128 | CONFIG_BINFMT_MISC=m | 154 | CONFIG_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 | # |
133 | CONFIG_PM=y | 159 | CONFIG_PM=y |
160 | CONFIG_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 | |||
145 | CONFIG_ACPI_NUMA=y | 172 | CONFIG_ACPI_NUMA=y |
146 | CONFIG_ACPI_BLACKLIST_YEAR=0 | 173 | CONFIG_ACPI_BLACKLIST_YEAR=0 |
147 | # CONFIG_ACPI_DEBUG is not set | 174 | # CONFIG_ACPI_DEBUG is not set |
175 | CONFIG_ACPI_EC=y | ||
148 | CONFIG_ACPI_POWER=y | 176 | CONFIG_ACPI_POWER=y |
149 | CONFIG_ACPI_SYSTEM=y | 177 | CONFIG_ACPI_SYSTEM=y |
150 | CONFIG_ACPI_CONTAINER=m | 178 | CONFIG_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 | ||
190 | CONFIG_PACKET=y | 219 | CONFIG_PACKET=y |
191 | # CONFIG_PACKET_MMAP is not set | 220 | # CONFIG_PACKET_MMAP is not set |
192 | CONFIG_UNIX=y | 221 | CONFIG_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 | 315 | CONFIG_PNP=y |
316 | # CONFIG_PNP_DEBUG is not set | ||
317 | |||
318 | # | ||
319 | # Protocols | ||
320 | # | ||
321 | CONFIG_PNPACPI=y | ||
279 | 322 | ||
280 | # | 323 | # |
281 | # Block devices | 324 | # Block devices |
@@ -295,20 +338,13 @@ CONFIG_BLK_DEV_RAM_COUNT=16 | |||
295 | CONFIG_BLK_DEV_RAM_SIZE=4096 | 338 | CONFIG_BLK_DEV_RAM_SIZE=4096 |
296 | CONFIG_BLK_DEV_INITRD=y | 339 | CONFIG_BLK_DEV_INITRD=y |
297 | # CONFIG_CDROM_PKTCDVD is not set | 340 | # CONFIG_CDROM_PKTCDVD is not set |
298 | |||
299 | # | ||
300 | # IO Schedulers | ||
301 | # | ||
302 | CONFIG_IOSCHED_NOOP=y | ||
303 | CONFIG_IOSCHED_AS=y | ||
304 | CONFIG_IOSCHED_DEADLINE=y | ||
305 | CONFIG_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 | # |
311 | CONFIG_IDE=y | 346 | CONFIG_IDE=y |
347 | CONFIG_IDE_MAX_HWIFS=4 | ||
312 | CONFIG_BLK_DEV_IDE=y | 348 | CONFIG_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 | # |
329 | CONFIG_IDE_GENERIC=y | 365 | CONFIG_IDE_GENERIC=y |
366 | # CONFIG_BLK_DEV_IDEPNP is not set | ||
330 | CONFIG_BLK_DEV_IDEPCI=y | 367 | CONFIG_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 | ||
412 | CONFIG_SCSI_SATA=y | 451 | CONFIG_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 |
438 | CONFIG_SCSI_QLOGIC_1280=y | 479 | CONFIG_SCSI_QLOGIC_1280=y |
439 | # CONFIG_SCSI_QLOGIC_1280_1040 is not set | 480 | # CONFIG_SCSI_QLA_FC is not set |
440 | CONFIG_SCSI_QLA2XXX=y | ||
441 | CONFIG_SCSI_QLA21XX=m | ||
442 | CONFIG_SCSI_QLA22XX=m | ||
443 | CONFIG_SCSI_QLA2300=m | ||
444 | CONFIG_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 | |||
476 | CONFIG_FUSION=y | 510 | CONFIG_FUSION=y |
477 | CONFIG_FUSION_SPI=y | 511 | CONFIG_FUSION_SPI=y |
478 | CONFIG_FUSION_FC=m | 512 | CONFIG_FUSION_FC=m |
513 | # CONFIG_FUSION_SAS is not set | ||
479 | CONFIG_FUSION_MAX_SGE=128 | 514 | CONFIG_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 | |||
515 | CONFIG_MII=m | 551 | CONFIG_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 |
558 | CONFIG_E1000=y | 595 | CONFIG_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 |
568 | CONFIG_TIGON3=y | 607 | CONFIG_TIGON3=y |
@@ -667,12 +706,15 @@ CONFIG_VT=y | |||
667 | CONFIG_VT_CONSOLE=y | 706 | CONFIG_VT_CONSOLE=y |
668 | CONFIG_HW_CONSOLE=y | 707 | CONFIG_HW_CONSOLE=y |
669 | CONFIG_SERIAL_NONSTANDARD=y | 708 | CONFIG_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 | |||
688 | CONFIG_SERIAL_8250_CONSOLE=y | 730 | CONFIG_SERIAL_8250_CONSOLE=y |
689 | CONFIG_SERIAL_8250_ACPI=y | 731 | CONFIG_SERIAL_8250_ACPI=y |
690 | CONFIG_SERIAL_8250_NR_UARTS=6 | 732 | CONFIG_SERIAL_8250_NR_UARTS=6 |
733 | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | ||
691 | CONFIG_SERIAL_8250_EXTENDED=y | 734 | CONFIG_SERIAL_8250_EXTENDED=y |
692 | CONFIG_SERIAL_8250_SHARE_IRQ=y | 735 | CONFIG_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 | |||
701 | CONFIG_SERIAL_SGI_L1_CONSOLE=y | 744 | CONFIG_SERIAL_SGI_L1_CONSOLE=y |
702 | # CONFIG_SERIAL_JSM is not set | 745 | # CONFIG_SERIAL_JSM is not set |
703 | CONFIG_SERIAL_SGI_IOC4=y | 746 | CONFIG_SERIAL_SGI_IOC4=y |
747 | CONFIG_SERIAL_SGI_IOC3=y | ||
704 | CONFIG_UNIX98_PTYS=y | 748 | CONFIG_UNIX98_PTYS=y |
705 | CONFIG_LEGACY_PTYS=y | 749 | CONFIG_LEGACY_PTYS=y |
706 | CONFIG_LEGACY_PTY_COUNT=256 | 750 | CONFIG_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 |
738 | CONFIG_RAW_DRIVER=m | 782 | CONFIG_RAW_DRIVER=m |
783 | CONFIG_MAX_RAW_DEVS=256 | ||
739 | CONFIG_HPET=y | 784 | CONFIG_HPET=y |
740 | # CONFIG_HPET_RTC_IRQ is not set | 785 | # CONFIG_HPET_RTC_IRQ is not set |
741 | CONFIG_HPET_MMAP=y | 786 | CONFIG_HPET_MMAP=y |
742 | CONFIG_MAX_RAW_DEVS=256 | ||
743 | # CONFIG_HANGCHECK_TIMER is not set | 787 | # CONFIG_HANGCHECK_TIMER is not set |
744 | CONFIG_MMTIMER=y | 788 | CONFIG_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 | # |
764 | CONFIG_HWMON=y | 815 | CONFIG_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 | |||
813 | CONFIG_SND_MIXER_OSS=m | 865 | CONFIG_SND_MIXER_OSS=m |
814 | CONFIG_SND_PCM_OSS=m | 866 | CONFIG_SND_PCM_OSS=m |
815 | CONFIG_SND_SEQUENCER_OSS=y | 867 | CONFIG_SND_SEQUENCER_OSS=y |
868 | # CONFIG_SND_DYNAMIC_MINORS is not set | ||
869 | CONFIG_SND_SUPPORT_OLD_API=y | ||
816 | CONFIG_SND_VERBOSE_PRINTK=y | 870 | CONFIG_SND_VERBOSE_PRINTK=y |
817 | # CONFIG_SND_DEBUG is not set | 871 | # CONFIG_SND_DEBUG is not set |
818 | CONFIG_SND_GENERIC_DRIVER=y | ||
819 | 872 | ||
820 | # | 873 | # |
821 | # Generic devices | 874 | # Generic devices |
822 | # | 875 | # |
823 | CONFIG_SND_MPU401_UART=m | 876 | CONFIG_SND_MPU401_UART=m |
824 | CONFIG_SND_OPL3_LIB=m | 877 | CONFIG_SND_OPL3_LIB=m |
878 | CONFIG_SND_AC97_CODEC=m | ||
879 | CONFIG_SND_AC97_BUS=m | ||
825 | CONFIG_SND_DUMMY=m | 880 | CONFIG_SND_DUMMY=m |
826 | CONFIG_SND_VIRMIDI=m | 881 | CONFIG_SND_VIRMIDI=m |
827 | CONFIG_SND_MTPAV=m | 882 | CONFIG_SND_MTPAV=m |
828 | CONFIG_SND_SERIAL_U16550=m | 883 | CONFIG_SND_SERIAL_U16550=m |
829 | CONFIG_SND_MPU401=m | 884 | CONFIG_SND_MPU401=m |
830 | CONFIG_SND_AC97_CODEC=m | ||
831 | CONFIG_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 | ||
900 | CONFIG_SND_CS4281=m | ||
844 | CONFIG_SND_CS46XX=m | 901 | CONFIG_SND_CS46XX=m |
845 | CONFIG_SND_CS46XX_NEW_DSP=y | 902 | CONFIG_SND_CS46XX_NEW_DSP=y |
846 | CONFIG_SND_CS4281=m | ||
847 | CONFIG_SND_EMU10K1=m | 903 | CONFIG_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 | ||
867 | CONFIG_SND_FM801=m | 909 | CONFIG_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 | # |
930 | CONFIG_USB_STORAGE=m | 987 | CONFIG_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 | # |
944 | CONFIG_USB_HID=m | 1003 | CONFIG_USB_HID=m |
945 | CONFIG_USB_HIDINPUT=y | 1004 | CONFIG_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 |
1042 | CONFIG_INFINIBAND_IPOIB=m | 1103 | CONFIG_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 | # |
1048 | CONFIG_SGI_IOC4=y | 1110 | CONFIG_SGI_IOC4=y |
1111 | CONFIG_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 |
1081 | CONFIG_INOTIFY=y | 1149 | CONFIG_INOTIFY=y |
@@ -1117,6 +1185,7 @@ CONFIG_HUGETLBFS=y | |||
1117 | CONFIG_HUGETLB_PAGE=y | 1185 | CONFIG_HUGETLB_PAGE=y |
1118 | CONFIG_RAMFS=y | 1186 | CONFIG_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 | |||
1186 | CONFIG_SGI_PARTITION=y | 1255 | CONFIG_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 | ||
1189 | CONFIG_EFI_PARTITION=y | 1259 | CONFIG_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 |
1262 | CONFIG_DEBUG_KERNEL=y | ||
1263 | CONFIG_MAGIC_SYSRQ=y | 1333 | CONFIG_MAGIC_SYSRQ=y |
1334 | CONFIG_DEBUG_KERNEL=y | ||
1264 | CONFIG_LOG_BUF_SHIFT=20 | 1335 | CONFIG_LOG_BUF_SHIFT=20 |
1265 | CONFIG_DETECT_SOFTLOCKUP=y | 1336 | CONFIG_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 |
1339 | CONFIG_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 |
1346 | CONFIG_FORCED_INLINING=y | ||
1347 | # CONFIG_RCU_TORTURE_TEST is not set | ||
1274 | CONFIG_IA64_GRANULE_16MB=y | 1348 | CONFIG_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 | # |
8 | CONFIG_EXPERIMENTAL=y | 10 | CONFIG_EXPERIMENTAL=y |
9 | # CONFIG_CLEAN_COMPILE is not set | 11 | CONFIG_LOCK_KERNEL=y |
10 | # CONFIG_STANDALONE is not set | 12 | CONFIG_INIT_ENV_ARG_LIMIT=32 |
11 | CONFIG_BROKEN=y | ||
12 | CONFIG_BROKEN_ON_SMP=y | ||
13 | 13 | ||
14 | # | 14 | # |
15 | # General setup | 15 | # General setup |
16 | # | 16 | # |
17 | CONFIG_LOCALVERSION="" | ||
18 | CONFIG_LOCALVERSION_AUTO=y | ||
17 | CONFIG_SWAP=y | 19 | CONFIG_SWAP=y |
18 | CONFIG_SYSVIPC=y | 20 | CONFIG_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 |
21 | CONFIG_SYSCTL=y | 23 | CONFIG_SYSCTL=y |
22 | # CONFIG_AUDIT is not set | 24 | # CONFIG_AUDIT is not set |
23 | CONFIG_LOG_BUF_SHIFT=16 | ||
24 | # CONFIG_HOTPLUG is not set | ||
25 | CONFIG_IKCONFIG=y | 25 | CONFIG_IKCONFIG=y |
26 | CONFIG_IKCONFIG_PROC=y | 26 | CONFIG_IKCONFIG_PROC=y |
27 | # CONFIG_CPUSETS is not set | ||
28 | CONFIG_INITRAMFS_SOURCE="" | ||
29 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
27 | # CONFIG_EMBEDDED is not set | 30 | # CONFIG_EMBEDDED is not set |
28 | CONFIG_KALLSYMS=y | 31 | CONFIG_KALLSYMS=y |
29 | # CONFIG_KALLSYMS_ALL is not set | 32 | # CONFIG_KALLSYMS_ALL is not set |
33 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
34 | CONFIG_HOTPLUG=y | ||
35 | CONFIG_PRINTK=y | ||
36 | CONFIG_BUG=y | ||
37 | CONFIG_ELF_CORE=y | ||
38 | CONFIG_BASE_FULL=y | ||
30 | CONFIG_FUTEX=y | 39 | CONFIG_FUTEX=y |
31 | CONFIG_EPOLL=y | 40 | CONFIG_EPOLL=y |
32 | CONFIG_IOSCHED_NOOP=y | 41 | CONFIG_SHMEM=y |
33 | CONFIG_IOSCHED_AS=y | 42 | CONFIG_CC_ALIGN_FUNCTIONS=0 |
34 | CONFIG_IOSCHED_DEADLINE=y | 43 | CONFIG_CC_ALIGN_LABELS=0 |
35 | CONFIG_IOSCHED_CFQ=y | 44 | CONFIG_CC_ALIGN_LOOPS=0 |
36 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 45 | CONFIG_CC_ALIGN_JUMPS=0 |
46 | CONFIG_SLAB=y | ||
47 | # CONFIG_TINY_SHMEM is not set | ||
48 | CONFIG_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 | |||
43 | CONFIG_MODULE_FORCE_UNLOAD=y | 56 | CONFIG_MODULE_FORCE_UNLOAD=y |
44 | CONFIG_OBSOLETE_MODPARM=y | 57 | CONFIG_OBSOLETE_MODPARM=y |
45 | CONFIG_MODVERSIONS=y | 58 | CONFIG_MODVERSIONS=y |
59 | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||
46 | CONFIG_KMOD=y | 60 | CONFIG_KMOD=y |
47 | CONFIG_STOP_MACHINE=y | 61 | CONFIG_STOP_MACHINE=y |
48 | 62 | ||
49 | # | 63 | # |
64 | # Block layer | ||
65 | # | ||
66 | |||
67 | # | ||
68 | # IO Schedulers | ||
69 | # | ||
70 | CONFIG_IOSCHED_NOOP=y | ||
71 | CONFIG_IOSCHED_AS=y | ||
72 | CONFIG_IOSCHED_DEADLINE=y | ||
73 | CONFIG_IOSCHED_CFQ=y | ||
74 | CONFIG_DEFAULT_AS=y | ||
75 | # CONFIG_DEFAULT_DEADLINE is not set | ||
76 | # CONFIG_DEFAULT_CFQ is not set | ||
77 | # CONFIG_DEFAULT_NOOP is not set | ||
78 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
79 | |||
80 | # | ||
50 | # Processor type and features | 81 | # Processor type and features |
51 | # | 82 | # |
52 | CONFIG_IA64=y | 83 | CONFIG_IA64=y |
53 | CONFIG_64BIT=y | 84 | CONFIG_64BIT=y |
54 | CONFIG_MMU=y | 85 | CONFIG_MMU=y |
86 | CONFIG_SWIOTLB=y | ||
55 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | 87 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y |
88 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
56 | CONFIG_TIME_INTERPOLATION=y | 89 | CONFIG_TIME_INTERPOLATION=y |
57 | CONFIG_EFI=y | 90 | CONFIG_EFI=y |
91 | CONFIG_GENERIC_IOMAP=y | ||
92 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | ||
93 | CONFIG_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 |
62 | CONFIG_IA64_HP_SIM=y | 99 | CONFIG_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 |
68 | CONFIG_IA64_PAGE_SIZE_64KB=y | 105 | CONFIG_IA64_PAGE_SIZE_64KB=y |
106 | CONFIG_PGTABLE_3=y | ||
107 | # CONFIG_PGTABLE_4 is not set | ||
108 | # CONFIG_HZ_100 is not set | ||
109 | CONFIG_HZ_250=y | ||
110 | # CONFIG_HZ_1000 is not set | ||
111 | CONFIG_HZ=250 | ||
69 | CONFIG_IA64_L1_CACHE_SHIFT=7 | 112 | CONFIG_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 |
73 | CONFIG_FORCE_MAX_ZONEORDER=18 | 114 | CONFIG_FORCE_MAX_ZONEORDER=17 |
74 | CONFIG_SMP=y | 115 | CONFIG_SMP=y |
75 | CONFIG_NR_CPUS=64 | 116 | CONFIG_NR_CPUS=64 |
117 | # CONFIG_HOTPLUG_CPU is not set | ||
118 | # CONFIG_SCHED_SMT is not set | ||
76 | CONFIG_PREEMPT=y | 119 | CONFIG_PREEMPT=y |
77 | CONFIG_HAVE_DEC_LOCK=y | 120 | CONFIG_SELECT_MEMORY_MODEL=y |
121 | CONFIG_FLATMEM_MANUAL=y | ||
122 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
123 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
124 | CONFIG_FLATMEM=y | ||
125 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
126 | # CONFIG_SPARSEMEM_STATIC is not set | ||
127 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
128 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | ||
129 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y | ||
130 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
131 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | ||
132 | # CONFIG_VIRTUAL_MEM_MAP is not set | ||
78 | CONFIG_IA32_SUPPORT=y | 133 | CONFIG_IA32_SUPPORT=y |
79 | CONFIG_COMPAT=y | 134 | CONFIG_COMPAT=y |
135 | # CONFIG_IA64_MCA_RECOVERY is not set | ||
80 | # CONFIG_PERFMON is not set | 136 | # CONFIG_PERFMON is not set |
81 | CONFIG_IA64_PALINFO=m | 137 | CONFIG_IA64_PALINFO=m |
82 | 138 | ||
@@ -84,7 +140,6 @@ CONFIG_IA64_PALINFO=m | |||
84 | # Firmware Drivers | 140 | # Firmware Drivers |
85 | # | 141 | # |
86 | CONFIG_EFI_VARS=y | 142 | CONFIG_EFI_VARS=y |
87 | # CONFIG_SMBIOS is not set | ||
88 | CONFIG_BINFMT_ELF=y | 143 | CONFIG_BINFMT_ELF=y |
89 | CONFIG_BINFMT_MISC=y | 144 | CONFIG_BINFMT_MISC=y |
90 | 145 | ||
@@ -93,15 +148,98 @@ CONFIG_BINFMT_MISC=y | |||
93 | # | 148 | # |
94 | 149 | ||
95 | # | 150 | # |
151 | # Networking | ||
152 | # | ||
153 | CONFIG_NET=y | ||
154 | |||
155 | # | ||
156 | # Networking options | ||
157 | # | ||
158 | # CONFIG_NETDEBUG is not set | ||
159 | CONFIG_PACKET=y | ||
160 | # CONFIG_PACKET_MMAP is not set | ||
161 | # CONFIG_UNIX is not set | ||
162 | # CONFIG_NET_KEY is not set | ||
163 | CONFIG_INET=y | ||
164 | CONFIG_IP_MULTICAST=y | ||
165 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
166 | CONFIG_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 | ||
177 | CONFIG_INET_DIAG=y | ||
178 | CONFIG_INET_TCP_DIAG=y | ||
179 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
180 | CONFIG_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 | ||
233 | CONFIG_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 | ||
121 | CONFIG_BLK_DEV_LOOP=y | 260 | CONFIG_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 |
124 | CONFIG_BLK_DEV_RAM=y | 263 | CONFIG_BLK_DEV_RAM=y |
264 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
125 | CONFIG_BLK_DEV_RAM_SIZE=4096 | 265 | CONFIG_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 | ||
136 | CONFIG_SCSI=y | 279 | CONFIG_SCSI=y |
137 | CONFIG_SCSI_PROC_FS=y | 280 | CONFIG_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 | # |
158 | CONFIG_SCSI_SPI_ATTRS=y | 302 | CONFIG_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 | # |
190 | CONFIG_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 | # |
195 | CONFIG_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 | ||
200 | CONFIG_INET=y | ||
201 | CONFIG_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 | ||
280 | CONFIG_SOUND_GAMEPORT=y | ||
281 | CONFIG_SERIO=y | ||
282 | # CONFIG_SERIO_I8042 is not set | ||
283 | CONFIG_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 | # | ||
403 | CONFIG_SERIO=y | ||
404 | # CONFIG_SERIO_I8042 is not set | ||
405 | CONFIG_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 | # |
298 | CONFIG_VT=y | 412 | CONFIG_VT=y |
@@ -310,7 +424,6 @@ CONFIG_HW_CONSOLE=y | |||
310 | # | 424 | # |
311 | CONFIG_UNIX98_PTYS=y | 425 | CONFIG_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 | |||
324 | CONFIG_EFI_RTC=y | 437 | CONFIG_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 | # | ||
473 | CONFIG_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 | ||
366 | CONFIG_DUMMY_CONSOLE=y | 505 | CONFIG_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 | # |
385 | CONFIG_EXT2_FS=y | 543 | CONFIG_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 | ||
387 | CONFIG_EXT3_FS=y | 546 | CONFIG_EXT3_FS=y |
388 | # CONFIG_EXT3_FS_XATTR is not set | 547 | # CONFIG_EXT3_FS_XATTR is not set |
389 | CONFIG_JBD=y | 548 | CONFIG_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 |
557 | CONFIG_INOTIFY=y | ||
396 | # CONFIG_QUOTA is not set | 558 | # CONFIG_QUOTA is not set |
559 | CONFIG_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 | |||
415 | CONFIG_PROC_FS=y | 580 | CONFIG_PROC_FS=y |
416 | CONFIG_PROC_KCORE=y | 581 | CONFIG_PROC_KCORE=y |
417 | CONFIG_SYSFS=y | 582 | CONFIG_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 |
421 | CONFIG_HUGETLBFS=y | 584 | CONFIG_HUGETLBFS=y |
422 | CONFIG_HUGETLB_PAGE=y | 585 | CONFIG_HUGETLB_PAGE=y |
423 | CONFIG_RAMFS=y | 586 | CONFIG_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 | |||
448 | CONFIG_NFS_DIRECTIO=y | 613 | CONFIG_NFS_DIRECTIO=y |
449 | CONFIG_NFSD=y | 614 | CONFIG_NFSD=y |
450 | CONFIG_NFSD_V3=y | 615 | CONFIG_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 |
453 | CONFIG_LOCKD=y | 619 | CONFIG_LOCKD=y |
454 | CONFIG_LOCKD_V4=y | 620 | CONFIG_LOCKD_V4=y |
455 | CONFIG_EXPORTFS=y | 621 | CONFIG_EXPORTFS=y |
622 | CONFIG_NFS_COMMON=y | ||
456 | CONFIG_SUNRPC=y | 623 | CONFIG_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 | ||
483 | CONFIG_EFI_PARTITION=y | 652 | CONFIG_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 | ||
493 | CONFIG_CRC32=y | 664 | CONFIG_CRC32=y |
494 | # CONFIG_LIBCRC32C is not set | 665 | # CONFIG_LIBCRC32C is not set |
666 | CONFIG_GENERIC_HARDIRQS=y | ||
667 | CONFIG_GENERIC_IRQ_PROBE=y | ||
668 | CONFIG_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 | |||
502 | CONFIG_HP_SIMSCSI=y | 676 | CONFIG_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 |
513 | CONFIG_IA64_GRANULE_64MB=y | ||
514 | CONFIG_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 |
689 | CONFIG_DEBUG_KERNEL=y | ||
690 | CONFIG_LOG_BUF_SHIFT=16 | ||
691 | CONFIG_DETECT_SOFTLOCKUP=y | ||
692 | # CONFIG_SCHEDSTATS is not set | ||
518 | # CONFIG_DEBUG_SLAB is not set | 693 | # CONFIG_DEBUG_SLAB is not set |
694 | CONFIG_DEBUG_PREEMPT=y | ||
695 | CONFIG_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 | ||
699 | CONFIG_DEBUG_INFO=y | ||
700 | # CONFIG_DEBUG_FS is not set | ||
701 | # CONFIG_DEBUG_VM is not set | ||
702 | CONFIG_FORCED_INLINING=y | ||
703 | # CONFIG_RCU_TORTURE_TEST is not set | ||
704 | # CONFIG_IA64_GRANULE_16MB is not set | ||
705 | CONFIG_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 |
523 | CONFIG_DEBUG_INFO=y | ||
524 | CONFIG_SYSVIPC_COMPAT=y | 710 | CONFIG_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 | # |
10 | CONFIG_EXPERIMENTAL=y | 10 | CONFIG_EXPERIMENTAL=y |
11 | CONFIG_CLEAN_COMPILE=y | ||
12 | CONFIG_LOCK_KERNEL=y | 11 | CONFIG_LOCK_KERNEL=y |
13 | CONFIG_INIT_ENV_ARG_LIMIT=32 | 12 | CONFIG_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 |
24 | CONFIG_SYSCTL=y | 23 | CONFIG_SYSCTL=y |
25 | # CONFIG_AUDIT is not set | 24 | # CONFIG_AUDIT is not set |
26 | CONFIG_HOTPLUG=y | ||
27 | CONFIG_KOBJECT_UEVENT=y | ||
28 | # CONFIG_IKCONFIG is not set | 25 | # CONFIG_IKCONFIG is not set |
29 | CONFIG_CPUSETS=y | 26 | CONFIG_CPUSETS=y |
30 | CONFIG_INITRAMFS_SOURCE="" | 27 | CONFIG_INITRAMFS_SOURCE="" |
28 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
31 | # CONFIG_EMBEDDED is not set | 29 | # CONFIG_EMBEDDED is not set |
32 | CONFIG_KALLSYMS=y | 30 | CONFIG_KALLSYMS=y |
33 | CONFIG_KALLSYMS_ALL=y | 31 | CONFIG_KALLSYMS_ALL=y |
34 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 32 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
33 | CONFIG_HOTPLUG=y | ||
35 | CONFIG_PRINTK=y | 34 | CONFIG_PRINTK=y |
36 | CONFIG_BUG=y | 35 | CONFIG_BUG=y |
36 | CONFIG_ELF_CORE=y | ||
37 | CONFIG_BASE_FULL=y | 37 | CONFIG_BASE_FULL=y |
38 | CONFIG_FUTEX=y | 38 | CONFIG_FUTEX=y |
39 | CONFIG_EPOLL=y | 39 | CONFIG_EPOLL=y |
@@ -42,8 +42,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0 | |||
42 | CONFIG_CC_ALIGN_LABELS=0 | 42 | CONFIG_CC_ALIGN_LABELS=0 |
43 | CONFIG_CC_ALIGN_LOOPS=0 | 43 | CONFIG_CC_ALIGN_LOOPS=0 |
44 | CONFIG_CC_ALIGN_JUMPS=0 | 44 | CONFIG_CC_ALIGN_JUMPS=0 |
45 | CONFIG_SLAB=y | ||
45 | # CONFIG_TINY_SHMEM is not set | 46 | # CONFIG_TINY_SHMEM is not set |
46 | CONFIG_BASE_SMALL=0 | 47 | CONFIG_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 | |||
88 | CONFIG_GENERIC_IOMAP=y | 90 | CONFIG_GENERIC_IOMAP=y |
89 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | 91 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y |
90 | CONFIG_IA64_UNCACHED_ALLOCATOR=y | 92 | CONFIG_IA64_UNCACHED_ALLOCATOR=y |
91 | CONFIG_ZONE_DMA_IS_DMA32=y | 93 | CONFIG_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 | |||
126 | CONFIG_NEED_MULTIPLE_NODES=y | 128 | CONFIG_NEED_MULTIPLE_NODES=y |
127 | # CONFIG_SPARSEMEM_STATIC is not set | 129 | # CONFIG_SPARSEMEM_STATIC is not set |
128 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 130 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
131 | CONFIG_MIGRATION=y | ||
129 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | 132 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y |
130 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y | 133 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y |
131 | CONFIG_ARCH_FLATMEM_ENABLE=y | 134 | CONFIG_ARCH_FLATMEM_ENABLE=y |
@@ -140,6 +143,7 @@ CONFIG_COMPAT=y | |||
140 | CONFIG_IA64_MCA_RECOVERY=y | 143 | CONFIG_IA64_MCA_RECOVERY=y |
141 | CONFIG_PERFMON=y | 144 | CONFIG_PERFMON=y |
142 | CONFIG_IA64_PALINFO=y | 145 | CONFIG_IA64_PALINFO=y |
146 | CONFIG_SGI_SN=y | ||
143 | 147 | ||
144 | # | 148 | # |
145 | # Firmware Drivers | 149 | # Firmware Drivers |
@@ -166,6 +170,7 @@ CONFIG_ACPI=y | |||
166 | CONFIG_ACPI_NUMA=y | 170 | CONFIG_ACPI_NUMA=y |
167 | CONFIG_ACPI_BLACKLIST_YEAR=0 | 171 | CONFIG_ACPI_BLACKLIST_YEAR=0 |
168 | # CONFIG_ACPI_DEBUG is not set | 172 | # CONFIG_ACPI_DEBUG is not set |
173 | CONFIG_ACPI_EC=y | ||
169 | CONFIG_ACPI_POWER=y | 174 | CONFIG_ACPI_POWER=y |
170 | CONFIG_ACPI_SYSTEM=y | 175 | CONFIG_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 | ||
210 | CONFIG_PACKET=y | 216 | CONFIG_PACKET=y |
211 | CONFIG_PACKET_MMAP=y | 217 | CONFIG_PACKET_MMAP=y |
212 | CONFIG_UNIX=y | 218 | CONFIG_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 | # |
332 | CONFIG_IDE=y | 343 | CONFIG_IDE=y |
344 | CONFIG_IDE_MAX_HWIFS=4 | ||
333 | CONFIG_BLK_DEV_IDE=y | 345 | CONFIG_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 |
459 | CONFIG_SCSI_QLOGIC_1280=y | 471 | CONFIG_SCSI_QLOGIC_1280=y |
460 | CONFIG_SCSI_QLA2XXX=y | 472 | # CONFIG_SCSI_QLA_FC is not set |
461 | # CONFIG_SCSI_QLA21XX is not set | ||
462 | CONFIG_SCSI_QLA22XX=y | ||
463 | CONFIG_SCSI_QLA2300=y | ||
464 | CONFIG_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 |
549 | CONFIG_TIGON3=y | 556 | CONFIG_TIGON3=y |
550 | # CONFIG_BNX2 is not set | 557 | # CONFIG_BNX2 is not set |
@@ -632,12 +639,15 @@ CONFIG_VT=y | |||
632 | CONFIG_VT_CONSOLE=y | 639 | CONFIG_VT_CONSOLE=y |
633 | CONFIG_HW_CONSOLE=y | 640 | CONFIG_HW_CONSOLE=y |
634 | CONFIG_SERIAL_NONSTANDARD=y | 641 | CONFIG_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 | |||
659 | CONFIG_SERIAL_SGI_L1_CONSOLE=y | 669 | CONFIG_SERIAL_SGI_L1_CONSOLE=y |
660 | # CONFIG_SERIAL_JSM is not set | 670 | # CONFIG_SERIAL_JSM is not set |
661 | CONFIG_SERIAL_SGI_IOC4=y | 671 | CONFIG_SERIAL_SGI_IOC4=y |
672 | CONFIG_SERIAL_SGI_IOC3=y | ||
662 | CONFIG_UNIX98_PTYS=y | 673 | CONFIG_UNIX98_PTYS=y |
663 | CONFIG_LEGACY_PTYS=y | 674 | CONFIG_LEGACY_PTYS=y |
664 | CONFIG_LEGACY_PTY_COUNT=256 | 675 | CONFIG_LEGACY_PTY_COUNT=256 |
@@ -685,8 +696,8 @@ CONFIG_AGP=y | |||
685 | CONFIG_AGP_SGI_TIOCA=y | 696 | CONFIG_AGP_SGI_TIOCA=y |
686 | # CONFIG_DRM is not set | 697 | # CONFIG_DRM is not set |
687 | CONFIG_RAW_DRIVER=m | 698 | CONFIG_RAW_DRIVER=m |
688 | # CONFIG_HPET is not set | ||
689 | CONFIG_MAX_RAW_DEVS=256 | 699 | CONFIG_MAX_RAW_DEVS=256 |
700 | # CONFIG_HPET is not set | ||
690 | # CONFIG_HANGCHECK_TIMER is not set | 701 | # CONFIG_HANGCHECK_TIMER is not set |
691 | CONFIG_MMTIMER=y | 702 | CONFIG_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 | # |
797 | CONFIG_USB_HID=m | 815 | CONFIG_USB_HID=m |
798 | CONFIG_USB_HIDINPUT=y | 816 | CONFIG_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 | # |
901 | CONFIG_SGI_IOC4=y | 921 | CONFIG_SGI_IOC4=y |
922 | CONFIG_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 |
930 | CONFIG_XFS_POSIX_ACL=y | 955 | CONFIG_XFS_POSIX_ACL=y |
931 | CONFIG_XFS_RT=y | 956 | CONFIG_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 |
934 | CONFIG_INOTIFY=y | 960 | CONFIG_INOTIFY=y |
@@ -971,6 +997,7 @@ CONFIG_HUGETLBFS=y | |||
971 | CONFIG_HUGETLB_PAGE=y | 997 | CONFIG_HUGETLB_PAGE=y |
972 | CONFIG_RAMFS=y | 998 | CONFIG_RAMFS=y |
973 | CONFIG_RELAYFS_FS=m | 999 | CONFIG_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 | |||
1039 | CONFIG_SGI_PARTITION=y | 1066 | CONFIG_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 | ||
1042 | CONFIG_EFI_PARTITION=y | 1070 | CONFIG_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 |
1112 | CONFIG_DEBUG_KERNEL=y | ||
1113 | CONFIG_MAGIC_SYSRQ=y | 1140 | CONFIG_MAGIC_SYSRQ=y |
1141 | CONFIG_DEBUG_KERNEL=y | ||
1114 | CONFIG_LOG_BUF_SHIFT=20 | 1142 | CONFIG_LOG_BUF_SHIFT=20 |
1115 | CONFIG_DETECT_SOFTLOCKUP=y | 1143 | CONFIG_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 |
1118 | CONFIG_DEBUG_PREEMPT=y | 1146 | CONFIG_DEBUG_PREEMPT=y |
1147 | CONFIG_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 |
1122 | CONFIG_DEBUG_INFO=y | 1151 | CONFIG_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 |
1154 | CONFIG_FORCED_INLINING=y | ||
1125 | # CONFIG_RCU_TORTURE_TEST is not set | 1155 | # CONFIG_RCU_TORTURE_TEST is not set |
1126 | CONFIG_IA64_GRANULE_16MB=y | 1156 | CONFIG_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 | # |
10 | CONFIG_EXPERIMENTAL=y | 10 | CONFIG_EXPERIMENTAL=y |
11 | CONFIG_CLEAN_COMPILE=y | ||
12 | CONFIG_LOCK_KERNEL=y | 11 | CONFIG_LOCK_KERNEL=y |
13 | CONFIG_INIT_ENV_ARG_LIMIT=32 | 12 | CONFIG_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 |
24 | CONFIG_SYSCTL=y | 23 | CONFIG_SYSCTL=y |
25 | # CONFIG_AUDIT is not set | 24 | # CONFIG_AUDIT is not set |
26 | CONFIG_HOTPLUG=y | ||
27 | CONFIG_KOBJECT_UEVENT=y | ||
28 | CONFIG_IKCONFIG=y | 25 | CONFIG_IKCONFIG=y |
29 | CONFIG_IKCONFIG_PROC=y | 26 | CONFIG_IKCONFIG_PROC=y |
30 | # CONFIG_CPUSETS is not set | 27 | # CONFIG_CPUSETS is not set |
31 | CONFIG_INITRAMFS_SOURCE="" | 28 | CONFIG_INITRAMFS_SOURCE="" |
29 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
32 | # CONFIG_EMBEDDED is not set | 30 | # CONFIG_EMBEDDED is not set |
33 | CONFIG_KALLSYMS=y | 31 | CONFIG_KALLSYMS=y |
34 | CONFIG_KALLSYMS_ALL=y | 32 | CONFIG_KALLSYMS_ALL=y |
35 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 33 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
34 | CONFIG_HOTPLUG=y | ||
36 | CONFIG_PRINTK=y | 35 | CONFIG_PRINTK=y |
37 | CONFIG_BUG=y | 36 | CONFIG_BUG=y |
37 | CONFIG_ELF_CORE=y | ||
38 | CONFIG_BASE_FULL=y | 38 | CONFIG_BASE_FULL=y |
39 | CONFIG_FUTEX=y | 39 | CONFIG_FUTEX=y |
40 | CONFIG_EPOLL=y | 40 | CONFIG_EPOLL=y |
@@ -43,8 +43,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0 | |||
43 | CONFIG_CC_ALIGN_LABELS=0 | 43 | CONFIG_CC_ALIGN_LABELS=0 |
44 | CONFIG_CC_ALIGN_LOOPS=0 | 44 | CONFIG_CC_ALIGN_LOOPS=0 |
45 | CONFIG_CC_ALIGN_JUMPS=0 | 45 | CONFIG_CC_ALIGN_JUMPS=0 |
46 | CONFIG_SLAB=y | ||
46 | # CONFIG_TINY_SHMEM is not set | 47 | # CONFIG_TINY_SHMEM is not set |
47 | CONFIG_BASE_SMALL=0 | 48 | CONFIG_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 | |||
88 | CONFIG_EFI=y | 90 | CONFIG_EFI=y |
89 | CONFIG_GENERIC_IOMAP=y | 91 | CONFIG_GENERIC_IOMAP=y |
90 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | 92 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y |
91 | CONFIG_ZONE_DMA_IS_DMA32=y | 93 | CONFIG_DMA_IS_DMA32=y |
92 | # CONFIG_IA64_GENERIC is not set | 94 | # CONFIG_IA64_GENERIC is not set |
93 | CONFIG_IA64_DIG=y | 95 | CONFIG_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 | |||
164 | CONFIG_ACPI_THERMAL=m | 166 | CONFIG_ACPI_THERMAL=m |
165 | CONFIG_ACPI_BLACKLIST_YEAR=0 | 167 | CONFIG_ACPI_BLACKLIST_YEAR=0 |
166 | # CONFIG_ACPI_DEBUG is not set | 168 | # CONFIG_ACPI_DEBUG is not set |
169 | CONFIG_ACPI_EC=y | ||
167 | CONFIG_ACPI_POWER=y | 170 | CONFIG_ACPI_POWER=y |
168 | CONFIG_ACPI_SYSTEM=y | 171 | CONFIG_ACPI_SYSTEM=y |
169 | CONFIG_ACPI_CONTAINER=m | 172 | CONFIG_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 | ||
208 | CONFIG_PACKET=y | 212 | CONFIG_PACKET=y |
209 | # CONFIG_PACKET_MMAP is not set | 213 | # CONFIG_PACKET_MMAP is not set |
210 | CONFIG_UNIX=y | 214 | CONFIG_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 | # |
330 | CONFIG_IDE=y | 339 | CONFIG_IDE=y |
340 | CONFIG_IDE_MAX_HWIFS=4 | ||
331 | CONFIG_BLK_DEV_IDE=y | 341 | CONFIG_BLK_DEV_IDE=y |
332 | 342 | ||
333 | # | 343 | # |
@@ -445,13 +455,7 @@ CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 | |||
445 | CONFIG_SCSI_QLOGIC_FC=y | 455 | CONFIG_SCSI_QLOGIC_FC=y |
446 | # CONFIG_SCSI_QLOGIC_FC_FIRMWARE is not set | 456 | # CONFIG_SCSI_QLOGIC_FC_FIRMWARE is not set |
447 | CONFIG_SCSI_QLOGIC_1280=y | 457 | CONFIG_SCSI_QLOGIC_1280=y |
448 | CONFIG_SCSI_QLA2XXX=y | 458 | # CONFIG_SCSI_QLA_FC is not set |
449 | CONFIG_SCSI_QLA21XX=m | ||
450 | CONFIG_SCSI_QLA22XX=m | ||
451 | CONFIG_SCSI_QLA2300=m | ||
452 | CONFIG_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 |
568 | CONFIG_E1000=y | 572 | CONFIG_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 |
578 | CONFIG_TIGON3=y | 584 | CONFIG_TIGON3=y |
@@ -677,12 +683,15 @@ CONFIG_VT=y | |||
677 | CONFIG_VT_CONSOLE=y | 683 | CONFIG_VT_CONSOLE=y |
678 | CONFIG_HW_CONSOLE=y | 684 | CONFIG_HW_CONSOLE=y |
679 | CONFIG_SERIAL_NONSTANDARD=y | 685 | CONFIG_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 | |||
695 | CONFIG_SERIAL_8250_CONSOLE=y | 704 | CONFIG_SERIAL_8250_CONSOLE=y |
696 | CONFIG_SERIAL_8250_ACPI=y | 705 | CONFIG_SERIAL_8250_ACPI=y |
697 | CONFIG_SERIAL_8250_NR_UARTS=6 | 706 | CONFIG_SERIAL_8250_NR_UARTS=6 |
707 | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | ||
698 | CONFIG_SERIAL_8250_EXTENDED=y | 708 | CONFIG_SERIAL_8250_EXTENDED=y |
699 | CONFIG_SERIAL_8250_SHARE_IRQ=y | 709 | CONFIG_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 |
741 | CONFIG_RAW_DRIVER=m | 751 | CONFIG_RAW_DRIVER=m |
752 | CONFIG_MAX_RAW_DEVS=256 | ||
742 | CONFIG_HPET=y | 753 | CONFIG_HPET=y |
743 | # CONFIG_HPET_RTC_IRQ is not set | 754 | # CONFIG_HPET_RTC_IRQ is not set |
744 | CONFIG_HPET_MMAP=y | 755 | CONFIG_HPET_MMAP=y |
745 | CONFIG_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 | # |
767 | CONFIG_HWMON=y | 783 | CONFIG_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 | # |
862 | CONFIG_USB_HID=y | 881 | CONFIG_USB_HID=y |
863 | CONFIG_USB_HIDINPUT=y | 882 | CONFIG_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 |
986 | CONFIG_INOTIFY=y | 1008 | CONFIG_INOTIFY=y |
@@ -1022,6 +1044,7 @@ CONFIG_HUGETLBFS=y | |||
1022 | CONFIG_HUGETLB_PAGE=y | 1044 | CONFIG_HUGETLB_PAGE=y |
1023 | CONFIG_RAMFS=y | 1045 | CONFIG_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 | |||
1091 | CONFIG_SGI_PARTITION=y | 1114 | CONFIG_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 | ||
1094 | CONFIG_EFI_PARTITION=y | 1118 | CONFIG_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 |
1161 | CONFIG_DEBUG_KERNEL=y | ||
1162 | CONFIG_MAGIC_SYSRQ=y | 1185 | CONFIG_MAGIC_SYSRQ=y |
1186 | CONFIG_DEBUG_KERNEL=y | ||
1163 | CONFIG_LOG_BUF_SHIFT=20 | 1187 | CONFIG_LOG_BUF_SHIFT=20 |
1164 | CONFIG_DETECT_SOFTLOCKUP=y | 1188 | CONFIG_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 |
1191 | CONFIG_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 |
1198 | CONFIG_FORCED_INLINING=y | ||
1173 | # CONFIG_RCU_TORTURE_TEST is not set | 1199 | # CONFIG_RCU_TORTURE_TEST is not set |
1174 | CONFIG_IA64_GRANULE_16MB=y | 1200 | CONFIG_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 | # |
10 | CONFIG_EXPERIMENTAL=y | 10 | CONFIG_EXPERIMENTAL=y |
11 | # CONFIG_CLEAN_COMPILE is not set | ||
12 | CONFIG_BROKEN=y | ||
13 | CONFIG_BROKEN_ON_SMP=y | ||
14 | CONFIG_LOCK_KERNEL=y | 11 | CONFIG_LOCK_KERNEL=y |
15 | CONFIG_INIT_ENV_ARG_LIMIT=32 | 12 | CONFIG_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 |
27 | CONFIG_SYSCTL=y | 24 | CONFIG_SYSCTL=y |
28 | # CONFIG_AUDIT is not set | 25 | # CONFIG_AUDIT is not set |
29 | CONFIG_HOTPLUG=y | ||
30 | CONFIG_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 |
33 | CONFIG_INITRAMFS_SOURCE="" | 28 | CONFIG_INITRAMFS_SOURCE="" |
29 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
34 | # CONFIG_EMBEDDED is not set | 30 | # CONFIG_EMBEDDED is not set |
35 | CONFIG_KALLSYMS=y | 31 | CONFIG_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 |
34 | CONFIG_HOTPLUG=y | ||
38 | CONFIG_PRINTK=y | 35 | CONFIG_PRINTK=y |
39 | CONFIG_BUG=y | 36 | CONFIG_BUG=y |
37 | CONFIG_ELF_CORE=y | ||
40 | CONFIG_BASE_FULL=y | 38 | CONFIG_BASE_FULL=y |
41 | CONFIG_FUTEX=y | 39 | CONFIG_FUTEX=y |
42 | CONFIG_EPOLL=y | 40 | CONFIG_EPOLL=y |
@@ -45,8 +43,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0 | |||
45 | CONFIG_CC_ALIGN_LABELS=0 | 43 | CONFIG_CC_ALIGN_LABELS=0 |
46 | CONFIG_CC_ALIGN_LOOPS=0 | 44 | CONFIG_CC_ALIGN_LOOPS=0 |
47 | CONFIG_CC_ALIGN_JUMPS=0 | 45 | CONFIG_CC_ALIGN_JUMPS=0 |
46 | CONFIG_SLAB=y | ||
48 | # CONFIG_TINY_SHMEM is not set | 47 | # CONFIG_TINY_SHMEM is not set |
49 | CONFIG_BASE_SMALL=0 | 48 | CONFIG_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 | # | ||
68 | CONFIG_IOSCHED_NOOP=y | ||
69 | CONFIG_IOSCHED_AS=y | ||
70 | CONFIG_IOSCHED_DEADLINE=y | ||
71 | CONFIG_IOSCHED_CFQ=y | ||
72 | CONFIG_DEFAULT_AS=y | ||
73 | # CONFIG_DEFAULT_DEADLINE is not set | ||
74 | # CONFIG_DEFAULT_CFQ is not set | ||
75 | # CONFIG_DEFAULT_NOOP is not set | ||
76 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
77 | |||
78 | # | ||
62 | # Processor type and features | 79 | # Processor type and features |
63 | # | 80 | # |
64 | CONFIG_IA64=y | 81 | CONFIG_IA64=y |
65 | CONFIG_64BIT=y | 82 | CONFIG_64BIT=y |
66 | CONFIG_MMU=y | 83 | CONFIG_MMU=y |
84 | CONFIG_SWIOTLB=y | ||
67 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | 85 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y |
68 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 86 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
69 | CONFIG_TIME_INTERPOLATION=y | 87 | CONFIG_TIME_INTERPOLATION=y |
70 | CONFIG_EFI=y | 88 | CONFIG_EFI=y |
71 | CONFIG_GENERIC_IOMAP=y | 89 | CONFIG_GENERIC_IOMAP=y |
72 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | 90 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y |
91 | CONFIG_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 |
75 | CONFIG_IA64_HP_ZX1=y | 94 | CONFIG_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 |
83 | CONFIG_IA64_PAGE_SIZE_16KB=y | 102 | CONFIG_IA64_PAGE_SIZE_16KB=y |
84 | # CONFIG_IA64_PAGE_SIZE_64KB is not set | 103 | # CONFIG_IA64_PAGE_SIZE_64KB is not set |
104 | CONFIG_PGTABLE_3=y | ||
105 | # CONFIG_PGTABLE_4 is not set | ||
85 | # CONFIG_HZ_100 is not set | 106 | # CONFIG_HZ_100 is not set |
86 | CONFIG_HZ_250=y | 107 | CONFIG_HZ_250=y |
87 | # CONFIG_HZ_1000 is not set | 108 | # CONFIG_HZ_1000 is not set |
88 | CONFIG_HZ=250 | 109 | CONFIG_HZ=250 |
89 | CONFIG_IA64_L1_CACHE_SHIFT=7 | 110 | CONFIG_IA64_L1_CACHE_SHIFT=7 |
90 | # CONFIG_NUMA is not set | ||
91 | CONFIG_VIRTUAL_MEM_MAP=y | ||
92 | CONFIG_HOLES_IN_ZONE=y | ||
93 | # CONFIG_IA64_CYCLONE is not set | 111 | # CONFIG_IA64_CYCLONE is not set |
94 | CONFIG_IOSAPIC=y | 112 | CONFIG_IOSAPIC=y |
95 | # CONFIG_IA64_SGI_SN_XP is not set | 113 | CONFIG_FORCE_MAX_ZONEORDER=17 |
96 | CONFIG_FORCE_MAX_ZONEORDER=18 | ||
97 | CONFIG_SMP=y | 114 | CONFIG_SMP=y |
98 | CONFIG_NR_CPUS=16 | 115 | CONFIG_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 | |||
106 | CONFIG_FLATMEM=y | 123 | CONFIG_FLATMEM=y |
107 | CONFIG_FLAT_NODE_MEM_MAP=y | 124 | CONFIG_FLAT_NODE_MEM_MAP=y |
108 | # CONFIG_SPARSEMEM_STATIC is not set | 125 | # CONFIG_SPARSEMEM_STATIC is not set |
109 | CONFIG_HAVE_DEC_LOCK=y | 126 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
127 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | ||
128 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y | ||
129 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
130 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | ||
131 | CONFIG_ARCH_DISCONTIGMEM_DEFAULT=y | ||
132 | CONFIG_VIRTUAL_MEM_MAP=y | ||
133 | CONFIG_HOLES_IN_ZONE=y | ||
110 | CONFIG_IA32_SUPPORT=y | 134 | CONFIG_IA32_SUPPORT=y |
111 | CONFIG_COMPAT=y | 135 | CONFIG_COMPAT=y |
112 | CONFIG_IA64_MCA_RECOVERY=y | 136 | CONFIG_IA64_MCA_RECOVERY=y |
@@ -118,7 +142,6 @@ CONFIG_IA64_PALINFO=y | |||
118 | # | 142 | # |
119 | CONFIG_EFI_VARS=y | 143 | CONFIG_EFI_VARS=y |
120 | CONFIG_EFI_PCDP=y | 144 | CONFIG_EFI_PCDP=y |
121 | # CONFIG_DELL_RBU is not set | ||
122 | CONFIG_BINFMT_ELF=y | 145 | CONFIG_BINFMT_ELF=y |
123 | CONFIG_BINFMT_MISC=y | 146 | CONFIG_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 | # |
128 | CONFIG_PM=y | 151 | CONFIG_PM=y |
152 | CONFIG_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 | |||
138 | CONFIG_ACPI_THERMAL=y | 162 | CONFIG_ACPI_THERMAL=y |
139 | CONFIG_ACPI_BLACKLIST_YEAR=0 | 163 | CONFIG_ACPI_BLACKLIST_YEAR=0 |
140 | # CONFIG_ACPI_DEBUG is not set | 164 | # CONFIG_ACPI_DEBUG is not set |
165 | CONFIG_ACPI_EC=y | ||
141 | CONFIG_ACPI_POWER=y | 166 | CONFIG_ACPI_POWER=y |
142 | CONFIG_ACPI_SYSTEM=y | 167 | CONFIG_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 | ||
182 | CONFIG_PACKET=y | 208 | CONFIG_PACKET=y |
183 | # CONFIG_PACKET_MMAP is not set | 209 | # CONFIG_PACKET_MMAP is not set |
184 | CONFIG_UNIX=y | 210 | CONFIG_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 | ||
219 | CONFIG_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 | |||
310 | CONFIG_BLK_DEV_RAM_SIZE=4096 | 346 | CONFIG_BLK_DEV_RAM_SIZE=4096 |
311 | CONFIG_BLK_DEV_INITRD=y | 347 | CONFIG_BLK_DEV_INITRD=y |
312 | # CONFIG_CDROM_PKTCDVD is not set | 348 | # CONFIG_CDROM_PKTCDVD is not set |
313 | |||
314 | # | ||
315 | # IO Schedulers | ||
316 | # | ||
317 | CONFIG_IOSCHED_NOOP=y | ||
318 | CONFIG_IOSCHED_AS=y | ||
319 | CONFIG_IOSCHED_DEADLINE=y | ||
320 | CONFIG_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 | # |
326 | CONFIG_IDE=y | 354 | CONFIG_IDE=y |
355 | CONFIG_IDE_MAX_HWIFS=4 | ||
327 | CONFIG_BLK_DEV_IDE=y | 356 | CONFIG_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 | # |
409 | CONFIG_SCSI_SPI_ATTRS=y | 438 | CONFIG_SCSI_SPI_ATTRS=y |
410 | # CONFIG_SCSI_FC_ATTRS is not set | 439 | CONFIG_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 | |||
438 | CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 | 466 | CONFIG_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 |
443 | CONFIG_SCSI_QLOGIC_1280=y | 470 | CONFIG_SCSI_QLOGIC_1280=y |
444 | # CONFIG_SCSI_QLOGIC_1280_1040 is not set | 471 | # CONFIG_SCSI_QLA_FC is not set |
445 | CONFIG_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 | |||
465 | CONFIG_FUSION=y | 485 | CONFIG_FUSION=y |
466 | CONFIG_FUSION_SPI=y | 486 | CONFIG_FUSION_SPI=y |
467 | CONFIG_FUSION_FC=y | 487 | CONFIG_FUSION_FC=y |
488 | # CONFIG_FUSION_SAS is not set | ||
468 | CONFIG_FUSION_MAX_SGE=128 | 489 | CONFIG_FUSION_MAX_SGE=128 |
469 | CONFIG_FUSION_CTL=m | 490 | CONFIG_FUSION_CTL=m |
470 | 491 | ||
@@ -505,6 +526,7 @@ CONFIG_NET_ETHERNET=y | |||
505 | CONFIG_MII=y | 526 | CONFIG_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 |
549 | CONFIG_E1000=y | 571 | CONFIG_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 |
559 | CONFIG_TIGON3=y | 583 | CONFIG_TIGON3=y |
@@ -651,6 +675,7 @@ CONFIG_SERIAL_8250=y | |||
651 | CONFIG_SERIAL_8250_CONSOLE=y | 675 | CONFIG_SERIAL_8250_CONSOLE=y |
652 | CONFIG_SERIAL_8250_ACPI=y | 676 | CONFIG_SERIAL_8250_ACPI=y |
653 | CONFIG_SERIAL_8250_NR_UARTS=8 | 677 | CONFIG_SERIAL_8250_NR_UARTS=8 |
678 | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | ||
654 | CONFIG_SERIAL_8250_EXTENDED=y | 679 | CONFIG_SERIAL_8250_EXTENDED=y |
655 | CONFIG_SERIAL_8250_SHARE_IRQ=y | 680 | CONFIG_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 | |||
823 | CONFIG_FB_CFB_FILLRECT=y | 859 | CONFIG_FB_CFB_FILLRECT=y |
824 | CONFIG_FB_CFB_COPYAREA=y | 860 | CONFIG_FB_CFB_COPYAREA=y |
825 | CONFIG_FB_CFB_IMAGEBLIT=y | 861 | CONFIG_FB_CFB_IMAGEBLIT=y |
826 | CONFIG_FB_SOFT_CURSOR=y | ||
827 | # CONFIG_FB_MACMODES is not set | 862 | # CONFIG_FB_MACMODES is not set |
828 | CONFIG_FB_MODE_HELPERS=y | 863 | CONFIG_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 | |||
859 | CONFIG_VGA_CONSOLE=y | 892 | CONFIG_VGA_CONSOLE=y |
860 | CONFIG_DUMMY_CONSOLE=y | 893 | CONFIG_DUMMY_CONSOLE=y |
861 | CONFIG_FRAMEBUFFER_CONSOLE=y | 894 | CONFIG_FRAMEBUFFER_CONSOLE=y |
895 | # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set | ||
862 | # CONFIG_FONTS is not set | 896 | # CONFIG_FONTS is not set |
863 | CONFIG_FONT_8x8=y | 897 | CONFIG_FONT_8x8=y |
864 | CONFIG_FONT_8x16=y | 898 | CONFIG_FONT_8x16=y |
@@ -891,6 +925,8 @@ CONFIG_SND_OSSEMUL=y | |||
891 | CONFIG_SND_MIXER_OSS=y | 925 | CONFIG_SND_MIXER_OSS=y |
892 | CONFIG_SND_PCM_OSS=y | 926 | CONFIG_SND_PCM_OSS=y |
893 | CONFIG_SND_SEQUENCER_OSS=y | 927 | CONFIG_SND_SEQUENCER_OSS=y |
928 | # CONFIG_SND_DYNAMIC_MINORS is not set | ||
929 | CONFIG_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 | # |
900 | CONFIG_SND_MPU401_UART=y | 936 | CONFIG_SND_MPU401_UART=y |
901 | CONFIG_SND_OPL3_LIB=y | 937 | CONFIG_SND_OPL3_LIB=y |
938 | CONFIG_SND_AC97_CODEC=y | ||
939 | CONFIG_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 |
907 | CONFIG_SND_AC97_CODEC=y | ||
908 | CONFIG_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 | ||
943 | CONFIG_SND_FM801=y | 968 | CONFIG_SND_FM801=y |
944 | CONFIG_SND_FM801_TEA575X=y | 969 | CONFIG_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 | # |
1006 | CONFIG_USB_STORAGE=y | 1046 | CONFIG_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 | # |
1021 | CONFIG_USB_HID=y | 1062 | CONFIG_USB_HID=y |
1022 | CONFIG_USB_HIDINPUT=y | 1063 | CONFIG_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 |
1024 | CONFIG_USB_HIDDEV=y | 1066 | CONFIG_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 | |||
1173 | CONFIG_HUGETLB_PAGE=y | 1218 | CONFIG_HUGETLB_PAGE=y |
1174 | CONFIG_RAMFS=y | 1219 | CONFIG_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 | ||
1240 | CONFIG_EFI_PARTITION=y | 1287 | CONFIG_EFI_PARTITION=y |
1241 | 1288 | ||
1242 | # | 1289 | # |
@@ -1295,26 +1342,30 @@ CONFIG_GENERIC_IRQ_PROBE=y | |||
1295 | CONFIG_GENERIC_PENDING_IRQ=y | 1342 | CONFIG_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 |
1348 | CONFIG_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 |
1306 | CONFIG_DEBUG_KERNEL=y | ||
1307 | CONFIG_MAGIC_SYSRQ=y | 1354 | CONFIG_MAGIC_SYSRQ=y |
1355 | CONFIG_DEBUG_KERNEL=y | ||
1308 | CONFIG_LOG_BUF_SHIFT=17 | 1356 | CONFIG_LOG_BUF_SHIFT=17 |
1309 | CONFIG_DETECT_SOFTLOCKUP=y | 1357 | CONFIG_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 |
1360 | CONFIG_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 |
1317 | CONFIG_KPROBES=y | 1366 | # CONFIG_DEBUG_VM is not set |
1367 | CONFIG_FORCED_INLINING=y | ||
1368 | # CONFIG_RCU_TORTURE_TEST is not set | ||
1318 | CONFIG_IA64_GRANULE_16MB=y | 1369 | CONFIG_IA64_GRANULE_16MB=y |
1319 | # CONFIG_IA64_GRANULE_64MB is not set | 1370 | # CONFIG_IA64_GRANULE_64MB is not set |
1320 | CONFIG_IA64_PRINT_HAZARDS=y | 1371 | CONFIG_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 | # |
10 | CONFIG_EXPERIMENTAL=y | 10 | CONFIG_EXPERIMENTAL=y |
11 | CONFIG_CLEAN_COMPILE=y | ||
12 | CONFIG_LOCK_KERNEL=y | 11 | CONFIG_LOCK_KERNEL=y |
13 | CONFIG_INIT_ENV_ARG_LIMIT=32 | 12 | CONFIG_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 |
24 | CONFIG_SYSCTL=y | 23 | CONFIG_SYSCTL=y |
25 | # CONFIG_AUDIT is not set | 24 | # CONFIG_AUDIT is not set |
26 | CONFIG_HOTPLUG=y | ||
27 | CONFIG_KOBJECT_UEVENT=y | ||
28 | CONFIG_IKCONFIG=y | 25 | CONFIG_IKCONFIG=y |
29 | CONFIG_IKCONFIG_PROC=y | 26 | CONFIG_IKCONFIG_PROC=y |
30 | # CONFIG_CPUSETS is not set | 27 | # CONFIG_CPUSETS is not set |
31 | CONFIG_INITRAMFS_SOURCE="" | 28 | CONFIG_INITRAMFS_SOURCE="" |
29 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
32 | # CONFIG_EMBEDDED is not set | 30 | # CONFIG_EMBEDDED is not set |
33 | CONFIG_KALLSYMS=y | 31 | CONFIG_KALLSYMS=y |
34 | CONFIG_KALLSYMS_ALL=y | 32 | CONFIG_KALLSYMS_ALL=y |
35 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 33 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
34 | CONFIG_HOTPLUG=y | ||
36 | CONFIG_PRINTK=y | 35 | CONFIG_PRINTK=y |
37 | CONFIG_BUG=y | 36 | CONFIG_BUG=y |
37 | CONFIG_ELF_CORE=y | ||
38 | CONFIG_BASE_FULL=y | 38 | CONFIG_BASE_FULL=y |
39 | CONFIG_FUTEX=y | 39 | CONFIG_FUTEX=y |
40 | CONFIG_EPOLL=y | 40 | CONFIG_EPOLL=y |
@@ -43,8 +43,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0 | |||
43 | CONFIG_CC_ALIGN_LABELS=0 | 43 | CONFIG_CC_ALIGN_LABELS=0 |
44 | CONFIG_CC_ALIGN_LOOPS=0 | 44 | CONFIG_CC_ALIGN_LOOPS=0 |
45 | CONFIG_CC_ALIGN_JUMPS=0 | 45 | CONFIG_CC_ALIGN_JUMPS=0 |
46 | CONFIG_SLAB=y | ||
46 | # CONFIG_TINY_SHMEM is not set | 47 | # CONFIG_TINY_SHMEM is not set |
47 | CONFIG_BASE_SMALL=0 | 48 | CONFIG_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 | |||
59 | CONFIG_STOP_MACHINE=y | 61 | CONFIG_STOP_MACHINE=y |
60 | 62 | ||
61 | # | 63 | # |
64 | # Block layer | ||
65 | # | ||
66 | |||
67 | # | ||
68 | # IO Schedulers | ||
69 | # | ||
70 | CONFIG_IOSCHED_NOOP=y | ||
71 | CONFIG_IOSCHED_AS=y | ||
72 | CONFIG_IOSCHED_DEADLINE=y | ||
73 | CONFIG_IOSCHED_CFQ=y | ||
74 | CONFIG_DEFAULT_AS=y | ||
75 | # CONFIG_DEFAULT_DEADLINE is not set | ||
76 | # CONFIG_DEFAULT_CFQ is not set | ||
77 | # CONFIG_DEFAULT_NOOP is not set | ||
78 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
79 | |||
80 | # | ||
62 | # Processor type and features | 81 | # Processor type and features |
63 | # | 82 | # |
64 | CONFIG_IA64=y | 83 | CONFIG_IA64=y |
65 | CONFIG_64BIT=y | 84 | CONFIG_64BIT=y |
66 | CONFIG_MMU=y | 85 | CONFIG_MMU=y |
86 | CONFIG_SWIOTLB=y | ||
67 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | 87 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y |
68 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 88 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
69 | CONFIG_TIME_INTERPOLATION=y | 89 | CONFIG_TIME_INTERPOLATION=y |
70 | CONFIG_EFI=y | 90 | CONFIG_EFI=y |
71 | CONFIG_GENERIC_IOMAP=y | 91 | CONFIG_GENERIC_IOMAP=y |
72 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | 92 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y |
93 | CONFIG_DMA_IS_DMA32=y | ||
73 | CONFIG_IA64_GENERIC=y | 94 | CONFIG_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 |
90 | CONFIG_HZ=250 | 111 | CONFIG_HZ=250 |
91 | CONFIG_IA64_L1_CACHE_SHIFT=7 | 112 | CONFIG_IA64_L1_CACHE_SHIFT=7 |
92 | CONFIG_NUMA=y | ||
93 | CONFIG_VIRTUAL_MEM_MAP=y | ||
94 | CONFIG_HOLES_IN_ZONE=y | ||
95 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y | ||
96 | CONFIG_IA64_CYCLONE=y | 113 | CONFIG_IA64_CYCLONE=y |
97 | CONFIG_IOSAPIC=y | 114 | CONFIG_IOSAPIC=y |
98 | # CONFIG_IA64_SGI_SN_XP is not set | 115 | # CONFIG_IA64_SGI_SN_XP is not set |
99 | CONFIG_FORCE_MAX_ZONEORDER=18 | 116 | CONFIG_FORCE_MAX_ZONEORDER=17 |
100 | CONFIG_SMP=y | 117 | CONFIG_SMP=y |
101 | CONFIG_NR_CPUS=512 | 118 | CONFIG_NR_CPUS=512 |
102 | CONFIG_HOTPLUG_CPU=y | 119 | CONFIG_HOTPLUG_CPU=y |
@@ -110,19 +127,29 @@ CONFIG_DISCONTIGMEM=y | |||
110 | CONFIG_FLAT_NODE_MEM_MAP=y | 127 | CONFIG_FLAT_NODE_MEM_MAP=y |
111 | CONFIG_NEED_MULTIPLE_NODES=y | 128 | CONFIG_NEED_MULTIPLE_NODES=y |
112 | # CONFIG_SPARSEMEM_STATIC is not set | 129 | # CONFIG_SPARSEMEM_STATIC is not set |
113 | CONFIG_HAVE_DEC_LOCK=y | 130 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
131 | CONFIG_MIGRATION=y | ||
132 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | ||
133 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y | ||
134 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
135 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | ||
136 | CONFIG_ARCH_DISCONTIGMEM_DEFAULT=y | ||
137 | CONFIG_NUMA=y | ||
138 | CONFIG_VIRTUAL_MEM_MAP=y | ||
139 | CONFIG_HOLES_IN_ZONE=y | ||
140 | CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y | ||
114 | CONFIG_IA32_SUPPORT=y | 141 | CONFIG_IA32_SUPPORT=y |
115 | CONFIG_COMPAT=y | 142 | CONFIG_COMPAT=y |
116 | CONFIG_IA64_MCA_RECOVERY=y | 143 | CONFIG_IA64_MCA_RECOVERY=y |
117 | CONFIG_PERFMON=y | 144 | CONFIG_PERFMON=y |
118 | CONFIG_IA64_PALINFO=y | 145 | CONFIG_IA64_PALINFO=y |
146 | CONFIG_SGI_SN=y | ||
119 | 147 | ||
120 | # | 148 | # |
121 | # Firmware Drivers | 149 | # Firmware Drivers |
122 | # | 150 | # |
123 | CONFIG_EFI_VARS=y | 151 | CONFIG_EFI_VARS=y |
124 | CONFIG_EFI_PCDP=y | 152 | CONFIG_EFI_PCDP=y |
125 | # CONFIG_DELL_RBU is not set | ||
126 | CONFIG_BINFMT_ELF=y | 153 | CONFIG_BINFMT_ELF=y |
127 | CONFIG_BINFMT_MISC=m | 154 | CONFIG_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 | # |
132 | CONFIG_PM=y | 159 | CONFIG_PM=y |
160 | CONFIG_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 | |||
144 | CONFIG_ACPI_NUMA=y | 172 | CONFIG_ACPI_NUMA=y |
145 | CONFIG_ACPI_BLACKLIST_YEAR=0 | 173 | CONFIG_ACPI_BLACKLIST_YEAR=0 |
146 | # CONFIG_ACPI_DEBUG is not set | 174 | # CONFIG_ACPI_DEBUG is not set |
175 | CONFIG_ACPI_EC=y | ||
147 | CONFIG_ACPI_POWER=y | 176 | CONFIG_ACPI_POWER=y |
148 | CONFIG_ACPI_SYSTEM=y | 177 | CONFIG_ACPI_SYSTEM=y |
149 | CONFIG_ACPI_CONTAINER=m | 178 | CONFIG_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 | ||
189 | CONFIG_PACKET=y | 219 | CONFIG_PACKET=y |
190 | # CONFIG_PACKET_MMAP is not set | 220 | # CONFIG_PACKET_MMAP is not set |
191 | CONFIG_UNIX=y | 221 | CONFIG_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 | |||
301 | CONFIG_BLK_DEV_RAM_SIZE=4096 | 338 | CONFIG_BLK_DEV_RAM_SIZE=4096 |
302 | CONFIG_BLK_DEV_INITRD=y | 339 | CONFIG_BLK_DEV_INITRD=y |
303 | # CONFIG_CDROM_PKTCDVD is not set | 340 | # CONFIG_CDROM_PKTCDVD is not set |
304 | |||
305 | # | ||
306 | # IO Schedulers | ||
307 | # | ||
308 | CONFIG_IOSCHED_NOOP=y | ||
309 | CONFIG_IOSCHED_AS=y | ||
310 | CONFIG_IOSCHED_DEADLINE=y | ||
311 | CONFIG_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 | # |
317 | CONFIG_IDE=y | 346 | CONFIG_IDE=y |
347 | CONFIG_IDE_MAX_HWIFS=4 | ||
318 | CONFIG_BLK_DEV_IDE=y | 348 | CONFIG_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 | ||
419 | CONFIG_SCSI_SATA=y | 451 | CONFIG_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 |
445 | CONFIG_SCSI_QLOGIC_1280=y | 479 | CONFIG_SCSI_QLOGIC_1280=y |
446 | # CONFIG_SCSI_QLOGIC_1280_1040 is not set | 480 | # CONFIG_SCSI_QLA_FC is not set |
447 | CONFIG_SCSI_QLA2XXX=y | ||
448 | CONFIG_SCSI_QLA21XX=m | ||
449 | CONFIG_SCSI_QLA22XX=m | ||
450 | CONFIG_SCSI_QLA2300=m | ||
451 | CONFIG_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 | |||
483 | CONFIG_FUSION=y | 510 | CONFIG_FUSION=y |
484 | CONFIG_FUSION_SPI=y | 511 | CONFIG_FUSION_SPI=y |
485 | CONFIG_FUSION_FC=m | 512 | CONFIG_FUSION_FC=m |
513 | # CONFIG_FUSION_SAS is not set | ||
486 | CONFIG_FUSION_MAX_SGE=128 | 514 | CONFIG_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 | |||
523 | CONFIG_MII=m | 551 | CONFIG_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 |
566 | CONFIG_E1000=y | 595 | CONFIG_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 |
576 | CONFIG_TIGON3=y | 607 | CONFIG_TIGON3=y |
@@ -675,12 +706,15 @@ CONFIG_VT=y | |||
675 | CONFIG_VT_CONSOLE=y | 706 | CONFIG_VT_CONSOLE=y |
676 | CONFIG_HW_CONSOLE=y | 707 | CONFIG_HW_CONSOLE=y |
677 | CONFIG_SERIAL_NONSTANDARD=y | 708 | CONFIG_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 | |||
696 | CONFIG_SERIAL_8250_CONSOLE=y | 730 | CONFIG_SERIAL_8250_CONSOLE=y |
697 | CONFIG_SERIAL_8250_ACPI=y | 731 | CONFIG_SERIAL_8250_ACPI=y |
698 | CONFIG_SERIAL_8250_NR_UARTS=6 | 732 | CONFIG_SERIAL_8250_NR_UARTS=6 |
733 | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | ||
699 | CONFIG_SERIAL_8250_EXTENDED=y | 734 | CONFIG_SERIAL_8250_EXTENDED=y |
700 | CONFIG_SERIAL_8250_SHARE_IRQ=y | 735 | CONFIG_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 | |||
709 | CONFIG_SERIAL_SGI_L1_CONSOLE=y | 744 | CONFIG_SERIAL_SGI_L1_CONSOLE=y |
710 | # CONFIG_SERIAL_JSM is not set | 745 | # CONFIG_SERIAL_JSM is not set |
711 | CONFIG_SERIAL_SGI_IOC4=y | 746 | CONFIG_SERIAL_SGI_IOC4=y |
747 | # CONFIG_SERIAL_SGI_IOC3 is not set | ||
712 | CONFIG_UNIX98_PTYS=y | 748 | CONFIG_UNIX98_PTYS=y |
713 | CONFIG_LEGACY_PTYS=y | 749 | CONFIG_LEGACY_PTYS=y |
714 | CONFIG_LEGACY_PTY_COUNT=256 | 750 | CONFIG_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 |
746 | CONFIG_RAW_DRIVER=m | 782 | CONFIG_RAW_DRIVER=m |
783 | CONFIG_MAX_RAW_DEVS=256 | ||
747 | CONFIG_HPET=y | 784 | CONFIG_HPET=y |
748 | # CONFIG_HPET_RTC_IRQ is not set | 785 | # CONFIG_HPET_RTC_IRQ is not set |
749 | CONFIG_HPET_MMAP=y | 786 | CONFIG_HPET_MMAP=y |
750 | CONFIG_MAX_RAW_DEVS=256 | ||
751 | # CONFIG_HANGCHECK_TIMER is not set | 787 | # CONFIG_HANGCHECK_TIMER is not set |
752 | CONFIG_MMTIMER=y | 788 | CONFIG_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 | # |
772 | CONFIG_HWMON=y | 815 | CONFIG_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 | |||
821 | CONFIG_SND_MIXER_OSS=m | 865 | CONFIG_SND_MIXER_OSS=m |
822 | CONFIG_SND_PCM_OSS=m | 866 | CONFIG_SND_PCM_OSS=m |
823 | CONFIG_SND_SEQUENCER_OSS=y | 867 | CONFIG_SND_SEQUENCER_OSS=y |
868 | # CONFIG_SND_DYNAMIC_MINORS is not set | ||
869 | CONFIG_SND_SUPPORT_OLD_API=y | ||
824 | CONFIG_SND_VERBOSE_PRINTK=y | 870 | CONFIG_SND_VERBOSE_PRINTK=y |
825 | # CONFIG_SND_DEBUG is not set | 871 | # CONFIG_SND_DEBUG is not set |
826 | CONFIG_SND_GENERIC_DRIVER=y | ||
827 | 872 | ||
828 | # | 873 | # |
829 | # Generic devices | 874 | # Generic devices |
830 | # | 875 | # |
831 | CONFIG_SND_MPU401_UART=m | 876 | CONFIG_SND_MPU401_UART=m |
832 | CONFIG_SND_OPL3_LIB=m | 877 | CONFIG_SND_OPL3_LIB=m |
878 | CONFIG_SND_AC97_CODEC=m | ||
879 | CONFIG_SND_AC97_BUS=m | ||
833 | CONFIG_SND_DUMMY=m | 880 | CONFIG_SND_DUMMY=m |
834 | CONFIG_SND_VIRMIDI=m | 881 | CONFIG_SND_VIRMIDI=m |
835 | CONFIG_SND_MTPAV=m | 882 | CONFIG_SND_MTPAV=m |
836 | CONFIG_SND_SERIAL_U16550=m | 883 | CONFIG_SND_SERIAL_U16550=m |
837 | CONFIG_SND_MPU401=m | 884 | CONFIG_SND_MPU401=m |
838 | CONFIG_SND_AC97_CODEC=m | ||
839 | CONFIG_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 | ||
900 | CONFIG_SND_CS4281=m | ||
852 | CONFIG_SND_CS46XX=m | 901 | CONFIG_SND_CS46XX=m |
853 | CONFIG_SND_CS46XX_NEW_DSP=y | 902 | CONFIG_SND_CS46XX_NEW_DSP=y |
854 | CONFIG_SND_CS4281=m | ||
855 | CONFIG_SND_EMU10K1=m | 903 | CONFIG_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 | ||
875 | CONFIG_SND_FM801=m | 909 | CONFIG_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 | # |
938 | CONFIG_USB_STORAGE=m | 987 | CONFIG_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 | # |
952 | CONFIG_USB_HID=m | 1003 | CONFIG_USB_HID=m |
953 | CONFIG_USB_HIDINPUT=y | 1004 | CONFIG_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 |
1050 | CONFIG_INFINIBAND_IPOIB=m | 1103 | CONFIG_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 | # |
1056 | CONFIG_SGI_IOC4=y | 1110 | CONFIG_SGI_IOC4=y |
1111 | CONFIG_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 |
1089 | CONFIG_INOTIFY=y | 1149 | CONFIG_INOTIFY=y |
@@ -1125,6 +1185,7 @@ CONFIG_HUGETLBFS=y | |||
1125 | CONFIG_HUGETLB_PAGE=y | 1185 | CONFIG_HUGETLB_PAGE=y |
1126 | CONFIG_RAMFS=y | 1186 | CONFIG_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 | |||
1194 | CONFIG_SGI_PARTITION=y | 1255 | CONFIG_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 | ||
1197 | CONFIG_EFI_PARTITION=y | 1259 | CONFIG_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 |
1270 | CONFIG_DEBUG_KERNEL=y | ||
1271 | CONFIG_MAGIC_SYSRQ=y | 1333 | CONFIG_MAGIC_SYSRQ=y |
1334 | CONFIG_DEBUG_KERNEL=y | ||
1272 | CONFIG_LOG_BUF_SHIFT=20 | 1335 | CONFIG_LOG_BUF_SHIFT=20 |
1273 | CONFIG_DETECT_SOFTLOCKUP=y | 1336 | CONFIG_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 |
1339 | CONFIG_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 |
1346 | CONFIG_FORCED_INLINING=y | ||
1347 | # CONFIG_RCU_TORTURE_TEST is not set | ||
1282 | CONFIG_IA64_GRANULE_16MB=y | 1348 | CONFIG_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 | */ | ||
36 | char drive_info[4*16]; | ||
37 | |||
38 | void __init | 28 | void __init |
39 | dig_setup (char **cmdline_p) | 29 | dig_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]; | |||
107 | static struct console *console; | 108 | static struct console *console; |
108 | 109 | ||
109 | static unsigned char *tmp_buf; | 110 | static unsigned char *tmp_buf; |
110 | static DECLARE_MUTEX(tmp_buf_sem); | ||
111 | 111 | ||
112 | extern struct console *console_drivers; /* from kernel/printk.c */ | 112 | extern 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 | ||
5 | obj-y := ia32_entry.o sys_ia32.o ia32_ioctl.o ia32_signal.o \ | 5 | obj-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 | ||
8 | CFLAGS_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. |
12 | CFLAGS_ia32_signal.o += -mfixed-range=f16-f31 | 10 | CFLAGS_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, | |||
95 | static inline int elf_core_copy_task_regs(struct task_struct *t, | 95 | static 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 | |||
39 | IOCTL_TABLE_START | ||
40 | #define DECLARES | ||
41 | #include "compat_ioctl.c" | ||
42 | #include <linux/compat_ioctl.h> | ||
43 | IOCTL_TABLE_END | ||
44 | |||
45 | int 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) | |||
58 | void | 58 | void |
59 | ia32_load_segment_descriptors (struct task_struct *task) | 59 | ia32_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 | |||
113 | ia32_load_state (struct task_struct *t) | 113 | ia32_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: */ |
88 | static DECLARE_MUTEX(ia32_mmap_sem); | 89 | static DEFINE_MUTEX(ia32_mmap_mutex); |
89 | 90 | ||
90 | asmlinkage long | 91 | asmlinkage long |
91 | sys32_execve (char __user *name, compat_uptr_t __user *argv, compat_uptr_t __user *envp, | 92 | sys32_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(¤t->mm->mmap_sem); | 904 | down_write(¤t->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 | ||
2562 | asmlinkage long | ||
2563 | sys32_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 | |||
2590 | long sys32_fadvise64_64(int fd, __u32 offset_low, __u32 offset_high, | 2553 | long 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 | |||
13 | obj-$(CONFIG_IA64_GENERIC) += acpi-ext.o | 13 | obj-$(CONFIG_IA64_GENERIC) += acpi-ext.o |
14 | obj-$(CONFIG_IA64_HP_ZX1) += acpi-ext.o | 14 | obj-$(CONFIG_IA64_HP_ZX1) += acpi-ext.o |
15 | obj-$(CONFIG_IA64_HP_ZX1_SWIOTLB) += acpi-ext.o | 15 | obj-$(CONFIG_IA64_HP_ZX1_SWIOTLB) += acpi-ext.o |
16 | |||
17 | ifneq ($(CONFIG_ACPI_PROCESSOR),) | ||
18 | obj-y += acpi-processor.o | ||
19 | endif | ||
20 | |||
16 | obj-$(CONFIG_IA64_PALINFO) += palinfo.o | 21 | obj-$(CONFIG_IA64_PALINFO) += palinfo.o |
17 | obj-$(CONFIG_IOSAPIC) += iosapic.o | 22 | obj-$(CONFIG_IOSAPIC) += iosapic.o |
18 | obj-$(CONFIG_MODULES) += module.o | 23 | obj-$(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 | ||
60 | acpi_status | 60 | acpi_status |
61 | acpi_find_vendor_resource(acpi_handle obj, struct acpi_vendor_descriptor * id, | 61 | acpi_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 | |||
17 | static 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 */ | ||
60 | void arch_acpi_processor_init_pdc(struct acpi_processor *pr) | ||
61 | { | ||
62 | pr->pdc = NULL; | ||
63 | init_intel_pdc(pr); | ||
64 | return; | ||
65 | } | ||
66 | |||
67 | EXPORT_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 | */ |
576 | int acpi_register_gsi(u32 gsi, int edge_level, int active_high_low) | 576 | int 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 | ||
770 | int additional_cpus __initdata = -1; | ||
771 | |||
772 | static __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 | |||
780 | early_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 | |||
770 | int acpi_map_lsapic(acpi_handle handle, int *pcpu) | 823 | int 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 @@ | |||
1 | obj-$(CONFIG_IA64_ACPI_CPUFREQ) += acpi-cpufreq.o | 1 | obj-$(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 | */ | ||
282 | static void | ||
283 | processor_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 | |||
314 | static int | 272 | static int |
315 | acpi_cpufreq_cpu_init ( | 273 | acpi_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 | ||
248 | static kern_memdesc_t *kern_memmap; | 248 | static kern_memdesc_t *kern_memmap; |
249 | 249 | ||
250 | #define efi_md_size(md) (md->num_pages << EFI_PAGE_SHIFT) | ||
251 | |||
252 | static inline u64 | ||
253 | kmd_end(kern_memdesc_t *kmd) | ||
254 | { | ||
255 | return (kmd->start + (kmd->num_pages << EFI_PAGE_SHIFT)); | ||
256 | } | ||
257 | |||
258 | static inline u64 | ||
259 | efi_md_end(efi_memory_desc_t *md) | ||
260 | { | ||
261 | return (md->phys_addr + efi_md_size(md)); | ||
262 | } | ||
263 | |||
264 | static inline int | ||
265 | efi_wb(efi_memory_desc_t *md) | ||
266 | { | ||
267 | return (md->attribute & EFI_MEMORY_WB); | ||
268 | } | ||
269 | |||
270 | static inline int | ||
271 | efi_uc(efi_memory_desc_t *md) | ||
272 | { | ||
273 | return (md->attribute & EFI_MEMORY_UC); | ||
274 | } | ||
275 | |||
250 | static void | 276 | static void |
251 | walk (efi_freemem_callback_t callback, void *arg, u64 attr) | 277 | walk (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 | ||
598 | u32 | 616 | static efi_memory_desc_t * |
599 | efi_mem_type (unsigned long phys_addr) | 617 | efi_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 | ||
618 | u64 | 636 | static int |
619 | efi_mem_attributes (unsigned long phys_addr) | 637 | efi_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 | |||
656 | u32 | ||
657 | efi_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 | |||
666 | u64 | ||
667 | efi_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 | } | ||
637 | EXPORT_SYMBOL(efi_mem_attributes); | 675 | EXPORT_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 | */ | ||
682 | static int | ||
683 | efi_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 | */ | ||
639 | int | 710 | int |
640 | valid_phys_addr_range (unsigned long phys_addr, unsigned long *size) | 711 | valid_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 | */ | ||
725 | int | ||
726 | valid_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 | |||
712 | static inline u64 | ||
713 | kmd_end(kern_memdesc_t *kmd) | ||
714 | { | ||
715 | return (kmd->start + (kmd->num_pages << EFI_PAGE_SHIFT)); | ||
716 | } | ||
717 | |||
718 | static inline u64 | ||
719 | efi_md_end(efi_memory_desc_t *md) | ||
720 | { | ||
721 | return (md->phys_addr + efi_md_size(md)); | ||
722 | } | ||
723 | |||
724 | static inline int | ||
725 | efi_wb(efi_memory_desc_t *md) | ||
726 | { | ||
727 | return (md->attribute & EFI_MEMORY_WB); | ||
728 | } | ||
729 | |||
730 | static inline int | ||
731 | efi_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 | ||
574 | strace_error: | 576 | strace_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 | ||
1065 | GLOBAL_ENTRY(ia64_spinlock_contention_pre3_4) | 1066 | GLOBAL_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> |
12 | EXPORT_SYMBOL(memset); | 12 | EXPORT_SYMBOL(memset); |
13 | EXPORT_SYMBOL(memchr); | ||
14 | EXPORT_SYMBOL(memcmp); | ||
15 | EXPORT_SYMBOL(memcpy); | 13 | EXPORT_SYMBOL(memcpy); |
16 | EXPORT_SYMBOL(memmove); | ||
17 | EXPORT_SYMBOL(memscan); | ||
18 | EXPORT_SYMBOL(strcat); | ||
19 | EXPORT_SYMBOL(strchr); | ||
20 | EXPORT_SYMBOL(strcmp); | ||
21 | EXPORT_SYMBOL(strcpy); | ||
22 | EXPORT_SYMBOL(strlen); | 14 | EXPORT_SYMBOL(strlen); |
23 | EXPORT_SYMBOL(strncat); | ||
24 | EXPORT_SYMBOL(strncmp); | ||
25 | EXPORT_SYMBOL(strncpy); | ||
26 | EXPORT_SYMBOL(strnlen); | ||
27 | EXPORT_SYMBOL(strrchr); | ||
28 | EXPORT_SYMBOL(strstr); | ||
29 | EXPORT_SYMBOL(strpbrk); | ||
30 | 15 | ||
31 | #include <asm/checksum.h> | 16 | #include <asm/checksum.h> |
32 | EXPORT_SYMBOL(ip_fast_csum); /* hand-coded assembly */ | 17 | EXPORT_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) |
1363 | ENTRY(unaligned_access) | 1366 | ENTRY(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) | |||
60 | GLOBAL_ENTRY(jprobe_inst_return) | 60 | GLOBAL_ENTRY(jprobe_inst_return) |
61 | br.call.sptk.many b0=jprobe_break | 61 | br.call.sptk.many b0=jprobe_break |
62 | END(jprobe_inst_return) | 62 | END(jprobe_inst_return) |
63 | |||
64 | GLOBAL_ENTRY(invalidate_stacked_regs) | ||
65 | movl r16=invalidate_restore_cfm | ||
66 | ;; | ||
67 | mov b6=r16 | ||
68 | ;; | ||
69 | br.ret.sptk.many b6 | ||
70 | ;; | ||
71 | invalidate_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 | ||
81 | END(invalidate_stacked_regs) | ||
82 | |||
83 | GLOBAL_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 | ||
88 | END(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 | ||
470 | void __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 | ||
769 | struct param_bsp_cfm { | ||
770 | unsigned long ip; | ||
771 | unsigned long *bsp; | ||
772 | unsigned long cfm; | ||
773 | }; | ||
774 | |||
775 | static 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 | |||
766 | int __kprobes setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs) | 795 | int __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) | |||
789 | int __kprobes longjmp_break_handler(struct kprobe *p, struct pt_regs *regs) | 837 | int __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) | |||
123 | void | 123 | void |
124 | mca_handler_bh(unsigned long paddr) | 124 | mca_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 | ||
632 | static pmu_config_t *pmu_confs[]={ | 635 | static 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 | |||
1709 | pfm_syswide_force_stop(void *info) | 1713 | pfm_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 | ||
4927 | skip_fd: | 4931 | skip_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 | */ | ||
8 | static 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 | |||
15 | static 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 | |||
62 | static 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 | */ | ||
133 | static int | ||
134 | pfm_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 | */ | ||
154 | static int | ||
155 | pfm_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 | */ | ||
259 | static 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 | |||
701 | kernel_thread_helper (int (*fn)(void *), void *arg) | 701 | kernel_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) | |||
627 | inline void | 627 | inline void |
628 | ia64_flush_fph (struct task_struct *task) | 628 | ia64_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) | |||
653 | void | 653 | void |
654 | ia64_sync_fph (struct task_struct *task) | 654 | ia64_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) | |||
1403 | void | 1403 | void |
1404 | ptrace_disable (struct task_struct *child) | 1404 | ptrace_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) | |||
214 | static void __init sal_desc_ap_wakeup(void *p) { } | 215 | static 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 | */ | ||
225 | static int sal_cache_flush_drops_interrupts; | ||
226 | |||
227 | static void __init | ||
228 | check_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 | |||
268 | s64 | ||
269 | ia64_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 | |||
217 | void __init | 290 | void __init |
218 | ia64_sal_init (struct ia64_sal_systab *systab) | 291 | ia64_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 | ||
267 | int | 342 | int |
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 | ||
133 | struct salinfo_data { | 142 | struct 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 | */ | ||
193 | static void | ||
194 | salinfo_work_to_do(struct salinfo_data *data) | ||
195 | { | ||
196 | down_trylock(&data->mutex); | ||
197 | up(&data->mutex); | ||
198 | } | ||
199 | |||
176 | static void | 200 | static void |
177 | salinfo_platform_oemdata_cpu(void *context) | 201 | salinfo_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; | |||
248 | static void | 270 | static void |
249 | salinfo_timeout_check(struct salinfo_data *data) | 271 | salinfo_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 | ||
264 | static void | 283 | static void |
265 | salinfo_timeout (unsigned long arg) | 284 | salinfo_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 | ||
291 | retry: | 310 | retry: |
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) | |||
380 | static void | 400 | static void |
381 | call_on_cpu(int cpu, void (*fn)(void *), void *arg) | 401 | call_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, ¤t->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 | |||
472 | salinfo_log_clear(struct salinfo_data *data, int cpu) | 490 | salinfo_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 | ||
575 | static int __devinit | ||
576 | salinfo_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 | |||
614 | static struct notifier_block salinfo_cpu_notifier = | ||
615 | { | ||
616 | .notifier_call = salinfo_cpu_callback, | ||
617 | .priority = 0, | ||
618 | }; | ||
619 | #endif /* CONFIG_HOTPLUG_CPU */ | ||
620 | |||
552 | static int __init | 621 | static int __init |
553 | salinfo_init(void) | 622 | salinfo_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]; | |||
70 | EXPORT_SYMBOL(__per_cpu_offset); | 71 | EXPORT_SYMBOL(__per_cpu_offset); |
71 | #endif | 72 | #endif |
72 | 73 | ||
74 | extern void ia64_setup_printk_clock(void); | ||
75 | |||
73 | DEFINE_PER_CPU(struct cpuinfo_ia64, cpu_info); | 76 | DEFINE_PER_CPU(struct cpuinfo_ia64, cpu_info); |
74 | DEFINE_PER_CPU(unsigned long, local_per_cpu_offset); | 77 | DEFINE_PER_CPU(unsigned long, local_per_cpu_offset); |
75 | DEFINE_PER_CPU(unsigned long, ia64_phys_stacked_size_p8); | 78 | DEFINE_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 | |||
683 | setup_per_cpu_areas (void) | 689 | setup_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 | |||
695 | get_max_cacheline_size (void) | 704 | get_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 | */ | ||
892 | void sched_cacheflush(void) | ||
893 | { | ||
894 | ia64_sal_cache_flush(3); | ||
895 | } | ||
896 | |||
873 | void | 897 | void |
874 | check_bugs (void) | 898 | check_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 */ |
136 | cpumask_t cpu_online_map; | 136 | cpumask_t cpu_online_map; |
137 | EXPORT_SYMBOL(cpu_online_map); | 137 | EXPORT_SYMBOL(cpu_online_map); |
138 | cpumask_t cpu_possible_map; | 138 | cpumask_t cpu_possible_map = CPU_MASK_NONE; |
139 | EXPORT_SYMBOL(cpu_possible_map); | 139 | EXPORT_SYMBOL(cpu_possible_map); |
140 | 140 | ||
141 | cpumask_t cpu_core_map[NR_CPUS] __cacheline_aligned; | 141 | cpumask_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: | |||
151 | asmlinkage long | 151 | asmlinkage long |
152 | sys_pipe (void) | 152 | sys_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 | */ | ||
263 | static void | ||
264 | ia64_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 | |||
273 | void (*ia64_udelay)(unsigned long usecs) = &ia64_itc_udelay; | ||
259 | 274 | ||
260 | void | 275 | void |
261 | udelay (unsigned long usecs) | 276 | udelay (unsigned long usecs) |
262 | { | 277 | { |
263 | unsigned long start; | 278 | (*ia64_udelay)(usecs); |
264 | unsigned long cycles; | 279 | } |
265 | unsigned long smallusecs; | 280 | EXPORT_SYMBOL(udelay); |
266 | 281 | ||
267 | /* | 282 | static 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(); | 289 | static 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) | 295 | unsigned long long (*ia64_printk_clock)(void) = &ia64_default_printk_clock; |
279 | cpu_relax(); | ||
280 | 296 | ||
281 | preempt_enable(); | 297 | unsigned long long printk_clock(void) |
282 | usecs -= smallusecs; | 298 | { |
283 | } | 299 | return ia64_printk_clock(); |
300 | } | ||
301 | |||
302 | void __init | ||
303 | ia64_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 | } |
285 | EXPORT_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 | } | ||
97 | out: | 99 | out: |
98 | return err; | 100 | return err; |
99 | } | 101 | } |
100 | 102 | ||
101 | __initcall(topology_init); | 103 | subsys_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, ®s)) { | 538 | if (fsys_mode(current, ®s)) { |
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 | ®s, 0); | 548 | ia64_psr(®s)->db = 0; |
549 | ia64_psr(®s)->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(®s)->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(®s)->lp = 0; | 617 | ia64_psr(®s)->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 | ||
27 | extern void die_if_kernel(char *str, struct pt_regs *regs, long err) __attribute__ ((noreturn)); | 27 | extern 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 | */ | ||
61 | int no_unaligned_warning; | ||
62 | static 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 | ||
640 | void 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 | |||
649 | int 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 | |||
669 | int 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 | ||
457 | static void __devinit pcibios_fixup_device_resources(struct pci_dev *dev) | 457 | static void __devinit |
458 | pcibios_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 | ||
474 | static void __devinit pcibios_fixup_device_resources(struct pci_dev *dev) | ||
475 | { | ||
476 | pcibios_fixup_resources(dev, 0, PCI_BRIDGE_RESOURCES); | ||
477 | } | ||
478 | |||
479 | static 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, | |||
570 | char * __init | 579 | char * __init |
571 | pcibios_setup (char *str) | 580 | pcibios_setup (char *str) |
572 | { | 581 | { |
573 | return NULL; | 582 | return str; |
574 | } | 583 | } |
575 | 584 | ||
576 | int | 585 | int |
@@ -700,7 +709,7 @@ int ia64_pci_legacy_read(struct pci_bus *bus, u16 port, u32 *val, u8 size) | |||
700 | */ | 709 | */ |
701 | int ia64_pci_legacy_write(struct pci_dev *bus, u16 port, u32 val, u8 size) | 710 | int 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 | ||
12 | CPPFLAGS += -I$(srctree)/arch/ia64/sn/include | ||
13 | |||
14 | obj-y += kernel/ pci/ | 12 | obj-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 | ||
29 | struct 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 | */ | ||
32 | struct 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 */ | ||
49 | struct 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 | |||
58 | struct 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 | */ |
49 | struct sn_flush_nasid_entry { | 66 | struct 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 | ||
54 | struct hubdev_info { | 71 | struct 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 | ||
69 | extern void hubdev_init_node(nodepda_t *, cnodeid_t); | 86 | extern 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 */ |
23 | typedef volatile struct xb_linkregs_s { | 24 | typedef 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 | ||
47 | typedef volatile struct xbow_s { | 48 | typedef 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 */ |
27 | struct widget_cfg{ | 27 | struct 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 | ||
10 | CPPFLAGS += -I$(srctree)/arch/ia64/sn/include | ||
11 | |||
10 | obj-y += setup.o bte.o bte_error.o irq.o mca.o idle.o \ | 12 | obj-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/ |
12 | obj-$(CONFIG_IA64_GENERIC) += machvec.o | 14 | obj-$(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 | */ |
36 | void shub1_bte_error_handler(unsigned long _nodepda) | 36 | int 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 | */ | ||
134 | int 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 | |||
27 | extern void sn_init_cpei_timer(void); | ||
28 | extern void register_sn_procfs(void); | ||
29 | |||
25 | static struct list_head sn_sysdata_list; | 30 | static 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 | ||
42 | int sn_ioif_inited = 0; /* SN I/O infrastructure initialized? */ | 47 | int sn_ioif_inited; /* SN I/O infrastructure initialized? */ |
43 | 48 | ||
44 | struct sn_pcibus_provider *sn_pci_provider[PCIIO_ASIC_MAX_TYPES]; /* indexed by asic type */ | 49 | struct sn_pcibus_provider *sn_pci_provider[PCIIO_ASIC_MAX_TYPES]; /* indexed by asic type */ |
45 | 50 | ||
46 | static int max_segment_number = 0; /* Default highest segment number */ | 51 | static int max_segment_number; /* Default highest segment number */ |
47 | static int max_pcibus_number = 255; /* Default highest pci bus number */ | 52 | static 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 | */ |
82 | static inline uint64_t | 87 | static inline u64 |
83 | sal_get_widget_dmaflush_list(u64 nasid, u64 widget_num, u64 address) | 88 | sal_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 | */ |
101 | static inline uint64_t sal_get_hubdev_info(u64 handle, u64 address) | 105 | static 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 | */ |
117 | static inline uint64_t sal_get_pcibus_info(u64 segment, u64 busnum, u64 address) | 120 | static 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 | */ |
133 | static inline uint64_t | 135 | static inline u64 |
134 | sal_get_pcidev_info(u64 segment, u64 bus_number, u64 devfn, u64 pci_dev, | 136 | sal_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 | */ | ||
175 | static u8 war_implemented = 0; | ||
176 | |||
177 | static 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 | */ |
171 | static void sn_fixup_ionodes(void) | 211 | static 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 | */ |
257 | static void | 306 | static void |
258 | sn_pci_window_fixup(struct pci_dev *dev, unsigned int count, | 307 | sn_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 | */ |
416 | void sn_pci_controller_fixup(int segment, int busnum, struct pci_bus *bus) | 471 | void 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) | |||
550 | void sn_bus_free_sysdata(void) | 607 | void 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 | ||
555 | sn_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 | ||
572 | static int __init sn_pci_init(void) | 629 | static 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 | */ |
634 | void hubdev_init_node(nodepda_t * npda, cnodeid_t node) | 686 | void 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 | ||
653 | geoid_t | 704 | geoid_t |
654 | cnodeid_get_geoid(cnodeid_t cnode) | 705 | cnodeid_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 | ||
664 | subsys_initcall(sn_pci_init); | 713 | subsys_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; | |||
28 | static struct list_head **sn_irq_lh; | 29 | static struct list_head **sn_irq_lh; |
29 | static spinlock_t sn_irq_info_lock = SPIN_LOCK_UNLOCKED; /* non-IRQ lock */ | 30 | static spinlock_t sn_irq_info_lock = SPIN_LOCK_UNLOCKED; /* non-IRQ lock */ |
30 | 31 | ||
31 | static inline uint64_t sn_intr_alloc(nasid_t local_nasid, int local_widget, | 32 | static 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 | ||
77 | static void sn_ack_irq(unsigned int irq) | 78 | static 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 | ||
92 | static void sn_end_irq(unsigned int irq) | 91 | static 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 | ||
227 | static void unregister_intr_pda(struct sn_irq_info *sn_irq_info) | 225 | static 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 | ||
295 | void sn_irq_unfixup(struct pci_dev *pci_dev) | 293 | void 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 | */ |
350 | static void sn_check_intr(int irq, struct sn_irq_info *sn_irq_info) | 350 | static 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 | ||
422 | void sn_irq_lh_init(void) | 422 | void __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 | */ |
30 | static DECLARE_MUTEX(sn_oemdata_mutex); | 31 | static DEFINE_MUTEX(sn_oemdata_mutex); |
31 | static u8 **sn_oemdata; | 32 | static u8 **sn_oemdata; |
32 | static u64 *sn_oemdata_size, sn_oemdata_bufsize; | 33 | static u64 *sn_oemdata_size, sn_oemdata_bufsize; |
33 | 34 | ||
@@ -89,7 +90,7 @@ static int | |||
89 | sn_platform_plat_specific_err_print(const u8 * sect_header, u8 ** oemdata, | 90 | sn_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 | ||
137 | static int __init sn_salinfo_init(void) | 138 | static 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; | |||
67 | extern void (*ia64_mark_idle) (int); | 67 | extern void (*ia64_mark_idle) (int); |
68 | extern void snidle(int); | 68 | extern void snidle(int); |
69 | extern unsigned char acpi_kbd_controller_present; | 69 | extern unsigned char acpi_kbd_controller_present; |
70 | extern unsigned long long (*ia64_printk_clock)(void); | ||
70 | 71 | ||
71 | unsigned long sn_rtc_cycles_per_second; | 72 | unsigned long sn_rtc_cycles_per_second; |
72 | EXPORT_SYMBOL(sn_rtc_cycles_per_second); | 73 | EXPORT_SYMBOL(sn_rtc_cycles_per_second); |
@@ -74,7 +75,7 @@ EXPORT_SYMBOL(sn_rtc_cycles_per_second); | |||
74 | DEFINE_PER_CPU(struct sn_hub_info_s, __sn_hub_info); | 75 | DEFINE_PER_CPU(struct sn_hub_info_s, __sn_hub_info); |
75 | EXPORT_PER_CPU_SYMBOL(__sn_hub_info); | 76 | EXPORT_PER_CPU_SYMBOL(__sn_hub_info); |
76 | 77 | ||
77 | DEFINE_PER_CPU(short, __sn_cnodeid_to_nasid[MAX_NUMNODES]); | 78 | DEFINE_PER_CPU(short, __sn_cnodeid_to_nasid[MAX_COMPACT_NODES]); |
78 | EXPORT_PER_CPU_SYMBOL(__sn_cnodeid_to_nasid); | 79 | EXPORT_PER_CPU_SYMBOL(__sn_cnodeid_to_nasid); |
79 | 80 | ||
80 | DEFINE_PER_CPU(struct nodepda_s *, __sn_nodepda); | 81 | DEFINE_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 | ||
136 | extern char drive_info[4 * 16]; | ||
137 | #else | ||
138 | char 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 | ||
211 | extern int platform_intr_list[]; | 198 | extern int platform_intr_list[]; |
212 | static int __initdata shub_1_1_found = 0; | 199 | static 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) | ||
333 | static void | 321 | static void |
334 | sn_scan_pcdp(void) | 322 | sn_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 | |||
364 | static unsigned long sn2_rtc_initial; | ||
365 | |||
366 | static 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 | ||
12 | CPPFLAGS += -I$(srctree)/arch/ia64/sn/include | ||
13 | |||
12 | obj-y += cache.o io.o ptc_deadlock.o sn2_smp.o sn_proc_fs.o \ | 14 | obj-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 | |||
190 | read_version_entry(char *page, char **start, off_t off, int count, int *eof, | 190 | read_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 | |||
202 | read_fit_entry(char *page, char **start, off_t off, int count, int *eof, | 202 | read_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) | |||
263 | void __exit prominfo_exit(void) | 264 | void __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 | ||
47 | static __cacheline_aligned DEFINE_SPINLOCK(sn2_global_ptc_lock); | 47 | static __cacheline_aligned DEFINE_SPINLOCK(sn2_global_ptc_lock); |
48 | 48 | ||
49 | void sn2_ptc_deadlock_recovery(short *, short, int, volatile unsigned long *, unsigned long data0, | 49 | extern unsigned long |
50 | volatile unsigned long *, unsigned long data1); | 50 | sn2_ptc_deadlock_recovery_core(volatile unsigned long *, unsigned long, |
51 | volatile unsigned long *, unsigned long, | ||
52 | volatile unsigned long *, unsigned long); | ||
53 | void | ||
54 | sn2_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 | |||
71 | static unsigned int sn2_ptctest = 0; | ||
72 | |||
73 | static int __init ptc_test(char *str) | ||
74 | { | ||
75 | get_option(&str, &sn2_ptctest); | ||
76 | return 1; | ||
77 | } | ||
78 | __setup("ptctest=", ptc_test); | ||
79 | |||
80 | static 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 | |||
108 | static 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) | |
136 | static 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 | |||
142 | static inline void ptc_unlock(unsigned long flags, int opt) | ||
143 | { | ||
144 | spin_unlock_irqrestore(&sn2_global_ptc_lock, flags); | ||
145 | } | ||
146 | #endif | ||
147 | 67 | ||
148 | struct ptc_stats { | 68 | struct 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 | |||
159 | static inline unsigned long wait_piowc(void) | 83 | static 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 | ||
172 | void sn_tlb_migrate_finish(struct mm_struct *mm) | 96 | void 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 | |||
201 | sn2_global_tlb_purge(struct mm_struct *mm, unsigned long start, | 126 | sn2_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 | */ |
324 | void 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) | 272 | void |
273 | sn2_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 | ||
479 | int sn2_ptc_proc_open(struct inode *inode, struct file *file) | 432 | static 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; | |||
493 | static int __init sn2_ptc_init(void) | 446 | static 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 | ||
16 | static int partition_id_show(struct seq_file *s, void *p) | 16 | static 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 | ||
93 | static struct proc_dir_entry *sn_procfs_create_entry( | 93 | static 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 | */ | ||
37 | static void | ||
38 | ia64_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 | |||
31 | void __init sn_timer_init(void) | 48 | void __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 | ||
79 | struct 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 | ||
146 | struct 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 | ||
247 | static inline uint64_t tiocx_intr_alloc(nasid_t nasid, int widget, | 248 | static 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 | ||
302 | void tiocx_irq_free(struct sn_irq_info *sn_irq_info) | 301 | void 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 | ||
315 | uint64_t tiocx_dma_addr(uint64_t addr) | 314 | u64 tiocx_dma_addr(u64 addr) |
316 | { | 315 | { |
317 | return PHYS_TO_TIODMA(addr); | 316 | return PHYS_TO_TIODMA(addr); |
318 | } | 317 | } |
319 | 318 | ||
320 | uint64_t tiocx_swin_base(int nasid) | 319 | u64 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 | ||
335 | static void tio_conveyor_set(nasid_t nasid, int enable_flag) | 334 | static 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 | ||
388 | static int bitstream_loaded(nasid_t nasid) | 387 | static 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(®istration->sema) != 0) { | 140 | if (mutex_lock_interruptible(®istration->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(®istration->sema); | 146 | mutex_unlock(®istration->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(®istration->sema); | 158 | mutex_unlock(®istration->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(®istration->sema); | 194 | mutex_lock(®istration->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(®istration->sema); | 198 | mutex_unlock(®istration->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(®istration->sema); | 212 | mutex_unlock(®istration->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 | */ | ||
111 | struct 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 | */ | ||
135 | static inline int | ||
136 | xpc_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 | */ | ||
162 | struct 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 | |||
180 | static inline int | ||
181 | xpc_hb_allowed(partid_t partid, struct xpc_vars *vars) | ||
182 | { | ||
183 | return ((vars->heartbeating_to_mask & (1UL << partid)) != 0); | ||
184 | } | ||
185 | |||
186 | static inline void | ||
187 | xpc_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 | |||
198 | static inline void | ||
199 | xpc_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 | */ | ||
235 | struct 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 | */ | ||
292 | struct 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 | */ | ||
306 | struct 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 | */ | ||
337 | struct 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 | */ | ||
430 | struct 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 | */ | ||
531 | struct 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 */ | ||
659 | extern struct xpc_registration xpc_registrations[]; | ||
660 | |||
661 | |||
662 | /* found in xpc_main.c */ | ||
663 | extern struct device *xpc_part; | ||
664 | extern struct device *xpc_chan; | ||
665 | extern int xpc_disengage_request_timelimit; | ||
666 | extern irqreturn_t xpc_notify_IRQ_handler(int, void *, struct pt_regs *); | ||
667 | extern void xpc_dropped_IPI_check(struct xpc_partition *); | ||
668 | extern void xpc_activate_partition(struct xpc_partition *); | ||
669 | extern void xpc_activate_kthreads(struct xpc_channel *, int); | ||
670 | extern void xpc_create_kthreads(struct xpc_channel *, int); | ||
671 | extern void xpc_disconnect_wait(int); | ||
672 | |||
673 | |||
674 | /* found in xpc_partition.c */ | ||
675 | extern int xpc_exiting; | ||
676 | extern struct xpc_vars *xpc_vars; | ||
677 | extern struct xpc_rsvd_page *xpc_rsvd_page; | ||
678 | extern struct xpc_vars_part *xpc_vars_part; | ||
679 | extern struct xpc_partition xpc_partitions[XP_MAX_PARTITIONS + 1]; | ||
680 | extern char xpc_remote_copy_buffer[]; | ||
681 | extern struct xpc_rsvd_page *xpc_rsvd_page_init(void); | ||
682 | extern void xpc_allow_IPI_ops(void); | ||
683 | extern void xpc_restrict_IPI_ops(void); | ||
684 | extern int xpc_identify_act_IRQ_sender(void); | ||
685 | extern int xpc_partition_disengaged(struct xpc_partition *); | ||
686 | extern enum xpc_retval xpc_mark_partition_active(struct xpc_partition *); | ||
687 | extern void xpc_mark_partition_inactive(struct xpc_partition *); | ||
688 | extern void xpc_discovery(void); | ||
689 | extern void xpc_check_remote_hb(void); | ||
690 | extern void xpc_deactivate_partition(const int, struct xpc_partition *, | ||
691 | enum xpc_retval); | ||
692 | extern enum xpc_retval xpc_initiate_partid_to_nasids(partid_t, void *); | ||
693 | |||
694 | |||
695 | /* found in xpc_channel.c */ | ||
696 | extern void xpc_initiate_connect(int); | ||
697 | extern void xpc_initiate_disconnect(int); | ||
698 | extern enum xpc_retval xpc_initiate_allocate(partid_t, int, u32, void **); | ||
699 | extern enum xpc_retval xpc_initiate_send(partid_t, int, void *); | ||
700 | extern enum xpc_retval xpc_initiate_send_notify(partid_t, int, void *, | ||
701 | xpc_notify_func, void *); | ||
702 | extern void xpc_initiate_received(partid_t, int, void *); | ||
703 | extern enum xpc_retval xpc_setup_infrastructure(struct xpc_partition *); | ||
704 | extern enum xpc_retval xpc_pull_remote_vars_part(struct xpc_partition *); | ||
705 | extern void xpc_process_channel_activity(struct xpc_partition *); | ||
706 | extern void xpc_connected_callout(struct xpc_channel *); | ||
707 | extern void xpc_deliver_msg(struct xpc_channel *); | ||
708 | extern void xpc_disconnect_channel(const int, struct xpc_channel *, | ||
709 | enum xpc_retval, unsigned long *); | ||
710 | extern void xpc_disconnecting_callout(struct xpc_channel *); | ||
711 | extern void xpc_partition_going_down(struct xpc_partition *, enum xpc_retval); | ||
712 | extern void xpc_teardown_infrastructure(struct xpc_partition *); | ||
713 | |||
714 | |||
715 | |||
716 | static inline void | ||
717 | xpc_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 | */ | ||
730 | static inline void | ||
731 | xpc_msgqueue_ref(struct xpc_channel *ch) | ||
732 | { | ||
733 | atomic_inc(&ch->references); | ||
734 | } | ||
735 | |||
736 | static inline void | ||
737 | xpc_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 | */ | ||
757 | static inline void | ||
758 | xpc_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 | |||
769 | static inline int | ||
770 | xpc_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 | |||
803 | static inline void | ||
804 | xpc_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 | |||
828 | static inline void | ||
829 | xpc_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 | |||
853 | static inline void | ||
854 | xpc_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 | |||
878 | static inline void | ||
879 | xpc_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 | |||
903 | static inline u64 | ||
904 | xpc_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 | |||
914 | static inline u64 | ||
915 | xpc_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 | |||
925 | static inline void | ||
926 | xpc_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 | |||
936 | static inline void | ||
937 | xpc_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 | |||
956 | static inline u64 | ||
957 | xpc_IPI_receive(AMO_t *amo) | ||
958 | { | ||
959 | return FETCHOP_LOAD_OP(TO_AMO((u64) &amo->variable), FETCHOP_CLEAR); | ||
960 | } | ||
961 | |||
962 | |||
963 | static inline enum xpc_retval | ||
964 | xpc_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 | */ | ||
997 | static inline void | ||
998 | xpc_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 | |||
1011 | static inline void | ||
1012 | xpc_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 | |||
1018 | static inline void | ||
1019 | xpc_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 | |||
1025 | static inline void | ||
1026 | xpc_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 | |||
1032 | static inline void | ||
1033 | xpc_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 | |||
1051 | static inline void | ||
1052 | xpc_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 | |||
1088 | static inline void | ||
1089 | xpc_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 | |||
1125 | static inline void | ||
1126 | xpc_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 | |||
1136 | static inline void | ||
1137 | xpc_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 | |||
1142 | static inline void | ||
1143 | xpc_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 | |||
1154 | static inline void | ||
1155 | xpc_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 | |||
1167 | static inline void | ||
1168 | xpc_IPI_send_msgrequest(struct xpc_channel *ch) | ||
1169 | { | ||
1170 | XPC_NOTIFY_IRQ_SEND(ch, XPC_IPI_MSGREQUEST, NULL); | ||
1171 | } | ||
1172 | |||
1173 | static inline void | ||
1174 | xpc_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 | */ | ||
1191 | static inline AMO_t * | ||
1192 | xpc_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 | |||
1203 | static inline enum xpc_retval | ||
1204 | xpc_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 | |||
1223 | static inline void * | ||
1224 | xpc_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 | */ | ||
1249 | static inline void | ||
1250 | xpc_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 | |||
534 | xpc_allocate_msgqueues(struct xpc_channel *ch) | 536 | xpc_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(®istration->sema) != 0) { | 1091 | if (mutex_trylock(®istration->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(®istration->sema); | 1096 | mutex_unlock(®istration->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(®istration->sema); | 1107 | mutex_unlock(®istration->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(®istration->sema); | 1139 | mutex_unlock(®istration->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(®istration->sema); | 1154 | mutex_unlock(®istration->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 | ||
1647 | void | 1649 | void |
1648 | xpc_disconnecting_callout(struct xpc_channel *ch) | 1650 | xpc_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; | |||
82 | struct device *xpc_chan = &xpc_chan_dbg_subname; | 83 | struct device *xpc_chan = &xpc_chan_dbg_subname; |
83 | 84 | ||
84 | 85 | ||
86 | static int xpc_kdebug_ignore; | ||
87 | |||
88 | |||
85 | /* systune related variables for /proc/sys directories */ | 89 | /* systune related variables for /proc/sys directories */ |
86 | 90 | ||
87 | static int xpc_hb_interval = XPC_HB_DEFAULT_INTERVAL; | 91 | static int xpc_hb_interval = XPC_HB_DEFAULT_INTERVAL; |
@@ -162,6 +166,8 @@ static ctl_table xpc_sys_dir[] = { | |||
162 | }; | 166 | }; |
163 | static struct ctl_table_header *xpc_sysctl; | 167 | static struct ctl_table_header *xpc_sysctl; |
164 | 168 | ||
169 | /* non-zero if any remote partition disengage request was timed out */ | ||
170 | int xpc_disengage_request_timedout; | ||
165 | 171 | ||
166 | /* #of IRQs received */ | 172 | /* #of IRQs received */ |
167 | static atomic_t xpc_act_IRQ_rcvd; | 173 | static atomic_t xpc_act_IRQ_rcvd; |
@@ -172,10 +178,10 @@ static DECLARE_WAIT_QUEUE_HEAD(xpc_act_IRQ_wq); | |||
172 | static unsigned long xpc_hb_check_timeout; | 178 | static 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 */ |
175 | static DECLARE_MUTEX_LOCKED(xpc_hb_checker_exited); | 181 | static 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 */ |
178 | static DECLARE_MUTEX_LOCKED(xpc_discovery_exited); | 184 | static DECLARE_COMPLETION(xpc_discovery_exited); |
179 | 185 | ||
180 | 186 | ||
181 | static struct timer_list xpc_hb_timer; | 187 | static 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 | |||
921 | xpc_do_exit(enum xpc_retval reason) | 936 | xpc_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 | */ | ||
1062 | static int | ||
1063 | xpc_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 | */ |
1025 | static void | 1090 | static void |
1026 | xpc_die_disengage(void) | 1091 | xpc_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 |
1082 | static int | 1166 | * other partitions to disengage from all references to our memory. |
1083 | xpc_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 | */ |
1110 | static int | 1171 | static int |
1111 | xpc_system_die(struct notifier_block *nb, unsigned long event, void *unused) | 1172 | xpc_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); | |||
1344 | MODULE_PARM_DESC(xpc_disengage_request_timelimit, "Number of seconds to wait " | 1419 | MODULE_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 | ||
1422 | module_param(xpc_kdebug_ignore, int, 0); | ||
1423 | MODULE_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 | ||
10 | CPPFLAGS += -I$(srctree)/arch/ia64/sn/include | ||
11 | |||
10 | obj-y := pci_dma.o tioca_provider.o tioce_provider.o pcibr/ | 12 | obj-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 | ||
10 | CPPFLAGS += -I$(srctree)/arch/ia64/sn/include | ||
11 | |||
10 | obj-y += pcibr_dma.o pcibr_reg.o \ | 12 | obj-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 | ||
15 | int pcibr_invalidate_ate = 0; /* by default don't invalidate ATE on free */ | 15 | int 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 | */ |
20 | static void mark_ate(struct ate_resource *ate_resource, int start, int number, | 20 | static 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, | |||
37 | static int find_free_ate(struct ate_resource *ate_resource, int start, | 35 | static 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, | |||
70 | static inline void free_ate_resource(struct ate_resource *ate_resource, | 67 | static 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, | |||
84 | static inline int alloc_ate_resource(struct ate_resource *ate_resource, | 79 | static 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 | */ |
119 | int pcibr_ate_alloc(struct pcibus_info *pcibus_info, int count) | 113 | int 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 | */ |
142 | static inline uint64_t *pcibr_ate_addr(struct pcibus_info *pcibus_info, | 129 | static 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 | */ |
154 | void inline | 141 | void inline |
155 | ate_write(struct pcibus_info *pcibus_info, int ate_index, int count, | 142 | ate_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, | |||
171 | void pcibr_ate_free(struct pcibus_info *pcibus_info, int index) | 158 | void 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 | ||
42 | static dma_addr_t | 42 | static dma_addr_t |
43 | pcibr_dmamap_ate32(struct pcidev_info *info, | 43 | pcibr_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 | ||
111 | static dma_addr_t | 111 | static dma_addr_t |
112 | pcibr_dmatrans_direct64(struct pcidev_info * info, uint64_t paddr, | 112 | pcibr_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 | ||
143 | static dma_addr_t | 142 | static dma_addr_t |
144 | pcibr_dmatrans_direct32(struct pcidev_info * info, | 143 | pcibr_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 | ||
212 | void sn_dma_flush(uint64_t addr) | 209 | void 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 | |||
23 | sal_pcibr_slot_enable(struct pcibus_info *soft, int device, void *resp) | 23 | sal_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, | |||
56 | static int sal_pcibr_error_interrupt(struct pcibus_info *soft) | 60 | static 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 | */ |
26 | void pcireg_control_bit_clr(struct pcibus_info *pcibus_info, uint64_t bits) | 26 | void 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 | ||
46 | void pcireg_control_bit_set(struct pcibus_info *pcibus_info, uint64_t bits) | 46 | void 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 | */ |
69 | uint64_t pcireg_tflush_get(struct pcibus_info *pcibus_info) | 69 | u64 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 | */ |
99 | uint64_t pcireg_intr_status_get(struct pcibus_info * pcibus_info) | 99 | u64 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 | */ |
124 | void pcireg_intr_enable_bit_clr(struct pcibus_info *pcibus_info, uint64_t bits) | 124 | void 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 | ||
144 | void pcireg_intr_enable_bit_set(struct pcibus_info *pcibus_info, uint64_t bits) | 144 | void 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 | */ |
167 | void pcireg_intr_addr_addr_set(struct pcibus_info *pcibus_info, int int_n, | 167 | void 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 | */ |
220 | uint64_t pcireg_wrb_flush_get(struct pcibus_info *pcibus_info, int device) | 220 | u64 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 | ||
244 | void pcireg_int_ate_set(struct pcibus_info *pcibus_info, int ate_index, | 244 | void 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 | ||
265 | uint64_t __iomem *pcireg_int_ate_addr(struct pcibus_info *pcibus_info, int ate_index) | 265 | u64 __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 | ||
19 | uint32_t tioca_gart_found; | 19 | u32 tioca_gart_found; |
20 | EXPORT_SYMBOL(tioca_gart_found); /* used by agp-sgi */ | 20 | EXPORT_SYMBOL(tioca_gart_found); /* used by agp-sgi */ |
21 | 21 | ||
22 | LIST_HEAD(tioca_list); | 22 | LIST_HEAD(tioca_list); |
@@ -34,8 +34,8 @@ static int tioca_gart_init(struct tioca_kernel *); | |||
34 | static int | 34 | static int |
35 | tioca_gart_init(struct tioca_kernel *tioca_kern) | 35 | tioca_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 | |||
214 | tioca_fastwrite_enable(struct tioca_kernel *tioca_kern) | 214 | tioca_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 | */ |
279 | static uint64_t | 279 | static u64 |
280 | tioca_dma_d64(unsigned long paddr) | 280 | tioca_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 | */ |
321 | static uint64_t | 321 | static u64 |
322 | tioca_dma_d48(struct pci_dev *pdev, uint64_t paddr) | 322 | tioca_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 | */ |
369 | static dma_addr_t | 369 | static dma_addr_t |
370 | tioca_dma_mapped(struct pci_dev *pdev, uint64_t paddr, size_t req_size) | 370 | tioca_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 | */ |
517 | static uint64_t | 517 | static u64 |
518 | tioca_dma_map(struct pci_dev *pdev, uint64_t paddr, size_t byte_count) | 518 | tioca_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 | */ |
84 | static uint64_t | 84 | static u64 |
85 | tioce_dma_d64(unsigned long ct_addr) | 85 | tioce_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 | */ |
144 | static uint64_t | 144 | static u64 |
145 | tioce_alloc_map(struct tioce_kernel *ce_kern, int type, int port, | 145 | tioce_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 | */ |
255 | static uint64_t | 255 | static u64 |
256 | tioce_dma_d32(struct pci_dev *pdev, uint64_t ct_addr) | 256 | tioce_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 | */ |
298 | static uint64_t | 298 | static u64 |
299 | tioce_dma_barrier(uint64_t bus_addr, int on) | 299 | tioce_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 | */ |
388 | static uint64_t | 388 | static u64 |
389 | tioce_do_dma_map(struct pci_dev *pdev, uint64_t paddr, size_t byte_count, | 389 | tioce_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 | */ |
504 | static uint64_t | 504 | static u64 |
505 | tioce_dma(struct pci_dev *pdev, uint64_t paddr, size_t byte_count) | 505 | tioce_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 |
519 | tioce_dma_consistent(struct pci_dev *pdev, uint64_t paddr, size_t byte_count) | 519 | tioce_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) | |||
551 | tioce_kern_init(struct tioce_common *tioce_common) | 551 | tioce_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)); |