diff options
Diffstat (limited to 'arch/ia64')
76 files changed, 4863 insertions, 2919 deletions
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig index 3deced637f07..1642375fb14e 100644 --- a/arch/ia64/Kconfig +++ b/arch/ia64/Kconfig | |||
@@ -60,10 +60,9 @@ choice | |||
60 | 60 | ||
61 | config IA64_GENERIC | 61 | config IA64_GENERIC |
62 | bool "generic" | 62 | bool "generic" |
63 | select ACPI | ||
63 | select NUMA | 64 | select NUMA |
64 | select ACPI_NUMA | 65 | select ACPI_NUMA |
65 | select VIRTUAL_MEM_MAP | ||
66 | select DISCONTIGMEM | ||
67 | help | 66 | help |
68 | This selects the system type of your hardware. A "generic" kernel | 67 | This selects the system type of your hardware. A "generic" kernel |
69 | will run on any supported IA-64 system. However, if you configure | 68 | will run on any supported IA-64 system. However, if you configure |
@@ -175,40 +174,6 @@ config IA64_L1_CACHE_SHIFT | |||
175 | default "6" if ITANIUM | 174 | default "6" if ITANIUM |
176 | 175 | ||
177 | # align cache-sensitive data to 64 bytes | 176 | # align cache-sensitive data to 64 bytes |
178 | config NUMA | ||
179 | bool "NUMA support" | ||
180 | depends on !IA64_HP_SIM | ||
181 | default y if IA64_SGI_SN2 | ||
182 | select ACPI_NUMA | ||
183 | help | ||
184 | Say Y to compile the kernel to support NUMA (Non-Uniform Memory | ||
185 | Access). This option is for configuring high-end multiprocessor | ||
186 | server systems. If in doubt, say N. | ||
187 | |||
188 | config VIRTUAL_MEM_MAP | ||
189 | bool "Virtual mem map" | ||
190 | default y if !IA64_HP_SIM | ||
191 | help | ||
192 | Say Y to compile the kernel with support for a virtual mem map. | ||
193 | This code also only takes effect if a memory hole of greater than | ||
194 | 1 Gb is found during boot. You must turn this option on if you | ||
195 | require the DISCONTIGMEM option for your machine. If you are | ||
196 | unsure, say Y. | ||
197 | |||
198 | config HOLES_IN_ZONE | ||
199 | bool | ||
200 | default y if VIRTUAL_MEM_MAP | ||
201 | |||
202 | config ARCH_DISCONTIGMEM_ENABLE | ||
203 | bool "Discontiguous memory support" | ||
204 | depends on (IA64_DIG || IA64_SGI_SN2 || IA64_GENERIC || IA64_HP_ZX1 || IA64_HP_ZX1_SWIOTLB) && NUMA && VIRTUAL_MEM_MAP | ||
205 | default y if (IA64_SGI_SN2 || IA64_GENERIC) && NUMA | ||
206 | help | ||
207 | Say Y to support efficient handling of discontiguous physical memory, | ||
208 | for architectures which are either NUMA (Non-Uniform Memory Access) | ||
209 | or have huge holes in the physical address space for other reasons. | ||
210 | See <file:Documentation/vm/numa> for more. | ||
211 | |||
212 | config IA64_CYCLONE | 177 | config IA64_CYCLONE |
213 | bool "Cyclone (EXA) Time Source support" | 178 | bool "Cyclone (EXA) Time Source support" |
214 | help | 179 | help |
@@ -231,8 +196,10 @@ config IA64_SGI_SN_XP | |||
231 | based on a network adapter and DMA messaging. | 196 | based on a network adapter and DMA messaging. |
232 | 197 | ||
233 | config FORCE_MAX_ZONEORDER | 198 | config FORCE_MAX_ZONEORDER |
234 | int | 199 | int "MAX_ORDER (11 - 17)" if !HUGETLB_PAGE |
235 | default "18" | 200 | range 11 17 if !HUGETLB_PAGE |
201 | default "17" if HUGETLB_PAGE | ||
202 | default "11" | ||
236 | 203 | ||
237 | config SMP | 204 | config SMP |
238 | bool "Symmetric multi-processing support" | 205 | bool "Symmetric multi-processing support" |
@@ -253,8 +220,8 @@ config SMP | |||
253 | If you don't know what to do here, say N. | 220 | If you don't know what to do here, say N. |
254 | 221 | ||
255 | config NR_CPUS | 222 | config NR_CPUS |
256 | int "Maximum number of CPUs (2-512)" | 223 | int "Maximum number of CPUs (2-1024)" |
257 | range 2 512 | 224 | range 2 1024 |
258 | depends on SMP | 225 | depends on SMP |
259 | default "64" | 226 | default "64" |
260 | help | 227 | help |
@@ -297,10 +264,57 @@ config PREEMPT | |||
297 | 264 | ||
298 | source "mm/Kconfig" | 265 | source "mm/Kconfig" |
299 | 266 | ||
300 | config HAVE_DEC_LOCK | 267 | config ARCH_SELECT_MEMORY_MODEL |
268 | def_bool y | ||
269 | |||
270 | config ARCH_DISCONTIGMEM_ENABLE | ||
271 | def_bool y | ||
272 | help | ||
273 | Say Y to support efficient handling of discontiguous physical memory, | ||
274 | for architectures which are either NUMA (Non-Uniform Memory Access) | ||
275 | or have huge holes in the physical address space for other reasons. | ||
276 | See <file:Documentation/vm/numa> for more. | ||
277 | |||
278 | config ARCH_FLATMEM_ENABLE | ||
279 | def_bool y | ||
280 | |||
281 | config ARCH_SPARSEMEM_ENABLE | ||
282 | def_bool y | ||
283 | depends on ARCH_DISCONTIGMEM_ENABLE | ||
284 | |||
285 | config ARCH_DISCONTIGMEM_DEFAULT | ||
286 | def_bool y if (IA64_SGI_SN2 || IA64_GENERIC || IA64_HP_ZX1 || IA64_HP_ZX1_SWIOTLB) | ||
287 | depends on ARCH_DISCONTIGMEM_ENABLE | ||
288 | |||
289 | config NUMA | ||
290 | bool "NUMA support" | ||
291 | depends on !IA64_HP_SIM && !FLATMEM | ||
292 | default y if IA64_SGI_SN2 | ||
293 | help | ||
294 | Say Y to compile the kernel to support NUMA (Non-Uniform Memory | ||
295 | Access). This option is for configuring high-end multiprocessor | ||
296 | server systems. If in doubt, say N. | ||
297 | |||
298 | # VIRTUAL_MEM_MAP and FLAT_NODE_MEM_MAP are functionally equivalent. | ||
299 | # VIRTUAL_MEM_MAP has been retained for historical reasons. | ||
300 | config VIRTUAL_MEM_MAP | ||
301 | bool "Virtual mem map" | ||
302 | depends on !SPARSEMEM | ||
303 | default y if !IA64_HP_SIM | ||
304 | help | ||
305 | Say Y to compile the kernel with support for a virtual mem map. | ||
306 | This code also only takes effect if a memory hole of greater than | ||
307 | 1 Gb is found during boot. You must turn this option on if you | ||
308 | require the DISCONTIGMEM option for your machine. If you are | ||
309 | unsure, say Y. | ||
310 | |||
311 | config HOLES_IN_ZONE | ||
301 | bool | 312 | bool |
302 | depends on (SMP || PREEMPT) | 313 | default y if VIRTUAL_MEM_MAP |
303 | default y | 314 | |
315 | config HAVE_ARCH_EARLY_PFN_TO_NID | ||
316 | def_bool y | ||
317 | depends on NEED_MULTIPLE_NODES | ||
304 | 318 | ||
305 | config IA32_SUPPORT | 319 | config IA32_SUPPORT |
306 | bool "Support for Linux/x86 binaries" | 320 | bool "Support for Linux/x86 binaries" |
@@ -338,11 +352,6 @@ config IA64_PALINFO | |||
338 | To use this option, you have to ensure that the "/proc file system | 352 | To use this option, you have to ensure that the "/proc file system |
339 | support" (CONFIG_PROC_FS) is enabled, too. | 353 | support" (CONFIG_PROC_FS) is enabled, too. |
340 | 354 | ||
341 | config ACPI_DEALLOCATE_IRQ | ||
342 | bool | ||
343 | depends on IOSAPIC && EXPERIMENTAL | ||
344 | default y | ||
345 | |||
346 | source "drivers/firmware/Kconfig" | 355 | source "drivers/firmware/Kconfig" |
347 | 356 | ||
348 | source "fs/Kconfig.binfmt" | 357 | source "fs/Kconfig.binfmt" |
@@ -351,38 +360,10 @@ endmenu | |||
351 | 360 | ||
352 | menu "Power management and ACPI" | 361 | menu "Power management and ACPI" |
353 | 362 | ||
354 | config PM | 363 | source "kernel/power/Kconfig" |
355 | bool "Power Management support" | ||
356 | depends on !IA64_HP_SIM | ||
357 | default y | ||
358 | help | ||
359 | "Power Management" means that parts of your computer are shut | ||
360 | off or put into a power conserving "sleep" mode if they are not | ||
361 | being used. There are two competing standards for doing this: APM | ||
362 | and ACPI. If you want to use either one, say Y here and then also | ||
363 | to the requisite support below. | ||
364 | |||
365 | Power Management is most important for battery powered laptop | ||
366 | computers; if you have a laptop, check out the Linux Laptop home | ||
367 | page on the WWW at <http://www.linux-on-laptops.com/> and the | ||
368 | Battery Powered Linux mini-HOWTO, available from | ||
369 | <http://www.tldp.org/docs.html#howto>. | ||
370 | |||
371 | Note that, even if you say N here, Linux on the x86 architecture | ||
372 | will issue the hlt instruction if nothing is to be done, thereby | ||
373 | sending the processor to sleep and saving power. | ||
374 | |||
375 | config ACPI | ||
376 | bool | ||
377 | depends on !IA64_HP_SIM | ||
378 | default y | ||
379 | |||
380 | if !IA64_HP_SIM | ||
381 | 364 | ||
382 | source "drivers/acpi/Kconfig" | 365 | source "drivers/acpi/Kconfig" |
383 | 366 | ||
384 | endif | ||
385 | |||
386 | if PM | 367 | if PM |
387 | 368 | ||
388 | source "arch/ia64/kernel/cpufreq/Kconfig" | 369 | source "arch/ia64/kernel/cpufreq/Kconfig" |
@@ -434,6 +415,11 @@ config GENERIC_IRQ_PROBE | |||
434 | bool | 415 | bool |
435 | default y | 416 | default y |
436 | 417 | ||
418 | config GENERIC_PENDING_IRQ | ||
419 | bool | ||
420 | depends on GENERIC_HARDIRQS && SMP | ||
421 | default y | ||
422 | |||
437 | source "arch/ia64/hp/sim/Kconfig" | 423 | source "arch/ia64/hp/sim/Kconfig" |
438 | 424 | ||
439 | source "arch/ia64/oprofile/Kconfig" | 425 | source "arch/ia64/oprofile/Kconfig" |
diff --git a/arch/ia64/Makefile b/arch/ia64/Makefile index f9bd88ada708..67932ad53082 100644 --- a/arch/ia64/Makefile +++ b/arch/ia64/Makefile | |||
@@ -82,24 +82,7 @@ unwcheck: vmlinux | |||
82 | archclean: | 82 | archclean: |
83 | $(Q)$(MAKE) $(clean)=$(boot) | 83 | $(Q)$(MAKE) $(clean)=$(boot) |
84 | 84 | ||
85 | CLEAN_FILES += include/asm-ia64/.offsets.h.stamp vmlinux.gz bootloader | 85 | CLEAN_FILES += vmlinux.gz bootloader |
86 | |||
87 | MRPROPER_FILES += include/asm-ia64/offsets.h | ||
88 | |||
89 | prepare: include/asm-ia64/offsets.h | ||
90 | |||
91 | arch/ia64/kernel/asm-offsets.s: include/asm include/linux/version.h include/config/MARKER | ||
92 | |||
93 | include/asm-ia64/offsets.h: arch/ia64/kernel/asm-offsets.s | ||
94 | $(call filechk,gen-asm-offsets) | ||
95 | |||
96 | arch/ia64/kernel/asm-offsets.s: include/asm-ia64/.offsets.h.stamp | ||
97 | |||
98 | include/asm-ia64/.offsets.h.stamp: | ||
99 | mkdir -p include/asm-ia64 | ||
100 | [ -s include/asm-ia64/offsets.h ] \ | ||
101 | || echo "#define IA64_TASK_SIZE 0" > include/asm-ia64/offsets.h | ||
102 | touch $@ | ||
103 | 86 | ||
104 | boot: lib/lib.a vmlinux | 87 | boot: lib/lib.a vmlinux |
105 | $(Q)$(MAKE) $(build)=$(boot) $@ | 88 | $(Q)$(MAKE) $(build)=$(boot) $@ |
diff --git a/arch/ia64/configs/bigsur_defconfig b/arch/ia64/configs/bigsur_defconfig index b95fcf86ea00..b40672bb3ab0 100644 --- a/arch/ia64/configs/bigsur_defconfig +++ b/arch/ia64/configs/bigsur_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.10-rc2 | 3 | # Linux kernel version: 2.6.14-rc1 |
4 | # Mon Nov 29 13:27:48 2004 | 4 | # Wed Sep 14 15:18:49 2005 |
5 | # | 5 | # |
6 | 6 | ||
7 | # | 7 | # |
@@ -10,34 +10,40 @@ | |||
10 | CONFIG_EXPERIMENTAL=y | 10 | CONFIG_EXPERIMENTAL=y |
11 | CONFIG_CLEAN_COMPILE=y | 11 | CONFIG_CLEAN_COMPILE=y |
12 | CONFIG_LOCK_KERNEL=y | 12 | CONFIG_LOCK_KERNEL=y |
13 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
13 | 14 | ||
14 | # | 15 | # |
15 | # General setup | 16 | # General setup |
16 | # | 17 | # |
17 | CONFIG_LOCALVERSION="" | 18 | CONFIG_LOCALVERSION="" |
19 | CONFIG_LOCALVERSION_AUTO=y | ||
18 | CONFIG_SWAP=y | 20 | CONFIG_SWAP=y |
19 | CONFIG_SYSVIPC=y | 21 | CONFIG_SYSVIPC=y |
20 | CONFIG_POSIX_MQUEUE=y | 22 | CONFIG_POSIX_MQUEUE=y |
21 | # CONFIG_BSD_PROCESS_ACCT is not set | 23 | # CONFIG_BSD_PROCESS_ACCT is not set |
22 | CONFIG_SYSCTL=y | 24 | CONFIG_SYSCTL=y |
23 | # CONFIG_AUDIT is not set | 25 | # CONFIG_AUDIT is not set |
24 | CONFIG_LOG_BUF_SHIFT=16 | ||
25 | CONFIG_HOTPLUG=y | 26 | CONFIG_HOTPLUG=y |
26 | CONFIG_KOBJECT_UEVENT=y | 27 | CONFIG_KOBJECT_UEVENT=y |
27 | # CONFIG_IKCONFIG is not set | 28 | # CONFIG_IKCONFIG is not set |
29 | # CONFIG_CPUSETS is not set | ||
30 | CONFIG_INITRAMFS_SOURCE="" | ||
28 | # CONFIG_EMBEDDED is not set | 31 | # CONFIG_EMBEDDED is not set |
29 | CONFIG_KALLSYMS=y | 32 | CONFIG_KALLSYMS=y |
30 | # CONFIG_KALLSYMS_ALL is not set | 33 | # CONFIG_KALLSYMS_ALL is not set |
31 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 34 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
35 | CONFIG_PRINTK=y | ||
36 | CONFIG_BUG=y | ||
37 | CONFIG_BASE_FULL=y | ||
32 | CONFIG_FUTEX=y | 38 | CONFIG_FUTEX=y |
33 | CONFIG_EPOLL=y | 39 | CONFIG_EPOLL=y |
34 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
35 | CONFIG_SHMEM=y | 40 | CONFIG_SHMEM=y |
36 | CONFIG_CC_ALIGN_FUNCTIONS=0 | 41 | CONFIG_CC_ALIGN_FUNCTIONS=0 |
37 | CONFIG_CC_ALIGN_LABELS=0 | 42 | CONFIG_CC_ALIGN_LABELS=0 |
38 | CONFIG_CC_ALIGN_LOOPS=0 | 43 | CONFIG_CC_ALIGN_LOOPS=0 |
39 | CONFIG_CC_ALIGN_JUMPS=0 | 44 | CONFIG_CC_ALIGN_JUMPS=0 |
40 | # CONFIG_TINY_SHMEM is not set | 45 | # CONFIG_TINY_SHMEM is not set |
46 | CONFIG_BASE_SMALL=0 | ||
41 | 47 | ||
42 | # | 48 | # |
43 | # Loadable module support | 49 | # Loadable module support |
@@ -58,12 +64,15 @@ CONFIG_IA64=y | |||
58 | CONFIG_64BIT=y | 64 | CONFIG_64BIT=y |
59 | CONFIG_MMU=y | 65 | CONFIG_MMU=y |
60 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | 66 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y |
67 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
61 | CONFIG_TIME_INTERPOLATION=y | 68 | CONFIG_TIME_INTERPOLATION=y |
62 | CONFIG_EFI=y | 69 | CONFIG_EFI=y |
63 | CONFIG_GENERIC_IOMAP=y | 70 | CONFIG_GENERIC_IOMAP=y |
71 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | ||
64 | # CONFIG_IA64_GENERIC is not set | 72 | # CONFIG_IA64_GENERIC is not set |
65 | CONFIG_IA64_DIG=y | 73 | CONFIG_IA64_DIG=y |
66 | # CONFIG_IA64_HP_ZX1 is not set | 74 | # CONFIG_IA64_HP_ZX1 is not set |
75 | # CONFIG_IA64_HP_ZX1_SWIOTLB is not set | ||
67 | # CONFIG_IA64_SGI_SN2 is not set | 76 | # CONFIG_IA64_SGI_SN2 is not set |
68 | # CONFIG_IA64_HP_SIM is not set | 77 | # CONFIG_IA64_HP_SIM is not set |
69 | CONFIG_ITANIUM=y | 78 | CONFIG_ITANIUM=y |
@@ -72,17 +81,30 @@ CONFIG_ITANIUM=y | |||
72 | # CONFIG_IA64_PAGE_SIZE_8KB is not set | 81 | # CONFIG_IA64_PAGE_SIZE_8KB is not set |
73 | CONFIG_IA64_PAGE_SIZE_16KB=y | 82 | CONFIG_IA64_PAGE_SIZE_16KB=y |
74 | # CONFIG_IA64_PAGE_SIZE_64KB is not set | 83 | # CONFIG_IA64_PAGE_SIZE_64KB is not set |
84 | # CONFIG_HZ_100 is not set | ||
85 | CONFIG_HZ_250=y | ||
86 | # CONFIG_HZ_1000 is not set | ||
87 | CONFIG_HZ=250 | ||
75 | CONFIG_IA64_BRL_EMU=y | 88 | CONFIG_IA64_BRL_EMU=y |
76 | CONFIG_IA64_L1_CACHE_SHIFT=6 | 89 | CONFIG_IA64_L1_CACHE_SHIFT=6 |
77 | # CONFIG_NUMA is not set | 90 | # CONFIG_NUMA is not set |
78 | # CONFIG_VIRTUAL_MEM_MAP is not set | 91 | # CONFIG_VIRTUAL_MEM_MAP is not set |
79 | # CONFIG_IA64_CYCLONE is not set | 92 | # CONFIG_IA64_CYCLONE is not set |
80 | CONFIG_IOSAPIC=y | 93 | CONFIG_IOSAPIC=y |
94 | # CONFIG_IA64_SGI_SN_XP is not set | ||
81 | CONFIG_FORCE_MAX_ZONEORDER=18 | 95 | CONFIG_FORCE_MAX_ZONEORDER=18 |
82 | CONFIG_SMP=y | 96 | CONFIG_SMP=y |
83 | CONFIG_NR_CPUS=2 | 97 | CONFIG_NR_CPUS=2 |
84 | # CONFIG_HOTPLUG_CPU is not set | 98 | # CONFIG_HOTPLUG_CPU is not set |
99 | # CONFIG_SCHED_SMT is not set | ||
85 | CONFIG_PREEMPT=y | 100 | CONFIG_PREEMPT=y |
101 | CONFIG_SELECT_MEMORY_MODEL=y | ||
102 | CONFIG_FLATMEM_MANUAL=y | ||
103 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
104 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
105 | CONFIG_FLATMEM=y | ||
106 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
107 | # CONFIG_SPARSEMEM_STATIC is not set | ||
86 | CONFIG_HAVE_DEC_LOCK=y | 108 | CONFIG_HAVE_DEC_LOCK=y |
87 | CONFIG_IA32_SUPPORT=y | 109 | CONFIG_IA32_SUPPORT=y |
88 | CONFIG_COMPAT=y | 110 | CONFIG_COMPAT=y |
@@ -95,6 +117,7 @@ CONFIG_IA64_PALINFO=y | |||
95 | # | 117 | # |
96 | CONFIG_EFI_VARS=y | 118 | CONFIG_EFI_VARS=y |
97 | CONFIG_EFI_PCDP=y | 119 | CONFIG_EFI_PCDP=y |
120 | # CONFIG_DELL_RBU is not set | ||
98 | CONFIG_BINFMT_ELF=y | 121 | CONFIG_BINFMT_ELF=y |
99 | CONFIG_BINFMT_MISC=m | 122 | CONFIG_BINFMT_MISC=m |
100 | 123 | ||
@@ -102,24 +125,26 @@ CONFIG_BINFMT_MISC=m | |||
102 | # Power management and ACPI | 125 | # Power management and ACPI |
103 | # | 126 | # |
104 | CONFIG_PM=y | 127 | CONFIG_PM=y |
105 | CONFIG_ACPI=y | 128 | # CONFIG_PM_DEBUG is not set |
106 | 129 | ||
107 | # | 130 | # |
108 | # ACPI (Advanced Configuration and Power Interface) Support | 131 | # ACPI (Advanced Configuration and Power Interface) Support |
109 | # | 132 | # |
110 | CONFIG_ACPI_BOOT=y | 133 | CONFIG_ACPI=y |
111 | CONFIG_ACPI_INTERPRETER=y | ||
112 | CONFIG_ACPI_BUTTON=m | 134 | CONFIG_ACPI_BUTTON=m |
113 | CONFIG_ACPI_VIDEO=m | ||
114 | CONFIG_ACPI_FAN=m | 135 | CONFIG_ACPI_FAN=m |
115 | CONFIG_ACPI_PROCESSOR=m | 136 | CONFIG_ACPI_PROCESSOR=m |
116 | CONFIG_ACPI_THERMAL=m | 137 | CONFIG_ACPI_THERMAL=m |
117 | CONFIG_ACPI_BLACKLIST_YEAR=0 | 138 | CONFIG_ACPI_BLACKLIST_YEAR=0 |
118 | # CONFIG_ACPI_DEBUG is not set | 139 | # CONFIG_ACPI_DEBUG is not set |
119 | CONFIG_ACPI_BUS=y | ||
120 | CONFIG_ACPI_POWER=y | 140 | CONFIG_ACPI_POWER=y |
121 | CONFIG_ACPI_PCI=y | ||
122 | CONFIG_ACPI_SYSTEM=y | 141 | CONFIG_ACPI_SYSTEM=y |
142 | # CONFIG_ACPI_CONTAINER is not set | ||
143 | |||
144 | # | ||
145 | # CPU Frequency scaling | ||
146 | # | ||
147 | # CONFIG_CPU_FREQ is not set | ||
123 | 148 | ||
124 | # | 149 | # |
125 | # Bus options (PCI, PCMCIA) | 150 | # Bus options (PCI, PCMCIA) |
@@ -128,7 +153,7 @@ CONFIG_PCI=y | |||
128 | CONFIG_PCI_DOMAINS=y | 153 | CONFIG_PCI_DOMAINS=y |
129 | # CONFIG_PCI_MSI is not set | 154 | # CONFIG_PCI_MSI is not set |
130 | CONFIG_PCI_LEGACY_PROC=y | 155 | CONFIG_PCI_LEGACY_PROC=y |
131 | CONFIG_PCI_NAMES=y | 156 | # CONFIG_PCI_DEBUG is not set |
132 | 157 | ||
133 | # | 158 | # |
134 | # PCI Hotplug Support | 159 | # PCI Hotplug Support |
@@ -141,8 +166,70 @@ CONFIG_PCI_NAMES=y | |||
141 | # CONFIG_PCCARD is not set | 166 | # CONFIG_PCCARD is not set |
142 | 167 | ||
143 | # | 168 | # |
144 | # PC-card bridges | 169 | # Networking |
170 | # | ||
171 | CONFIG_NET=y | ||
172 | |||
173 | # | ||
174 | # Networking options | ||
175 | # | ||
176 | CONFIG_PACKET=y | ||
177 | CONFIG_PACKET_MMAP=y | ||
178 | CONFIG_UNIX=y | ||
179 | # CONFIG_NET_KEY is not set | ||
180 | CONFIG_INET=y | ||
181 | # CONFIG_IP_MULTICAST is not set | ||
182 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
183 | CONFIG_IP_FIB_HASH=y | ||
184 | # CONFIG_IP_PNP is not set | ||
185 | # CONFIG_NET_IPIP is not set | ||
186 | # CONFIG_NET_IPGRE is not set | ||
187 | # CONFIG_ARPD is not set | ||
188 | # CONFIG_SYN_COOKIES is not set | ||
189 | # CONFIG_INET_AH is not set | ||
190 | # CONFIG_INET_ESP is not set | ||
191 | # CONFIG_INET_IPCOMP is not set | ||
192 | # CONFIG_INET_TUNNEL is not set | ||
193 | CONFIG_INET_DIAG=y | ||
194 | CONFIG_INET_TCP_DIAG=y | ||
195 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
196 | CONFIG_TCP_CONG_BIC=y | ||
197 | # CONFIG_IPV6 is not set | ||
198 | # CONFIG_NETFILTER is not set | ||
199 | |||
200 | # | ||
201 | # DCCP Configuration (EXPERIMENTAL) | ||
202 | # | ||
203 | # CONFIG_IP_DCCP is not set | ||
204 | |||
205 | # | ||
206 | # SCTP Configuration (EXPERIMENTAL) | ||
207 | # | ||
208 | # CONFIG_IP_SCTP is not set | ||
209 | # CONFIG_ATM is not set | ||
210 | # CONFIG_BRIDGE is not set | ||
211 | # CONFIG_VLAN_8021Q is not set | ||
212 | # CONFIG_DECNET is not set | ||
213 | # CONFIG_LLC2 is not set | ||
214 | # CONFIG_IPX is not set | ||
215 | # CONFIG_ATALK is not set | ||
216 | # CONFIG_X25 is not set | ||
217 | # CONFIG_LAPB is not set | ||
218 | # CONFIG_NET_DIVERT is not set | ||
219 | # CONFIG_ECONET is not set | ||
220 | # CONFIG_WAN_ROUTER is not set | ||
221 | # CONFIG_NET_SCHED is not set | ||
222 | # CONFIG_NET_CLS_ROUTE is not set | ||
223 | |||
224 | # | ||
225 | # Network testing | ||
145 | # | 226 | # |
227 | # CONFIG_NET_PKTGEN is not set | ||
228 | # CONFIG_NETFILTER_NETLINK is not set | ||
229 | # CONFIG_HAMRADIO is not set | ||
230 | # CONFIG_IRDA is not set | ||
231 | # CONFIG_BT is not set | ||
232 | # CONFIG_IEEE80211 is not set | ||
146 | 233 | ||
147 | # | 234 | # |
148 | # Device Drivers | 235 | # Device Drivers |
@@ -157,6 +244,11 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y | |||
157 | # CONFIG_DEBUG_DRIVER is not set | 244 | # CONFIG_DEBUG_DRIVER is not set |
158 | 245 | ||
159 | # | 246 | # |
247 | # Connector - unified userspace <-> kernelspace linker | ||
248 | # | ||
249 | # CONFIG_CONNECTOR is not set | ||
250 | |||
251 | # | ||
160 | # Memory Technology Devices (MTD) | 252 | # Memory Technology Devices (MTD) |
161 | # | 253 | # |
162 | # CONFIG_MTD is not set | 254 | # CONFIG_MTD is not set |
@@ -169,7 +261,13 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y | |||
169 | # | 261 | # |
170 | # Plug and Play support | 262 | # Plug and Play support |
171 | # | 263 | # |
172 | # CONFIG_PNP is not set | 264 | CONFIG_PNP=y |
265 | # CONFIG_PNP_DEBUG is not set | ||
266 | |||
267 | # | ||
268 | # Protocols | ||
269 | # | ||
270 | CONFIG_PNPACPI=y | ||
173 | 271 | ||
174 | # | 272 | # |
175 | # Block devices | 273 | # Block devices |
@@ -178,14 +276,15 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y | |||
178 | # CONFIG_BLK_CPQ_CISS_DA is not set | 276 | # CONFIG_BLK_CPQ_CISS_DA is not set |
179 | # CONFIG_BLK_DEV_DAC960 is not set | 277 | # CONFIG_BLK_DEV_DAC960 is not set |
180 | # CONFIG_BLK_DEV_UMEM is not set | 278 | # CONFIG_BLK_DEV_UMEM is not set |
279 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
181 | CONFIG_BLK_DEV_LOOP=m | 280 | CONFIG_BLK_DEV_LOOP=m |
182 | CONFIG_BLK_DEV_CRYPTOLOOP=m | 281 | CONFIG_BLK_DEV_CRYPTOLOOP=m |
183 | CONFIG_BLK_DEV_NBD=m | 282 | CONFIG_BLK_DEV_NBD=m |
184 | # CONFIG_BLK_DEV_SX8 is not set | 283 | # CONFIG_BLK_DEV_SX8 is not set |
185 | # CONFIG_BLK_DEV_UB is not set | 284 | # CONFIG_BLK_DEV_UB is not set |
186 | CONFIG_BLK_DEV_RAM=m | 285 | CONFIG_BLK_DEV_RAM=m |
286 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
187 | CONFIG_BLK_DEV_RAM_SIZE=4096 | 287 | CONFIG_BLK_DEV_RAM_SIZE=4096 |
188 | CONFIG_INITRAMFS_SOURCE="" | ||
189 | # CONFIG_CDROM_PKTCDVD is not set | 288 | # CONFIG_CDROM_PKTCDVD is not set |
190 | 289 | ||
191 | # | 290 | # |
@@ -195,6 +294,7 @@ CONFIG_IOSCHED_NOOP=y | |||
195 | CONFIG_IOSCHED_AS=y | 294 | CONFIG_IOSCHED_AS=y |
196 | CONFIG_IOSCHED_DEADLINE=y | 295 | CONFIG_IOSCHED_DEADLINE=y |
197 | CONFIG_IOSCHED_CFQ=y | 296 | CONFIG_IOSCHED_CFQ=y |
297 | # CONFIG_ATA_OVER_ETH is not set | ||
198 | 298 | ||
199 | # | 299 | # |
200 | # ATA/ATAPI/MFM/RLL support | 300 | # ATA/ATAPI/MFM/RLL support |
@@ -217,7 +317,8 @@ CONFIG_BLK_DEV_IDEFLOPPY=m | |||
217 | # | 317 | # |
218 | # IDE chipset support/bugfixes | 318 | # IDE chipset support/bugfixes |
219 | # | 319 | # |
220 | CONFIG_IDE_GENERIC=m | 320 | # CONFIG_IDE_GENERIC is not set |
321 | # CONFIG_BLK_DEV_IDEPNP is not set | ||
221 | CONFIG_BLK_DEV_IDEPCI=y | 322 | CONFIG_BLK_DEV_IDEPCI=y |
222 | CONFIG_IDEPCI_SHARE_IRQ=y | 323 | CONFIG_IDEPCI_SHARE_IRQ=y |
223 | # CONFIG_BLK_DEV_OFFBOARD is not set | 324 | # CONFIG_BLK_DEV_OFFBOARD is not set |
@@ -239,6 +340,7 @@ CONFIG_IDEDMA_PCI_AUTO=y | |||
239 | # CONFIG_BLK_DEV_HPT366 is not set | 340 | # CONFIG_BLK_DEV_HPT366 is not set |
240 | # CONFIG_BLK_DEV_SC1200 is not set | 341 | # CONFIG_BLK_DEV_SC1200 is not set |
241 | CONFIG_BLK_DEV_PIIX=m | 342 | CONFIG_BLK_DEV_PIIX=m |
343 | # CONFIG_BLK_DEV_IT821X is not set | ||
242 | # CONFIG_BLK_DEV_NS87415 is not set | 344 | # CONFIG_BLK_DEV_NS87415 is not set |
243 | # CONFIG_BLK_DEV_PDC202XX_OLD is not set | 345 | # CONFIG_BLK_DEV_PDC202XX_OLD is not set |
244 | # CONFIG_BLK_DEV_PDC202XX_NEW is not set | 346 | # CONFIG_BLK_DEV_PDC202XX_NEW is not set |
@@ -256,6 +358,7 @@ CONFIG_IDEDMA_AUTO=y | |||
256 | # | 358 | # |
257 | # SCSI device support | 359 | # SCSI device support |
258 | # | 360 | # |
361 | # CONFIG_RAID_ATTRS is not set | ||
259 | CONFIG_SCSI=y | 362 | CONFIG_SCSI=y |
260 | CONFIG_SCSI_PROC_FS=y | 363 | CONFIG_SCSI_PROC_FS=y |
261 | 364 | ||
@@ -267,6 +370,7 @@ CONFIG_BLK_DEV_SD=y | |||
267 | # CONFIG_CHR_DEV_OSST is not set | 370 | # CONFIG_CHR_DEV_OSST is not set |
268 | # CONFIG_BLK_DEV_SR is not set | 371 | # CONFIG_BLK_DEV_SR is not set |
269 | # CONFIG_CHR_DEV_SG is not set | 372 | # CONFIG_CHR_DEV_SG is not set |
373 | # CONFIG_CHR_DEV_SCH is not set | ||
270 | 374 | ||
271 | # | 375 | # |
272 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | 376 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs |
@@ -280,6 +384,8 @@ CONFIG_SCSI_LOGGING=y | |||
280 | # | 384 | # |
281 | CONFIG_SCSI_SPI_ATTRS=m | 385 | CONFIG_SCSI_SPI_ATTRS=m |
282 | # CONFIG_SCSI_FC_ATTRS is not set | 386 | # CONFIG_SCSI_FC_ATTRS is not set |
387 | # CONFIG_SCSI_ISCSI_ATTRS is not set | ||
388 | # CONFIG_SCSI_SAS_ATTRS is not set | ||
283 | 389 | ||
284 | # | 390 | # |
285 | # SCSI low-level drivers | 391 | # SCSI low-level drivers |
@@ -294,18 +400,13 @@ CONFIG_SCSI_SPI_ATTRS=m | |||
294 | # CONFIG_MEGARAID_NEWGEN is not set | 400 | # CONFIG_MEGARAID_NEWGEN is not set |
295 | # CONFIG_MEGARAID_LEGACY is not set | 401 | # CONFIG_MEGARAID_LEGACY is not set |
296 | # CONFIG_SCSI_SATA is not set | 402 | # CONFIG_SCSI_SATA is not set |
297 | # CONFIG_SCSI_BUSLOGIC is not set | ||
298 | # CONFIG_SCSI_DMX3191D is not set | 403 | # CONFIG_SCSI_DMX3191D is not set |
299 | # CONFIG_SCSI_EATA is not set | ||
300 | # CONFIG_SCSI_EATA_PIO is not set | ||
301 | # CONFIG_SCSI_FUTURE_DOMAIN is not set | 404 | # CONFIG_SCSI_FUTURE_DOMAIN is not set |
302 | # CONFIG_SCSI_GDTH is not set | ||
303 | # CONFIG_SCSI_IPS is not set | 405 | # CONFIG_SCSI_IPS is not set |
304 | # CONFIG_SCSI_INITIO is not set | 406 | # CONFIG_SCSI_INITIO is not set |
305 | # CONFIG_SCSI_INIA100 is not set | 407 | # CONFIG_SCSI_INIA100 is not set |
306 | # CONFIG_SCSI_SYM53C8XX_2 is not set | 408 | # CONFIG_SCSI_SYM53C8XX_2 is not set |
307 | # CONFIG_SCSI_IPR is not set | 409 | # CONFIG_SCSI_IPR is not set |
308 | # CONFIG_SCSI_QLOGIC_ISP is not set | ||
309 | # CONFIG_SCSI_QLOGIC_FC is not set | 410 | # CONFIG_SCSI_QLOGIC_FC is not set |
310 | CONFIG_SCSI_QLOGIC_1280=y | 411 | CONFIG_SCSI_QLOGIC_1280=y |
311 | # CONFIG_SCSI_QLOGIC_1280_1040 is not set | 412 | # CONFIG_SCSI_QLOGIC_1280_1040 is not set |
@@ -315,7 +416,8 @@ CONFIG_SCSI_QLA2XXX=y | |||
315 | # CONFIG_SCSI_QLA2300 is not set | 416 | # CONFIG_SCSI_QLA2300 is not set |
316 | # CONFIG_SCSI_QLA2322 is not set | 417 | # CONFIG_SCSI_QLA2322 is not set |
317 | # CONFIG_SCSI_QLA6312 is not set | 418 | # CONFIG_SCSI_QLA6312 is not set |
318 | # CONFIG_SCSI_QLA6322 is not set | 419 | # CONFIG_SCSI_QLA24XX is not set |
420 | # CONFIG_SCSI_LPFC is not set | ||
319 | # CONFIG_SCSI_DC395x is not set | 421 | # CONFIG_SCSI_DC395x is not set |
320 | # CONFIG_SCSI_DC390T is not set | 422 | # CONFIG_SCSI_DC390T is not set |
321 | # CONFIG_SCSI_DEBUG is not set | 423 | # CONFIG_SCSI_DEBUG is not set |
@@ -338,11 +440,14 @@ CONFIG_DM_CRYPT=m | |||
338 | CONFIG_DM_SNAPSHOT=m | 440 | CONFIG_DM_SNAPSHOT=m |
339 | CONFIG_DM_MIRROR=m | 441 | CONFIG_DM_MIRROR=m |
340 | CONFIG_DM_ZERO=m | 442 | CONFIG_DM_ZERO=m |
443 | # CONFIG_DM_MULTIPATH is not set | ||
341 | 444 | ||
342 | # | 445 | # |
343 | # Fusion MPT device support | 446 | # Fusion MPT device support |
344 | # | 447 | # |
345 | # CONFIG_FUSION is not set | 448 | # CONFIG_FUSION is not set |
449 | # CONFIG_FUSION_SPI is not set | ||
450 | # CONFIG_FUSION_FC is not set | ||
346 | 451 | ||
347 | # | 452 | # |
348 | # IEEE 1394 (FireWire) support | 453 | # IEEE 1394 (FireWire) support |
@@ -355,72 +460,14 @@ CONFIG_DM_ZERO=m | |||
355 | # CONFIG_I2O is not set | 460 | # CONFIG_I2O is not set |
356 | 461 | ||
357 | # | 462 | # |
358 | # Networking support | 463 | # Network device support |
359 | # | 464 | # |
360 | CONFIG_NET=y | ||
361 | |||
362 | # | ||
363 | # Networking options | ||
364 | # | ||
365 | CONFIG_PACKET=y | ||
366 | CONFIG_PACKET_MMAP=y | ||
367 | # CONFIG_NETLINK_DEV is not set | ||
368 | CONFIG_UNIX=y | ||
369 | # CONFIG_NET_KEY is not set | ||
370 | CONFIG_INET=y | ||
371 | # CONFIG_IP_MULTICAST is not set | ||
372 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
373 | # CONFIG_IP_PNP is not set | ||
374 | # CONFIG_NET_IPIP is not set | ||
375 | # CONFIG_NET_IPGRE is not set | ||
376 | # CONFIG_ARPD is not set | ||
377 | # CONFIG_SYN_COOKIES is not set | ||
378 | # CONFIG_INET_AH is not set | ||
379 | # CONFIG_INET_ESP is not set | ||
380 | # CONFIG_INET_IPCOMP is not set | ||
381 | # CONFIG_INET_TUNNEL is not set | ||
382 | CONFIG_IP_TCPDIAG=y | ||
383 | # CONFIG_IP_TCPDIAG_IPV6 is not set | ||
384 | # CONFIG_IPV6 is not set | ||
385 | # CONFIG_NETFILTER is not set | ||
386 | |||
387 | # | ||
388 | # SCTP Configuration (EXPERIMENTAL) | ||
389 | # | ||
390 | # CONFIG_IP_SCTP is not set | ||
391 | # CONFIG_ATM is not set | ||
392 | # CONFIG_BRIDGE is not set | ||
393 | # CONFIG_VLAN_8021Q is not set | ||
394 | # CONFIG_DECNET is not set | ||
395 | # CONFIG_LLC2 is not set | ||
396 | # CONFIG_IPX is not set | ||
397 | # CONFIG_ATALK is not set | ||
398 | # CONFIG_X25 is not set | ||
399 | # CONFIG_LAPB is not set | ||
400 | # CONFIG_NET_DIVERT is not set | ||
401 | # CONFIG_ECONET is not set | ||
402 | # CONFIG_WAN_ROUTER is not set | ||
403 | |||
404 | # | ||
405 | # QoS and/or fair queueing | ||
406 | # | ||
407 | # CONFIG_NET_SCHED is not set | ||
408 | # CONFIG_NET_CLS_ROUTE is not set | ||
409 | |||
410 | # | ||
411 | # Network testing | ||
412 | # | ||
413 | # CONFIG_NET_PKTGEN is not set | ||
414 | # CONFIG_NETPOLL is not set | ||
415 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
416 | # CONFIG_HAMRADIO is not set | ||
417 | # CONFIG_IRDA is not set | ||
418 | # CONFIG_BT is not set | ||
419 | CONFIG_NETDEVICES=y | 465 | CONFIG_NETDEVICES=y |
420 | CONFIG_DUMMY=y | 466 | CONFIG_DUMMY=y |
421 | # CONFIG_BONDING is not set | 467 | # CONFIG_BONDING is not set |
422 | # CONFIG_EQUALIZER is not set | 468 | # CONFIG_EQUALIZER is not set |
423 | # CONFIG_TUN is not set | 469 | # CONFIG_TUN is not set |
470 | # CONFIG_NET_SB1000 is not set | ||
424 | 471 | ||
425 | # | 472 | # |
426 | # ARCnet devices | 473 | # ARCnet devices |
@@ -428,6 +475,11 @@ CONFIG_DUMMY=y | |||
428 | # CONFIG_ARCNET is not set | 475 | # CONFIG_ARCNET is not set |
429 | 476 | ||
430 | # | 477 | # |
478 | # PHY device support | ||
479 | # | ||
480 | # CONFIG_PHYLIB is not set | ||
481 | |||
482 | # | ||
431 | # Ethernet (10 or 100Mbit) | 483 | # Ethernet (10 or 100Mbit) |
432 | # | 484 | # |
433 | CONFIG_NET_ETHERNET=y | 485 | CONFIG_NET_ETHERNET=y |
@@ -449,7 +501,6 @@ CONFIG_NET_PCI=y | |||
449 | # CONFIG_FORCEDETH is not set | 501 | # CONFIG_FORCEDETH is not set |
450 | # CONFIG_DGRS is not set | 502 | # CONFIG_DGRS is not set |
451 | CONFIG_EEPRO100=y | 503 | CONFIG_EEPRO100=y |
452 | # CONFIG_EEPRO100_PIO is not set | ||
453 | # CONFIG_E100 is not set | 504 | # CONFIG_E100 is not set |
454 | # CONFIG_FEALNX is not set | 505 | # CONFIG_FEALNX is not set |
455 | # CONFIG_NATSEMI is not set | 506 | # CONFIG_NATSEMI is not set |
@@ -471,13 +522,17 @@ CONFIG_EEPRO100=y | |||
471 | # CONFIG_HAMACHI is not set | 522 | # CONFIG_HAMACHI is not set |
472 | # CONFIG_YELLOWFIN is not set | 523 | # CONFIG_YELLOWFIN is not set |
473 | # CONFIG_R8169 is not set | 524 | # CONFIG_R8169 is not set |
525 | # CONFIG_SIS190 is not set | ||
526 | # CONFIG_SKGE is not set | ||
474 | # CONFIG_SK98LIN is not set | 527 | # CONFIG_SK98LIN is not set |
475 | # CONFIG_VIA_VELOCITY is not set | 528 | # CONFIG_VIA_VELOCITY is not set |
476 | # CONFIG_TIGON3 is not set | 529 | # CONFIG_TIGON3 is not set |
530 | # CONFIG_BNX2 is not set | ||
477 | 531 | ||
478 | # | 532 | # |
479 | # Ethernet (10000 Mbit) | 533 | # Ethernet (10000 Mbit) |
480 | # | 534 | # |
535 | # CONFIG_CHELSIO_T1 is not set | ||
481 | # CONFIG_IXGB is not set | 536 | # CONFIG_IXGB is not set |
482 | # CONFIG_S2IO is not set | 537 | # CONFIG_S2IO is not set |
483 | 538 | ||
@@ -502,6 +557,8 @@ CONFIG_EEPRO100=y | |||
502 | # CONFIG_NET_FC is not set | 557 | # CONFIG_NET_FC is not set |
503 | # CONFIG_SHAPER is not set | 558 | # CONFIG_SHAPER is not set |
504 | # CONFIG_NETCONSOLE is not set | 559 | # CONFIG_NETCONSOLE is not set |
560 | # CONFIG_NETPOLL is not set | ||
561 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
505 | 562 | ||
506 | # | 563 | # |
507 | # ISDN subsystem | 564 | # ISDN subsystem |
@@ -531,18 +588,6 @@ CONFIG_INPUT_EVDEV=y | |||
531 | # CONFIG_INPUT_EVBUG is not set | 588 | # CONFIG_INPUT_EVBUG is not set |
532 | 589 | ||
533 | # | 590 | # |
534 | # Input I/O drivers | ||
535 | # | ||
536 | # CONFIG_GAMEPORT is not set | ||
537 | CONFIG_SOUND_GAMEPORT=y | ||
538 | CONFIG_SERIO=y | ||
539 | CONFIG_SERIO_I8042=y | ||
540 | CONFIG_SERIO_SERPORT=y | ||
541 | # CONFIG_SERIO_CT82C710 is not set | ||
542 | # CONFIG_SERIO_PCIPS2 is not set | ||
543 | # CONFIG_SERIO_RAW is not set | ||
544 | |||
545 | # | ||
546 | # Input Device Drivers | 591 | # Input Device Drivers |
547 | # | 592 | # |
548 | CONFIG_INPUT_KEYBOARD=y | 593 | CONFIG_INPUT_KEYBOARD=y |
@@ -560,6 +605,17 @@ CONFIG_MOUSE_PS2=y | |||
560 | # CONFIG_INPUT_MISC is not set | 605 | # CONFIG_INPUT_MISC is not set |
561 | 606 | ||
562 | # | 607 | # |
608 | # Hardware I/O ports | ||
609 | # | ||
610 | CONFIG_SERIO=y | ||
611 | CONFIG_SERIO_I8042=y | ||
612 | CONFIG_SERIO_SERPORT=y | ||
613 | # CONFIG_SERIO_PCIPS2 is not set | ||
614 | CONFIG_SERIO_LIBPS2=y | ||
615 | # CONFIG_SERIO_RAW is not set | ||
616 | # CONFIG_GAMEPORT is not set | ||
617 | |||
618 | # | ||
563 | # Character devices | 619 | # Character devices |
564 | # | 620 | # |
565 | CONFIG_VT=y | 621 | CONFIG_VT=y |
@@ -577,7 +633,6 @@ CONFIG_SERIAL_8250_NR_UARTS=4 | |||
577 | CONFIG_SERIAL_8250_EXTENDED=y | 633 | CONFIG_SERIAL_8250_EXTENDED=y |
578 | CONFIG_SERIAL_8250_SHARE_IRQ=y | 634 | CONFIG_SERIAL_8250_SHARE_IRQ=y |
579 | # CONFIG_SERIAL_8250_DETECT_IRQ is not set | 635 | # CONFIG_SERIAL_8250_DETECT_IRQ is not set |
580 | # CONFIG_SERIAL_8250_MULTIPORT is not set | ||
581 | # CONFIG_SERIAL_8250_RSA is not set | 636 | # CONFIG_SERIAL_8250_RSA is not set |
582 | 637 | ||
583 | # | 638 | # |
@@ -585,6 +640,7 @@ CONFIG_SERIAL_8250_SHARE_IRQ=y | |||
585 | # | 640 | # |
586 | CONFIG_SERIAL_CORE=y | 641 | CONFIG_SERIAL_CORE=y |
587 | CONFIG_SERIAL_CORE_CONSOLE=y | 642 | CONFIG_SERIAL_CORE_CONSOLE=y |
643 | # CONFIG_SERIAL_JSM is not set | ||
588 | CONFIG_UNIX98_PTYS=y | 644 | CONFIG_UNIX98_PTYS=y |
589 | CONFIG_LEGACY_PTYS=y | 645 | CONFIG_LEGACY_PTYS=y |
590 | CONFIG_LEGACY_PTY_COUNT=256 | 646 | CONFIG_LEGACY_PTY_COUNT=256 |
@@ -609,14 +665,22 @@ CONFIG_EFI_RTC=y | |||
609 | # | 665 | # |
610 | CONFIG_AGP=m | 666 | CONFIG_AGP=m |
611 | CONFIG_AGP_I460=m | 667 | CONFIG_AGP_I460=m |
612 | CONFIG_DRM=y | 668 | CONFIG_DRM=m |
613 | # CONFIG_DRM_TDFX is not set | 669 | # CONFIG_DRM_TDFX is not set |
614 | CONFIG_DRM_R128=m | 670 | CONFIG_DRM_R128=m |
615 | # CONFIG_DRM_RADEON is not set | 671 | # CONFIG_DRM_RADEON is not set |
616 | # CONFIG_DRM_MGA is not set | 672 | # CONFIG_DRM_MGA is not set |
617 | # CONFIG_DRM_SIS is not set | 673 | # CONFIG_DRM_SIS is not set |
674 | # CONFIG_DRM_VIA is not set | ||
675 | # CONFIG_DRM_SAVAGE is not set | ||
618 | # CONFIG_RAW_DRIVER is not set | 676 | # CONFIG_RAW_DRIVER is not set |
619 | # CONFIG_HPET is not set | 677 | # CONFIG_HPET is not set |
678 | # CONFIG_HANGCHECK_TIMER is not set | ||
679 | |||
680 | # | ||
681 | # TPM devices | ||
682 | # | ||
683 | # CONFIG_TCG_TPM is not set | ||
620 | 684 | ||
621 | # | 685 | # |
622 | # I2C support | 686 | # I2C support |
@@ -641,7 +705,7 @@ CONFIG_I2C_ALGOBIT=y | |||
641 | # CONFIG_I2C_AMD8111 is not set | 705 | # CONFIG_I2C_AMD8111 is not set |
642 | # CONFIG_I2C_I801 is not set | 706 | # CONFIG_I2C_I801 is not set |
643 | # CONFIG_I2C_I810 is not set | 707 | # CONFIG_I2C_I810 is not set |
644 | # CONFIG_I2C_ISA is not set | 708 | # CONFIG_I2C_PIIX4 is not set |
645 | # CONFIG_I2C_NFORCE2 is not set | 709 | # CONFIG_I2C_NFORCE2 is not set |
646 | # CONFIG_I2C_PARPORT_LIGHT is not set | 710 | # CONFIG_I2C_PARPORT_LIGHT is not set |
647 | # CONFIG_I2C_PROSAVAGE is not set | 711 | # CONFIG_I2C_PROSAVAGE is not set |
@@ -657,16 +721,43 @@ CONFIG_I2C_ALGOBIT=y | |||
657 | # CONFIG_I2C_PCA_ISA is not set | 721 | # CONFIG_I2C_PCA_ISA is not set |
658 | 722 | ||
659 | # | 723 | # |
660 | # Hardware Sensors Chip support | 724 | # Miscellaneous I2C Chip support |
661 | # | 725 | # |
662 | # CONFIG_I2C_SENSOR is not set | 726 | # CONFIG_SENSORS_DS1337 is not set |
727 | # CONFIG_SENSORS_DS1374 is not set | ||
728 | # CONFIG_SENSORS_EEPROM is not set | ||
729 | # CONFIG_SENSORS_PCF8574 is not set | ||
730 | # CONFIG_SENSORS_PCA9539 is not set | ||
731 | # CONFIG_SENSORS_PCF8591 is not set | ||
732 | # CONFIG_SENSORS_RTC8564 is not set | ||
733 | # CONFIG_SENSORS_MAX6875 is not set | ||
734 | # CONFIG_I2C_DEBUG_CORE is not set | ||
735 | # CONFIG_I2C_DEBUG_ALGO is not set | ||
736 | # CONFIG_I2C_DEBUG_BUS is not set | ||
737 | # CONFIG_I2C_DEBUG_CHIP is not set | ||
738 | |||
739 | # | ||
740 | # Dallas's 1-wire bus | ||
741 | # | ||
742 | # CONFIG_W1 is not set | ||
743 | |||
744 | # | ||
745 | # Hardware Monitoring support | ||
746 | # | ||
747 | CONFIG_HWMON=y | ||
748 | # CONFIG_HWMON_VID is not set | ||
663 | # CONFIG_SENSORS_ADM1021 is not set | 749 | # CONFIG_SENSORS_ADM1021 is not set |
664 | # CONFIG_SENSORS_ADM1025 is not set | 750 | # CONFIG_SENSORS_ADM1025 is not set |
751 | # CONFIG_SENSORS_ADM1026 is not set | ||
665 | # CONFIG_SENSORS_ADM1031 is not set | 752 | # CONFIG_SENSORS_ADM1031 is not set |
753 | # CONFIG_SENSORS_ADM9240 is not set | ||
666 | # CONFIG_SENSORS_ASB100 is not set | 754 | # CONFIG_SENSORS_ASB100 is not set |
755 | # CONFIG_SENSORS_ATXP1 is not set | ||
667 | # CONFIG_SENSORS_DS1621 is not set | 756 | # CONFIG_SENSORS_DS1621 is not set |
668 | # CONFIG_SENSORS_FSCHER is not set | 757 | # CONFIG_SENSORS_FSCHER is not set |
758 | # CONFIG_SENSORS_FSCPOS is not set | ||
669 | # CONFIG_SENSORS_GL518SM is not set | 759 | # CONFIG_SENSORS_GL518SM is not set |
760 | # CONFIG_SENSORS_GL520SM is not set | ||
670 | # CONFIG_SENSORS_IT87 is not set | 761 | # CONFIG_SENSORS_IT87 is not set |
671 | # CONFIG_SENSORS_LM63 is not set | 762 | # CONFIG_SENSORS_LM63 is not set |
672 | # CONFIG_SENSORS_LM75 is not set | 763 | # CONFIG_SENSORS_LM75 is not set |
@@ -677,33 +768,26 @@ CONFIG_I2C_ALGOBIT=y | |||
677 | # CONFIG_SENSORS_LM85 is not set | 768 | # CONFIG_SENSORS_LM85 is not set |
678 | # CONFIG_SENSORS_LM87 is not set | 769 | # CONFIG_SENSORS_LM87 is not set |
679 | # CONFIG_SENSORS_LM90 is not set | 770 | # CONFIG_SENSORS_LM90 is not set |
771 | # CONFIG_SENSORS_LM92 is not set | ||
680 | # CONFIG_SENSORS_MAX1619 is not set | 772 | # CONFIG_SENSORS_MAX1619 is not set |
681 | # CONFIG_SENSORS_PC87360 is not set | 773 | # CONFIG_SENSORS_PC87360 is not set |
774 | # CONFIG_SENSORS_SIS5595 is not set | ||
682 | # CONFIG_SENSORS_SMSC47M1 is not set | 775 | # CONFIG_SENSORS_SMSC47M1 is not set |
776 | # CONFIG_SENSORS_SMSC47B397 is not set | ||
683 | # CONFIG_SENSORS_VIA686A is not set | 777 | # CONFIG_SENSORS_VIA686A is not set |
684 | # CONFIG_SENSORS_W83781D is not set | 778 | # CONFIG_SENSORS_W83781D is not set |
779 | # CONFIG_SENSORS_W83792D is not set | ||
685 | # CONFIG_SENSORS_W83L785TS is not set | 780 | # CONFIG_SENSORS_W83L785TS is not set |
686 | # CONFIG_SENSORS_W83627HF is not set | 781 | # CONFIG_SENSORS_W83627HF is not set |
782 | # CONFIG_SENSORS_W83627EHF is not set | ||
783 | # CONFIG_HWMON_DEBUG_CHIP is not set | ||
687 | 784 | ||
688 | # | 785 | # |
689 | # Other I2C Chip support | 786 | # Misc devices |
690 | # | ||
691 | # CONFIG_SENSORS_EEPROM is not set | ||
692 | # CONFIG_SENSORS_PCF8574 is not set | ||
693 | # CONFIG_SENSORS_PCF8591 is not set | ||
694 | # CONFIG_SENSORS_RTC8564 is not set | ||
695 | # CONFIG_I2C_DEBUG_CORE is not set | ||
696 | # CONFIG_I2C_DEBUG_ALGO is not set | ||
697 | # CONFIG_I2C_DEBUG_BUS is not set | ||
698 | # CONFIG_I2C_DEBUG_CHIP is not set | ||
699 | |||
700 | # | ||
701 | # Dallas's 1-wire bus | ||
702 | # | 787 | # |
703 | # CONFIG_W1 is not set | ||
704 | 788 | ||
705 | # | 789 | # |
706 | # Misc devices | 790 | # Multimedia Capabilities Port drivers |
707 | # | 791 | # |
708 | 792 | ||
709 | # | 793 | # |
@@ -758,11 +842,12 @@ CONFIG_SND_OPL3_LIB=m | |||
758 | # CONFIG_SND_MTPAV is not set | 842 | # CONFIG_SND_MTPAV is not set |
759 | # CONFIG_SND_SERIAL_U16550 is not set | 843 | # CONFIG_SND_SERIAL_U16550 is not set |
760 | # CONFIG_SND_MPU401 is not set | 844 | # CONFIG_SND_MPU401 is not set |
845 | CONFIG_SND_AC97_CODEC=m | ||
846 | CONFIG_SND_AC97_BUS=m | ||
761 | 847 | ||
762 | # | 848 | # |
763 | # PCI devices | 849 | # PCI devices |
764 | # | 850 | # |
765 | CONFIG_SND_AC97_CODEC=m | ||
766 | # CONFIG_SND_ALI5451 is not set | 851 | # CONFIG_SND_ALI5451 is not set |
767 | # CONFIG_SND_ATIIXP is not set | 852 | # CONFIG_SND_ATIIXP is not set |
768 | # CONFIG_SND_ATIIXP_MODEM is not set | 853 | # CONFIG_SND_ATIIXP_MODEM is not set |
@@ -774,6 +859,8 @@ CONFIG_SND_AC97_CODEC=m | |||
774 | # CONFIG_SND_CS46XX is not set | 859 | # CONFIG_SND_CS46XX is not set |
775 | CONFIG_SND_CS4281=m | 860 | CONFIG_SND_CS4281=m |
776 | # CONFIG_SND_EMU10K1 is not set | 861 | # CONFIG_SND_EMU10K1 is not set |
862 | # CONFIG_SND_EMU10K1X is not set | ||
863 | # CONFIG_SND_CA0106 is not set | ||
777 | # CONFIG_SND_KORG1212 is not set | 864 | # CONFIG_SND_KORG1212 is not set |
778 | # CONFIG_SND_MIXART is not set | 865 | # CONFIG_SND_MIXART is not set |
779 | # CONFIG_SND_NM256 is not set | 866 | # CONFIG_SND_NM256 is not set |
@@ -781,9 +868,10 @@ CONFIG_SND_CS4281=m | |||
781 | # CONFIG_SND_RME96 is not set | 868 | # CONFIG_SND_RME96 is not set |
782 | # CONFIG_SND_RME9652 is not set | 869 | # CONFIG_SND_RME9652 is not set |
783 | # CONFIG_SND_HDSP is not set | 870 | # CONFIG_SND_HDSP is not set |
871 | # CONFIG_SND_HDSPM is not set | ||
784 | # CONFIG_SND_TRIDENT is not set | 872 | # CONFIG_SND_TRIDENT is not set |
785 | # CONFIG_SND_YMFPCI is not set | 873 | # CONFIG_SND_YMFPCI is not set |
786 | # CONFIG_SND_ALS4000 is not set | 874 | # CONFIG_SND_AD1889 is not set |
787 | # CONFIG_SND_CMIPCI is not set | 875 | # CONFIG_SND_CMIPCI is not set |
788 | # CONFIG_SND_ENS1370 is not set | 876 | # CONFIG_SND_ENS1370 is not set |
789 | # CONFIG_SND_ENS1371 is not set | 877 | # CONFIG_SND_ENS1371 is not set |
@@ -797,13 +885,14 @@ CONFIG_SND_CS4281=m | |||
797 | # CONFIG_SND_INTEL8X0M is not set | 885 | # CONFIG_SND_INTEL8X0M is not set |
798 | # CONFIG_SND_SONICVIBES is not set | 886 | # CONFIG_SND_SONICVIBES is not set |
799 | # CONFIG_SND_VIA82XX is not set | 887 | # CONFIG_SND_VIA82XX is not set |
888 | # CONFIG_SND_VIA82XX_MODEM is not set | ||
800 | # CONFIG_SND_VX222 is not set | 889 | # CONFIG_SND_VX222 is not set |
890 | # CONFIG_SND_HDA_INTEL is not set | ||
801 | 891 | ||
802 | # | 892 | # |
803 | # USB devices | 893 | # USB devices |
804 | # | 894 | # |
805 | # CONFIG_SND_USB_AUDIO is not set | 895 | # CONFIG_SND_USB_AUDIO is not set |
806 | # CONFIG_SND_USB_USX2Y is not set | ||
807 | 896 | ||
808 | # | 897 | # |
809 | # Open Sound System | 898 | # Open Sound System |
@@ -813,6 +902,8 @@ CONFIG_SND_CS4281=m | |||
813 | # | 902 | # |
814 | # USB support | 903 | # USB support |
815 | # | 904 | # |
905 | CONFIG_USB_ARCH_HAS_HCD=y | ||
906 | CONFIG_USB_ARCH_HAS_OHCI=y | ||
816 | CONFIG_USB=m | 907 | CONFIG_USB=m |
817 | # CONFIG_USB_DEBUG is not set | 908 | # CONFIG_USB_DEBUG is not set |
818 | 909 | ||
@@ -824,35 +915,38 @@ CONFIG_USB_DEVICEFS=y | |||
824 | # CONFIG_USB_DYNAMIC_MINORS is not set | 915 | # CONFIG_USB_DYNAMIC_MINORS is not set |
825 | # CONFIG_USB_SUSPEND is not set | 916 | # CONFIG_USB_SUSPEND is not set |
826 | # CONFIG_USB_OTG is not set | 917 | # CONFIG_USB_OTG is not set |
827 | CONFIG_USB_ARCH_HAS_HCD=y | ||
828 | CONFIG_USB_ARCH_HAS_OHCI=y | ||
829 | 918 | ||
830 | # | 919 | # |
831 | # USB Host Controller Drivers | 920 | # USB Host Controller Drivers |
832 | # | 921 | # |
833 | # CONFIG_USB_EHCI_HCD is not set | 922 | # CONFIG_USB_EHCI_HCD is not set |
923 | # CONFIG_USB_ISP116X_HCD is not set | ||
834 | # CONFIG_USB_OHCI_HCD is not set | 924 | # CONFIG_USB_OHCI_HCD is not set |
835 | CONFIG_USB_UHCI_HCD=m | 925 | CONFIG_USB_UHCI_HCD=m |
926 | # CONFIG_USB_SL811_HCD is not set | ||
836 | 927 | ||
837 | # | 928 | # |
838 | # USB Device Class drivers | 929 | # USB Device Class drivers |
839 | # | 930 | # |
840 | CONFIG_USB_AUDIO=m | 931 | # CONFIG_OBSOLETE_OSS_USB_DRIVER is not set |
841 | CONFIG_USB_BLUETOOTH_TTY=m | 932 | CONFIG_USB_BLUETOOTH_TTY=m |
842 | CONFIG_USB_MIDI=m | ||
843 | CONFIG_USB_ACM=m | 933 | CONFIG_USB_ACM=m |
844 | CONFIG_USB_PRINTER=m | 934 | CONFIG_USB_PRINTER=m |
935 | |||
936 | # | ||
937 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information | ||
938 | # | ||
845 | CONFIG_USB_STORAGE=m | 939 | CONFIG_USB_STORAGE=m |
846 | # CONFIG_USB_STORAGE_DEBUG is not set | 940 | # CONFIG_USB_STORAGE_DEBUG is not set |
847 | # CONFIG_USB_STORAGE_RW_DETECT is not set | ||
848 | # CONFIG_USB_STORAGE_DATAFAB is not set | 941 | # CONFIG_USB_STORAGE_DATAFAB is not set |
849 | # CONFIG_USB_STORAGE_FREECOM is not set | 942 | # CONFIG_USB_STORAGE_FREECOM is not set |
850 | # CONFIG_USB_STORAGE_ISD200 is not set | 943 | # CONFIG_USB_STORAGE_ISD200 is not set |
851 | # CONFIG_USB_STORAGE_DPCM is not set | 944 | # CONFIG_USB_STORAGE_DPCM is not set |
852 | # CONFIG_USB_STORAGE_HP8200e is not set | 945 | # CONFIG_USB_STORAGE_USBAT is not set |
853 | # CONFIG_USB_STORAGE_SDDR09 is not set | 946 | # CONFIG_USB_STORAGE_SDDR09 is not set |
854 | # CONFIG_USB_STORAGE_SDDR55 is not set | 947 | # CONFIG_USB_STORAGE_SDDR55 is not set |
855 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | 948 | # CONFIG_USB_STORAGE_JUMPSHOT is not set |
949 | # CONFIG_USB_STORAGE_ONETOUCH is not set | ||
856 | 950 | ||
857 | # | 951 | # |
858 | # USB Input Devices | 952 | # USB Input Devices |
@@ -869,19 +963,23 @@ CONFIG_USB_HIDDEV=y | |||
869 | # CONFIG_USB_MOUSE is not set | 963 | # CONFIG_USB_MOUSE is not set |
870 | # CONFIG_USB_AIPTEK is not set | 964 | # CONFIG_USB_AIPTEK is not set |
871 | # CONFIG_USB_WACOM is not set | 965 | # CONFIG_USB_WACOM is not set |
966 | # CONFIG_USB_ACECAD is not set | ||
872 | # CONFIG_USB_KBTAB is not set | 967 | # CONFIG_USB_KBTAB is not set |
873 | # CONFIG_USB_POWERMATE is not set | 968 | # CONFIG_USB_POWERMATE is not set |
874 | # CONFIG_USB_MTOUCH is not set | 969 | # CONFIG_USB_MTOUCH is not set |
970 | # CONFIG_USB_ITMTOUCH is not set | ||
875 | # CONFIG_USB_EGALAX is not set | 971 | # CONFIG_USB_EGALAX is not set |
972 | # CONFIG_USB_YEALINK is not set | ||
876 | # CONFIG_USB_XPAD is not set | 973 | # CONFIG_USB_XPAD is not set |
877 | # CONFIG_USB_ATI_REMOTE is not set | 974 | # CONFIG_USB_ATI_REMOTE is not set |
975 | # CONFIG_USB_KEYSPAN_REMOTE is not set | ||
976 | # CONFIG_USB_APPLETOUCH is not set | ||
878 | 977 | ||
879 | # | 978 | # |
880 | # USB Imaging devices | 979 | # USB Imaging devices |
881 | # | 980 | # |
882 | # CONFIG_USB_MDC800 is not set | 981 | # CONFIG_USB_MDC800 is not set |
883 | # CONFIG_USB_MICROTEK is not set | 982 | # CONFIG_USB_MICROTEK is not set |
884 | # CONFIG_USB_HPUSBSCSI is not set | ||
885 | 983 | ||
886 | # | 984 | # |
887 | # USB Multimedia devices | 985 | # USB Multimedia devices |
@@ -900,6 +998,7 @@ CONFIG_USB_HIDDEV=y | |||
900 | # CONFIG_USB_PEGASUS is not set | 998 | # CONFIG_USB_PEGASUS is not set |
901 | # CONFIG_USB_RTL8150 is not set | 999 | # CONFIG_USB_RTL8150 is not set |
902 | # CONFIG_USB_USBNET is not set | 1000 | # CONFIG_USB_USBNET is not set |
1001 | CONFIG_USB_MON=y | ||
903 | 1002 | ||
904 | # | 1003 | # |
905 | # USB port drivers | 1004 | # USB port drivers |
@@ -915,7 +1014,6 @@ CONFIG_USB_HIDDEV=y | |||
915 | # | 1014 | # |
916 | # CONFIG_USB_EMI62 is not set | 1015 | # CONFIG_USB_EMI62 is not set |
917 | # CONFIG_USB_EMI26 is not set | 1016 | # CONFIG_USB_EMI26 is not set |
918 | # CONFIG_USB_TIGL is not set | ||
919 | # CONFIG_USB_AUERSWALD is not set | 1017 | # CONFIG_USB_AUERSWALD is not set |
920 | # CONFIG_USB_RIO500 is not set | 1018 | # CONFIG_USB_RIO500 is not set |
921 | # CONFIG_USB_LEGOTOWER is not set | 1019 | # CONFIG_USB_LEGOTOWER is not set |
@@ -924,10 +1022,12 @@ CONFIG_USB_HIDDEV=y | |||
924 | # CONFIG_USB_CYTHERM is not set | 1022 | # CONFIG_USB_CYTHERM is not set |
925 | # CONFIG_USB_PHIDGETKIT is not set | 1023 | # CONFIG_USB_PHIDGETKIT is not set |
926 | # CONFIG_USB_PHIDGETSERVO is not set | 1024 | # CONFIG_USB_PHIDGETSERVO is not set |
1025 | # CONFIG_USB_IDMOUSE is not set | ||
1026 | # CONFIG_USB_LD is not set | ||
927 | # CONFIG_USB_TEST is not set | 1027 | # CONFIG_USB_TEST is not set |
928 | 1028 | ||
929 | # | 1029 | # |
930 | # USB ATM/DSL drivers | 1030 | # USB DSL modem support |
931 | # | 1031 | # |
932 | 1032 | ||
933 | # | 1033 | # |
@@ -936,10 +1036,25 @@ CONFIG_USB_HIDDEV=y | |||
936 | # CONFIG_USB_GADGET is not set | 1036 | # CONFIG_USB_GADGET is not set |
937 | 1037 | ||
938 | # | 1038 | # |
1039 | # MMC/SD Card support | ||
1040 | # | ||
1041 | # CONFIG_MMC is not set | ||
1042 | |||
1043 | # | ||
1044 | # InfiniBand support | ||
1045 | # | ||
1046 | # CONFIG_INFINIBAND is not set | ||
1047 | |||
1048 | # | ||
1049 | # SN Devices | ||
1050 | # | ||
1051 | |||
1052 | # | ||
939 | # File systems | 1053 | # File systems |
940 | # | 1054 | # |
941 | CONFIG_EXT2_FS=y | 1055 | CONFIG_EXT2_FS=y |
942 | # CONFIG_EXT2_FS_XATTR is not set | 1056 | # CONFIG_EXT2_FS_XATTR is not set |
1057 | # CONFIG_EXT2_FS_XIP is not set | ||
943 | CONFIG_EXT3_FS=y | 1058 | CONFIG_EXT3_FS=y |
944 | CONFIG_EXT3_FS_XATTR=y | 1059 | CONFIG_EXT3_FS_XATTR=y |
945 | # CONFIG_EXT3_FS_POSIX_ACL is not set | 1060 | # CONFIG_EXT3_FS_POSIX_ACL is not set |
@@ -951,17 +1066,20 @@ CONFIG_FS_MBCACHE=y | |||
951 | # CONFIG_JFS_FS is not set | 1066 | # CONFIG_JFS_FS is not set |
952 | CONFIG_FS_POSIX_ACL=y | 1067 | CONFIG_FS_POSIX_ACL=y |
953 | CONFIG_XFS_FS=y | 1068 | CONFIG_XFS_FS=y |
954 | # CONFIG_XFS_RT is not set | 1069 | CONFIG_XFS_EXPORT=y |
955 | CONFIG_XFS_QUOTA=y | 1070 | CONFIG_XFS_QUOTA=y |
956 | CONFIG_XFS_SECURITY=y | 1071 | CONFIG_XFS_SECURITY=y |
957 | CONFIG_XFS_POSIX_ACL=y | 1072 | CONFIG_XFS_POSIX_ACL=y |
1073 | # CONFIG_XFS_RT is not set | ||
958 | # CONFIG_MINIX_FS is not set | 1074 | # CONFIG_MINIX_FS is not set |
959 | # CONFIG_ROMFS_FS is not set | 1075 | # CONFIG_ROMFS_FS is not set |
1076 | CONFIG_INOTIFY=y | ||
960 | # CONFIG_QUOTA is not set | 1077 | # CONFIG_QUOTA is not set |
961 | CONFIG_QUOTACTL=y | 1078 | CONFIG_QUOTACTL=y |
962 | CONFIG_DNOTIFY=y | 1079 | CONFIG_DNOTIFY=y |
963 | CONFIG_AUTOFS_FS=m | 1080 | CONFIG_AUTOFS_FS=m |
964 | CONFIG_AUTOFS4_FS=m | 1081 | CONFIG_AUTOFS4_FS=m |
1082 | # CONFIG_FUSE_FS is not set | ||
965 | 1083 | ||
966 | # | 1084 | # |
967 | # CD-ROM/DVD Filesystems | 1085 | # CD-ROM/DVD Filesystems |
@@ -988,14 +1106,11 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | |||
988 | CONFIG_PROC_FS=y | 1106 | CONFIG_PROC_FS=y |
989 | CONFIG_PROC_KCORE=y | 1107 | CONFIG_PROC_KCORE=y |
990 | CONFIG_SYSFS=y | 1108 | CONFIG_SYSFS=y |
991 | # CONFIG_DEVFS_FS is not set | ||
992 | CONFIG_DEVPTS_FS_XATTR=y | ||
993 | CONFIG_DEVPTS_FS_SECURITY=y | ||
994 | CONFIG_TMPFS=y | 1109 | CONFIG_TMPFS=y |
995 | # CONFIG_TMPFS_XATTR is not set | ||
996 | CONFIG_HUGETLBFS=y | 1110 | CONFIG_HUGETLBFS=y |
997 | CONFIG_HUGETLB_PAGE=y | 1111 | CONFIG_HUGETLB_PAGE=y |
998 | CONFIG_RAMFS=y | 1112 | CONFIG_RAMFS=y |
1113 | # CONFIG_RELAYFS_FS is not set | ||
999 | 1114 | ||
1000 | # | 1115 | # |
1001 | # Miscellaneous filesystems | 1116 | # Miscellaneous filesystems |
@@ -1019,15 +1134,18 @@ CONFIG_RAMFS=y | |||
1019 | # | 1134 | # |
1020 | CONFIG_NFS_FS=m | 1135 | CONFIG_NFS_FS=m |
1021 | CONFIG_NFS_V3=y | 1136 | CONFIG_NFS_V3=y |
1137 | # CONFIG_NFS_V3_ACL is not set | ||
1022 | CONFIG_NFS_V4=y | 1138 | CONFIG_NFS_V4=y |
1023 | # CONFIG_NFS_DIRECTIO is not set | 1139 | # CONFIG_NFS_DIRECTIO is not set |
1024 | CONFIG_NFSD=m | 1140 | CONFIG_NFSD=m |
1025 | CONFIG_NFSD_V3=y | 1141 | CONFIG_NFSD_V3=y |
1142 | # CONFIG_NFSD_V3_ACL is not set | ||
1026 | CONFIG_NFSD_V4=y | 1143 | CONFIG_NFSD_V4=y |
1027 | CONFIG_NFSD_TCP=y | 1144 | CONFIG_NFSD_TCP=y |
1028 | CONFIG_LOCKD=m | 1145 | CONFIG_LOCKD=m |
1029 | CONFIG_LOCKD_V4=y | 1146 | CONFIG_LOCKD_V4=y |
1030 | CONFIG_EXPORTFS=m | 1147 | CONFIG_EXPORTFS=y |
1148 | CONFIG_NFS_COMMON=y | ||
1031 | CONFIG_SUNRPC=m | 1149 | CONFIG_SUNRPC=m |
1032 | CONFIG_SUNRPC_GSS=m | 1150 | CONFIG_SUNRPC_GSS=m |
1033 | CONFIG_RPCSEC_GSS_KRB5=m | 1151 | CONFIG_RPCSEC_GSS_KRB5=m |
@@ -1037,9 +1155,11 @@ CONFIG_CIFS=m | |||
1037 | CONFIG_CIFS_STATS=y | 1155 | CONFIG_CIFS_STATS=y |
1038 | CONFIG_CIFS_XATTR=y | 1156 | CONFIG_CIFS_XATTR=y |
1039 | CONFIG_CIFS_POSIX=y | 1157 | CONFIG_CIFS_POSIX=y |
1158 | # CONFIG_CIFS_EXPERIMENTAL is not set | ||
1040 | # CONFIG_NCP_FS is not set | 1159 | # CONFIG_NCP_FS is not set |
1041 | # CONFIG_CODA_FS is not set | 1160 | # CONFIG_CODA_FS is not set |
1042 | # CONFIG_AFS_FS is not set | 1161 | # CONFIG_AFS_FS is not set |
1162 | # CONFIG_9P_FS is not set | ||
1043 | 1163 | ||
1044 | # | 1164 | # |
1045 | # Partition Types | 1165 | # Partition Types |
@@ -1109,8 +1229,12 @@ CONFIG_NLS_UTF8=m | |||
1109 | # Library routines | 1229 | # Library routines |
1110 | # | 1230 | # |
1111 | # CONFIG_CRC_CCITT is not set | 1231 | # CONFIG_CRC_CCITT is not set |
1232 | # CONFIG_CRC16 is not set | ||
1112 | CONFIG_CRC32=y | 1233 | CONFIG_CRC32=y |
1113 | # CONFIG_LIBCRC32C is not set | 1234 | # CONFIG_LIBCRC32C is not set |
1235 | CONFIG_GENERIC_HARDIRQS=y | ||
1236 | CONFIG_GENERIC_IRQ_PROBE=y | ||
1237 | CONFIG_GENERIC_PENDING_IRQ=y | ||
1114 | 1238 | ||
1115 | # | 1239 | # |
1116 | # Profiling support | 1240 | # Profiling support |
@@ -1121,14 +1245,20 @@ CONFIG_OPROFILE=y | |||
1121 | # | 1245 | # |
1122 | # Kernel hacking | 1246 | # Kernel hacking |
1123 | # | 1247 | # |
1248 | # CONFIG_PRINTK_TIME is not set | ||
1124 | CONFIG_DEBUG_KERNEL=y | 1249 | CONFIG_DEBUG_KERNEL=y |
1125 | CONFIG_MAGIC_SYSRQ=y | 1250 | CONFIG_MAGIC_SYSRQ=y |
1251 | CONFIG_LOG_BUF_SHIFT=16 | ||
1252 | CONFIG_DETECT_SOFTLOCKUP=y | ||
1126 | # CONFIG_SCHEDSTATS is not set | 1253 | # CONFIG_SCHEDSTATS is not set |
1127 | # CONFIG_DEBUG_SLAB is not set | 1254 | # CONFIG_DEBUG_SLAB is not set |
1255 | CONFIG_DEBUG_PREEMPT=y | ||
1128 | # CONFIG_DEBUG_SPINLOCK is not set | 1256 | # CONFIG_DEBUG_SPINLOCK is not set |
1129 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 1257 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
1130 | # CONFIG_DEBUG_KOBJECT is not set | 1258 | # CONFIG_DEBUG_KOBJECT is not set |
1131 | # CONFIG_DEBUG_INFO is not set | 1259 | # CONFIG_DEBUG_INFO is not set |
1260 | # CONFIG_DEBUG_FS is not set | ||
1261 | # CONFIG_KPROBES is not set | ||
1132 | # CONFIG_IA64_GRANULE_16MB is not set | 1262 | # CONFIG_IA64_GRANULE_16MB is not set |
1133 | CONFIG_IA64_GRANULE_64MB=y | 1263 | CONFIG_IA64_GRANULE_64MB=y |
1134 | # CONFIG_IA64_PRINT_HAZARDS is not set | 1264 | # CONFIG_IA64_PRINT_HAZARDS is not set |
@@ -1155,6 +1285,7 @@ CONFIG_CRYPTO_MD5=y | |||
1155 | # CONFIG_CRYPTO_SHA256 is not set | 1285 | # CONFIG_CRYPTO_SHA256 is not set |
1156 | # CONFIG_CRYPTO_SHA512 is not set | 1286 | # CONFIG_CRYPTO_SHA512 is not set |
1157 | # CONFIG_CRYPTO_WP512 is not set | 1287 | # CONFIG_CRYPTO_WP512 is not set |
1288 | # CONFIG_CRYPTO_TGR192 is not set | ||
1158 | CONFIG_CRYPTO_DES=y | 1289 | CONFIG_CRYPTO_DES=y |
1159 | # CONFIG_CRYPTO_BLOWFISH is not set | 1290 | # CONFIG_CRYPTO_BLOWFISH is not set |
1160 | # CONFIG_CRYPTO_TWOFISH is not set | 1291 | # CONFIG_CRYPTO_TWOFISH is not set |
@@ -1170,3 +1301,7 @@ CONFIG_CRYPTO_DES=y | |||
1170 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | 1301 | # CONFIG_CRYPTO_MICHAEL_MIC is not set |
1171 | # CONFIG_CRYPTO_CRC32C is not set | 1302 | # CONFIG_CRYPTO_CRC32C is not set |
1172 | # CONFIG_CRYPTO_TEST is not set | 1303 | # CONFIG_CRYPTO_TEST is not set |
1304 | |||
1305 | # | ||
1306 | # Hardware crypto devices | ||
1307 | # | ||
diff --git a/arch/ia64/configs/gensparse_defconfig b/arch/ia64/configs/gensparse_defconfig new file mode 100644 index 000000000000..80f8663bc6d9 --- /dev/null +++ b/arch/ia64/configs/gensparse_defconfig | |||
@@ -0,0 +1,1319 @@ | |||
1 | # | ||
2 | # Automatically generated make config: don't edit | ||
3 | # Linux kernel version: 2.6.14-rc2 | ||
4 | # Wed Sep 28 08:27:29 2005 | ||
5 | # | ||
6 | |||
7 | # | ||
8 | # Code maturity level options | ||
9 | # | ||
10 | CONFIG_EXPERIMENTAL=y | ||
11 | CONFIG_CLEAN_COMPILE=y | ||
12 | CONFIG_LOCK_KERNEL=y | ||
13 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
14 | |||
15 | # | ||
16 | # General setup | ||
17 | # | ||
18 | CONFIG_LOCALVERSION="" | ||
19 | CONFIG_LOCALVERSION_AUTO=y | ||
20 | CONFIG_SWAP=y | ||
21 | CONFIG_SYSVIPC=y | ||
22 | CONFIG_POSIX_MQUEUE=y | ||
23 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
24 | CONFIG_SYSCTL=y | ||
25 | # CONFIG_AUDIT is not set | ||
26 | CONFIG_HOTPLUG=y | ||
27 | CONFIG_KOBJECT_UEVENT=y | ||
28 | CONFIG_IKCONFIG=y | ||
29 | CONFIG_IKCONFIG_PROC=y | ||
30 | # CONFIG_CPUSETS is not set | ||
31 | CONFIG_INITRAMFS_SOURCE="" | ||
32 | # CONFIG_EMBEDDED is not set | ||
33 | CONFIG_KALLSYMS=y | ||
34 | CONFIG_KALLSYMS_ALL=y | ||
35 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
36 | CONFIG_PRINTK=y | ||
37 | CONFIG_BUG=y | ||
38 | CONFIG_BASE_FULL=y | ||
39 | CONFIG_FUTEX=y | ||
40 | CONFIG_EPOLL=y | ||
41 | CONFIG_SHMEM=y | ||
42 | CONFIG_CC_ALIGN_FUNCTIONS=0 | ||
43 | CONFIG_CC_ALIGN_LABELS=0 | ||
44 | CONFIG_CC_ALIGN_LOOPS=0 | ||
45 | CONFIG_CC_ALIGN_JUMPS=0 | ||
46 | # CONFIG_TINY_SHMEM is not set | ||
47 | CONFIG_BASE_SMALL=0 | ||
48 | |||
49 | # | ||
50 | # Loadable module support | ||
51 | # | ||
52 | CONFIG_MODULES=y | ||
53 | CONFIG_MODULE_UNLOAD=y | ||
54 | # CONFIG_MODULE_FORCE_UNLOAD is not set | ||
55 | CONFIG_OBSOLETE_MODPARM=y | ||
56 | CONFIG_MODVERSIONS=y | ||
57 | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||
58 | CONFIG_KMOD=y | ||
59 | CONFIG_STOP_MACHINE=y | ||
60 | |||
61 | # | ||
62 | # Processor type and features | ||
63 | # | ||
64 | CONFIG_IA64=y | ||
65 | CONFIG_64BIT=y | ||
66 | CONFIG_MMU=y | ||
67 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | ||
68 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
69 | CONFIG_TIME_INTERPOLATION=y | ||
70 | CONFIG_EFI=y | ||
71 | CONFIG_GENERIC_IOMAP=y | ||
72 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | ||
73 | CONFIG_IA64_GENERIC=y | ||
74 | # CONFIG_IA64_DIG is not set | ||
75 | # CONFIG_IA64_HP_ZX1 is not set | ||
76 | # CONFIG_IA64_HP_ZX1_SWIOTLB is not set | ||
77 | # CONFIG_IA64_SGI_SN2 is not set | ||
78 | # CONFIG_IA64_HP_SIM is not set | ||
79 | # CONFIG_ITANIUM is not set | ||
80 | CONFIG_MCKINLEY=y | ||
81 | # CONFIG_IA64_PAGE_SIZE_4KB is not set | ||
82 | # CONFIG_IA64_PAGE_SIZE_8KB is not set | ||
83 | CONFIG_IA64_PAGE_SIZE_16KB=y | ||
84 | # CONFIG_IA64_PAGE_SIZE_64KB is not set | ||
85 | # CONFIG_HZ_100 is not set | ||
86 | CONFIG_HZ_250=y | ||
87 | # CONFIG_HZ_1000 is not set | ||
88 | CONFIG_HZ=250 | ||
89 | CONFIG_IA64_L1_CACHE_SHIFT=7 | ||
90 | CONFIG_IA64_CYCLONE=y | ||
91 | CONFIG_IOSAPIC=y | ||
92 | # CONFIG_IA64_SGI_SN_XP is not set | ||
93 | CONFIG_FORCE_MAX_ZONEORDER=17 | ||
94 | CONFIG_SMP=y | ||
95 | CONFIG_NR_CPUS=512 | ||
96 | CONFIG_HOTPLUG_CPU=y | ||
97 | # CONFIG_SCHED_SMT is not set | ||
98 | # CONFIG_PREEMPT is not set | ||
99 | CONFIG_SELECT_MEMORY_MODEL=y | ||
100 | # CONFIG_FLATMEM_MANUAL is not set | ||
101 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
102 | CONFIG_SPARSEMEM_MANUAL=y | ||
103 | CONFIG_SPARSEMEM=y | ||
104 | CONFIG_NEED_MULTIPLE_NODES=y | ||
105 | CONFIG_HAVE_MEMORY_PRESENT=y | ||
106 | # CONFIG_SPARSEMEM_STATIC is not set | ||
107 | CONFIG_SPARSEMEM_EXTREME=y | ||
108 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | ||
109 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y | ||
110 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
111 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | ||
112 | CONFIG_ARCH_DISCONTIGMEM_DEFAULT=y | ||
113 | CONFIG_NUMA=y | ||
114 | CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y | ||
115 | CONFIG_IA32_SUPPORT=y | ||
116 | CONFIG_COMPAT=y | ||
117 | CONFIG_IA64_MCA_RECOVERY=y | ||
118 | CONFIG_PERFMON=y | ||
119 | CONFIG_IA64_PALINFO=y | ||
120 | |||
121 | # | ||
122 | # Firmware Drivers | ||
123 | # | ||
124 | CONFIG_EFI_VARS=y | ||
125 | CONFIG_EFI_PCDP=y | ||
126 | # CONFIG_DELL_RBU is not set | ||
127 | CONFIG_BINFMT_ELF=y | ||
128 | CONFIG_BINFMT_MISC=m | ||
129 | |||
130 | # | ||
131 | # Power management and ACPI | ||
132 | # | ||
133 | CONFIG_PM=y | ||
134 | # CONFIG_PM_DEBUG is not set | ||
135 | |||
136 | # | ||
137 | # ACPI (Advanced Configuration and Power Interface) Support | ||
138 | # | ||
139 | CONFIG_ACPI=y | ||
140 | CONFIG_ACPI_BUTTON=m | ||
141 | CONFIG_ACPI_FAN=m | ||
142 | CONFIG_ACPI_PROCESSOR=m | ||
143 | CONFIG_ACPI_HOTPLUG_CPU=y | ||
144 | CONFIG_ACPI_THERMAL=m | ||
145 | CONFIG_ACPI_NUMA=y | ||
146 | CONFIG_ACPI_BLACKLIST_YEAR=0 | ||
147 | # CONFIG_ACPI_DEBUG is not set | ||
148 | CONFIG_ACPI_POWER=y | ||
149 | CONFIG_ACPI_SYSTEM=y | ||
150 | CONFIG_ACPI_CONTAINER=m | ||
151 | |||
152 | # | ||
153 | # CPU Frequency scaling | ||
154 | # | ||
155 | # CONFIG_CPU_FREQ is not set | ||
156 | |||
157 | # | ||
158 | # Bus options (PCI, PCMCIA) | ||
159 | # | ||
160 | CONFIG_PCI=y | ||
161 | CONFIG_PCI_DOMAINS=y | ||
162 | # CONFIG_PCI_MSI is not set | ||
163 | CONFIG_PCI_LEGACY_PROC=y | ||
164 | # CONFIG_PCI_DEBUG is not set | ||
165 | |||
166 | # | ||
167 | # PCI Hotplug Support | ||
168 | # | ||
169 | CONFIG_HOTPLUG_PCI=m | ||
170 | # CONFIG_HOTPLUG_PCI_FAKE is not set | ||
171 | CONFIG_HOTPLUG_PCI_ACPI=m | ||
172 | # CONFIG_HOTPLUG_PCI_ACPI_IBM is not set | ||
173 | # CONFIG_HOTPLUG_PCI_CPCI is not set | ||
174 | # CONFIG_HOTPLUG_PCI_SHPC is not set | ||
175 | # CONFIG_HOTPLUG_PCI_SGI is not set | ||
176 | |||
177 | # | ||
178 | # PCCARD (PCMCIA/CardBus) support | ||
179 | # | ||
180 | # CONFIG_PCCARD is not set | ||
181 | |||
182 | # | ||
183 | # Networking | ||
184 | # | ||
185 | CONFIG_NET=y | ||
186 | |||
187 | # | ||
188 | # Networking options | ||
189 | # | ||
190 | CONFIG_PACKET=y | ||
191 | # CONFIG_PACKET_MMAP is not set | ||
192 | CONFIG_UNIX=y | ||
193 | # CONFIG_NET_KEY is not set | ||
194 | CONFIG_INET=y | ||
195 | CONFIG_IP_MULTICAST=y | ||
196 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
197 | CONFIG_IP_FIB_HASH=y | ||
198 | # CONFIG_IP_PNP is not set | ||
199 | # CONFIG_NET_IPIP is not set | ||
200 | # CONFIG_NET_IPGRE is not set | ||
201 | # CONFIG_IP_MROUTE is not set | ||
202 | CONFIG_ARPD=y | ||
203 | CONFIG_SYN_COOKIES=y | ||
204 | # CONFIG_INET_AH is not set | ||
205 | # CONFIG_INET_ESP is not set | ||
206 | # CONFIG_INET_IPCOMP is not set | ||
207 | # CONFIG_INET_TUNNEL is not set | ||
208 | CONFIG_INET_DIAG=y | ||
209 | CONFIG_INET_TCP_DIAG=y | ||
210 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
211 | CONFIG_TCP_CONG_BIC=y | ||
212 | # CONFIG_IPV6 is not set | ||
213 | # CONFIG_NETFILTER is not set | ||
214 | |||
215 | # | ||
216 | # DCCP Configuration (EXPERIMENTAL) | ||
217 | # | ||
218 | # CONFIG_IP_DCCP is not set | ||
219 | |||
220 | # | ||
221 | # SCTP Configuration (EXPERIMENTAL) | ||
222 | # | ||
223 | # CONFIG_IP_SCTP is not set | ||
224 | # CONFIG_ATM is not set | ||
225 | # CONFIG_BRIDGE is not set | ||
226 | # CONFIG_VLAN_8021Q is not set | ||
227 | # CONFIG_DECNET is not set | ||
228 | # CONFIG_LLC2 is not set | ||
229 | # CONFIG_IPX is not set | ||
230 | # CONFIG_ATALK is not set | ||
231 | # CONFIG_X25 is not set | ||
232 | # CONFIG_LAPB is not set | ||
233 | # CONFIG_NET_DIVERT is not set | ||
234 | # CONFIG_ECONET is not set | ||
235 | # CONFIG_WAN_ROUTER is not set | ||
236 | # CONFIG_NET_SCHED is not set | ||
237 | # CONFIG_NET_CLS_ROUTE is not set | ||
238 | |||
239 | # | ||
240 | # Network testing | ||
241 | # | ||
242 | # CONFIG_NET_PKTGEN is not set | ||
243 | # CONFIG_HAMRADIO is not set | ||
244 | # CONFIG_IRDA is not set | ||
245 | # CONFIG_BT is not set | ||
246 | # CONFIG_IEEE80211 is not set | ||
247 | |||
248 | # | ||
249 | # Device Drivers | ||
250 | # | ||
251 | |||
252 | # | ||
253 | # Generic Driver Options | ||
254 | # | ||
255 | CONFIG_STANDALONE=y | ||
256 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
257 | CONFIG_FW_LOADER=m | ||
258 | # CONFIG_DEBUG_DRIVER is not set | ||
259 | |||
260 | # | ||
261 | # Connector - unified userspace <-> kernelspace linker | ||
262 | # | ||
263 | # CONFIG_CONNECTOR is not set | ||
264 | |||
265 | # | ||
266 | # Memory Technology Devices (MTD) | ||
267 | # | ||
268 | # CONFIG_MTD is not set | ||
269 | |||
270 | # | ||
271 | # Parallel port support | ||
272 | # | ||
273 | # CONFIG_PARPORT is not set | ||
274 | |||
275 | # | ||
276 | # Plug and Play support | ||
277 | # | ||
278 | # CONFIG_PNP is not set | ||
279 | |||
280 | # | ||
281 | # Block devices | ||
282 | # | ||
283 | # CONFIG_BLK_CPQ_DA is not set | ||
284 | # CONFIG_BLK_CPQ_CISS_DA is not set | ||
285 | # CONFIG_BLK_DEV_DAC960 is not set | ||
286 | # CONFIG_BLK_DEV_UMEM is not set | ||
287 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
288 | CONFIG_BLK_DEV_LOOP=m | ||
289 | CONFIG_BLK_DEV_CRYPTOLOOP=m | ||
290 | CONFIG_BLK_DEV_NBD=m | ||
291 | # CONFIG_BLK_DEV_SX8 is not set | ||
292 | # CONFIG_BLK_DEV_UB is not set | ||
293 | CONFIG_BLK_DEV_RAM=y | ||
294 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
295 | CONFIG_BLK_DEV_RAM_SIZE=4096 | ||
296 | CONFIG_BLK_DEV_INITRD=y | ||
297 | # 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 | ||
307 | |||
308 | # | ||
309 | # ATA/ATAPI/MFM/RLL support | ||
310 | # | ||
311 | CONFIG_IDE=y | ||
312 | CONFIG_BLK_DEV_IDE=y | ||
313 | |||
314 | # | ||
315 | # Please see Documentation/ide.txt for help/info on IDE drives | ||
316 | # | ||
317 | # CONFIG_BLK_DEV_IDE_SATA is not set | ||
318 | CONFIG_BLK_DEV_IDEDISK=y | ||
319 | # CONFIG_IDEDISK_MULTI_MODE is not set | ||
320 | CONFIG_BLK_DEV_IDECD=y | ||
321 | # CONFIG_BLK_DEV_IDETAPE is not set | ||
322 | CONFIG_BLK_DEV_IDEFLOPPY=y | ||
323 | CONFIG_BLK_DEV_IDESCSI=m | ||
324 | # CONFIG_IDE_TASK_IOCTL is not set | ||
325 | |||
326 | # | ||
327 | # IDE chipset support/bugfixes | ||
328 | # | ||
329 | CONFIG_IDE_GENERIC=y | ||
330 | CONFIG_BLK_DEV_IDEPCI=y | ||
331 | # CONFIG_IDEPCI_SHARE_IRQ is not set | ||
332 | # CONFIG_BLK_DEV_OFFBOARD is not set | ||
333 | CONFIG_BLK_DEV_GENERIC=y | ||
334 | # CONFIG_BLK_DEV_OPTI621 is not set | ||
335 | CONFIG_BLK_DEV_IDEDMA_PCI=y | ||
336 | # CONFIG_BLK_DEV_IDEDMA_FORCED is not set | ||
337 | CONFIG_IDEDMA_PCI_AUTO=y | ||
338 | # CONFIG_IDEDMA_ONLYDISK is not set | ||
339 | # CONFIG_BLK_DEV_AEC62XX is not set | ||
340 | # CONFIG_BLK_DEV_ALI15X3 is not set | ||
341 | # CONFIG_BLK_DEV_AMD74XX is not set | ||
342 | CONFIG_BLK_DEV_CMD64X=y | ||
343 | # CONFIG_BLK_DEV_TRIFLEX is not set | ||
344 | # CONFIG_BLK_DEV_CY82C693 is not set | ||
345 | # CONFIG_BLK_DEV_CS5520 is not set | ||
346 | # CONFIG_BLK_DEV_CS5530 is not set | ||
347 | # CONFIG_BLK_DEV_HPT34X is not set | ||
348 | # CONFIG_BLK_DEV_HPT366 is not set | ||
349 | # CONFIG_BLK_DEV_SC1200 is not set | ||
350 | CONFIG_BLK_DEV_PIIX=y | ||
351 | # CONFIG_BLK_DEV_IT821X is not set | ||
352 | # CONFIG_BLK_DEV_NS87415 is not set | ||
353 | # CONFIG_BLK_DEV_PDC202XX_OLD is not set | ||
354 | # CONFIG_BLK_DEV_PDC202XX_NEW is not set | ||
355 | # CONFIG_BLK_DEV_SVWKS is not set | ||
356 | CONFIG_BLK_DEV_SGIIOC4=y | ||
357 | # CONFIG_BLK_DEV_SIIMAGE is not set | ||
358 | # CONFIG_BLK_DEV_SLC90E66 is not set | ||
359 | # CONFIG_BLK_DEV_TRM290 is not set | ||
360 | # CONFIG_BLK_DEV_VIA82CXXX is not set | ||
361 | # CONFIG_IDE_ARM is not set | ||
362 | CONFIG_BLK_DEV_IDEDMA=y | ||
363 | # CONFIG_IDEDMA_IVB is not set | ||
364 | CONFIG_IDEDMA_AUTO=y | ||
365 | # CONFIG_BLK_DEV_HD is not set | ||
366 | |||
367 | # | ||
368 | # SCSI device support | ||
369 | # | ||
370 | # CONFIG_RAID_ATTRS is not set | ||
371 | CONFIG_SCSI=y | ||
372 | CONFIG_SCSI_PROC_FS=y | ||
373 | |||
374 | # | ||
375 | # SCSI support type (disk, tape, CD-ROM) | ||
376 | # | ||
377 | CONFIG_BLK_DEV_SD=y | ||
378 | CONFIG_CHR_DEV_ST=m | ||
379 | # CONFIG_CHR_DEV_OSST is not set | ||
380 | CONFIG_BLK_DEV_SR=m | ||
381 | # CONFIG_BLK_DEV_SR_VENDOR is not set | ||
382 | CONFIG_CHR_DEV_SG=m | ||
383 | # CONFIG_CHR_DEV_SCH is not set | ||
384 | |||
385 | # | ||
386 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | ||
387 | # | ||
388 | # CONFIG_SCSI_MULTI_LUN is not set | ||
389 | # CONFIG_SCSI_CONSTANTS is not set | ||
390 | # CONFIG_SCSI_LOGGING is not set | ||
391 | |||
392 | # | ||
393 | # SCSI Transport Attributes | ||
394 | # | ||
395 | CONFIG_SCSI_SPI_ATTRS=y | ||
396 | CONFIG_SCSI_FC_ATTRS=y | ||
397 | # CONFIG_SCSI_ISCSI_ATTRS is not set | ||
398 | # CONFIG_SCSI_SAS_ATTRS is not set | ||
399 | |||
400 | # | ||
401 | # SCSI low-level drivers | ||
402 | # | ||
403 | # CONFIG_BLK_DEV_3W_XXXX_RAID is not set | ||
404 | # CONFIG_SCSI_3W_9XXX is not set | ||
405 | # CONFIG_SCSI_ACARD is not set | ||
406 | # CONFIG_SCSI_AACRAID is not set | ||
407 | # CONFIG_SCSI_AIC7XXX is not set | ||
408 | # CONFIG_SCSI_AIC7XXX_OLD is not set | ||
409 | # CONFIG_SCSI_AIC79XX is not set | ||
410 | # CONFIG_MEGARAID_NEWGEN is not set | ||
411 | # CONFIG_MEGARAID_LEGACY is not set | ||
412 | CONFIG_SCSI_SATA=y | ||
413 | # CONFIG_SCSI_SATA_AHCI is not set | ||
414 | # CONFIG_SCSI_SATA_SVW is not set | ||
415 | # CONFIG_SCSI_ATA_PIIX is not set | ||
416 | # CONFIG_SCSI_SATA_MV is not set | ||
417 | # CONFIG_SCSI_SATA_NV is not set | ||
418 | # CONFIG_SCSI_SATA_PROMISE is not set | ||
419 | # CONFIG_SCSI_SATA_QSTOR is not set | ||
420 | # CONFIG_SCSI_SATA_SX4 is not set | ||
421 | # CONFIG_SCSI_SATA_SIL is not set | ||
422 | # CONFIG_SCSI_SATA_SIS is not set | ||
423 | # CONFIG_SCSI_SATA_ULI is not set | ||
424 | # CONFIG_SCSI_SATA_VIA is not set | ||
425 | CONFIG_SCSI_SATA_VITESSE=y | ||
426 | # CONFIG_SCSI_DMX3191D is not set | ||
427 | # CONFIG_SCSI_FUTURE_DOMAIN is not set | ||
428 | # CONFIG_SCSI_IPS is not set | ||
429 | # CONFIG_SCSI_INITIO is not set | ||
430 | # CONFIG_SCSI_INIA100 is not set | ||
431 | CONFIG_SCSI_SYM53C8XX_2=y | ||
432 | CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 | ||
433 | CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 | ||
434 | CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 | ||
435 | # CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set | ||
436 | # CONFIG_SCSI_IPR is not set | ||
437 | # CONFIG_SCSI_QLOGIC_FC is not set | ||
438 | CONFIG_SCSI_QLOGIC_1280=y | ||
439 | # CONFIG_SCSI_QLOGIC_1280_1040 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 | ||
448 | # CONFIG_SCSI_DC395x is not set | ||
449 | # CONFIG_SCSI_DC390T is not set | ||
450 | # CONFIG_SCSI_DEBUG is not set | ||
451 | |||
452 | # | ||
453 | # Multi-device support (RAID and LVM) | ||
454 | # | ||
455 | CONFIG_MD=y | ||
456 | CONFIG_BLK_DEV_MD=m | ||
457 | CONFIG_MD_LINEAR=m | ||
458 | CONFIG_MD_RAID0=m | ||
459 | CONFIG_MD_RAID1=m | ||
460 | # CONFIG_MD_RAID10 is not set | ||
461 | CONFIG_MD_RAID5=m | ||
462 | CONFIG_MD_RAID6=m | ||
463 | CONFIG_MD_MULTIPATH=m | ||
464 | # CONFIG_MD_FAULTY is not set | ||
465 | CONFIG_BLK_DEV_DM=m | ||
466 | CONFIG_DM_CRYPT=m | ||
467 | CONFIG_DM_SNAPSHOT=m | ||
468 | CONFIG_DM_MIRROR=m | ||
469 | CONFIG_DM_ZERO=m | ||
470 | CONFIG_DM_MULTIPATH=m | ||
471 | # CONFIG_DM_MULTIPATH_EMC is not set | ||
472 | |||
473 | # | ||
474 | # Fusion MPT device support | ||
475 | # | ||
476 | CONFIG_FUSION=y | ||
477 | CONFIG_FUSION_SPI=y | ||
478 | CONFIG_FUSION_FC=m | ||
479 | CONFIG_FUSION_MAX_SGE=128 | ||
480 | # CONFIG_FUSION_CTL is not set | ||
481 | |||
482 | # | ||
483 | # IEEE 1394 (FireWire) support | ||
484 | # | ||
485 | # CONFIG_IEEE1394 is not set | ||
486 | |||
487 | # | ||
488 | # I2O device support | ||
489 | # | ||
490 | # CONFIG_I2O is not set | ||
491 | |||
492 | # | ||
493 | # Network device support | ||
494 | # | ||
495 | CONFIG_NETDEVICES=y | ||
496 | CONFIG_DUMMY=m | ||
497 | # CONFIG_BONDING is not set | ||
498 | # CONFIG_EQUALIZER is not set | ||
499 | # CONFIG_TUN is not set | ||
500 | |||
501 | # | ||
502 | # ARCnet devices | ||
503 | # | ||
504 | # CONFIG_ARCNET is not set | ||
505 | |||
506 | # | ||
507 | # PHY device support | ||
508 | # | ||
509 | # CONFIG_PHYLIB is not set | ||
510 | |||
511 | # | ||
512 | # Ethernet (10 or 100Mbit) | ||
513 | # | ||
514 | CONFIG_NET_ETHERNET=y | ||
515 | CONFIG_MII=m | ||
516 | # CONFIG_HAPPYMEAL is not set | ||
517 | # CONFIG_SUNGEM is not set | ||
518 | # CONFIG_NET_VENDOR_3COM is not set | ||
519 | |||
520 | # | ||
521 | # Tulip family network device support | ||
522 | # | ||
523 | CONFIG_NET_TULIP=y | ||
524 | # CONFIG_DE2104X is not set | ||
525 | CONFIG_TULIP=m | ||
526 | # CONFIG_TULIP_MWI is not set | ||
527 | # CONFIG_TULIP_MMIO is not set | ||
528 | # CONFIG_TULIP_NAPI is not set | ||
529 | # CONFIG_DE4X5 is not set | ||
530 | # CONFIG_WINBOND_840 is not set | ||
531 | # CONFIG_DM9102 is not set | ||
532 | # CONFIG_ULI526X is not set | ||
533 | # CONFIG_HP100 is not set | ||
534 | CONFIG_NET_PCI=y | ||
535 | # CONFIG_PCNET32 is not set | ||
536 | # CONFIG_AMD8111_ETH is not set | ||
537 | # CONFIG_ADAPTEC_STARFIRE is not set | ||
538 | # CONFIG_B44 is not set | ||
539 | # CONFIG_FORCEDETH is not set | ||
540 | # CONFIG_DGRS is not set | ||
541 | CONFIG_EEPRO100=m | ||
542 | CONFIG_E100=m | ||
543 | # CONFIG_FEALNX is not set | ||
544 | # CONFIG_NATSEMI is not set | ||
545 | # CONFIG_NE2K_PCI is not set | ||
546 | # CONFIG_8139CP is not set | ||
547 | # CONFIG_8139TOO is not set | ||
548 | # CONFIG_SIS900 is not set | ||
549 | # CONFIG_EPIC100 is not set | ||
550 | # CONFIG_SUNDANCE is not set | ||
551 | # CONFIG_VIA_RHINE is not set | ||
552 | |||
553 | # | ||
554 | # Ethernet (1000 Mbit) | ||
555 | # | ||
556 | # CONFIG_ACENIC is not set | ||
557 | # CONFIG_DL2K is not set | ||
558 | CONFIG_E1000=y | ||
559 | # CONFIG_E1000_NAPI is not set | ||
560 | # CONFIG_NS83820 is not set | ||
561 | # CONFIG_HAMACHI is not set | ||
562 | # CONFIG_YELLOWFIN is not set | ||
563 | # CONFIG_R8169 is not set | ||
564 | # CONFIG_SIS190 is not set | ||
565 | # CONFIG_SKGE is not set | ||
566 | # CONFIG_SK98LIN is not set | ||
567 | # CONFIG_VIA_VELOCITY is not set | ||
568 | CONFIG_TIGON3=y | ||
569 | # CONFIG_BNX2 is not set | ||
570 | |||
571 | # | ||
572 | # Ethernet (10000 Mbit) | ||
573 | # | ||
574 | # CONFIG_CHELSIO_T1 is not set | ||
575 | # CONFIG_IXGB is not set | ||
576 | # CONFIG_S2IO is not set | ||
577 | |||
578 | # | ||
579 | # Token Ring devices | ||
580 | # | ||
581 | # CONFIG_TR is not set | ||
582 | |||
583 | # | ||
584 | # Wireless LAN (non-hamradio) | ||
585 | # | ||
586 | # CONFIG_NET_RADIO is not set | ||
587 | |||
588 | # | ||
589 | # Wan interfaces | ||
590 | # | ||
591 | # CONFIG_WAN is not set | ||
592 | # CONFIG_FDDI is not set | ||
593 | # CONFIG_HIPPI is not set | ||
594 | # CONFIG_PPP is not set | ||
595 | # CONFIG_SLIP is not set | ||
596 | # CONFIG_NET_FC is not set | ||
597 | # CONFIG_SHAPER is not set | ||
598 | CONFIG_NETCONSOLE=y | ||
599 | CONFIG_NETPOLL=y | ||
600 | # CONFIG_NETPOLL_RX is not set | ||
601 | # CONFIG_NETPOLL_TRAP is not set | ||
602 | CONFIG_NET_POLL_CONTROLLER=y | ||
603 | |||
604 | # | ||
605 | # ISDN subsystem | ||
606 | # | ||
607 | # CONFIG_ISDN is not set | ||
608 | |||
609 | # | ||
610 | # Telephony Support | ||
611 | # | ||
612 | # CONFIG_PHONE is not set | ||
613 | |||
614 | # | ||
615 | # Input device support | ||
616 | # | ||
617 | CONFIG_INPUT=y | ||
618 | |||
619 | # | ||
620 | # Userland interfaces | ||
621 | # | ||
622 | CONFIG_INPUT_MOUSEDEV=y | ||
623 | CONFIG_INPUT_MOUSEDEV_PSAUX=y | ||
624 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
625 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
626 | # CONFIG_INPUT_JOYDEV is not set | ||
627 | # CONFIG_INPUT_TSDEV is not set | ||
628 | # CONFIG_INPUT_EVDEV is not set | ||
629 | # CONFIG_INPUT_EVBUG is not set | ||
630 | |||
631 | # | ||
632 | # Input Device Drivers | ||
633 | # | ||
634 | CONFIG_INPUT_KEYBOARD=y | ||
635 | CONFIG_KEYBOARD_ATKBD=y | ||
636 | # CONFIG_KEYBOARD_SUNKBD is not set | ||
637 | # CONFIG_KEYBOARD_LKKBD is not set | ||
638 | # CONFIG_KEYBOARD_XTKBD is not set | ||
639 | # CONFIG_KEYBOARD_NEWTON is not set | ||
640 | CONFIG_INPUT_MOUSE=y | ||
641 | CONFIG_MOUSE_PS2=y | ||
642 | # CONFIG_MOUSE_SERIAL is not set | ||
643 | # CONFIG_MOUSE_VSXXXAA is not set | ||
644 | # CONFIG_INPUT_JOYSTICK is not set | ||
645 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
646 | # CONFIG_INPUT_MISC is not set | ||
647 | |||
648 | # | ||
649 | # Hardware I/O ports | ||
650 | # | ||
651 | CONFIG_SERIO=y | ||
652 | CONFIG_SERIO_I8042=y | ||
653 | # CONFIG_SERIO_SERPORT is not set | ||
654 | # CONFIG_SERIO_PCIPS2 is not set | ||
655 | CONFIG_SERIO_LIBPS2=y | ||
656 | # CONFIG_SERIO_RAW is not set | ||
657 | CONFIG_GAMEPORT=m | ||
658 | # CONFIG_GAMEPORT_NS558 is not set | ||
659 | # CONFIG_GAMEPORT_L4 is not set | ||
660 | # CONFIG_GAMEPORT_EMU10K1 is not set | ||
661 | # CONFIG_GAMEPORT_FM801 is not set | ||
662 | |||
663 | # | ||
664 | # Character devices | ||
665 | # | ||
666 | CONFIG_VT=y | ||
667 | CONFIG_VT_CONSOLE=y | ||
668 | CONFIG_HW_CONSOLE=y | ||
669 | CONFIG_SERIAL_NONSTANDARD=y | ||
670 | # CONFIG_ROCKETPORT is not set | ||
671 | # CONFIG_CYCLADES is not set | ||
672 | # CONFIG_DIGIEPCA is not set | ||
673 | # CONFIG_MOXA_SMARTIO is not set | ||
674 | # CONFIG_ISI is not set | ||
675 | # CONFIG_SYNCLINKMP is not set | ||
676 | # CONFIG_N_HDLC is not set | ||
677 | # CONFIG_SPECIALIX is not set | ||
678 | # CONFIG_SX is not set | ||
679 | # CONFIG_STALDRV is not set | ||
680 | CONFIG_SGI_SNSC=y | ||
681 | CONFIG_SGI_TIOCX=y | ||
682 | CONFIG_SGI_MBCS=m | ||
683 | |||
684 | # | ||
685 | # Serial drivers | ||
686 | # | ||
687 | CONFIG_SERIAL_8250=y | ||
688 | CONFIG_SERIAL_8250_CONSOLE=y | ||
689 | CONFIG_SERIAL_8250_ACPI=y | ||
690 | CONFIG_SERIAL_8250_NR_UARTS=6 | ||
691 | CONFIG_SERIAL_8250_EXTENDED=y | ||
692 | CONFIG_SERIAL_8250_SHARE_IRQ=y | ||
693 | # CONFIG_SERIAL_8250_DETECT_IRQ is not set | ||
694 | # CONFIG_SERIAL_8250_RSA is not set | ||
695 | |||
696 | # | ||
697 | # Non-8250 serial port support | ||
698 | # | ||
699 | CONFIG_SERIAL_CORE=y | ||
700 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
701 | CONFIG_SERIAL_SGI_L1_CONSOLE=y | ||
702 | # CONFIG_SERIAL_JSM is not set | ||
703 | CONFIG_SERIAL_SGI_IOC4=y | ||
704 | CONFIG_UNIX98_PTYS=y | ||
705 | CONFIG_LEGACY_PTYS=y | ||
706 | CONFIG_LEGACY_PTY_COUNT=256 | ||
707 | |||
708 | # | ||
709 | # IPMI | ||
710 | # | ||
711 | # CONFIG_IPMI_HANDLER is not set | ||
712 | |||
713 | # | ||
714 | # Watchdog Cards | ||
715 | # | ||
716 | # CONFIG_WATCHDOG is not set | ||
717 | # CONFIG_HW_RANDOM is not set | ||
718 | CONFIG_EFI_RTC=y | ||
719 | # CONFIG_DTLK is not set | ||
720 | # CONFIG_R3964 is not set | ||
721 | # CONFIG_APPLICOM is not set | ||
722 | |||
723 | # | ||
724 | # Ftape, the floppy tape device driver | ||
725 | # | ||
726 | CONFIG_AGP=m | ||
727 | CONFIG_AGP_I460=m | ||
728 | CONFIG_AGP_HP_ZX1=m | ||
729 | CONFIG_AGP_SGI_TIOCA=m | ||
730 | CONFIG_DRM=m | ||
731 | CONFIG_DRM_TDFX=m | ||
732 | CONFIG_DRM_R128=m | ||
733 | CONFIG_DRM_RADEON=m | ||
734 | CONFIG_DRM_MGA=m | ||
735 | CONFIG_DRM_SIS=m | ||
736 | # CONFIG_DRM_VIA is not set | ||
737 | # CONFIG_DRM_SAVAGE is not set | ||
738 | CONFIG_RAW_DRIVER=m | ||
739 | CONFIG_HPET=y | ||
740 | # CONFIG_HPET_RTC_IRQ is not set | ||
741 | CONFIG_HPET_MMAP=y | ||
742 | CONFIG_MAX_RAW_DEVS=256 | ||
743 | # CONFIG_HANGCHECK_TIMER is not set | ||
744 | CONFIG_MMTIMER=y | ||
745 | |||
746 | # | ||
747 | # TPM devices | ||
748 | # | ||
749 | # CONFIG_TCG_TPM is not set | ||
750 | |||
751 | # | ||
752 | # I2C support | ||
753 | # | ||
754 | # CONFIG_I2C is not set | ||
755 | |||
756 | # | ||
757 | # Dallas's 1-wire bus | ||
758 | # | ||
759 | # CONFIG_W1 is not set | ||
760 | |||
761 | # | ||
762 | # Hardware Monitoring support | ||
763 | # | ||
764 | CONFIG_HWMON=y | ||
765 | # CONFIG_HWMON_VID is not set | ||
766 | # CONFIG_HWMON_DEBUG_CHIP is not set | ||
767 | |||
768 | # | ||
769 | # Misc devices | ||
770 | # | ||
771 | |||
772 | # | ||
773 | # Multimedia Capabilities Port drivers | ||
774 | # | ||
775 | |||
776 | # | ||
777 | # Multimedia devices | ||
778 | # | ||
779 | # CONFIG_VIDEO_DEV is not set | ||
780 | |||
781 | # | ||
782 | # Digital Video Broadcasting Devices | ||
783 | # | ||
784 | # CONFIG_DVB is not set | ||
785 | |||
786 | # | ||
787 | # Graphics support | ||
788 | # | ||
789 | # CONFIG_FB is not set | ||
790 | |||
791 | # | ||
792 | # Console display driver support | ||
793 | # | ||
794 | CONFIG_VGA_CONSOLE=y | ||
795 | CONFIG_DUMMY_CONSOLE=y | ||
796 | |||
797 | # | ||
798 | # Sound | ||
799 | # | ||
800 | CONFIG_SOUND=m | ||
801 | |||
802 | # | ||
803 | # Advanced Linux Sound Architecture | ||
804 | # | ||
805 | CONFIG_SND=m | ||
806 | CONFIG_SND_TIMER=m | ||
807 | CONFIG_SND_PCM=m | ||
808 | CONFIG_SND_HWDEP=m | ||
809 | CONFIG_SND_RAWMIDI=m | ||
810 | CONFIG_SND_SEQUENCER=m | ||
811 | CONFIG_SND_SEQ_DUMMY=m | ||
812 | CONFIG_SND_OSSEMUL=y | ||
813 | CONFIG_SND_MIXER_OSS=m | ||
814 | CONFIG_SND_PCM_OSS=m | ||
815 | CONFIG_SND_SEQUENCER_OSS=y | ||
816 | CONFIG_SND_VERBOSE_PRINTK=y | ||
817 | # CONFIG_SND_DEBUG is not set | ||
818 | CONFIG_SND_GENERIC_DRIVER=y | ||
819 | |||
820 | # | ||
821 | # Generic devices | ||
822 | # | ||
823 | CONFIG_SND_MPU401_UART=m | ||
824 | CONFIG_SND_OPL3_LIB=m | ||
825 | CONFIG_SND_DUMMY=m | ||
826 | CONFIG_SND_VIRMIDI=m | ||
827 | CONFIG_SND_MTPAV=m | ||
828 | CONFIG_SND_SERIAL_U16550=m | ||
829 | CONFIG_SND_MPU401=m | ||
830 | CONFIG_SND_AC97_CODEC=m | ||
831 | CONFIG_SND_AC97_BUS=m | ||
832 | |||
833 | # | ||
834 | # PCI devices | ||
835 | # | ||
836 | # CONFIG_SND_ALI5451 is not set | ||
837 | # CONFIG_SND_ATIIXP is not set | ||
838 | # CONFIG_SND_ATIIXP_MODEM is not set | ||
839 | # CONFIG_SND_AU8810 is not set | ||
840 | # CONFIG_SND_AU8820 is not set | ||
841 | # CONFIG_SND_AU8830 is not set | ||
842 | # CONFIG_SND_AZT3328 is not set | ||
843 | # CONFIG_SND_BT87X is not set | ||
844 | CONFIG_SND_CS46XX=m | ||
845 | CONFIG_SND_CS46XX_NEW_DSP=y | ||
846 | CONFIG_SND_CS4281=m | ||
847 | CONFIG_SND_EMU10K1=m | ||
848 | # 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 | ||
863 | # CONFIG_SND_ENS1371 is not set | ||
864 | # CONFIG_SND_ES1938 is not set | ||
865 | # CONFIG_SND_ES1968 is not set | ||
866 | # CONFIG_SND_MAESTRO3 is not set | ||
867 | CONFIG_SND_FM801=m | ||
868 | # CONFIG_SND_FM801_TEA575X is not set | ||
869 | # CONFIG_SND_ICE1712 is not set | ||
870 | # CONFIG_SND_ICE1724 is not set | ||
871 | # CONFIG_SND_INTEL8X0 is not set | ||
872 | # CONFIG_SND_INTEL8X0M is not set | ||
873 | # CONFIG_SND_SONICVIBES is not set | ||
874 | # CONFIG_SND_VIA82XX is not set | ||
875 | # CONFIG_SND_VIA82XX_MODEM is not set | ||
876 | # CONFIG_SND_VX222 is not set | ||
877 | # CONFIG_SND_HDA_INTEL is not set | ||
878 | |||
879 | # | ||
880 | # USB devices | ||
881 | # | ||
882 | # CONFIG_SND_USB_AUDIO is not set | ||
883 | |||
884 | # | ||
885 | # Open Sound System | ||
886 | # | ||
887 | # CONFIG_SOUND_PRIME is not set | ||
888 | |||
889 | # | ||
890 | # USB support | ||
891 | # | ||
892 | CONFIG_USB_ARCH_HAS_HCD=y | ||
893 | CONFIG_USB_ARCH_HAS_OHCI=y | ||
894 | CONFIG_USB=m | ||
895 | # CONFIG_USB_DEBUG is not set | ||
896 | |||
897 | # | ||
898 | # Miscellaneous USB options | ||
899 | # | ||
900 | CONFIG_USB_DEVICEFS=y | ||
901 | # CONFIG_USB_BANDWIDTH is not set | ||
902 | # CONFIG_USB_DYNAMIC_MINORS is not set | ||
903 | # CONFIG_USB_SUSPEND is not set | ||
904 | # CONFIG_USB_OTG is not set | ||
905 | |||
906 | # | ||
907 | # USB Host Controller Drivers | ||
908 | # | ||
909 | CONFIG_USB_EHCI_HCD=m | ||
910 | # CONFIG_USB_EHCI_SPLIT_ISO is not set | ||
911 | # CONFIG_USB_EHCI_ROOT_HUB_TT is not set | ||
912 | # CONFIG_USB_ISP116X_HCD is not set | ||
913 | CONFIG_USB_OHCI_HCD=m | ||
914 | # CONFIG_USB_OHCI_BIG_ENDIAN is not set | ||
915 | CONFIG_USB_OHCI_LITTLE_ENDIAN=y | ||
916 | CONFIG_USB_UHCI_HCD=m | ||
917 | # CONFIG_USB_SL811_HCD is not set | ||
918 | |||
919 | # | ||
920 | # USB Device Class drivers | ||
921 | # | ||
922 | # CONFIG_OBSOLETE_OSS_USB_DRIVER is not set | ||
923 | # CONFIG_USB_BLUETOOTH_TTY is not set | ||
924 | # CONFIG_USB_ACM is not set | ||
925 | # CONFIG_USB_PRINTER is not set | ||
926 | |||
927 | # | ||
928 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information | ||
929 | # | ||
930 | CONFIG_USB_STORAGE=m | ||
931 | # CONFIG_USB_STORAGE_DEBUG is not set | ||
932 | # CONFIG_USB_STORAGE_DATAFAB is not set | ||
933 | # CONFIG_USB_STORAGE_FREECOM is not set | ||
934 | # CONFIG_USB_STORAGE_ISD200 is not set | ||
935 | # CONFIG_USB_STORAGE_DPCM is not set | ||
936 | # CONFIG_USB_STORAGE_USBAT is not set | ||
937 | # CONFIG_USB_STORAGE_SDDR09 is not set | ||
938 | # CONFIG_USB_STORAGE_SDDR55 is not set | ||
939 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | ||
940 | |||
941 | # | ||
942 | # USB Input Devices | ||
943 | # | ||
944 | CONFIG_USB_HID=m | ||
945 | CONFIG_USB_HIDINPUT=y | ||
946 | # CONFIG_HID_FF is not set | ||
947 | # CONFIG_USB_HIDDEV is not set | ||
948 | |||
949 | # | ||
950 | # USB HID Boot Protocol drivers | ||
951 | # | ||
952 | # CONFIG_USB_KBD is not set | ||
953 | # CONFIG_USB_MOUSE is not set | ||
954 | # CONFIG_USB_AIPTEK is not set | ||
955 | # CONFIG_USB_WACOM is not set | ||
956 | # CONFIG_USB_ACECAD is not set | ||
957 | # CONFIG_USB_KBTAB is not set | ||
958 | # CONFIG_USB_POWERMATE is not set | ||
959 | # CONFIG_USB_MTOUCH is not set | ||
960 | # CONFIG_USB_ITMTOUCH is not set | ||
961 | # CONFIG_USB_EGALAX is not set | ||
962 | # CONFIG_USB_YEALINK is not set | ||
963 | # CONFIG_USB_XPAD is not set | ||
964 | # CONFIG_USB_ATI_REMOTE is not set | ||
965 | # CONFIG_USB_KEYSPAN_REMOTE is not set | ||
966 | # CONFIG_USB_APPLETOUCH is not set | ||
967 | |||
968 | # | ||
969 | # USB Imaging devices | ||
970 | # | ||
971 | # CONFIG_USB_MDC800 is not set | ||
972 | # CONFIG_USB_MICROTEK is not set | ||
973 | |||
974 | # | ||
975 | # USB Multimedia devices | ||
976 | # | ||
977 | # CONFIG_USB_DABUSB is not set | ||
978 | |||
979 | # | ||
980 | # Video4Linux support is needed for USB Multimedia device support | ||
981 | # | ||
982 | |||
983 | # | ||
984 | # USB Network Adapters | ||
985 | # | ||
986 | # CONFIG_USB_CATC is not set | ||
987 | # CONFIG_USB_KAWETH is not set | ||
988 | # CONFIG_USB_PEGASUS is not set | ||
989 | # CONFIG_USB_RTL8150 is not set | ||
990 | # CONFIG_USB_USBNET is not set | ||
991 | CONFIG_USB_MON=y | ||
992 | |||
993 | # | ||
994 | # USB port drivers | ||
995 | # | ||
996 | |||
997 | # | ||
998 | # USB Serial Converter support | ||
999 | # | ||
1000 | # CONFIG_USB_SERIAL is not set | ||
1001 | |||
1002 | # | ||
1003 | # USB Miscellaneous drivers | ||
1004 | # | ||
1005 | # CONFIG_USB_EMI62 is not set | ||
1006 | # CONFIG_USB_EMI26 is not set | ||
1007 | # CONFIG_USB_AUERSWALD is not set | ||
1008 | # CONFIG_USB_RIO500 is not set | ||
1009 | # CONFIG_USB_LEGOTOWER is not set | ||
1010 | # CONFIG_USB_LCD is not set | ||
1011 | # CONFIG_USB_LED is not set | ||
1012 | # CONFIG_USB_CYTHERM is not set | ||
1013 | # CONFIG_USB_PHIDGETKIT is not set | ||
1014 | # CONFIG_USB_PHIDGETSERVO is not set | ||
1015 | # CONFIG_USB_IDMOUSE is not set | ||
1016 | # CONFIG_USB_SISUSBVGA is not set | ||
1017 | # CONFIG_USB_LD is not set | ||
1018 | # CONFIG_USB_TEST is not set | ||
1019 | |||
1020 | # | ||
1021 | # USB DSL modem support | ||
1022 | # | ||
1023 | |||
1024 | # | ||
1025 | # USB Gadget Support | ||
1026 | # | ||
1027 | # CONFIG_USB_GADGET is not set | ||
1028 | |||
1029 | # | ||
1030 | # MMC/SD Card support | ||
1031 | # | ||
1032 | # CONFIG_MMC is not set | ||
1033 | |||
1034 | # | ||
1035 | # InfiniBand support | ||
1036 | # | ||
1037 | CONFIG_INFINIBAND=m | ||
1038 | # CONFIG_INFINIBAND_USER_MAD is not set | ||
1039 | # CONFIG_INFINIBAND_USER_ACCESS is not set | ||
1040 | CONFIG_INFINIBAND_MTHCA=m | ||
1041 | # CONFIG_INFINIBAND_MTHCA_DEBUG is not set | ||
1042 | CONFIG_INFINIBAND_IPOIB=m | ||
1043 | # CONFIG_INFINIBAND_IPOIB_DEBUG is not set | ||
1044 | |||
1045 | # | ||
1046 | # SN Devices | ||
1047 | # | ||
1048 | CONFIG_SGI_IOC4=y | ||
1049 | |||
1050 | # | ||
1051 | # File systems | ||
1052 | # | ||
1053 | CONFIG_EXT2_FS=y | ||
1054 | CONFIG_EXT2_FS_XATTR=y | ||
1055 | CONFIG_EXT2_FS_POSIX_ACL=y | ||
1056 | CONFIG_EXT2_FS_SECURITY=y | ||
1057 | # CONFIG_EXT2_FS_XIP is not set | ||
1058 | CONFIG_EXT3_FS=y | ||
1059 | CONFIG_EXT3_FS_XATTR=y | ||
1060 | CONFIG_EXT3_FS_POSIX_ACL=y | ||
1061 | CONFIG_EXT3_FS_SECURITY=y | ||
1062 | CONFIG_JBD=y | ||
1063 | # CONFIG_JBD_DEBUG is not set | ||
1064 | CONFIG_FS_MBCACHE=y | ||
1065 | CONFIG_REISERFS_FS=y | ||
1066 | # CONFIG_REISERFS_CHECK is not set | ||
1067 | # CONFIG_REISERFS_PROC_INFO is not set | ||
1068 | CONFIG_REISERFS_FS_XATTR=y | ||
1069 | CONFIG_REISERFS_FS_POSIX_ACL=y | ||
1070 | CONFIG_REISERFS_FS_SECURITY=y | ||
1071 | # CONFIG_JFS_FS is not set | ||
1072 | CONFIG_FS_POSIX_ACL=y | ||
1073 | CONFIG_XFS_FS=y | ||
1074 | CONFIG_XFS_EXPORT=y | ||
1075 | # CONFIG_XFS_QUOTA is not set | ||
1076 | # CONFIG_XFS_SECURITY is not set | ||
1077 | # CONFIG_XFS_POSIX_ACL is not set | ||
1078 | # CONFIG_XFS_RT is not set | ||
1079 | # CONFIG_MINIX_FS is not set | ||
1080 | # CONFIG_ROMFS_FS is not set | ||
1081 | CONFIG_INOTIFY=y | ||
1082 | # CONFIG_QUOTA is not set | ||
1083 | CONFIG_DNOTIFY=y | ||
1084 | CONFIG_AUTOFS_FS=y | ||
1085 | CONFIG_AUTOFS4_FS=y | ||
1086 | # CONFIG_FUSE_FS is not set | ||
1087 | |||
1088 | # | ||
1089 | # CD-ROM/DVD Filesystems | ||
1090 | # | ||
1091 | CONFIG_ISO9660_FS=m | ||
1092 | CONFIG_JOLIET=y | ||
1093 | # CONFIG_ZISOFS is not set | ||
1094 | CONFIG_UDF_FS=m | ||
1095 | CONFIG_UDF_NLS=y | ||
1096 | |||
1097 | # | ||
1098 | # DOS/FAT/NT Filesystems | ||
1099 | # | ||
1100 | CONFIG_FAT_FS=y | ||
1101 | # CONFIG_MSDOS_FS is not set | ||
1102 | CONFIG_VFAT_FS=y | ||
1103 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | ||
1104 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | ||
1105 | CONFIG_NTFS_FS=m | ||
1106 | # CONFIG_NTFS_DEBUG is not set | ||
1107 | # CONFIG_NTFS_RW is not set | ||
1108 | |||
1109 | # | ||
1110 | # Pseudo filesystems | ||
1111 | # | ||
1112 | CONFIG_PROC_FS=y | ||
1113 | CONFIG_PROC_KCORE=y | ||
1114 | CONFIG_SYSFS=y | ||
1115 | CONFIG_TMPFS=y | ||
1116 | CONFIG_HUGETLBFS=y | ||
1117 | CONFIG_HUGETLB_PAGE=y | ||
1118 | CONFIG_RAMFS=y | ||
1119 | # CONFIG_RELAYFS_FS is not set | ||
1120 | |||
1121 | # | ||
1122 | # Miscellaneous filesystems | ||
1123 | # | ||
1124 | # CONFIG_ADFS_FS is not set | ||
1125 | # CONFIG_AFFS_FS is not set | ||
1126 | # CONFIG_HFS_FS is not set | ||
1127 | # CONFIG_HFSPLUS_FS is not set | ||
1128 | # CONFIG_BEFS_FS is not set | ||
1129 | # CONFIG_BFS_FS is not set | ||
1130 | # CONFIG_EFS_FS is not set | ||
1131 | # CONFIG_CRAMFS is not set | ||
1132 | # CONFIG_VXFS_FS is not set | ||
1133 | # CONFIG_HPFS_FS is not set | ||
1134 | # CONFIG_QNX4FS_FS is not set | ||
1135 | # CONFIG_SYSV_FS is not set | ||
1136 | # CONFIG_UFS_FS is not set | ||
1137 | |||
1138 | # | ||
1139 | # Network File Systems | ||
1140 | # | ||
1141 | CONFIG_NFS_FS=m | ||
1142 | CONFIG_NFS_V3=y | ||
1143 | # CONFIG_NFS_V3_ACL is not set | ||
1144 | CONFIG_NFS_V4=y | ||
1145 | CONFIG_NFS_DIRECTIO=y | ||
1146 | CONFIG_NFSD=m | ||
1147 | CONFIG_NFSD_V3=y | ||
1148 | # CONFIG_NFSD_V3_ACL is not set | ||
1149 | CONFIG_NFSD_V4=y | ||
1150 | CONFIG_NFSD_TCP=y | ||
1151 | CONFIG_LOCKD=m | ||
1152 | CONFIG_LOCKD_V4=y | ||
1153 | CONFIG_EXPORTFS=y | ||
1154 | CONFIG_NFS_COMMON=y | ||
1155 | CONFIG_SUNRPC=m | ||
1156 | CONFIG_SUNRPC_GSS=m | ||
1157 | CONFIG_RPCSEC_GSS_KRB5=m | ||
1158 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
1159 | CONFIG_SMB_FS=m | ||
1160 | CONFIG_SMB_NLS_DEFAULT=y | ||
1161 | CONFIG_SMB_NLS_REMOTE="cp437" | ||
1162 | CONFIG_CIFS=m | ||
1163 | # CONFIG_CIFS_STATS is not set | ||
1164 | # CONFIG_CIFS_XATTR is not set | ||
1165 | # CONFIG_CIFS_EXPERIMENTAL is not set | ||
1166 | # CONFIG_NCP_FS is not set | ||
1167 | # CONFIG_CODA_FS is not set | ||
1168 | # CONFIG_AFS_FS is not set | ||
1169 | # CONFIG_9P_FS is not set | ||
1170 | |||
1171 | # | ||
1172 | # Partition Types | ||
1173 | # | ||
1174 | CONFIG_PARTITION_ADVANCED=y | ||
1175 | # CONFIG_ACORN_PARTITION is not set | ||
1176 | # CONFIG_OSF_PARTITION is not set | ||
1177 | # CONFIG_AMIGA_PARTITION is not set | ||
1178 | # CONFIG_ATARI_PARTITION is not set | ||
1179 | # CONFIG_MAC_PARTITION is not set | ||
1180 | CONFIG_MSDOS_PARTITION=y | ||
1181 | # CONFIG_BSD_DISKLABEL is not set | ||
1182 | # CONFIG_MINIX_SUBPARTITION is not set | ||
1183 | # CONFIG_SOLARIS_X86_PARTITION is not set | ||
1184 | # CONFIG_UNIXWARE_DISKLABEL is not set | ||
1185 | # CONFIG_LDM_PARTITION is not set | ||
1186 | CONFIG_SGI_PARTITION=y | ||
1187 | # CONFIG_ULTRIX_PARTITION is not set | ||
1188 | # CONFIG_SUN_PARTITION is not set | ||
1189 | CONFIG_EFI_PARTITION=y | ||
1190 | |||
1191 | # | ||
1192 | # Native Language Support | ||
1193 | # | ||
1194 | CONFIG_NLS=y | ||
1195 | CONFIG_NLS_DEFAULT="iso8859-1" | ||
1196 | CONFIG_NLS_CODEPAGE_437=y | ||
1197 | CONFIG_NLS_CODEPAGE_737=m | ||
1198 | CONFIG_NLS_CODEPAGE_775=m | ||
1199 | CONFIG_NLS_CODEPAGE_850=m | ||
1200 | CONFIG_NLS_CODEPAGE_852=m | ||
1201 | CONFIG_NLS_CODEPAGE_855=m | ||
1202 | CONFIG_NLS_CODEPAGE_857=m | ||
1203 | CONFIG_NLS_CODEPAGE_860=m | ||
1204 | CONFIG_NLS_CODEPAGE_861=m | ||
1205 | CONFIG_NLS_CODEPAGE_862=m | ||
1206 | CONFIG_NLS_CODEPAGE_863=m | ||
1207 | CONFIG_NLS_CODEPAGE_864=m | ||
1208 | CONFIG_NLS_CODEPAGE_865=m | ||
1209 | CONFIG_NLS_CODEPAGE_866=m | ||
1210 | CONFIG_NLS_CODEPAGE_869=m | ||
1211 | CONFIG_NLS_CODEPAGE_936=m | ||
1212 | CONFIG_NLS_CODEPAGE_950=m | ||
1213 | CONFIG_NLS_CODEPAGE_932=m | ||
1214 | CONFIG_NLS_CODEPAGE_949=m | ||
1215 | CONFIG_NLS_CODEPAGE_874=m | ||
1216 | CONFIG_NLS_ISO8859_8=m | ||
1217 | CONFIG_NLS_CODEPAGE_1250=m | ||
1218 | CONFIG_NLS_CODEPAGE_1251=m | ||
1219 | # CONFIG_NLS_ASCII is not set | ||
1220 | CONFIG_NLS_ISO8859_1=y | ||
1221 | CONFIG_NLS_ISO8859_2=m | ||
1222 | CONFIG_NLS_ISO8859_3=m | ||
1223 | CONFIG_NLS_ISO8859_4=m | ||
1224 | CONFIG_NLS_ISO8859_5=m | ||
1225 | CONFIG_NLS_ISO8859_6=m | ||
1226 | CONFIG_NLS_ISO8859_7=m | ||
1227 | CONFIG_NLS_ISO8859_9=m | ||
1228 | CONFIG_NLS_ISO8859_13=m | ||
1229 | CONFIG_NLS_ISO8859_14=m | ||
1230 | CONFIG_NLS_ISO8859_15=m | ||
1231 | CONFIG_NLS_KOI8_R=m | ||
1232 | CONFIG_NLS_KOI8_U=m | ||
1233 | CONFIG_NLS_UTF8=m | ||
1234 | |||
1235 | # | ||
1236 | # Library routines | ||
1237 | # | ||
1238 | # CONFIG_CRC_CCITT is not set | ||
1239 | # CONFIG_CRC16 is not set | ||
1240 | CONFIG_CRC32=y | ||
1241 | # CONFIG_LIBCRC32C is not set | ||
1242 | CONFIG_GENERIC_HARDIRQS=y | ||
1243 | CONFIG_GENERIC_IRQ_PROBE=y | ||
1244 | CONFIG_GENERIC_PENDING_IRQ=y | ||
1245 | |||
1246 | # | ||
1247 | # HP Simulator drivers | ||
1248 | # | ||
1249 | # CONFIG_HP_SIMETH is not set | ||
1250 | # CONFIG_HP_SIMSERIAL is not set | ||
1251 | # CONFIG_HP_SIMSCSI is not set | ||
1252 | |||
1253 | # | ||
1254 | # Profiling support | ||
1255 | # | ||
1256 | # CONFIG_PROFILING is not set | ||
1257 | |||
1258 | # | ||
1259 | # Kernel hacking | ||
1260 | # | ||
1261 | # CONFIG_PRINTK_TIME is not set | ||
1262 | CONFIG_DEBUG_KERNEL=y | ||
1263 | CONFIG_MAGIC_SYSRQ=y | ||
1264 | CONFIG_LOG_BUF_SHIFT=20 | ||
1265 | CONFIG_DETECT_SOFTLOCKUP=y | ||
1266 | # CONFIG_SCHEDSTATS is not set | ||
1267 | # CONFIG_DEBUG_SLAB is not set | ||
1268 | # CONFIG_DEBUG_SPINLOCK is not set | ||
1269 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | ||
1270 | # CONFIG_DEBUG_KOBJECT is not set | ||
1271 | # CONFIG_DEBUG_INFO is not set | ||
1272 | # CONFIG_DEBUG_FS is not set | ||
1273 | # CONFIG_KPROBES is not set | ||
1274 | CONFIG_IA64_GRANULE_16MB=y | ||
1275 | # CONFIG_IA64_GRANULE_64MB is not set | ||
1276 | # CONFIG_IA64_PRINT_HAZARDS is not set | ||
1277 | # CONFIG_DISABLE_VHPT is not set | ||
1278 | # CONFIG_IA64_DEBUG_CMPXCHG is not set | ||
1279 | # CONFIG_IA64_DEBUG_IRQ is not set | ||
1280 | CONFIG_SYSVIPC_COMPAT=y | ||
1281 | |||
1282 | # | ||
1283 | # Security options | ||
1284 | # | ||
1285 | # CONFIG_KEYS is not set | ||
1286 | # CONFIG_SECURITY is not set | ||
1287 | |||
1288 | # | ||
1289 | # Cryptographic options | ||
1290 | # | ||
1291 | CONFIG_CRYPTO=y | ||
1292 | # CONFIG_CRYPTO_HMAC is not set | ||
1293 | # CONFIG_CRYPTO_NULL is not set | ||
1294 | # CONFIG_CRYPTO_MD4 is not set | ||
1295 | CONFIG_CRYPTO_MD5=y | ||
1296 | # CONFIG_CRYPTO_SHA1 is not set | ||
1297 | # CONFIG_CRYPTO_SHA256 is not set | ||
1298 | # CONFIG_CRYPTO_SHA512 is not set | ||
1299 | # CONFIG_CRYPTO_WP512 is not set | ||
1300 | # CONFIG_CRYPTO_TGR192 is not set | ||
1301 | CONFIG_CRYPTO_DES=m | ||
1302 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
1303 | # CONFIG_CRYPTO_TWOFISH is not set | ||
1304 | # CONFIG_CRYPTO_SERPENT is not set | ||
1305 | # CONFIG_CRYPTO_AES is not set | ||
1306 | # CONFIG_CRYPTO_CAST5 is not set | ||
1307 | # CONFIG_CRYPTO_CAST6 is not set | ||
1308 | # CONFIG_CRYPTO_TEA is not set | ||
1309 | # CONFIG_CRYPTO_ARC4 is not set | ||
1310 | # CONFIG_CRYPTO_KHAZAD is not set | ||
1311 | # CONFIG_CRYPTO_ANUBIS is not set | ||
1312 | # CONFIG_CRYPTO_DEFLATE is not set | ||
1313 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
1314 | # CONFIG_CRYPTO_CRC32C is not set | ||
1315 | # CONFIG_CRYPTO_TEST is not set | ||
1316 | |||
1317 | # | ||
1318 | # Hardware crypto devices | ||
1319 | # | ||
diff --git a/arch/ia64/configs/sn2_defconfig b/arch/ia64/configs/sn2_defconfig index dccf35c60b94..08112ab38468 100644 --- a/arch/ia64/configs/sn2_defconfig +++ b/arch/ia64/configs/sn2_defconfig | |||
@@ -111,7 +111,6 @@ CONFIG_COMPAT=y | |||
111 | CONFIG_IA64_MCA_RECOVERY=y | 111 | CONFIG_IA64_MCA_RECOVERY=y |
112 | CONFIG_PERFMON=y | 112 | CONFIG_PERFMON=y |
113 | CONFIG_IA64_PALINFO=y | 113 | CONFIG_IA64_PALINFO=y |
114 | CONFIG_ACPI_DEALLOCATE_IRQ=y | ||
115 | 114 | ||
116 | # | 115 | # |
117 | # Firmware Drivers | 116 | # Firmware Drivers |
@@ -130,19 +129,12 @@ CONFIG_ACPI=y | |||
130 | # | 129 | # |
131 | # ACPI (Advanced Configuration and Power Interface) Support | 130 | # ACPI (Advanced Configuration and Power Interface) Support |
132 | # | 131 | # |
133 | CONFIG_ACPI_BOOT=y | ||
134 | CONFIG_ACPI_INTERPRETER=y | ||
135 | # CONFIG_ACPI_BUTTON is not set | 132 | # CONFIG_ACPI_BUTTON is not set |
136 | CONFIG_ACPI_VIDEO=m | ||
137 | CONFIG_ACPI_HOTKEY=m | ||
138 | # CONFIG_ACPI_FAN is not set | 133 | # CONFIG_ACPI_FAN is not set |
139 | # CONFIG_ACPI_PROCESSOR is not set | 134 | # CONFIG_ACPI_PROCESSOR is not set |
140 | CONFIG_ACPI_NUMA=y | 135 | CONFIG_ACPI_NUMA=y |
141 | CONFIG_ACPI_BLACKLIST_YEAR=0 | ||
142 | # CONFIG_ACPI_DEBUG is not set | 136 | # CONFIG_ACPI_DEBUG is not set |
143 | CONFIG_ACPI_BUS=y | ||
144 | CONFIG_ACPI_POWER=y | 137 | CONFIG_ACPI_POWER=y |
145 | CONFIG_ACPI_PCI=y | ||
146 | CONFIG_ACPI_SYSTEM=y | 138 | CONFIG_ACPI_SYSTEM=y |
147 | # CONFIG_ACPI_CONTAINER is not set | 139 | # CONFIG_ACPI_CONTAINER is not set |
148 | 140 | ||
diff --git a/arch/ia64/configs/tiger_defconfig b/arch/ia64/configs/tiger_defconfig index c853cfcd2d11..9bc8bcafc905 100644 --- a/arch/ia64/configs/tiger_defconfig +++ b/arch/ia64/configs/tiger_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.13-rc6-tiger-smp | 3 | # Linux kernel version: 2.6.14-rc1 |
4 | # Wed Aug 17 10:19:51 2005 | 4 | # Wed Sep 14 15:17:57 2005 |
5 | # | 5 | # |
6 | 6 | ||
7 | # | 7 | # |
@@ -16,6 +16,7 @@ CONFIG_INIT_ENV_ARG_LIMIT=32 | |||
16 | # General setup | 16 | # General setup |
17 | # | 17 | # |
18 | CONFIG_LOCALVERSION="" | 18 | CONFIG_LOCALVERSION="" |
19 | CONFIG_LOCALVERSION_AUTO=y | ||
19 | CONFIG_SWAP=y | 20 | CONFIG_SWAP=y |
20 | CONFIG_SYSVIPC=y | 21 | CONFIG_SYSVIPC=y |
21 | CONFIG_POSIX_MQUEUE=y | 22 | CONFIG_POSIX_MQUEUE=y |
@@ -27,6 +28,7 @@ CONFIG_KOBJECT_UEVENT=y | |||
27 | CONFIG_IKCONFIG=y | 28 | CONFIG_IKCONFIG=y |
28 | CONFIG_IKCONFIG_PROC=y | 29 | CONFIG_IKCONFIG_PROC=y |
29 | # CONFIG_CPUSETS is not set | 30 | # CONFIG_CPUSETS is not set |
31 | CONFIG_INITRAMFS_SOURCE="" | ||
30 | # CONFIG_EMBEDDED is not set | 32 | # CONFIG_EMBEDDED is not set |
31 | CONFIG_KALLSYMS=y | 33 | CONFIG_KALLSYMS=y |
32 | CONFIG_KALLSYMS_ALL=y | 34 | CONFIG_KALLSYMS_ALL=y |
@@ -103,19 +105,20 @@ CONFIG_FLATMEM_MANUAL=y | |||
103 | # CONFIG_SPARSEMEM_MANUAL is not set | 105 | # CONFIG_SPARSEMEM_MANUAL is not set |
104 | CONFIG_FLATMEM=y | 106 | CONFIG_FLATMEM=y |
105 | CONFIG_FLAT_NODE_MEM_MAP=y | 107 | CONFIG_FLAT_NODE_MEM_MAP=y |
108 | # CONFIG_SPARSEMEM_STATIC is not set | ||
106 | CONFIG_HAVE_DEC_LOCK=y | 109 | CONFIG_HAVE_DEC_LOCK=y |
107 | CONFIG_IA32_SUPPORT=y | 110 | CONFIG_IA32_SUPPORT=y |
108 | CONFIG_COMPAT=y | 111 | CONFIG_COMPAT=y |
109 | CONFIG_IA64_MCA_RECOVERY=y | 112 | CONFIG_IA64_MCA_RECOVERY=y |
110 | CONFIG_PERFMON=y | 113 | CONFIG_PERFMON=y |
111 | CONFIG_IA64_PALINFO=y | 114 | CONFIG_IA64_PALINFO=y |
112 | CONFIG_ACPI_DEALLOCATE_IRQ=y | ||
113 | 115 | ||
114 | # | 116 | # |
115 | # Firmware Drivers | 117 | # Firmware Drivers |
116 | # | 118 | # |
117 | CONFIG_EFI_VARS=y | 119 | CONFIG_EFI_VARS=y |
118 | CONFIG_EFI_PCDP=y | 120 | CONFIG_EFI_PCDP=y |
121 | # CONFIG_DELL_RBU is not set | ||
119 | CONFIG_BINFMT_ELF=y | 122 | CONFIG_BINFMT_ELF=y |
120 | CONFIG_BINFMT_MISC=m | 123 | CONFIG_BINFMT_MISC=m |
121 | 124 | ||
@@ -123,27 +126,27 @@ CONFIG_BINFMT_MISC=m | |||
123 | # Power management and ACPI | 126 | # Power management and ACPI |
124 | # | 127 | # |
125 | CONFIG_PM=y | 128 | CONFIG_PM=y |
126 | CONFIG_ACPI=y | 129 | # CONFIG_PM_DEBUG is not set |
127 | 130 | ||
128 | # | 131 | # |
129 | # ACPI (Advanced Configuration and Power Interface) Support | 132 | # ACPI (Advanced Configuration and Power Interface) Support |
130 | # | 133 | # |
131 | CONFIG_ACPI_BOOT=y | 134 | CONFIG_ACPI=y |
132 | CONFIG_ACPI_INTERPRETER=y | ||
133 | CONFIG_ACPI_BUTTON=m | 135 | CONFIG_ACPI_BUTTON=m |
134 | # CONFIG_ACPI_VIDEO is not set | ||
135 | # CONFIG_ACPI_HOTKEY is not set | ||
136 | CONFIG_ACPI_FAN=m | 136 | CONFIG_ACPI_FAN=m |
137 | CONFIG_ACPI_PROCESSOR=m | 137 | CONFIG_ACPI_PROCESSOR=m |
138 | # CONFIG_ACPI_HOTPLUG_CPU is not set | 138 | CONFIG_ACPI_HOTPLUG_CPU=y |
139 | CONFIG_ACPI_THERMAL=m | 139 | CONFIG_ACPI_THERMAL=m |
140 | CONFIG_ACPI_BLACKLIST_YEAR=0 | 140 | CONFIG_ACPI_BLACKLIST_YEAR=0 |
141 | # CONFIG_ACPI_DEBUG is not set | 141 | # CONFIG_ACPI_DEBUG is not set |
142 | CONFIG_ACPI_BUS=y | ||
143 | CONFIG_ACPI_POWER=y | 142 | CONFIG_ACPI_POWER=y |
144 | CONFIG_ACPI_PCI=y | ||
145 | CONFIG_ACPI_SYSTEM=y | 143 | CONFIG_ACPI_SYSTEM=y |
146 | # CONFIG_ACPI_CONTAINER is not set | 144 | CONFIG_ACPI_CONTAINER=m |
145 | |||
146 | # | ||
147 | # CPU Frequency scaling | ||
148 | # | ||
149 | # CONFIG_CPU_FREQ is not set | ||
147 | 150 | ||
148 | # | 151 | # |
149 | # Bus options (PCI, PCMCIA) | 152 | # Bus options (PCI, PCMCIA) |
@@ -152,7 +155,6 @@ CONFIG_PCI=y | |||
152 | CONFIG_PCI_DOMAINS=y | 155 | CONFIG_PCI_DOMAINS=y |
153 | # CONFIG_PCI_MSI is not set | 156 | # CONFIG_PCI_MSI is not set |
154 | CONFIG_PCI_LEGACY_PROC=y | 157 | CONFIG_PCI_LEGACY_PROC=y |
155 | CONFIG_PCI_NAMES=y | ||
156 | # CONFIG_PCI_DEBUG is not set | 158 | # CONFIG_PCI_DEBUG is not set |
157 | 159 | ||
158 | # | 160 | # |
@@ -196,14 +198,19 @@ CONFIG_SYN_COOKIES=y | |||
196 | # CONFIG_INET_ESP is not set | 198 | # CONFIG_INET_ESP is not set |
197 | # CONFIG_INET_IPCOMP is not set | 199 | # CONFIG_INET_IPCOMP is not set |
198 | # CONFIG_INET_TUNNEL is not set | 200 | # CONFIG_INET_TUNNEL is not set |
199 | CONFIG_IP_TCPDIAG=y | 201 | CONFIG_INET_DIAG=y |
200 | # CONFIG_IP_TCPDIAG_IPV6 is not set | 202 | CONFIG_INET_TCP_DIAG=y |
201 | # CONFIG_TCP_CONG_ADVANCED is not set | 203 | # CONFIG_TCP_CONG_ADVANCED is not set |
202 | CONFIG_TCP_CONG_BIC=y | 204 | CONFIG_TCP_CONG_BIC=y |
203 | # CONFIG_IPV6 is not set | 205 | # CONFIG_IPV6 is not set |
204 | # CONFIG_NETFILTER is not set | 206 | # CONFIG_NETFILTER is not set |
205 | 207 | ||
206 | # | 208 | # |
209 | # DCCP Configuration (EXPERIMENTAL) | ||
210 | # | ||
211 | # CONFIG_IP_DCCP is not set | ||
212 | |||
213 | # | ||
207 | # SCTP Configuration (EXPERIMENTAL) | 214 | # SCTP Configuration (EXPERIMENTAL) |
208 | # | 215 | # |
209 | # CONFIG_IP_SCTP is not set | 216 | # CONFIG_IP_SCTP is not set |
@@ -226,9 +233,11 @@ CONFIG_TCP_CONG_BIC=y | |||
226 | # Network testing | 233 | # Network testing |
227 | # | 234 | # |
228 | # CONFIG_NET_PKTGEN is not set | 235 | # CONFIG_NET_PKTGEN is not set |
236 | # CONFIG_NETFILTER_NETLINK is not set | ||
229 | # CONFIG_HAMRADIO is not set | 237 | # CONFIG_HAMRADIO is not set |
230 | # CONFIG_IRDA is not set | 238 | # CONFIG_IRDA is not set |
231 | # CONFIG_BT is not set | 239 | # CONFIG_BT is not set |
240 | # CONFIG_IEEE80211 is not set | ||
232 | 241 | ||
233 | # | 242 | # |
234 | # Device Drivers | 243 | # Device Drivers |
@@ -243,6 +252,11 @@ CONFIG_FW_LOADER=m | |||
243 | # CONFIG_DEBUG_DRIVER is not set | 252 | # CONFIG_DEBUG_DRIVER is not set |
244 | 253 | ||
245 | # | 254 | # |
255 | # Connector - unified userspace <-> kernelspace linker | ||
256 | # | ||
257 | # CONFIG_CONNECTOR is not set | ||
258 | |||
259 | # | ||
246 | # Memory Technology Devices (MTD) | 260 | # Memory Technology Devices (MTD) |
247 | # | 261 | # |
248 | # CONFIG_MTD is not set | 262 | # CONFIG_MTD is not set |
@@ -255,7 +269,13 @@ CONFIG_FW_LOADER=m | |||
255 | # | 269 | # |
256 | # Plug and Play support | 270 | # Plug and Play support |
257 | # | 271 | # |
258 | # CONFIG_PNP is not set | 272 | CONFIG_PNP=y |
273 | # CONFIG_PNP_DEBUG is not set | ||
274 | |||
275 | # | ||
276 | # Protocols | ||
277 | # | ||
278 | CONFIG_PNPACPI=y | ||
259 | 279 | ||
260 | # | 280 | # |
261 | # Block devices | 281 | # Block devices |
@@ -274,7 +294,6 @@ CONFIG_BLK_DEV_RAM=y | |||
274 | CONFIG_BLK_DEV_RAM_COUNT=16 | 294 | CONFIG_BLK_DEV_RAM_COUNT=16 |
275 | CONFIG_BLK_DEV_RAM_SIZE=4096 | 295 | CONFIG_BLK_DEV_RAM_SIZE=4096 |
276 | CONFIG_BLK_DEV_INITRD=y | 296 | CONFIG_BLK_DEV_INITRD=y |
277 | CONFIG_INITRAMFS_SOURCE="" | ||
278 | # CONFIG_CDROM_PKTCDVD is not set | 297 | # CONFIG_CDROM_PKTCDVD is not set |
279 | 298 | ||
280 | # | 299 | # |
@@ -307,7 +326,8 @@ CONFIG_BLK_DEV_IDESCSI=m | |||
307 | # | 326 | # |
308 | # IDE chipset support/bugfixes | 327 | # IDE chipset support/bugfixes |
309 | # | 328 | # |
310 | CONFIG_IDE_GENERIC=y | 329 | # CONFIG_IDE_GENERIC is not set |
330 | # CONFIG_BLK_DEV_IDEPNP is not set | ||
311 | CONFIG_BLK_DEV_IDEPCI=y | 331 | CONFIG_BLK_DEV_IDEPCI=y |
312 | # CONFIG_IDEPCI_SHARE_IRQ is not set | 332 | # CONFIG_IDEPCI_SHARE_IRQ is not set |
313 | # CONFIG_BLK_DEV_OFFBOARD is not set | 333 | # CONFIG_BLK_DEV_OFFBOARD is not set |
@@ -347,6 +367,7 @@ CONFIG_IDEDMA_AUTO=y | |||
347 | # | 367 | # |
348 | # SCSI device support | 368 | # SCSI device support |
349 | # | 369 | # |
370 | # CONFIG_RAID_ATTRS is not set | ||
350 | CONFIG_SCSI=y | 371 | CONFIG_SCSI=y |
351 | CONFIG_SCSI_PROC_FS=y | 372 | CONFIG_SCSI_PROC_FS=y |
352 | 373 | ||
@@ -374,6 +395,7 @@ CONFIG_CHR_DEV_SG=m | |||
374 | CONFIG_SCSI_SPI_ATTRS=y | 395 | CONFIG_SCSI_SPI_ATTRS=y |
375 | CONFIG_SCSI_FC_ATTRS=y | 396 | CONFIG_SCSI_FC_ATTRS=y |
376 | # CONFIG_SCSI_ISCSI_ATTRS is not set | 397 | # CONFIG_SCSI_ISCSI_ATTRS is not set |
398 | # CONFIG_SCSI_SAS_ATTRS is not set | ||
377 | 399 | ||
378 | # | 400 | # |
379 | # SCSI low-level drivers | 401 | # SCSI low-level drivers |
@@ -462,6 +484,7 @@ CONFIG_DUMMY=m | |||
462 | # CONFIG_BONDING is not set | 484 | # CONFIG_BONDING is not set |
463 | # CONFIG_EQUALIZER is not set | 485 | # CONFIG_EQUALIZER is not set |
464 | # CONFIG_TUN is not set | 486 | # CONFIG_TUN is not set |
487 | # CONFIG_NET_SB1000 is not set | ||
465 | 488 | ||
466 | # | 489 | # |
467 | # ARCnet devices | 490 | # ARCnet devices |
@@ -469,6 +492,11 @@ CONFIG_DUMMY=m | |||
469 | # CONFIG_ARCNET is not set | 492 | # CONFIG_ARCNET is not set |
470 | 493 | ||
471 | # | 494 | # |
495 | # PHY device support | ||
496 | # | ||
497 | # CONFIG_PHYLIB is not set | ||
498 | |||
499 | # | ||
472 | # Ethernet (10 or 100Mbit) | 500 | # Ethernet (10 or 100Mbit) |
473 | # | 501 | # |
474 | CONFIG_NET_ETHERNET=y | 502 | CONFIG_NET_ETHERNET=y |
@@ -489,6 +517,7 @@ CONFIG_TULIP=m | |||
489 | # CONFIG_DE4X5 is not set | 517 | # CONFIG_DE4X5 is not set |
490 | # CONFIG_WINBOND_840 is not set | 518 | # CONFIG_WINBOND_840 is not set |
491 | # CONFIG_DM9102 is not set | 519 | # CONFIG_DM9102 is not set |
520 | # CONFIG_ULI526X is not set | ||
492 | # CONFIG_HP100 is not set | 521 | # CONFIG_HP100 is not set |
493 | CONFIG_NET_PCI=y | 522 | CONFIG_NET_PCI=y |
494 | # CONFIG_PCNET32 is not set | 523 | # CONFIG_PCNET32 is not set |
@@ -520,6 +549,7 @@ CONFIG_E1000=y | |||
520 | # CONFIG_HAMACHI is not set | 549 | # CONFIG_HAMACHI is not set |
521 | # CONFIG_YELLOWFIN is not set | 550 | # CONFIG_YELLOWFIN is not set |
522 | # CONFIG_R8169 is not set | 551 | # CONFIG_R8169 is not set |
552 | # CONFIG_SIS190 is not set | ||
523 | # CONFIG_SKGE is not set | 553 | # CONFIG_SKGE is not set |
524 | # CONFIG_SK98LIN is not set | 554 | # CONFIG_SK98LIN is not set |
525 | # CONFIG_VIA_VELOCITY is not set | 555 | # CONFIG_VIA_VELOCITY is not set |
@@ -529,6 +559,7 @@ CONFIG_TIGON3=y | |||
529 | # | 559 | # |
530 | # Ethernet (10000 Mbit) | 560 | # Ethernet (10000 Mbit) |
531 | # | 561 | # |
562 | # CONFIG_CHELSIO_T1 is not set | ||
532 | # CONFIG_IXGB is not set | 563 | # CONFIG_IXGB is not set |
533 | # CONFIG_S2IO is not set | 564 | # CONFIG_S2IO is not set |
534 | 565 | ||
@@ -626,6 +657,7 @@ CONFIG_HW_CONSOLE=y | |||
626 | CONFIG_SERIAL_NONSTANDARD=y | 657 | CONFIG_SERIAL_NONSTANDARD=y |
627 | # CONFIG_ROCKETPORT is not set | 658 | # CONFIG_ROCKETPORT is not set |
628 | # CONFIG_CYCLADES is not set | 659 | # CONFIG_CYCLADES is not set |
660 | # CONFIG_DIGIEPCA is not set | ||
629 | # CONFIG_MOXA_SMARTIO is not set | 661 | # CONFIG_MOXA_SMARTIO is not set |
630 | # CONFIG_ISI is not set | 662 | # CONFIG_ISI is not set |
631 | # CONFIG_SYNCLINKMP is not set | 663 | # CONFIG_SYNCLINKMP is not set |
@@ -683,6 +715,7 @@ CONFIG_DRM_RADEON=m | |||
683 | CONFIG_DRM_MGA=m | 715 | CONFIG_DRM_MGA=m |
684 | CONFIG_DRM_SIS=m | 716 | CONFIG_DRM_SIS=m |
685 | # CONFIG_DRM_VIA is not set | 717 | # CONFIG_DRM_VIA is not set |
718 | # CONFIG_DRM_SAVAGE is not set | ||
686 | CONFIG_RAW_DRIVER=m | 719 | CONFIG_RAW_DRIVER=m |
687 | CONFIG_HPET=y | 720 | CONFIG_HPET=y |
688 | # CONFIG_HPET_RTC_IRQ is not set | 721 | # CONFIG_HPET_RTC_IRQ is not set |
@@ -699,7 +732,6 @@ CONFIG_MAX_RAW_DEVS=256 | |||
699 | # I2C support | 732 | # I2C support |
700 | # | 733 | # |
701 | # CONFIG_I2C is not set | 734 | # CONFIG_I2C is not set |
702 | # CONFIG_I2C_SENSOR is not set | ||
703 | 735 | ||
704 | # | 736 | # |
705 | # Dallas's 1-wire bus | 737 | # Dallas's 1-wire bus |
@@ -710,6 +742,7 @@ CONFIG_MAX_RAW_DEVS=256 | |||
710 | # Hardware Monitoring support | 742 | # Hardware Monitoring support |
711 | # | 743 | # |
712 | CONFIG_HWMON=y | 744 | CONFIG_HWMON=y |
745 | # CONFIG_HWMON_VID is not set | ||
713 | # CONFIG_HWMON_DEBUG_CHIP is not set | 746 | # CONFIG_HWMON_DEBUG_CHIP is not set |
714 | 747 | ||
715 | # | 748 | # |
@@ -717,6 +750,10 @@ CONFIG_HWMON=y | |||
717 | # | 750 | # |
718 | 751 | ||
719 | # | 752 | # |
753 | # Multimedia Capabilities Port drivers | ||
754 | # | ||
755 | |||
756 | # | ||
720 | # Multimedia devices | 757 | # Multimedia devices |
721 | # | 758 | # |
722 | # CONFIG_VIDEO_DEV is not set | 759 | # CONFIG_VIDEO_DEV is not set |
@@ -808,9 +845,11 @@ CONFIG_USB_HIDINPUT=y | |||
808 | # CONFIG_USB_MTOUCH is not set | 845 | # CONFIG_USB_MTOUCH is not set |
809 | # CONFIG_USB_ITMTOUCH is not set | 846 | # CONFIG_USB_ITMTOUCH is not set |
810 | # CONFIG_USB_EGALAX is not set | 847 | # CONFIG_USB_EGALAX is not set |
848 | # CONFIG_USB_YEALINK is not set | ||
811 | # CONFIG_USB_XPAD is not set | 849 | # CONFIG_USB_XPAD is not set |
812 | # CONFIG_USB_ATI_REMOTE is not set | 850 | # CONFIG_USB_ATI_REMOTE is not set |
813 | # CONFIG_USB_KEYSPAN_REMOTE is not set | 851 | # CONFIG_USB_KEYSPAN_REMOTE is not set |
852 | # CONFIG_USB_APPLETOUCH is not set | ||
814 | 853 | ||
815 | # | 854 | # |
816 | # USB Imaging devices | 855 | # USB Imaging devices |
@@ -910,16 +949,12 @@ CONFIG_REISERFS_FS_POSIX_ACL=y | |||
910 | CONFIG_REISERFS_FS_SECURITY=y | 949 | CONFIG_REISERFS_FS_SECURITY=y |
911 | # CONFIG_JFS_FS is not set | 950 | # CONFIG_JFS_FS is not set |
912 | CONFIG_FS_POSIX_ACL=y | 951 | CONFIG_FS_POSIX_ACL=y |
913 | |||
914 | # | ||
915 | # XFS support | ||
916 | # | ||
917 | CONFIG_XFS_FS=y | 952 | CONFIG_XFS_FS=y |
918 | CONFIG_XFS_EXPORT=y | 953 | CONFIG_XFS_EXPORT=y |
919 | # CONFIG_XFS_RT is not set | ||
920 | # CONFIG_XFS_QUOTA is not set | 954 | # CONFIG_XFS_QUOTA is not set |
921 | # CONFIG_XFS_SECURITY is not set | 955 | # CONFIG_XFS_SECURITY is not set |
922 | # CONFIG_XFS_POSIX_ACL is not set | 956 | # CONFIG_XFS_POSIX_ACL is not set |
957 | # CONFIG_XFS_RT is not set | ||
923 | # CONFIG_MINIX_FS is not set | 958 | # CONFIG_MINIX_FS is not set |
924 | # CONFIG_ROMFS_FS is not set | 959 | # CONFIG_ROMFS_FS is not set |
925 | CONFIG_INOTIFY=y | 960 | CONFIG_INOTIFY=y |
@@ -927,6 +962,7 @@ CONFIG_INOTIFY=y | |||
927 | CONFIG_DNOTIFY=y | 962 | CONFIG_DNOTIFY=y |
928 | CONFIG_AUTOFS_FS=y | 963 | CONFIG_AUTOFS_FS=y |
929 | CONFIG_AUTOFS4_FS=y | 964 | CONFIG_AUTOFS4_FS=y |
965 | # CONFIG_FUSE_FS is not set | ||
930 | 966 | ||
931 | # | 967 | # |
932 | # CD-ROM/DVD Filesystems | 968 | # CD-ROM/DVD Filesystems |
@@ -955,13 +991,11 @@ CONFIG_NTFS_FS=m | |||
955 | CONFIG_PROC_FS=y | 991 | CONFIG_PROC_FS=y |
956 | CONFIG_PROC_KCORE=y | 992 | CONFIG_PROC_KCORE=y |
957 | CONFIG_SYSFS=y | 993 | CONFIG_SYSFS=y |
958 | # CONFIG_DEVPTS_FS_XATTR is not set | ||
959 | CONFIG_TMPFS=y | 994 | CONFIG_TMPFS=y |
960 | CONFIG_TMPFS_XATTR=y | ||
961 | CONFIG_TMPFS_SECURITY=y | ||
962 | CONFIG_HUGETLBFS=y | 995 | CONFIG_HUGETLBFS=y |
963 | CONFIG_HUGETLB_PAGE=y | 996 | CONFIG_HUGETLB_PAGE=y |
964 | CONFIG_RAMFS=y | 997 | CONFIG_RAMFS=y |
998 | # CONFIG_RELAYFS_FS is not set | ||
965 | 999 | ||
966 | # | 1000 | # |
967 | # Miscellaneous filesystems | 1001 | # Miscellaneous filesystems |
@@ -1011,6 +1045,7 @@ CONFIG_CIFS=m | |||
1011 | # CONFIG_NCP_FS is not set | 1045 | # CONFIG_NCP_FS is not set |
1012 | # CONFIG_CODA_FS is not set | 1046 | # CONFIG_CODA_FS is not set |
1013 | # CONFIG_AFS_FS is not set | 1047 | # CONFIG_AFS_FS is not set |
1048 | # CONFIG_9P_FS is not set | ||
1014 | 1049 | ||
1015 | # | 1050 | # |
1016 | # Partition Types | 1051 | # Partition Types |
@@ -1080,10 +1115,12 @@ CONFIG_NLS_UTF8=m | |||
1080 | # Library routines | 1115 | # Library routines |
1081 | # | 1116 | # |
1082 | # CONFIG_CRC_CCITT is not set | 1117 | # CONFIG_CRC_CCITT is not set |
1118 | # CONFIG_CRC16 is not set | ||
1083 | CONFIG_CRC32=y | 1119 | CONFIG_CRC32=y |
1084 | # CONFIG_LIBCRC32C is not set | 1120 | # CONFIG_LIBCRC32C is not set |
1085 | CONFIG_GENERIC_HARDIRQS=y | 1121 | CONFIG_GENERIC_HARDIRQS=y |
1086 | CONFIG_GENERIC_IRQ_PROBE=y | 1122 | CONFIG_GENERIC_IRQ_PROBE=y |
1123 | CONFIG_GENERIC_PENDING_IRQ=y | ||
1087 | 1124 | ||
1088 | # | 1125 | # |
1089 | # Profiling support | 1126 | # Profiling support |
@@ -1097,6 +1134,7 @@ CONFIG_GENERIC_IRQ_PROBE=y | |||
1097 | CONFIG_DEBUG_KERNEL=y | 1134 | CONFIG_DEBUG_KERNEL=y |
1098 | CONFIG_MAGIC_SYSRQ=y | 1135 | CONFIG_MAGIC_SYSRQ=y |
1099 | CONFIG_LOG_BUF_SHIFT=20 | 1136 | CONFIG_LOG_BUF_SHIFT=20 |
1137 | CONFIG_DETECT_SOFTLOCKUP=y | ||
1100 | # CONFIG_SCHEDSTATS is not set | 1138 | # CONFIG_SCHEDSTATS is not set |
1101 | # CONFIG_DEBUG_SLAB is not set | 1139 | # CONFIG_DEBUG_SLAB is not set |
1102 | # CONFIG_DEBUG_SPINLOCK is not set | 1140 | # CONFIG_DEBUG_SPINLOCK is not set |
diff --git a/arch/ia64/configs/zx1_defconfig b/arch/ia64/configs/zx1_defconfig index 88e8867fa8e8..0856ca67dd50 100644 --- a/arch/ia64/configs/zx1_defconfig +++ b/arch/ia64/configs/zx1_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.13-rc6 | 3 | # Linux kernel version: 2.6.14-rc1 |
4 | # Wed Aug 17 10:02:43 2005 | 4 | # Wed Sep 14 15:15:01 2005 |
5 | # | 5 | # |
6 | 6 | ||
7 | # | 7 | # |
@@ -18,6 +18,7 @@ CONFIG_INIT_ENV_ARG_LIMIT=32 | |||
18 | # General setup | 18 | # General setup |
19 | # | 19 | # |
20 | CONFIG_LOCALVERSION="" | 20 | CONFIG_LOCALVERSION="" |
21 | CONFIG_LOCALVERSION_AUTO=y | ||
21 | CONFIG_SWAP=y | 22 | CONFIG_SWAP=y |
22 | CONFIG_SYSVIPC=y | 23 | CONFIG_SYSVIPC=y |
23 | # CONFIG_POSIX_MQUEUE is not set | 24 | # CONFIG_POSIX_MQUEUE is not set |
@@ -29,6 +30,7 @@ CONFIG_HOTPLUG=y | |||
29 | CONFIG_KOBJECT_UEVENT=y | 30 | CONFIG_KOBJECT_UEVENT=y |
30 | # CONFIG_IKCONFIG is not set | 31 | # CONFIG_IKCONFIG is not set |
31 | # CONFIG_CPUSETS is not set | 32 | # CONFIG_CPUSETS is not set |
33 | CONFIG_INITRAMFS_SOURCE="" | ||
32 | # CONFIG_EMBEDDED is not set | 34 | # CONFIG_EMBEDDED is not set |
33 | CONFIG_KALLSYMS=y | 35 | CONFIG_KALLSYMS=y |
34 | # CONFIG_KALLSYMS_ALL is not set | 36 | # CONFIG_KALLSYMS_ALL is not set |
@@ -103,19 +105,20 @@ CONFIG_FLATMEM_MANUAL=y | |||
103 | # CONFIG_SPARSEMEM_MANUAL is not set | 105 | # CONFIG_SPARSEMEM_MANUAL is not set |
104 | CONFIG_FLATMEM=y | 106 | CONFIG_FLATMEM=y |
105 | CONFIG_FLAT_NODE_MEM_MAP=y | 107 | CONFIG_FLAT_NODE_MEM_MAP=y |
108 | # CONFIG_SPARSEMEM_STATIC is not set | ||
106 | CONFIG_HAVE_DEC_LOCK=y | 109 | CONFIG_HAVE_DEC_LOCK=y |
107 | CONFIG_IA32_SUPPORT=y | 110 | CONFIG_IA32_SUPPORT=y |
108 | CONFIG_COMPAT=y | 111 | CONFIG_COMPAT=y |
109 | CONFIG_IA64_MCA_RECOVERY=y | 112 | CONFIG_IA64_MCA_RECOVERY=y |
110 | CONFIG_PERFMON=y | 113 | CONFIG_PERFMON=y |
111 | CONFIG_IA64_PALINFO=y | 114 | CONFIG_IA64_PALINFO=y |
112 | CONFIG_ACPI_DEALLOCATE_IRQ=y | ||
113 | 115 | ||
114 | # | 116 | # |
115 | # Firmware Drivers | 117 | # Firmware Drivers |
116 | # | 118 | # |
117 | CONFIG_EFI_VARS=y | 119 | CONFIG_EFI_VARS=y |
118 | CONFIG_EFI_PCDP=y | 120 | CONFIG_EFI_PCDP=y |
121 | # CONFIG_DELL_RBU is not set | ||
119 | CONFIG_BINFMT_ELF=y | 122 | CONFIG_BINFMT_ELF=y |
120 | CONFIG_BINFMT_MISC=y | 123 | CONFIG_BINFMT_MISC=y |
121 | 124 | ||
@@ -123,35 +126,34 @@ CONFIG_BINFMT_MISC=y | |||
123 | # Power management and ACPI | 126 | # Power management and ACPI |
124 | # | 127 | # |
125 | CONFIG_PM=y | 128 | CONFIG_PM=y |
126 | CONFIG_ACPI=y | 129 | # CONFIG_PM_DEBUG is not set |
127 | 130 | ||
128 | # | 131 | # |
129 | # ACPI (Advanced Configuration and Power Interface) Support | 132 | # ACPI (Advanced Configuration and Power Interface) Support |
130 | # | 133 | # |
131 | CONFIG_ACPI_BOOT=y | 134 | CONFIG_ACPI=y |
132 | CONFIG_ACPI_INTERPRETER=y | ||
133 | CONFIG_ACPI_BUTTON=y | 135 | CONFIG_ACPI_BUTTON=y |
134 | CONFIG_ACPI_VIDEO=m | ||
135 | CONFIG_ACPI_HOTKEY=m | ||
136 | CONFIG_ACPI_FAN=y | 136 | CONFIG_ACPI_FAN=y |
137 | CONFIG_ACPI_PROCESSOR=y | 137 | CONFIG_ACPI_PROCESSOR=y |
138 | CONFIG_ACPI_THERMAL=y | 138 | CONFIG_ACPI_THERMAL=y |
139 | CONFIG_ACPI_BLACKLIST_YEAR=0 | 139 | CONFIG_ACPI_BLACKLIST_YEAR=0 |
140 | # CONFIG_ACPI_DEBUG is not set | 140 | # CONFIG_ACPI_DEBUG is not set |
141 | CONFIG_ACPI_BUS=y | ||
142 | CONFIG_ACPI_POWER=y | 141 | CONFIG_ACPI_POWER=y |
143 | CONFIG_ACPI_PCI=y | ||
144 | CONFIG_ACPI_SYSTEM=y | 142 | CONFIG_ACPI_SYSTEM=y |
145 | # CONFIG_ACPI_CONTAINER is not set | 143 | # CONFIG_ACPI_CONTAINER is not set |
146 | 144 | ||
147 | # | 145 | # |
146 | # CPU Frequency scaling | ||
147 | # | ||
148 | # CONFIG_CPU_FREQ is not set | ||
149 | |||
150 | # | ||
148 | # Bus options (PCI, PCMCIA) | 151 | # Bus options (PCI, PCMCIA) |
149 | # | 152 | # |
150 | CONFIG_PCI=y | 153 | CONFIG_PCI=y |
151 | CONFIG_PCI_DOMAINS=y | 154 | CONFIG_PCI_DOMAINS=y |
152 | # CONFIG_PCI_MSI is not set | 155 | # CONFIG_PCI_MSI is not set |
153 | CONFIG_PCI_LEGACY_PROC=y | 156 | CONFIG_PCI_LEGACY_PROC=y |
154 | CONFIG_PCI_NAMES=y | ||
155 | # CONFIG_PCI_DEBUG is not set | 157 | # CONFIG_PCI_DEBUG is not set |
156 | 158 | ||
157 | # | 159 | # |
@@ -195,8 +197,8 @@ CONFIG_IP_FIB_HASH=y | |||
195 | # CONFIG_INET_ESP is not set | 197 | # CONFIG_INET_ESP is not set |
196 | # CONFIG_INET_IPCOMP is not set | 198 | # CONFIG_INET_IPCOMP is not set |
197 | # CONFIG_INET_TUNNEL is not set | 199 | # CONFIG_INET_TUNNEL is not set |
198 | # CONFIG_IP_TCPDIAG is not set | 200 | CONFIG_INET_DIAG=y |
199 | # CONFIG_IP_TCPDIAG_IPV6 is not set | 201 | CONFIG_INET_TCP_DIAG=y |
200 | # CONFIG_TCP_CONG_ADVANCED is not set | 202 | # CONFIG_TCP_CONG_ADVANCED is not set |
201 | CONFIG_TCP_CONG_BIC=y | 203 | CONFIG_TCP_CONG_BIC=y |
202 | 204 | ||
@@ -212,7 +214,6 @@ CONFIG_NETFILTER=y | |||
212 | # IP: Netfilter Configuration | 214 | # IP: Netfilter Configuration |
213 | # | 215 | # |
214 | # CONFIG_IP_NF_CONNTRACK is not set | 216 | # CONFIG_IP_NF_CONNTRACK is not set |
215 | # CONFIG_IP_NF_CONNTRACK_MARK is not set | ||
216 | # CONFIG_IP_NF_QUEUE is not set | 217 | # CONFIG_IP_NF_QUEUE is not set |
217 | # CONFIG_IP_NF_IPTABLES is not set | 218 | # CONFIG_IP_NF_IPTABLES is not set |
218 | CONFIG_IP_NF_ARPTABLES=y | 219 | CONFIG_IP_NF_ARPTABLES=y |
@@ -220,6 +221,11 @@ CONFIG_IP_NF_ARPTABLES=y | |||
220 | # CONFIG_IP_NF_ARP_MANGLE is not set | 221 | # CONFIG_IP_NF_ARP_MANGLE is not set |
221 | 222 | ||
222 | # | 223 | # |
224 | # DCCP Configuration (EXPERIMENTAL) | ||
225 | # | ||
226 | # CONFIG_IP_DCCP is not set | ||
227 | |||
228 | # | ||
223 | # SCTP Configuration (EXPERIMENTAL) | 229 | # SCTP Configuration (EXPERIMENTAL) |
224 | # | 230 | # |
225 | # CONFIG_IP_SCTP is not set | 231 | # CONFIG_IP_SCTP is not set |
@@ -242,9 +248,11 @@ CONFIG_IP_NF_ARPTABLES=y | |||
242 | # Network testing | 248 | # Network testing |
243 | # | 249 | # |
244 | # CONFIG_NET_PKTGEN is not set | 250 | # CONFIG_NET_PKTGEN is not set |
251 | # CONFIG_NETFILTER_NETLINK is not set | ||
245 | # CONFIG_HAMRADIO is not set | 252 | # CONFIG_HAMRADIO is not set |
246 | # CONFIG_IRDA is not set | 253 | # CONFIG_IRDA is not set |
247 | # CONFIG_BT is not set | 254 | # CONFIG_BT is not set |
255 | # CONFIG_IEEE80211 is not set | ||
248 | 256 | ||
249 | # | 257 | # |
250 | # Device Drivers | 258 | # Device Drivers |
@@ -259,6 +267,11 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y | |||
259 | # CONFIG_DEBUG_DRIVER is not set | 267 | # CONFIG_DEBUG_DRIVER is not set |
260 | 268 | ||
261 | # | 269 | # |
270 | # Connector - unified userspace <-> kernelspace linker | ||
271 | # | ||
272 | # CONFIG_CONNECTOR is not set | ||
273 | |||
274 | # | ||
262 | # Memory Technology Devices (MTD) | 275 | # Memory Technology Devices (MTD) |
263 | # | 276 | # |
264 | # CONFIG_MTD is not set | 277 | # CONFIG_MTD is not set |
@@ -271,7 +284,13 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y | |||
271 | # | 284 | # |
272 | # Plug and Play support | 285 | # Plug and Play support |
273 | # | 286 | # |
274 | # CONFIG_PNP is not set | 287 | CONFIG_PNP=y |
288 | # CONFIG_PNP_DEBUG is not set | ||
289 | |||
290 | # | ||
291 | # Protocols | ||
292 | # | ||
293 | CONFIG_PNPACPI=y | ||
275 | 294 | ||
276 | # | 295 | # |
277 | # Block devices | 296 | # Block devices |
@@ -290,7 +309,6 @@ CONFIG_BLK_DEV_RAM=y | |||
290 | CONFIG_BLK_DEV_RAM_COUNT=16 | 309 | CONFIG_BLK_DEV_RAM_COUNT=16 |
291 | CONFIG_BLK_DEV_RAM_SIZE=4096 | 310 | CONFIG_BLK_DEV_RAM_SIZE=4096 |
292 | CONFIG_BLK_DEV_INITRD=y | 311 | CONFIG_BLK_DEV_INITRD=y |
293 | CONFIG_INITRAMFS_SOURCE="" | ||
294 | # CONFIG_CDROM_PKTCDVD is not set | 312 | # CONFIG_CDROM_PKTCDVD is not set |
295 | 313 | ||
296 | # | 314 | # |
@@ -323,7 +341,8 @@ CONFIG_BLK_DEV_IDECD=y | |||
323 | # | 341 | # |
324 | # IDE chipset support/bugfixes | 342 | # IDE chipset support/bugfixes |
325 | # | 343 | # |
326 | CONFIG_IDE_GENERIC=y | 344 | # CONFIG_IDE_GENERIC is not set |
345 | # CONFIG_BLK_DEV_IDEPNP is not set | ||
327 | CONFIG_BLK_DEV_IDEPCI=y | 346 | CONFIG_BLK_DEV_IDEPCI=y |
328 | CONFIG_IDEPCI_SHARE_IRQ=y | 347 | CONFIG_IDEPCI_SHARE_IRQ=y |
329 | # CONFIG_BLK_DEV_OFFBOARD is not set | 348 | # CONFIG_BLK_DEV_OFFBOARD is not set |
@@ -362,6 +381,7 @@ CONFIG_BLK_DEV_IDEDMA=y | |||
362 | # | 381 | # |
363 | # SCSI device support | 382 | # SCSI device support |
364 | # | 383 | # |
384 | # CONFIG_RAID_ATTRS is not set | ||
365 | CONFIG_SCSI=y | 385 | CONFIG_SCSI=y |
366 | CONFIG_SCSI_PROC_FS=y | 386 | CONFIG_SCSI_PROC_FS=y |
367 | 387 | ||
@@ -389,6 +409,7 @@ CONFIG_SCSI_LOGGING=y | |||
389 | CONFIG_SCSI_SPI_ATTRS=y | 409 | CONFIG_SCSI_SPI_ATTRS=y |
390 | # CONFIG_SCSI_FC_ATTRS is not set | 410 | # CONFIG_SCSI_FC_ATTRS is not set |
391 | # CONFIG_SCSI_ISCSI_ATTRS is not set | 411 | # CONFIG_SCSI_ISCSI_ATTRS is not set |
412 | # CONFIG_SCSI_SAS_ATTRS is not set | ||
392 | 413 | ||
393 | # | 414 | # |
394 | # SCSI low-level drivers | 415 | # SCSI low-level drivers |
@@ -465,6 +486,7 @@ CONFIG_DUMMY=y | |||
465 | # CONFIG_BONDING is not set | 486 | # CONFIG_BONDING is not set |
466 | # CONFIG_EQUALIZER is not set | 487 | # CONFIG_EQUALIZER is not set |
467 | # CONFIG_TUN is not set | 488 | # CONFIG_TUN is not set |
489 | # CONFIG_NET_SB1000 is not set | ||
468 | 490 | ||
469 | # | 491 | # |
470 | # ARCnet devices | 492 | # ARCnet devices |
@@ -472,6 +494,11 @@ CONFIG_DUMMY=y | |||
472 | # CONFIG_ARCNET is not set | 494 | # CONFIG_ARCNET is not set |
473 | 495 | ||
474 | # | 496 | # |
497 | # PHY device support | ||
498 | # | ||
499 | # CONFIG_PHYLIB is not set | ||
500 | |||
501 | # | ||
475 | # Ethernet (10 or 100Mbit) | 502 | # Ethernet (10 or 100Mbit) |
476 | # | 503 | # |
477 | CONFIG_NET_ETHERNET=y | 504 | CONFIG_NET_ETHERNET=y |
@@ -493,6 +520,7 @@ CONFIG_TULIP_NAPI_HW_MITIGATION=y | |||
493 | # CONFIG_DE4X5 is not set | 520 | # CONFIG_DE4X5 is not set |
494 | # CONFIG_WINBOND_840 is not set | 521 | # CONFIG_WINBOND_840 is not set |
495 | # CONFIG_DM9102 is not set | 522 | # CONFIG_DM9102 is not set |
523 | # CONFIG_ULI526X is not set | ||
496 | # CONFIG_HP100 is not set | 524 | # CONFIG_HP100 is not set |
497 | CONFIG_NET_PCI=y | 525 | CONFIG_NET_PCI=y |
498 | # CONFIG_PCNET32 is not set | 526 | # CONFIG_PCNET32 is not set |
@@ -524,6 +552,7 @@ CONFIG_E1000=y | |||
524 | # CONFIG_HAMACHI is not set | 552 | # CONFIG_HAMACHI is not set |
525 | # CONFIG_YELLOWFIN is not set | 553 | # CONFIG_YELLOWFIN is not set |
526 | # CONFIG_R8169 is not set | 554 | # CONFIG_R8169 is not set |
555 | # CONFIG_SIS190 is not set | ||
527 | # CONFIG_SKGE is not set | 556 | # CONFIG_SKGE is not set |
528 | # CONFIG_SK98LIN is not set | 557 | # CONFIG_SK98LIN is not set |
529 | # CONFIG_VIA_VELOCITY is not set | 558 | # CONFIG_VIA_VELOCITY is not set |
@@ -533,6 +562,7 @@ CONFIG_TIGON3=y | |||
533 | # | 562 | # |
534 | # Ethernet (10000 Mbit) | 563 | # Ethernet (10000 Mbit) |
535 | # | 564 | # |
565 | # CONFIG_CHELSIO_T1 is not set | ||
536 | # CONFIG_IXGB is not set | 566 | # CONFIG_IXGB is not set |
537 | # CONFIG_S2IO is not set | 567 | # CONFIG_S2IO is not set |
538 | 568 | ||
@@ -658,12 +688,12 @@ CONFIG_AGP=y | |||
658 | CONFIG_AGP_HP_ZX1=y | 688 | CONFIG_AGP_HP_ZX1=y |
659 | CONFIG_DRM=y | 689 | CONFIG_DRM=y |
660 | # CONFIG_DRM_TDFX is not set | 690 | # CONFIG_DRM_TDFX is not set |
661 | # CONFIG_DRM_GAMMA is not set | ||
662 | # CONFIG_DRM_R128 is not set | 691 | # CONFIG_DRM_R128 is not set |
663 | CONFIG_DRM_RADEON=y | 692 | CONFIG_DRM_RADEON=y |
664 | # CONFIG_DRM_MGA is not set | 693 | # CONFIG_DRM_MGA is not set |
665 | # CONFIG_DRM_SIS is not set | 694 | # CONFIG_DRM_SIS is not set |
666 | # CONFIG_DRM_VIA is not set | 695 | # CONFIG_DRM_VIA is not set |
696 | # CONFIG_DRM_SAVAGE is not set | ||
667 | # CONFIG_RAW_DRIVER is not set | 697 | # CONFIG_RAW_DRIVER is not set |
668 | # CONFIG_HPET is not set | 698 | # CONFIG_HPET is not set |
669 | # CONFIG_HANGCHECK_TIMER is not set | 699 | # CONFIG_HANGCHECK_TIMER is not set |
@@ -697,7 +727,6 @@ CONFIG_I2C_ALGOPCF=y | |||
697 | # CONFIG_I2C_I801 is not set | 727 | # CONFIG_I2C_I801 is not set |
698 | # CONFIG_I2C_I810 is not set | 728 | # CONFIG_I2C_I810 is not set |
699 | # CONFIG_I2C_PIIX4 is not set | 729 | # CONFIG_I2C_PIIX4 is not set |
700 | # CONFIG_I2C_ISA is not set | ||
701 | # CONFIG_I2C_NFORCE2 is not set | 730 | # CONFIG_I2C_NFORCE2 is not set |
702 | # CONFIG_I2C_PARPORT_LIGHT is not set | 731 | # CONFIG_I2C_PARPORT_LIGHT is not set |
703 | # CONFIG_I2C_PROSAVAGE is not set | 732 | # CONFIG_I2C_PROSAVAGE is not set |
@@ -711,7 +740,6 @@ CONFIG_I2C_ALGOPCF=y | |||
711 | # CONFIG_I2C_VIAPRO is not set | 740 | # CONFIG_I2C_VIAPRO is not set |
712 | # CONFIG_I2C_VOODOO3 is not set | 741 | # CONFIG_I2C_VOODOO3 is not set |
713 | # CONFIG_I2C_PCA_ISA is not set | 742 | # CONFIG_I2C_PCA_ISA is not set |
714 | # CONFIG_I2C_SENSOR is not set | ||
715 | 743 | ||
716 | # | 744 | # |
717 | # Miscellaneous I2C Chip support | 745 | # Miscellaneous I2C Chip support |
@@ -738,12 +766,17 @@ CONFIG_I2C_ALGOPCF=y | |||
738 | # Hardware Monitoring support | 766 | # Hardware Monitoring support |
739 | # | 767 | # |
740 | # CONFIG_HWMON is not set | 768 | # CONFIG_HWMON is not set |
769 | # CONFIG_HWMON_VID is not set | ||
741 | 770 | ||
742 | # | 771 | # |
743 | # Misc devices | 772 | # Misc devices |
744 | # | 773 | # |
745 | 774 | ||
746 | # | 775 | # |
776 | # Multimedia Capabilities Port drivers | ||
777 | # | ||
778 | |||
779 | # | ||
747 | # Multimedia devices | 780 | # Multimedia devices |
748 | # | 781 | # |
749 | CONFIG_VIDEO_DEV=y | 782 | CONFIG_VIDEO_DEV=y |
@@ -814,6 +847,7 @@ CONFIG_FB_RADEON_DEBUG=y | |||
814 | # CONFIG_FB_KYRO is not set | 847 | # CONFIG_FB_KYRO is not set |
815 | # CONFIG_FB_3DFX is not set | 848 | # CONFIG_FB_3DFX is not set |
816 | # CONFIG_FB_VOODOO1 is not set | 849 | # CONFIG_FB_VOODOO1 is not set |
850 | # CONFIG_FB_CYBLA is not set | ||
817 | # CONFIG_FB_TRIDENT is not set | 851 | # CONFIG_FB_TRIDENT is not set |
818 | # CONFIG_FB_PM3 is not set | 852 | # CONFIG_FB_PM3 is not set |
819 | # CONFIG_FB_S1D13XXX is not set | 853 | # CONFIG_FB_S1D13XXX is not set |
@@ -870,11 +904,12 @@ CONFIG_SND_OPL3_LIB=y | |||
870 | # CONFIG_SND_MTPAV is not set | 904 | # CONFIG_SND_MTPAV is not set |
871 | # CONFIG_SND_SERIAL_U16550 is not set | 905 | # CONFIG_SND_SERIAL_U16550 is not set |
872 | # CONFIG_SND_MPU401 is not set | 906 | # CONFIG_SND_MPU401 is not set |
907 | CONFIG_SND_AC97_CODEC=y | ||
908 | CONFIG_SND_AC97_BUS=y | ||
873 | 909 | ||
874 | # | 910 | # |
875 | # PCI devices | 911 | # PCI devices |
876 | # | 912 | # |
877 | CONFIG_SND_AC97_CODEC=y | ||
878 | # CONFIG_SND_ALI5451 is not set | 913 | # CONFIG_SND_ALI5451 is not set |
879 | # CONFIG_SND_ATIIXP is not set | 914 | # CONFIG_SND_ATIIXP is not set |
880 | # CONFIG_SND_ATIIXP_MODEM is not set | 915 | # CONFIG_SND_ATIIXP_MODEM is not set |
@@ -898,7 +933,7 @@ CONFIG_SND_AC97_CODEC=y | |||
898 | # CONFIG_SND_HDSPM is not set | 933 | # CONFIG_SND_HDSPM is not set |
899 | # CONFIG_SND_TRIDENT is not set | 934 | # CONFIG_SND_TRIDENT is not set |
900 | # CONFIG_SND_YMFPCI is not set | 935 | # CONFIG_SND_YMFPCI is not set |
901 | # CONFIG_SND_ALS4000 is not set | 936 | # CONFIG_SND_AD1889 is not set |
902 | # CONFIG_SND_CMIPCI is not set | 937 | # CONFIG_SND_CMIPCI is not set |
903 | # CONFIG_SND_ENS1370 is not set | 938 | # CONFIG_SND_ENS1370 is not set |
904 | # CONFIG_SND_ENS1371 is not set | 939 | # CONFIG_SND_ENS1371 is not set |
@@ -960,9 +995,8 @@ CONFIG_USB_UHCI_HCD=y | |||
960 | # | 995 | # |
961 | # USB Device Class drivers | 996 | # USB Device Class drivers |
962 | # | 997 | # |
963 | # CONFIG_USB_AUDIO is not set | 998 | # CONFIG_OBSOLETE_OSS_USB_DRIVER is not set |
964 | # CONFIG_USB_BLUETOOTH_TTY is not set | 999 | # CONFIG_USB_BLUETOOTH_TTY is not set |
965 | # CONFIG_USB_MIDI is not set | ||
966 | # CONFIG_USB_ACM is not set | 1000 | # CONFIG_USB_ACM is not set |
967 | # CONFIG_USB_PRINTER is not set | 1001 | # CONFIG_USB_PRINTER is not set |
968 | 1002 | ||
@@ -979,6 +1013,7 @@ CONFIG_USB_STORAGE=y | |||
979 | # CONFIG_USB_STORAGE_SDDR09 is not set | 1013 | # CONFIG_USB_STORAGE_SDDR09 is not set |
980 | # CONFIG_USB_STORAGE_SDDR55 is not set | 1014 | # CONFIG_USB_STORAGE_SDDR55 is not set |
981 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | 1015 | # CONFIG_USB_STORAGE_JUMPSHOT is not set |
1016 | # CONFIG_USB_STORAGE_ONETOUCH is not set | ||
982 | 1017 | ||
983 | # | 1018 | # |
984 | # USB Input Devices | 1019 | # USB Input Devices |
@@ -995,9 +1030,11 @@ CONFIG_USB_HIDDEV=y | |||
995 | # CONFIG_USB_MTOUCH is not set | 1030 | # CONFIG_USB_MTOUCH is not set |
996 | # CONFIG_USB_ITMTOUCH is not set | 1031 | # CONFIG_USB_ITMTOUCH is not set |
997 | # CONFIG_USB_EGALAX is not set | 1032 | # CONFIG_USB_EGALAX is not set |
1033 | # CONFIG_USB_YEALINK is not set | ||
998 | # CONFIG_USB_XPAD is not set | 1034 | # CONFIG_USB_XPAD is not set |
999 | # CONFIG_USB_ATI_REMOTE is not set | 1035 | # CONFIG_USB_ATI_REMOTE is not set |
1000 | # CONFIG_USB_KEYSPAN_REMOTE is not set | 1036 | # CONFIG_USB_KEYSPAN_REMOTE is not set |
1037 | # CONFIG_USB_APPLETOUCH is not set | ||
1001 | 1038 | ||
1002 | # | 1039 | # |
1003 | # USB Imaging devices | 1040 | # USB Imaging devices |
@@ -1096,10 +1133,6 @@ CONFIG_FS_MBCACHE=y | |||
1096 | # CONFIG_REISERFS_FS is not set | 1133 | # CONFIG_REISERFS_FS is not set |
1097 | # CONFIG_JFS_FS is not set | 1134 | # CONFIG_JFS_FS is not set |
1098 | # CONFIG_FS_POSIX_ACL is not set | 1135 | # CONFIG_FS_POSIX_ACL is not set |
1099 | |||
1100 | # | ||
1101 | # XFS support | ||
1102 | # | ||
1103 | # CONFIG_XFS_FS is not set | 1136 | # CONFIG_XFS_FS is not set |
1104 | # CONFIG_MINIX_FS is not set | 1137 | # CONFIG_MINIX_FS is not set |
1105 | # CONFIG_ROMFS_FS is not set | 1138 | # CONFIG_ROMFS_FS is not set |
@@ -1108,6 +1141,7 @@ CONFIG_FS_MBCACHE=y | |||
1108 | CONFIG_DNOTIFY=y | 1141 | CONFIG_DNOTIFY=y |
1109 | CONFIG_AUTOFS_FS=y | 1142 | CONFIG_AUTOFS_FS=y |
1110 | # CONFIG_AUTOFS4_FS is not set | 1143 | # CONFIG_AUTOFS4_FS is not set |
1144 | # CONFIG_FUSE_FS is not set | ||
1111 | 1145 | ||
1112 | # | 1146 | # |
1113 | # CD-ROM/DVD Filesystems | 1147 | # CD-ROM/DVD Filesystems |
@@ -1134,13 +1168,11 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | |||
1134 | CONFIG_PROC_FS=y | 1168 | CONFIG_PROC_FS=y |
1135 | CONFIG_PROC_KCORE=y | 1169 | CONFIG_PROC_KCORE=y |
1136 | CONFIG_SYSFS=y | 1170 | CONFIG_SYSFS=y |
1137 | # CONFIG_DEVPTS_FS_XATTR is not set | ||
1138 | CONFIG_TMPFS=y | 1171 | CONFIG_TMPFS=y |
1139 | CONFIG_TMPFS_XATTR=y | ||
1140 | CONFIG_TMPFS_SECURITY=y | ||
1141 | CONFIG_HUGETLBFS=y | 1172 | CONFIG_HUGETLBFS=y |
1142 | CONFIG_HUGETLB_PAGE=y | 1173 | CONFIG_HUGETLB_PAGE=y |
1143 | CONFIG_RAMFS=y | 1174 | CONFIG_RAMFS=y |
1175 | # CONFIG_RELAYFS_FS is not set | ||
1144 | 1176 | ||
1145 | # | 1177 | # |
1146 | # Miscellaneous filesystems | 1178 | # Miscellaneous filesystems |
@@ -1185,6 +1217,7 @@ CONFIG_RPCSEC_GSS_KRB5=y | |||
1185 | # CONFIG_NCP_FS is not set | 1217 | # CONFIG_NCP_FS is not set |
1186 | # CONFIG_CODA_FS is not set | 1218 | # CONFIG_CODA_FS is not set |
1187 | # CONFIG_AFS_FS is not set | 1219 | # CONFIG_AFS_FS is not set |
1220 | # CONFIG_9P_FS is not set | ||
1188 | 1221 | ||
1189 | # | 1222 | # |
1190 | # Partition Types | 1223 | # Partition Types |
@@ -1254,10 +1287,12 @@ CONFIG_NLS_UTF8=y | |||
1254 | # Library routines | 1287 | # Library routines |
1255 | # | 1288 | # |
1256 | # CONFIG_CRC_CCITT is not set | 1289 | # CONFIG_CRC_CCITT is not set |
1290 | # CONFIG_CRC16 is not set | ||
1257 | CONFIG_CRC32=y | 1291 | CONFIG_CRC32=y |
1258 | # CONFIG_LIBCRC32C is not set | 1292 | # CONFIG_LIBCRC32C is not set |
1259 | CONFIG_GENERIC_HARDIRQS=y | 1293 | CONFIG_GENERIC_HARDIRQS=y |
1260 | CONFIG_GENERIC_IRQ_PROBE=y | 1294 | CONFIG_GENERIC_IRQ_PROBE=y |
1295 | CONFIG_GENERIC_PENDING_IRQ=y | ||
1261 | 1296 | ||
1262 | # | 1297 | # |
1263 | # Profiling support | 1298 | # Profiling support |
@@ -1271,6 +1306,7 @@ CONFIG_GENERIC_IRQ_PROBE=y | |||
1271 | CONFIG_DEBUG_KERNEL=y | 1306 | CONFIG_DEBUG_KERNEL=y |
1272 | CONFIG_MAGIC_SYSRQ=y | 1307 | CONFIG_MAGIC_SYSRQ=y |
1273 | CONFIG_LOG_BUF_SHIFT=17 | 1308 | CONFIG_LOG_BUF_SHIFT=17 |
1309 | CONFIG_DETECT_SOFTLOCKUP=y | ||
1274 | # CONFIG_SCHEDSTATS is not set | 1310 | # CONFIG_SCHEDSTATS is not set |
1275 | # CONFIG_DEBUG_SLAB is not set | 1311 | # CONFIG_DEBUG_SLAB is not set |
1276 | # CONFIG_DEBUG_SPINLOCK is not set | 1312 | # CONFIG_DEBUG_SPINLOCK is not set |
diff --git a/arch/ia64/defconfig b/arch/ia64/defconfig index 8444add76380..6e3f147e03e5 100644 --- a/arch/ia64/defconfig +++ b/arch/ia64/defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.12 | 3 | # Linux kernel version: 2.6.14-rc1 |
4 | # Tue Jun 21 11:30:42 2005 | 4 | # Wed Sep 14 15:13:03 2005 |
5 | # | 5 | # |
6 | 6 | ||
7 | # | 7 | # |
@@ -16,6 +16,7 @@ CONFIG_INIT_ENV_ARG_LIMIT=32 | |||
16 | # General setup | 16 | # General setup |
17 | # | 17 | # |
18 | CONFIG_LOCALVERSION="" | 18 | CONFIG_LOCALVERSION="" |
19 | CONFIG_LOCALVERSION_AUTO=y | ||
19 | CONFIG_SWAP=y | 20 | CONFIG_SWAP=y |
20 | CONFIG_SYSVIPC=y | 21 | CONFIG_SYSVIPC=y |
21 | CONFIG_POSIX_MQUEUE=y | 22 | CONFIG_POSIX_MQUEUE=y |
@@ -27,6 +28,7 @@ CONFIG_KOBJECT_UEVENT=y | |||
27 | CONFIG_IKCONFIG=y | 28 | CONFIG_IKCONFIG=y |
28 | CONFIG_IKCONFIG_PROC=y | 29 | CONFIG_IKCONFIG_PROC=y |
29 | # CONFIG_CPUSETS is not set | 30 | # CONFIG_CPUSETS is not set |
31 | CONFIG_INITRAMFS_SOURCE="" | ||
30 | # CONFIG_EMBEDDED is not set | 32 | # CONFIG_EMBEDDED is not set |
31 | CONFIG_KALLSYMS=y | 33 | CONFIG_KALLSYMS=y |
32 | CONFIG_KALLSYMS_ALL=y | 34 | CONFIG_KALLSYMS_ALL=y |
@@ -80,6 +82,10 @@ CONFIG_MCKINLEY=y | |||
80 | # CONFIG_IA64_PAGE_SIZE_8KB is not set | 82 | # CONFIG_IA64_PAGE_SIZE_8KB is not set |
81 | CONFIG_IA64_PAGE_SIZE_16KB=y | 83 | CONFIG_IA64_PAGE_SIZE_16KB=y |
82 | # CONFIG_IA64_PAGE_SIZE_64KB is not set | 84 | # CONFIG_IA64_PAGE_SIZE_64KB is not set |
85 | # CONFIG_HZ_100 is not set | ||
86 | CONFIG_HZ_250=y | ||
87 | # CONFIG_HZ_1000 is not set | ||
88 | CONFIG_HZ=250 | ||
83 | CONFIG_IA64_L1_CACHE_SHIFT=7 | 89 | CONFIG_IA64_L1_CACHE_SHIFT=7 |
84 | CONFIG_NUMA=y | 90 | CONFIG_NUMA=y |
85 | CONFIG_VIRTUAL_MEM_MAP=y | 91 | CONFIG_VIRTUAL_MEM_MAP=y |
@@ -87,25 +93,34 @@ CONFIG_HOLES_IN_ZONE=y | |||
87 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y | 93 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y |
88 | CONFIG_IA64_CYCLONE=y | 94 | CONFIG_IA64_CYCLONE=y |
89 | CONFIG_IOSAPIC=y | 95 | CONFIG_IOSAPIC=y |
96 | # CONFIG_IA64_SGI_SN_XP is not set | ||
90 | CONFIG_FORCE_MAX_ZONEORDER=18 | 97 | CONFIG_FORCE_MAX_ZONEORDER=18 |
91 | CONFIG_SMP=y | 98 | CONFIG_SMP=y |
92 | CONFIG_NR_CPUS=512 | 99 | CONFIG_NR_CPUS=512 |
93 | CONFIG_HOTPLUG_CPU=y | 100 | CONFIG_HOTPLUG_CPU=y |
94 | # CONFIG_SCHED_SMT is not set | 101 | # CONFIG_SCHED_SMT is not set |
95 | # CONFIG_PREEMPT is not set | 102 | # CONFIG_PREEMPT is not set |
103 | CONFIG_SELECT_MEMORY_MODEL=y | ||
104 | # CONFIG_FLATMEM_MANUAL is not set | ||
105 | CONFIG_DISCONTIGMEM_MANUAL=y | ||
106 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
107 | CONFIG_DISCONTIGMEM=y | ||
108 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
109 | CONFIG_NEED_MULTIPLE_NODES=y | ||
110 | # CONFIG_SPARSEMEM_STATIC is not set | ||
96 | CONFIG_HAVE_DEC_LOCK=y | 111 | CONFIG_HAVE_DEC_LOCK=y |
97 | CONFIG_IA32_SUPPORT=y | 112 | CONFIG_IA32_SUPPORT=y |
98 | CONFIG_COMPAT=y | 113 | CONFIG_COMPAT=y |
99 | CONFIG_IA64_MCA_RECOVERY=y | 114 | CONFIG_IA64_MCA_RECOVERY=y |
100 | CONFIG_PERFMON=y | 115 | CONFIG_PERFMON=y |
101 | CONFIG_IA64_PALINFO=y | 116 | CONFIG_IA64_PALINFO=y |
102 | CONFIG_ACPI_DEALLOCATE_IRQ=y | ||
103 | 117 | ||
104 | # | 118 | # |
105 | # Firmware Drivers | 119 | # Firmware Drivers |
106 | # | 120 | # |
107 | CONFIG_EFI_VARS=y | 121 | CONFIG_EFI_VARS=y |
108 | CONFIG_EFI_PCDP=y | 122 | CONFIG_EFI_PCDP=y |
123 | # CONFIG_DELL_RBU is not set | ||
109 | CONFIG_BINFMT_ELF=y | 124 | CONFIG_BINFMT_ELF=y |
110 | CONFIG_BINFMT_MISC=m | 125 | CONFIG_BINFMT_MISC=m |
111 | 126 | ||
@@ -113,15 +128,13 @@ CONFIG_BINFMT_MISC=m | |||
113 | # Power management and ACPI | 128 | # Power management and ACPI |
114 | # | 129 | # |
115 | CONFIG_PM=y | 130 | CONFIG_PM=y |
116 | CONFIG_ACPI=y | 131 | # CONFIG_PM_DEBUG is not set |
117 | 132 | ||
118 | # | 133 | # |
119 | # ACPI (Advanced Configuration and Power Interface) Support | 134 | # ACPI (Advanced Configuration and Power Interface) Support |
120 | # | 135 | # |
121 | CONFIG_ACPI_BOOT=y | 136 | CONFIG_ACPI=y |
122 | CONFIG_ACPI_INTERPRETER=y | ||
123 | CONFIG_ACPI_BUTTON=m | 137 | CONFIG_ACPI_BUTTON=m |
124 | CONFIG_ACPI_VIDEO=m | ||
125 | CONFIG_ACPI_FAN=m | 138 | CONFIG_ACPI_FAN=m |
126 | CONFIG_ACPI_PROCESSOR=m | 139 | CONFIG_ACPI_PROCESSOR=m |
127 | CONFIG_ACPI_HOTPLUG_CPU=y | 140 | CONFIG_ACPI_HOTPLUG_CPU=y |
@@ -129,20 +142,22 @@ CONFIG_ACPI_THERMAL=m | |||
129 | CONFIG_ACPI_NUMA=y | 142 | CONFIG_ACPI_NUMA=y |
130 | CONFIG_ACPI_BLACKLIST_YEAR=0 | 143 | CONFIG_ACPI_BLACKLIST_YEAR=0 |
131 | # CONFIG_ACPI_DEBUG is not set | 144 | # CONFIG_ACPI_DEBUG is not set |
132 | CONFIG_ACPI_BUS=y | ||
133 | CONFIG_ACPI_POWER=y | 145 | CONFIG_ACPI_POWER=y |
134 | CONFIG_ACPI_PCI=y | ||
135 | CONFIG_ACPI_SYSTEM=y | 146 | CONFIG_ACPI_SYSTEM=y |
136 | CONFIG_ACPI_CONTAINER=m | 147 | CONFIG_ACPI_CONTAINER=m |
137 | 148 | ||
138 | # | 149 | # |
150 | # CPU Frequency scaling | ||
151 | # | ||
152 | # CONFIG_CPU_FREQ is not set | ||
153 | |||
154 | # | ||
139 | # Bus options (PCI, PCMCIA) | 155 | # Bus options (PCI, PCMCIA) |
140 | # | 156 | # |
141 | CONFIG_PCI=y | 157 | CONFIG_PCI=y |
142 | CONFIG_PCI_DOMAINS=y | 158 | CONFIG_PCI_DOMAINS=y |
143 | # CONFIG_PCI_MSI is not set | 159 | # CONFIG_PCI_MSI is not set |
144 | CONFIG_PCI_LEGACY_PROC=y | 160 | CONFIG_PCI_LEGACY_PROC=y |
145 | CONFIG_PCI_NAMES=y | ||
146 | # CONFIG_PCI_DEBUG is not set | 161 | # CONFIG_PCI_DEBUG is not set |
147 | 162 | ||
148 | # | 163 | # |
@@ -154,6 +169,7 @@ CONFIG_HOTPLUG_PCI_ACPI=m | |||
154 | # CONFIG_HOTPLUG_PCI_ACPI_IBM is not set | 169 | # CONFIG_HOTPLUG_PCI_ACPI_IBM is not set |
155 | # CONFIG_HOTPLUG_PCI_CPCI is not set | 170 | # CONFIG_HOTPLUG_PCI_CPCI is not set |
156 | # CONFIG_HOTPLUG_PCI_SHPC is not set | 171 | # CONFIG_HOTPLUG_PCI_SHPC is not set |
172 | # CONFIG_HOTPLUG_PCI_SGI is not set | ||
157 | 173 | ||
158 | # | 174 | # |
159 | # PCCARD (PCMCIA/CardBus) support | 175 | # PCCARD (PCMCIA/CardBus) support |
@@ -161,6 +177,73 @@ CONFIG_HOTPLUG_PCI_ACPI=m | |||
161 | # CONFIG_PCCARD is not set | 177 | # CONFIG_PCCARD is not set |
162 | 178 | ||
163 | # | 179 | # |
180 | # Networking | ||
181 | # | ||
182 | CONFIG_NET=y | ||
183 | |||
184 | # | ||
185 | # Networking options | ||
186 | # | ||
187 | CONFIG_PACKET=y | ||
188 | # CONFIG_PACKET_MMAP is not set | ||
189 | CONFIG_UNIX=y | ||
190 | # CONFIG_NET_KEY is not set | ||
191 | CONFIG_INET=y | ||
192 | CONFIG_IP_MULTICAST=y | ||
193 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
194 | CONFIG_IP_FIB_HASH=y | ||
195 | # CONFIG_IP_PNP is not set | ||
196 | # CONFIG_NET_IPIP is not set | ||
197 | # CONFIG_NET_IPGRE is not set | ||
198 | # CONFIG_IP_MROUTE is not set | ||
199 | CONFIG_ARPD=y | ||
200 | CONFIG_SYN_COOKIES=y | ||
201 | # CONFIG_INET_AH is not set | ||
202 | # CONFIG_INET_ESP is not set | ||
203 | # CONFIG_INET_IPCOMP is not set | ||
204 | # CONFIG_INET_TUNNEL is not set | ||
205 | CONFIG_INET_DIAG=y | ||
206 | CONFIG_INET_TCP_DIAG=y | ||
207 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
208 | CONFIG_TCP_CONG_BIC=y | ||
209 | # CONFIG_IPV6 is not set | ||
210 | # CONFIG_NETFILTER is not set | ||
211 | |||
212 | # | ||
213 | # DCCP Configuration (EXPERIMENTAL) | ||
214 | # | ||
215 | # CONFIG_IP_DCCP is not set | ||
216 | |||
217 | # | ||
218 | # SCTP Configuration (EXPERIMENTAL) | ||
219 | # | ||
220 | # CONFIG_IP_SCTP is not set | ||
221 | # CONFIG_ATM is not set | ||
222 | # CONFIG_BRIDGE is not set | ||
223 | # CONFIG_VLAN_8021Q is not set | ||
224 | # CONFIG_DECNET is not set | ||
225 | # CONFIG_LLC2 is not set | ||
226 | # CONFIG_IPX is not set | ||
227 | # CONFIG_ATALK is not set | ||
228 | # CONFIG_X25 is not set | ||
229 | # CONFIG_LAPB is not set | ||
230 | # CONFIG_NET_DIVERT is not set | ||
231 | # CONFIG_ECONET is not set | ||
232 | # CONFIG_WAN_ROUTER is not set | ||
233 | # CONFIG_NET_SCHED is not set | ||
234 | # CONFIG_NET_CLS_ROUTE is not set | ||
235 | |||
236 | # | ||
237 | # Network testing | ||
238 | # | ||
239 | # CONFIG_NET_PKTGEN is not set | ||
240 | # CONFIG_NETFILTER_NETLINK is not set | ||
241 | # CONFIG_HAMRADIO is not set | ||
242 | # CONFIG_IRDA is not set | ||
243 | # CONFIG_BT is not set | ||
244 | # CONFIG_IEEE80211 is not set | ||
245 | |||
246 | # | ||
164 | # Device Drivers | 247 | # Device Drivers |
165 | # | 248 | # |
166 | 249 | ||
@@ -169,10 +252,15 @@ CONFIG_HOTPLUG_PCI_ACPI=m | |||
169 | # | 252 | # |
170 | CONFIG_STANDALONE=y | 253 | CONFIG_STANDALONE=y |
171 | CONFIG_PREVENT_FIRMWARE_BUILD=y | 254 | CONFIG_PREVENT_FIRMWARE_BUILD=y |
172 | # CONFIG_FW_LOADER is not set | 255 | CONFIG_FW_LOADER=m |
173 | # CONFIG_DEBUG_DRIVER is not set | 256 | # CONFIG_DEBUG_DRIVER is not set |
174 | 257 | ||
175 | # | 258 | # |
259 | # Connector - unified userspace <-> kernelspace linker | ||
260 | # | ||
261 | # CONFIG_CONNECTOR is not set | ||
262 | |||
263 | # | ||
176 | # Memory Technology Devices (MTD) | 264 | # Memory Technology Devices (MTD) |
177 | # | 265 | # |
178 | # CONFIG_MTD is not set | 266 | # CONFIG_MTD is not set |
@@ -185,7 +273,13 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y | |||
185 | # | 273 | # |
186 | # Plug and Play support | 274 | # Plug and Play support |
187 | # | 275 | # |
188 | # CONFIG_PNP is not set | 276 | CONFIG_PNP=y |
277 | # CONFIG_PNP_DEBUG is not set | ||
278 | |||
279 | # | ||
280 | # Protocols | ||
281 | # | ||
282 | CONFIG_PNPACPI=y | ||
189 | 283 | ||
190 | # | 284 | # |
191 | # Block devices | 285 | # Block devices |
@@ -204,7 +298,6 @@ CONFIG_BLK_DEV_RAM=y | |||
204 | CONFIG_BLK_DEV_RAM_COUNT=16 | 298 | CONFIG_BLK_DEV_RAM_COUNT=16 |
205 | CONFIG_BLK_DEV_RAM_SIZE=4096 | 299 | CONFIG_BLK_DEV_RAM_SIZE=4096 |
206 | CONFIG_BLK_DEV_INITRD=y | 300 | CONFIG_BLK_DEV_INITRD=y |
207 | CONFIG_INITRAMFS_SOURCE="" | ||
208 | # CONFIG_CDROM_PKTCDVD is not set | 301 | # CONFIG_CDROM_PKTCDVD is not set |
209 | 302 | ||
210 | # | 303 | # |
@@ -237,7 +330,8 @@ CONFIG_BLK_DEV_IDESCSI=m | |||
237 | # | 330 | # |
238 | # IDE chipset support/bugfixes | 331 | # IDE chipset support/bugfixes |
239 | # | 332 | # |
240 | CONFIG_IDE_GENERIC=y | 333 | # CONFIG_IDE_GENERIC is not set |
334 | # CONFIG_BLK_DEV_IDEPNP is not set | ||
241 | CONFIG_BLK_DEV_IDEPCI=y | 335 | CONFIG_BLK_DEV_IDEPCI=y |
242 | # CONFIG_IDEPCI_SHARE_IRQ is not set | 336 | # CONFIG_IDEPCI_SHARE_IRQ is not set |
243 | # CONFIG_BLK_DEV_OFFBOARD is not set | 337 | # CONFIG_BLK_DEV_OFFBOARD is not set |
@@ -259,6 +353,7 @@ CONFIG_BLK_DEV_CMD64X=y | |||
259 | # CONFIG_BLK_DEV_HPT366 is not set | 353 | # CONFIG_BLK_DEV_HPT366 is not set |
260 | # CONFIG_BLK_DEV_SC1200 is not set | 354 | # CONFIG_BLK_DEV_SC1200 is not set |
261 | CONFIG_BLK_DEV_PIIX=y | 355 | CONFIG_BLK_DEV_PIIX=y |
356 | # CONFIG_BLK_DEV_IT821X is not set | ||
262 | # CONFIG_BLK_DEV_NS87415 is not set | 357 | # CONFIG_BLK_DEV_NS87415 is not set |
263 | # CONFIG_BLK_DEV_PDC202XX_OLD is not set | 358 | # CONFIG_BLK_DEV_PDC202XX_OLD is not set |
264 | # CONFIG_BLK_DEV_PDC202XX_NEW is not set | 359 | # CONFIG_BLK_DEV_PDC202XX_NEW is not set |
@@ -277,6 +372,7 @@ CONFIG_IDEDMA_AUTO=y | |||
277 | # | 372 | # |
278 | # SCSI device support | 373 | # SCSI device support |
279 | # | 374 | # |
375 | # CONFIG_RAID_ATTRS is not set | ||
280 | CONFIG_SCSI=y | 376 | CONFIG_SCSI=y |
281 | CONFIG_SCSI_PROC_FS=y | 377 | CONFIG_SCSI_PROC_FS=y |
282 | 378 | ||
@@ -304,6 +400,7 @@ CONFIG_CHR_DEV_SG=m | |||
304 | CONFIG_SCSI_SPI_ATTRS=y | 400 | CONFIG_SCSI_SPI_ATTRS=y |
305 | CONFIG_SCSI_FC_ATTRS=y | 401 | CONFIG_SCSI_FC_ATTRS=y |
306 | # CONFIG_SCSI_ISCSI_ATTRS is not set | 402 | # CONFIG_SCSI_ISCSI_ATTRS is not set |
403 | # CONFIG_SCSI_SAS_ATTRS is not set | ||
307 | 404 | ||
308 | # | 405 | # |
309 | # SCSI low-level drivers | 406 | # SCSI low-level drivers |
@@ -321,6 +418,7 @@ CONFIG_SCSI_SATA=y | |||
321 | # CONFIG_SCSI_SATA_AHCI is not set | 418 | # CONFIG_SCSI_SATA_AHCI is not set |
322 | # CONFIG_SCSI_SATA_SVW is not set | 419 | # CONFIG_SCSI_SATA_SVW is not set |
323 | # CONFIG_SCSI_ATA_PIIX is not set | 420 | # CONFIG_SCSI_ATA_PIIX is not set |
421 | # CONFIG_SCSI_SATA_MV is not set | ||
324 | # CONFIG_SCSI_SATA_NV is not set | 422 | # CONFIG_SCSI_SATA_NV is not set |
325 | # CONFIG_SCSI_SATA_PROMISE is not set | 423 | # CONFIG_SCSI_SATA_PROMISE is not set |
326 | # CONFIG_SCSI_SATA_QSTOR is not set | 424 | # CONFIG_SCSI_SATA_QSTOR is not set |
@@ -341,8 +439,7 @@ CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 | |||
341 | CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 | 439 | CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 |
342 | # CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set | 440 | # CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set |
343 | # CONFIG_SCSI_IPR is not set | 441 | # CONFIG_SCSI_IPR is not set |
344 | CONFIG_SCSI_QLOGIC_FC=y | 442 | # CONFIG_SCSI_QLOGIC_FC is not set |
345 | # CONFIG_SCSI_QLOGIC_FC_FIRMWARE is not set | ||
346 | CONFIG_SCSI_QLOGIC_1280=y | 443 | CONFIG_SCSI_QLOGIC_1280=y |
347 | # CONFIG_SCSI_QLOGIC_1280_1040 is not set | 444 | # CONFIG_SCSI_QLOGIC_1280_1040 is not set |
348 | CONFIG_SCSI_QLA2XXX=y | 445 | CONFIG_SCSI_QLA2XXX=y |
@@ -351,6 +448,7 @@ CONFIG_SCSI_QLA22XX=m | |||
351 | CONFIG_SCSI_QLA2300=m | 448 | CONFIG_SCSI_QLA2300=m |
352 | CONFIG_SCSI_QLA2322=m | 449 | CONFIG_SCSI_QLA2322=m |
353 | # CONFIG_SCSI_QLA6312 is not set | 450 | # CONFIG_SCSI_QLA6312 is not set |
451 | # CONFIG_SCSI_QLA24XX is not set | ||
354 | # CONFIG_SCSI_LPFC is not set | 452 | # CONFIG_SCSI_LPFC is not set |
355 | # CONFIG_SCSI_DC395x is not set | 453 | # CONFIG_SCSI_DC395x is not set |
356 | # CONFIG_SCSI_DC390T is not set | 454 | # CONFIG_SCSI_DC390T is not set |
@@ -397,74 +495,14 @@ CONFIG_FUSION_MAX_SGE=128 | |||
397 | # CONFIG_I2O is not set | 495 | # CONFIG_I2O is not set |
398 | 496 | ||
399 | # | 497 | # |
400 | # Networking support | 498 | # Network device support |
401 | # | ||
402 | CONFIG_NET=y | ||
403 | |||
404 | # | ||
405 | # Networking options | ||
406 | # | ||
407 | CONFIG_PACKET=y | ||
408 | # CONFIG_PACKET_MMAP is not set | ||
409 | CONFIG_UNIX=y | ||
410 | # CONFIG_NET_KEY is not set | ||
411 | CONFIG_INET=y | ||
412 | CONFIG_IP_MULTICAST=y | ||
413 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
414 | # CONFIG_IP_PNP is not set | ||
415 | # CONFIG_NET_IPIP is not set | ||
416 | # CONFIG_NET_IPGRE is not set | ||
417 | # CONFIG_IP_MROUTE is not set | ||
418 | CONFIG_ARPD=y | ||
419 | CONFIG_SYN_COOKIES=y | ||
420 | # CONFIG_INET_AH is not set | ||
421 | # CONFIG_INET_ESP is not set | ||
422 | # CONFIG_INET_IPCOMP is not set | ||
423 | # CONFIG_INET_TUNNEL is not set | ||
424 | CONFIG_IP_TCPDIAG=y | ||
425 | # CONFIG_IP_TCPDIAG_IPV6 is not set | ||
426 | # CONFIG_IPV6 is not set | ||
427 | # CONFIG_NETFILTER is not set | ||
428 | |||
429 | # | ||
430 | # SCTP Configuration (EXPERIMENTAL) | ||
431 | # | ||
432 | # CONFIG_IP_SCTP is not set | ||
433 | # CONFIG_ATM is not set | ||
434 | # CONFIG_BRIDGE is not set | ||
435 | # CONFIG_VLAN_8021Q is not set | ||
436 | # CONFIG_DECNET is not set | ||
437 | # CONFIG_LLC2 is not set | ||
438 | # CONFIG_IPX is not set | ||
439 | # CONFIG_ATALK is not set | ||
440 | # CONFIG_X25 is not set | ||
441 | # CONFIG_LAPB is not set | ||
442 | # CONFIG_NET_DIVERT is not set | ||
443 | # CONFIG_ECONET is not set | ||
444 | # CONFIG_WAN_ROUTER is not set | ||
445 | |||
446 | # | 499 | # |
447 | # QoS and/or fair queueing | ||
448 | # | ||
449 | # CONFIG_NET_SCHED is not set | ||
450 | # CONFIG_NET_CLS_ROUTE is not set | ||
451 | |||
452 | # | ||
453 | # Network testing | ||
454 | # | ||
455 | # CONFIG_NET_PKTGEN is not set | ||
456 | CONFIG_NETPOLL=y | ||
457 | # CONFIG_NETPOLL_RX is not set | ||
458 | # CONFIG_NETPOLL_TRAP is not set | ||
459 | CONFIG_NET_POLL_CONTROLLER=y | ||
460 | # CONFIG_HAMRADIO is not set | ||
461 | # CONFIG_IRDA is not set | ||
462 | # CONFIG_BT is not set | ||
463 | CONFIG_NETDEVICES=y | 500 | CONFIG_NETDEVICES=y |
464 | CONFIG_DUMMY=m | 501 | CONFIG_DUMMY=m |
465 | # CONFIG_BONDING is not set | 502 | # CONFIG_BONDING is not set |
466 | # CONFIG_EQUALIZER is not set | 503 | # CONFIG_EQUALIZER is not set |
467 | # CONFIG_TUN is not set | 504 | # CONFIG_TUN is not set |
505 | # CONFIG_NET_SB1000 is not set | ||
468 | 506 | ||
469 | # | 507 | # |
470 | # ARCnet devices | 508 | # ARCnet devices |
@@ -472,6 +510,11 @@ CONFIG_DUMMY=m | |||
472 | # CONFIG_ARCNET is not set | 510 | # CONFIG_ARCNET is not set |
473 | 511 | ||
474 | # | 512 | # |
513 | # PHY device support | ||
514 | # | ||
515 | # CONFIG_PHYLIB is not set | ||
516 | |||
517 | # | ||
475 | # Ethernet (10 or 100Mbit) | 518 | # Ethernet (10 or 100Mbit) |
476 | # | 519 | # |
477 | CONFIG_NET_ETHERNET=y | 520 | CONFIG_NET_ETHERNET=y |
@@ -492,6 +535,7 @@ CONFIG_TULIP=m | |||
492 | # CONFIG_DE4X5 is not set | 535 | # CONFIG_DE4X5 is not set |
493 | # CONFIG_WINBOND_840 is not set | 536 | # CONFIG_WINBOND_840 is not set |
494 | # CONFIG_DM9102 is not set | 537 | # CONFIG_DM9102 is not set |
538 | # CONFIG_ULI526X is not set | ||
495 | # CONFIG_HP100 is not set | 539 | # CONFIG_HP100 is not set |
496 | CONFIG_NET_PCI=y | 540 | CONFIG_NET_PCI=y |
497 | # CONFIG_PCNET32 is not set | 541 | # CONFIG_PCNET32 is not set |
@@ -523,6 +567,7 @@ CONFIG_E1000=y | |||
523 | # CONFIG_HAMACHI is not set | 567 | # CONFIG_HAMACHI is not set |
524 | # CONFIG_YELLOWFIN is not set | 568 | # CONFIG_YELLOWFIN is not set |
525 | # CONFIG_R8169 is not set | 569 | # CONFIG_R8169 is not set |
570 | # CONFIG_SIS190 is not set | ||
526 | # CONFIG_SKGE is not set | 571 | # CONFIG_SKGE is not set |
527 | # CONFIG_SK98LIN is not set | 572 | # CONFIG_SK98LIN is not set |
528 | # CONFIG_VIA_VELOCITY is not set | 573 | # CONFIG_VIA_VELOCITY is not set |
@@ -532,6 +577,7 @@ CONFIG_TIGON3=y | |||
532 | # | 577 | # |
533 | # Ethernet (10000 Mbit) | 578 | # Ethernet (10000 Mbit) |
534 | # | 579 | # |
580 | # CONFIG_CHELSIO_T1 is not set | ||
535 | # CONFIG_IXGB is not set | 581 | # CONFIG_IXGB is not set |
536 | # CONFIG_S2IO is not set | 582 | # CONFIG_S2IO is not set |
537 | 583 | ||
@@ -556,6 +602,10 @@ CONFIG_TIGON3=y | |||
556 | # CONFIG_NET_FC is not set | 602 | # CONFIG_NET_FC is not set |
557 | # CONFIG_SHAPER is not set | 603 | # CONFIG_SHAPER is not set |
558 | CONFIG_NETCONSOLE=y | 604 | CONFIG_NETCONSOLE=y |
605 | CONFIG_NETPOLL=y | ||
606 | # CONFIG_NETPOLL_RX is not set | ||
607 | # CONFIG_NETPOLL_TRAP is not set | ||
608 | CONFIG_NET_POLL_CONTROLLER=y | ||
559 | 609 | ||
560 | # | 610 | # |
561 | # ISDN subsystem | 611 | # ISDN subsystem |
@@ -614,9 +664,7 @@ CONFIG_GAMEPORT=m | |||
614 | # CONFIG_GAMEPORT_NS558 is not set | 664 | # CONFIG_GAMEPORT_NS558 is not set |
615 | # CONFIG_GAMEPORT_L4 is not set | 665 | # CONFIG_GAMEPORT_L4 is not set |
616 | # CONFIG_GAMEPORT_EMU10K1 is not set | 666 | # CONFIG_GAMEPORT_EMU10K1 is not set |
617 | # CONFIG_GAMEPORT_VORTEX is not set | ||
618 | # CONFIG_GAMEPORT_FM801 is not set | 667 | # CONFIG_GAMEPORT_FM801 is not set |
619 | # CONFIG_GAMEPORT_CS461X is not set | ||
620 | 668 | ||
621 | # | 669 | # |
622 | # Character devices | 670 | # Character devices |
@@ -627,6 +675,7 @@ CONFIG_HW_CONSOLE=y | |||
627 | CONFIG_SERIAL_NONSTANDARD=y | 675 | CONFIG_SERIAL_NONSTANDARD=y |
628 | # CONFIG_ROCKETPORT is not set | 676 | # CONFIG_ROCKETPORT is not set |
629 | # CONFIG_CYCLADES is not set | 677 | # CONFIG_CYCLADES is not set |
678 | # CONFIG_DIGIEPCA is not set | ||
630 | # CONFIG_MOXA_SMARTIO is not set | 679 | # CONFIG_MOXA_SMARTIO is not set |
631 | # CONFIG_ISI is not set | 680 | # CONFIG_ISI is not set |
632 | # CONFIG_SYNCLINKMP is not set | 681 | # CONFIG_SYNCLINKMP is not set |
@@ -648,7 +697,6 @@ CONFIG_SERIAL_8250_NR_UARTS=6 | |||
648 | CONFIG_SERIAL_8250_EXTENDED=y | 697 | CONFIG_SERIAL_8250_EXTENDED=y |
649 | CONFIG_SERIAL_8250_SHARE_IRQ=y | 698 | CONFIG_SERIAL_8250_SHARE_IRQ=y |
650 | # CONFIG_SERIAL_8250_DETECT_IRQ is not set | 699 | # CONFIG_SERIAL_8250_DETECT_IRQ is not set |
651 | # CONFIG_SERIAL_8250_MULTIPORT is not set | ||
652 | # CONFIG_SERIAL_8250_RSA is not set | 700 | # CONFIG_SERIAL_8250_RSA is not set |
653 | 701 | ||
654 | # | 702 | # |
@@ -657,8 +705,8 @@ CONFIG_SERIAL_8250_SHARE_IRQ=y | |||
657 | CONFIG_SERIAL_CORE=y | 705 | CONFIG_SERIAL_CORE=y |
658 | CONFIG_SERIAL_CORE_CONSOLE=y | 706 | CONFIG_SERIAL_CORE_CONSOLE=y |
659 | CONFIG_SERIAL_SGI_L1_CONSOLE=y | 707 | CONFIG_SERIAL_SGI_L1_CONSOLE=y |
660 | CONFIG_SERIAL_SGI_IOC4=y | ||
661 | # CONFIG_SERIAL_JSM is not set | 708 | # CONFIG_SERIAL_JSM is not set |
709 | CONFIG_SERIAL_SGI_IOC4=y | ||
662 | CONFIG_UNIX98_PTYS=y | 710 | CONFIG_UNIX98_PTYS=y |
663 | CONFIG_LEGACY_PTYS=y | 711 | CONFIG_LEGACY_PTYS=y |
664 | CONFIG_LEGACY_PTY_COUNT=256 | 712 | CONFIG_LEGACY_PTY_COUNT=256 |
@@ -691,6 +739,8 @@ CONFIG_DRM_R128=m | |||
691 | CONFIG_DRM_RADEON=m | 739 | CONFIG_DRM_RADEON=m |
692 | CONFIG_DRM_MGA=m | 740 | CONFIG_DRM_MGA=m |
693 | CONFIG_DRM_SIS=m | 741 | CONFIG_DRM_SIS=m |
742 | # CONFIG_DRM_VIA is not set | ||
743 | # CONFIG_DRM_SAVAGE is not set | ||
694 | CONFIG_RAW_DRIVER=m | 744 | CONFIG_RAW_DRIVER=m |
695 | CONFIG_HPET=y | 745 | CONFIG_HPET=y |
696 | # CONFIG_HPET_RTC_IRQ is not set | 746 | # CONFIG_HPET_RTC_IRQ is not set |
@@ -715,10 +765,21 @@ CONFIG_MMTIMER=y | |||
715 | # CONFIG_W1 is not set | 765 | # CONFIG_W1 is not set |
716 | 766 | ||
717 | # | 767 | # |
768 | # Hardware Monitoring support | ||
769 | # | ||
770 | CONFIG_HWMON=y | ||
771 | # CONFIG_HWMON_VID is not set | ||
772 | # CONFIG_HWMON_DEBUG_CHIP is not set | ||
773 | |||
774 | # | ||
718 | # Misc devices | 775 | # Misc devices |
719 | # | 776 | # |
720 | 777 | ||
721 | # | 778 | # |
779 | # Multimedia Capabilities Port drivers | ||
780 | # | ||
781 | |||
782 | # | ||
722 | # Multimedia devices | 783 | # Multimedia devices |
723 | # | 784 | # |
724 | # CONFIG_VIDEO_DEV is not set | 785 | # CONFIG_VIDEO_DEV is not set |
@@ -760,6 +821,7 @@ CONFIG_SND_PCM_OSS=m | |||
760 | CONFIG_SND_SEQUENCER_OSS=y | 821 | CONFIG_SND_SEQUENCER_OSS=y |
761 | CONFIG_SND_VERBOSE_PRINTK=y | 822 | CONFIG_SND_VERBOSE_PRINTK=y |
762 | # CONFIG_SND_DEBUG is not set | 823 | # CONFIG_SND_DEBUG is not set |
824 | CONFIG_SND_GENERIC_DRIVER=y | ||
763 | 825 | ||
764 | # | 826 | # |
765 | # Generic devices | 827 | # Generic devices |
@@ -771,11 +833,12 @@ CONFIG_SND_VIRMIDI=m | |||
771 | CONFIG_SND_MTPAV=m | 833 | CONFIG_SND_MTPAV=m |
772 | CONFIG_SND_SERIAL_U16550=m | 834 | CONFIG_SND_SERIAL_U16550=m |
773 | CONFIG_SND_MPU401=m | 835 | CONFIG_SND_MPU401=m |
836 | CONFIG_SND_AC97_CODEC=m | ||
837 | CONFIG_SND_AC97_BUS=m | ||
774 | 838 | ||
775 | # | 839 | # |
776 | # PCI devices | 840 | # PCI devices |
777 | # | 841 | # |
778 | CONFIG_SND_AC97_CODEC=m | ||
779 | # CONFIG_SND_ALI5451 is not set | 842 | # CONFIG_SND_ALI5451 is not set |
780 | # CONFIG_SND_ATIIXP is not set | 843 | # CONFIG_SND_ATIIXP is not set |
781 | # CONFIG_SND_ATIIXP_MODEM is not set | 844 | # CONFIG_SND_ATIIXP_MODEM is not set |
@@ -797,9 +860,10 @@ CONFIG_SND_EMU10K1=m | |||
797 | # CONFIG_SND_RME96 is not set | 860 | # CONFIG_SND_RME96 is not set |
798 | # CONFIG_SND_RME9652 is not set | 861 | # CONFIG_SND_RME9652 is not set |
799 | # CONFIG_SND_HDSP is not set | 862 | # CONFIG_SND_HDSP is not set |
863 | # CONFIG_SND_HDSPM is not set | ||
800 | # CONFIG_SND_TRIDENT is not set | 864 | # CONFIG_SND_TRIDENT is not set |
801 | # CONFIG_SND_YMFPCI is not set | 865 | # CONFIG_SND_YMFPCI is not set |
802 | # CONFIG_SND_ALS4000 is not set | 866 | # CONFIG_SND_AD1889 is not set |
803 | # CONFIG_SND_CMIPCI is not set | 867 | # CONFIG_SND_CMIPCI is not set |
804 | # CONFIG_SND_ENS1370 is not set | 868 | # CONFIG_SND_ENS1370 is not set |
805 | # CONFIG_SND_ENS1371 is not set | 869 | # CONFIG_SND_ENS1371 is not set |
@@ -851,6 +915,7 @@ CONFIG_USB_DEVICEFS=y | |||
851 | CONFIG_USB_EHCI_HCD=m | 915 | CONFIG_USB_EHCI_HCD=m |
852 | # CONFIG_USB_EHCI_SPLIT_ISO is not set | 916 | # CONFIG_USB_EHCI_SPLIT_ISO is not set |
853 | # CONFIG_USB_EHCI_ROOT_HUB_TT is not set | 917 | # CONFIG_USB_EHCI_ROOT_HUB_TT is not set |
918 | # CONFIG_USB_ISP116X_HCD is not set | ||
854 | CONFIG_USB_OHCI_HCD=m | 919 | CONFIG_USB_OHCI_HCD=m |
855 | # CONFIG_USB_OHCI_BIG_ENDIAN is not set | 920 | # CONFIG_USB_OHCI_BIG_ENDIAN is not set |
856 | CONFIG_USB_OHCI_LITTLE_ENDIAN=y | 921 | CONFIG_USB_OHCI_LITTLE_ENDIAN=y |
@@ -860,9 +925,8 @@ CONFIG_USB_UHCI_HCD=m | |||
860 | # | 925 | # |
861 | # USB Device Class drivers | 926 | # USB Device Class drivers |
862 | # | 927 | # |
863 | # CONFIG_USB_AUDIO is not set | 928 | # CONFIG_OBSOLETE_OSS_USB_DRIVER is not set |
864 | # CONFIG_USB_BLUETOOTH_TTY is not set | 929 | # CONFIG_USB_BLUETOOTH_TTY is not set |
865 | # CONFIG_USB_MIDI is not set | ||
866 | # CONFIG_USB_ACM is not set | 930 | # CONFIG_USB_ACM is not set |
867 | # CONFIG_USB_PRINTER is not set | 931 | # CONFIG_USB_PRINTER is not set |
868 | 932 | ||
@@ -895,12 +959,17 @@ CONFIG_USB_HIDINPUT=y | |||
895 | # CONFIG_USB_MOUSE is not set | 959 | # CONFIG_USB_MOUSE is not set |
896 | # CONFIG_USB_AIPTEK is not set | 960 | # CONFIG_USB_AIPTEK is not set |
897 | # CONFIG_USB_WACOM is not set | 961 | # CONFIG_USB_WACOM is not set |
962 | # CONFIG_USB_ACECAD is not set | ||
898 | # CONFIG_USB_KBTAB is not set | 963 | # CONFIG_USB_KBTAB is not set |
899 | # CONFIG_USB_POWERMATE is not set | 964 | # CONFIG_USB_POWERMATE is not set |
900 | # CONFIG_USB_MTOUCH is not set | 965 | # CONFIG_USB_MTOUCH is not set |
966 | # CONFIG_USB_ITMTOUCH is not set | ||
901 | # CONFIG_USB_EGALAX is not set | 967 | # CONFIG_USB_EGALAX is not set |
968 | # CONFIG_USB_YEALINK is not set | ||
902 | # CONFIG_USB_XPAD is not set | 969 | # CONFIG_USB_XPAD is not set |
903 | # CONFIG_USB_ATI_REMOTE is not set | 970 | # CONFIG_USB_ATI_REMOTE is not set |
971 | # CONFIG_USB_KEYSPAN_REMOTE is not set | ||
972 | # CONFIG_USB_APPLETOUCH is not set | ||
904 | 973 | ||
905 | # | 974 | # |
906 | # USB Imaging devices | 975 | # USB Imaging devices |
@@ -925,7 +994,7 @@ CONFIG_USB_HIDINPUT=y | |||
925 | # CONFIG_USB_PEGASUS is not set | 994 | # CONFIG_USB_PEGASUS is not set |
926 | # CONFIG_USB_RTL8150 is not set | 995 | # CONFIG_USB_RTL8150 is not set |
927 | # CONFIG_USB_USBNET is not set | 996 | # CONFIG_USB_USBNET is not set |
928 | CONFIG_USB_MON=m | 997 | CONFIG_USB_MON=y |
929 | 998 | ||
930 | # | 999 | # |
931 | # USB port drivers | 1000 | # USB port drivers |
@@ -951,10 +1020,11 @@ CONFIG_USB_MON=m | |||
951 | # CONFIG_USB_PHIDGETSERVO is not set | 1020 | # CONFIG_USB_PHIDGETSERVO is not set |
952 | # CONFIG_USB_IDMOUSE is not set | 1021 | # CONFIG_USB_IDMOUSE is not set |
953 | # CONFIG_USB_SISUSBVGA is not set | 1022 | # CONFIG_USB_SISUSBVGA is not set |
1023 | # CONFIG_USB_LD is not set | ||
954 | # CONFIG_USB_TEST is not set | 1024 | # CONFIG_USB_TEST is not set |
955 | 1025 | ||
956 | # | 1026 | # |
957 | # USB ATM/DSL drivers | 1027 | # USB DSL modem support |
958 | # | 1028 | # |
959 | 1029 | ||
960 | # | 1030 | # |
@@ -971,6 +1041,8 @@ CONFIG_USB_MON=m | |||
971 | # InfiniBand support | 1041 | # InfiniBand support |
972 | # | 1042 | # |
973 | CONFIG_INFINIBAND=m | 1043 | CONFIG_INFINIBAND=m |
1044 | # CONFIG_INFINIBAND_USER_MAD is not set | ||
1045 | # CONFIG_INFINIBAND_USER_ACCESS is not set | ||
974 | CONFIG_INFINIBAND_MTHCA=m | 1046 | CONFIG_INFINIBAND_MTHCA=m |
975 | # CONFIG_INFINIBAND_MTHCA_DEBUG is not set | 1047 | # CONFIG_INFINIBAND_MTHCA_DEBUG is not set |
976 | CONFIG_INFINIBAND_IPOIB=m | 1048 | CONFIG_INFINIBAND_IPOIB=m |
@@ -988,6 +1060,7 @@ CONFIG_EXT2_FS=y | |||
988 | CONFIG_EXT2_FS_XATTR=y | 1060 | CONFIG_EXT2_FS_XATTR=y |
989 | CONFIG_EXT2_FS_POSIX_ACL=y | 1061 | CONFIG_EXT2_FS_POSIX_ACL=y |
990 | CONFIG_EXT2_FS_SECURITY=y | 1062 | CONFIG_EXT2_FS_SECURITY=y |
1063 | # CONFIG_EXT2_FS_XIP is not set | ||
991 | CONFIG_EXT3_FS=y | 1064 | CONFIG_EXT3_FS=y |
992 | CONFIG_EXT3_FS_XATTR=y | 1065 | CONFIG_EXT3_FS_XATTR=y |
993 | CONFIG_EXT3_FS_POSIX_ACL=y | 1066 | CONFIG_EXT3_FS_POSIX_ACL=y |
@@ -1003,22 +1076,20 @@ CONFIG_REISERFS_FS_POSIX_ACL=y | |||
1003 | CONFIG_REISERFS_FS_SECURITY=y | 1076 | CONFIG_REISERFS_FS_SECURITY=y |
1004 | # CONFIG_JFS_FS is not set | 1077 | # CONFIG_JFS_FS is not set |
1005 | CONFIG_FS_POSIX_ACL=y | 1078 | CONFIG_FS_POSIX_ACL=y |
1006 | |||
1007 | # | ||
1008 | # XFS support | ||
1009 | # | ||
1010 | CONFIG_XFS_FS=y | 1079 | CONFIG_XFS_FS=y |
1011 | CONFIG_XFS_EXPORT=y | 1080 | CONFIG_XFS_EXPORT=y |
1012 | # CONFIG_XFS_RT is not set | ||
1013 | # CONFIG_XFS_QUOTA is not set | 1081 | # CONFIG_XFS_QUOTA is not set |
1014 | # CONFIG_XFS_SECURITY is not set | 1082 | # CONFIG_XFS_SECURITY is not set |
1015 | # CONFIG_XFS_POSIX_ACL is not set | 1083 | # CONFIG_XFS_POSIX_ACL is not set |
1084 | # CONFIG_XFS_RT is not set | ||
1016 | # CONFIG_MINIX_FS is not set | 1085 | # CONFIG_MINIX_FS is not set |
1017 | # CONFIG_ROMFS_FS is not set | 1086 | # CONFIG_ROMFS_FS is not set |
1087 | CONFIG_INOTIFY=y | ||
1018 | # CONFIG_QUOTA is not set | 1088 | # CONFIG_QUOTA is not set |
1019 | CONFIG_DNOTIFY=y | 1089 | CONFIG_DNOTIFY=y |
1020 | CONFIG_AUTOFS_FS=y | 1090 | CONFIG_AUTOFS_FS=y |
1021 | CONFIG_AUTOFS4_FS=y | 1091 | CONFIG_AUTOFS4_FS=y |
1092 | # CONFIG_FUSE_FS is not set | ||
1022 | 1093 | ||
1023 | # | 1094 | # |
1024 | # CD-ROM/DVD Filesystems | 1095 | # CD-ROM/DVD Filesystems |
@@ -1047,14 +1118,11 @@ CONFIG_NTFS_FS=m | |||
1047 | CONFIG_PROC_FS=y | 1118 | CONFIG_PROC_FS=y |
1048 | CONFIG_PROC_KCORE=y | 1119 | CONFIG_PROC_KCORE=y |
1049 | CONFIG_SYSFS=y | 1120 | CONFIG_SYSFS=y |
1050 | # CONFIG_DEVFS_FS is not set | ||
1051 | # CONFIG_DEVPTS_FS_XATTR is not set | ||
1052 | CONFIG_TMPFS=y | 1121 | CONFIG_TMPFS=y |
1053 | CONFIG_TMPFS_XATTR=y | ||
1054 | CONFIG_TMPFS_SECURITY=y | ||
1055 | CONFIG_HUGETLBFS=y | 1122 | CONFIG_HUGETLBFS=y |
1056 | CONFIG_HUGETLB_PAGE=y | 1123 | CONFIG_HUGETLB_PAGE=y |
1057 | CONFIG_RAMFS=y | 1124 | CONFIG_RAMFS=y |
1125 | # CONFIG_RELAYFS_FS is not set | ||
1058 | 1126 | ||
1059 | # | 1127 | # |
1060 | # Miscellaneous filesystems | 1128 | # Miscellaneous filesystems |
@@ -1078,15 +1146,18 @@ CONFIG_RAMFS=y | |||
1078 | # | 1146 | # |
1079 | CONFIG_NFS_FS=m | 1147 | CONFIG_NFS_FS=m |
1080 | CONFIG_NFS_V3=y | 1148 | CONFIG_NFS_V3=y |
1149 | # CONFIG_NFS_V3_ACL is not set | ||
1081 | CONFIG_NFS_V4=y | 1150 | CONFIG_NFS_V4=y |
1082 | CONFIG_NFS_DIRECTIO=y | 1151 | CONFIG_NFS_DIRECTIO=y |
1083 | CONFIG_NFSD=m | 1152 | CONFIG_NFSD=m |
1084 | CONFIG_NFSD_V3=y | 1153 | CONFIG_NFSD_V3=y |
1154 | # CONFIG_NFSD_V3_ACL is not set | ||
1085 | CONFIG_NFSD_V4=y | 1155 | CONFIG_NFSD_V4=y |
1086 | CONFIG_NFSD_TCP=y | 1156 | CONFIG_NFSD_TCP=y |
1087 | CONFIG_LOCKD=m | 1157 | CONFIG_LOCKD=m |
1088 | CONFIG_LOCKD_V4=y | 1158 | CONFIG_LOCKD_V4=y |
1089 | CONFIG_EXPORTFS=y | 1159 | CONFIG_EXPORTFS=y |
1160 | CONFIG_NFS_COMMON=y | ||
1090 | CONFIG_SUNRPC=m | 1161 | CONFIG_SUNRPC=m |
1091 | CONFIG_SUNRPC_GSS=m | 1162 | CONFIG_SUNRPC_GSS=m |
1092 | CONFIG_RPCSEC_GSS_KRB5=m | 1163 | CONFIG_RPCSEC_GSS_KRB5=m |
@@ -1101,6 +1172,7 @@ CONFIG_CIFS=m | |||
1101 | # CONFIG_NCP_FS is not set | 1172 | # CONFIG_NCP_FS is not set |
1102 | # CONFIG_CODA_FS is not set | 1173 | # CONFIG_CODA_FS is not set |
1103 | # CONFIG_AFS_FS is not set | 1174 | # CONFIG_AFS_FS is not set |
1175 | # CONFIG_9P_FS is not set | ||
1104 | 1176 | ||
1105 | # | 1177 | # |
1106 | # Partition Types | 1178 | # Partition Types |
@@ -1170,10 +1242,12 @@ CONFIG_NLS_UTF8=m | |||
1170 | # Library routines | 1242 | # Library routines |
1171 | # | 1243 | # |
1172 | # CONFIG_CRC_CCITT is not set | 1244 | # CONFIG_CRC_CCITT is not set |
1245 | # CONFIG_CRC16 is not set | ||
1173 | CONFIG_CRC32=y | 1246 | CONFIG_CRC32=y |
1174 | # CONFIG_LIBCRC32C is not set | 1247 | # CONFIG_LIBCRC32C is not set |
1175 | CONFIG_GENERIC_HARDIRQS=y | 1248 | CONFIG_GENERIC_HARDIRQS=y |
1176 | CONFIG_GENERIC_IRQ_PROBE=y | 1249 | CONFIG_GENERIC_IRQ_PROBE=y |
1250 | CONFIG_GENERIC_PENDING_IRQ=y | ||
1177 | 1251 | ||
1178 | # | 1252 | # |
1179 | # HP Simulator drivers | 1253 | # HP Simulator drivers |
@@ -1194,6 +1268,7 @@ CONFIG_GENERIC_IRQ_PROBE=y | |||
1194 | CONFIG_DEBUG_KERNEL=y | 1268 | CONFIG_DEBUG_KERNEL=y |
1195 | CONFIG_MAGIC_SYSRQ=y | 1269 | CONFIG_MAGIC_SYSRQ=y |
1196 | CONFIG_LOG_BUF_SHIFT=20 | 1270 | CONFIG_LOG_BUF_SHIFT=20 |
1271 | CONFIG_DETECT_SOFTLOCKUP=y | ||
1197 | # CONFIG_SCHEDSTATS is not set | 1272 | # CONFIG_SCHEDSTATS is not set |
1198 | # CONFIG_DEBUG_SLAB is not set | 1273 | # CONFIG_DEBUG_SLAB is not set |
1199 | # CONFIG_DEBUG_SPINLOCK is not set | 1274 | # CONFIG_DEBUG_SPINLOCK is not set |
@@ -1201,6 +1276,7 @@ CONFIG_LOG_BUF_SHIFT=20 | |||
1201 | # CONFIG_DEBUG_KOBJECT is not set | 1276 | # CONFIG_DEBUG_KOBJECT is not set |
1202 | # CONFIG_DEBUG_INFO is not set | 1277 | # CONFIG_DEBUG_INFO is not set |
1203 | # CONFIG_DEBUG_FS is not set | 1278 | # CONFIG_DEBUG_FS is not set |
1279 | # CONFIG_KPROBES is not set | ||
1204 | CONFIG_IA64_GRANULE_16MB=y | 1280 | CONFIG_IA64_GRANULE_16MB=y |
1205 | # CONFIG_IA64_GRANULE_64MB is not set | 1281 | # CONFIG_IA64_GRANULE_64MB is not set |
1206 | # CONFIG_IA64_PRINT_HAZARDS is not set | 1282 | # CONFIG_IA64_PRINT_HAZARDS is not set |
@@ -1222,7 +1298,7 @@ CONFIG_CRYPTO=y | |||
1222 | # CONFIG_CRYPTO_HMAC is not set | 1298 | # CONFIG_CRYPTO_HMAC is not set |
1223 | # CONFIG_CRYPTO_NULL is not set | 1299 | # CONFIG_CRYPTO_NULL is not set |
1224 | # CONFIG_CRYPTO_MD4 is not set | 1300 | # CONFIG_CRYPTO_MD4 is not set |
1225 | CONFIG_CRYPTO_MD5=m | 1301 | CONFIG_CRYPTO_MD5=y |
1226 | # CONFIG_CRYPTO_SHA1 is not set | 1302 | # CONFIG_CRYPTO_SHA1 is not set |
1227 | # CONFIG_CRYPTO_SHA256 is not set | 1303 | # CONFIG_CRYPTO_SHA256 is not set |
1228 | # CONFIG_CRYPTO_SHA512 is not set | 1304 | # CONFIG_CRYPTO_SHA512 is not set |
diff --git a/arch/ia64/hp/common/hwsw_iommu.c b/arch/ia64/hp/common/hwsw_iommu.c index 80f8ef013939..317c334c5a18 100644 --- a/arch/ia64/hp/common/hwsw_iommu.c +++ b/arch/ia64/hp/common/hwsw_iommu.c | |||
@@ -17,7 +17,7 @@ | |||
17 | #include <asm/machvec.h> | 17 | #include <asm/machvec.h> |
18 | 18 | ||
19 | /* swiotlb declarations & definitions: */ | 19 | /* swiotlb declarations & definitions: */ |
20 | extern void swiotlb_init_with_default_size (size_t size); | 20 | extern int swiotlb_late_init_with_default_size (size_t size); |
21 | extern ia64_mv_dma_alloc_coherent swiotlb_alloc_coherent; | 21 | extern ia64_mv_dma_alloc_coherent swiotlb_alloc_coherent; |
22 | extern ia64_mv_dma_free_coherent swiotlb_free_coherent; | 22 | extern ia64_mv_dma_free_coherent swiotlb_free_coherent; |
23 | extern ia64_mv_dma_map_single swiotlb_map_single; | 23 | extern ia64_mv_dma_map_single swiotlb_map_single; |
@@ -67,7 +67,16 @@ void | |||
67 | hwsw_init (void) | 67 | hwsw_init (void) |
68 | { | 68 | { |
69 | /* default to a smallish 2MB sw I/O TLB */ | 69 | /* default to a smallish 2MB sw I/O TLB */ |
70 | swiotlb_init_with_default_size (2 * (1<<20)); | 70 | if (swiotlb_late_init_with_default_size (2 * (1<<20)) != 0) { |
71 | #ifdef CONFIG_IA64_GENERIC | ||
72 | /* Better to have normal DMA than panic */ | ||
73 | printk(KERN_WARNING "%s: Failed to initialize software I/O TLB," | ||
74 | " reverting to hpzx1 platform vector\n", __FUNCTION__); | ||
75 | machvec_init("hpzx1"); | ||
76 | #else | ||
77 | panic("Unable to initialize software I/O TLB services"); | ||
78 | #endif | ||
79 | } | ||
71 | } | 80 | } |
72 | 81 | ||
73 | void * | 82 | void * |
diff --git a/arch/ia64/hp/common/sba_iommu.c b/arch/ia64/hp/common/sba_iommu.c index 11957598a8b9..e64ca04ace89 100644 --- a/arch/ia64/hp/common/sba_iommu.c +++ b/arch/ia64/hp/common/sba_iommu.c | |||
@@ -2028,9 +2028,40 @@ static struct acpi_driver acpi_sba_ioc_driver = { | |||
2028 | static int __init | 2028 | static int __init |
2029 | sba_init(void) | 2029 | sba_init(void) |
2030 | { | 2030 | { |
2031 | if (!ia64_platform_is("hpzx1") && !ia64_platform_is("hpzx1_swiotlb")) | ||
2032 | return 0; | ||
2033 | |||
2031 | acpi_bus_register_driver(&acpi_sba_ioc_driver); | 2034 | acpi_bus_register_driver(&acpi_sba_ioc_driver); |
2032 | if (!ioc_list) | 2035 | if (!ioc_list) { |
2036 | #ifdef CONFIG_IA64_GENERIC | ||
2037 | extern int swiotlb_late_init_with_default_size (size_t size); | ||
2038 | |||
2039 | /* | ||
2040 | * If we didn't find something sba_iommu can claim, we | ||
2041 | * need to setup the swiotlb and switch to the dig machvec. | ||
2042 | */ | ||
2043 | if (swiotlb_late_init_with_default_size(64 * (1<<20)) != 0) | ||
2044 | panic("Unable to find SBA IOMMU or initialize " | ||
2045 | "software I/O TLB: Try machvec=dig boot option"); | ||
2046 | machvec_init("dig"); | ||
2047 | #else | ||
2048 | panic("Unable to find SBA IOMMU: Try a generic or DIG kernel"); | ||
2049 | #endif | ||
2033 | return 0; | 2050 | return 0; |
2051 | } | ||
2052 | |||
2053 | #if defined(CONFIG_IA64_GENERIC) || defined(CONFIG_IA64_HP_ZX1_SWIOTLB) | ||
2054 | /* | ||
2055 | * hpzx1_swiotlb needs to have a fairly small swiotlb bounce | ||
2056 | * buffer setup to support devices with smaller DMA masks than | ||
2057 | * sba_iommu can handle. | ||
2058 | */ | ||
2059 | if (ia64_platform_is("hpzx1_swiotlb")) { | ||
2060 | extern void hwsw_init(void); | ||
2061 | |||
2062 | hwsw_init(); | ||
2063 | } | ||
2064 | #endif | ||
2034 | 2065 | ||
2035 | #ifdef CONFIG_PCI | 2066 | #ifdef CONFIG_PCI |
2036 | { | 2067 | { |
@@ -2048,18 +2079,6 @@ sba_init(void) | |||
2048 | 2079 | ||
2049 | subsys_initcall(sba_init); /* must be initialized after ACPI etc., but before any drivers... */ | 2080 | subsys_initcall(sba_init); /* must be initialized after ACPI etc., but before any drivers... */ |
2050 | 2081 | ||
2051 | extern void dig_setup(char**); | ||
2052 | /* | ||
2053 | * MAX_DMA_ADDRESS needs to be setup prior to paging_init to do any good, | ||
2054 | * so we use the platform_setup hook to fix it up. | ||
2055 | */ | ||
2056 | void __init | ||
2057 | sba_setup(char **cmdline_p) | ||
2058 | { | ||
2059 | MAX_DMA_ADDRESS = ~0UL; | ||
2060 | dig_setup(cmdline_p); | ||
2061 | } | ||
2062 | |||
2063 | static int __init | 2082 | static int __init |
2064 | nosbagart(char *str) | 2083 | nosbagart(char *str) |
2065 | { | 2084 | { |
diff --git a/arch/ia64/hp/sim/boot/boot_head.S b/arch/ia64/hp/sim/boot/boot_head.S index 1c8c7e6a9a5e..a9bd71ac78e2 100644 --- a/arch/ia64/hp/sim/boot/boot_head.S +++ b/arch/ia64/hp/sim/boot/boot_head.S | |||
@@ -4,6 +4,7 @@ | |||
4 | */ | 4 | */ |
5 | 5 | ||
6 | #include <asm/asmmacro.h> | 6 | #include <asm/asmmacro.h> |
7 | #include <asm/pal.h> | ||
7 | 8 | ||
8 | .bss | 9 | .bss |
9 | .align 16 | 10 | .align 16 |
@@ -49,7 +50,11 @@ GLOBAL_ENTRY(jmp_to_kernel) | |||
49 | br.sptk.few b7 | 50 | br.sptk.few b7 |
50 | END(jmp_to_kernel) | 51 | END(jmp_to_kernel) |
51 | 52 | ||
52 | 53 | /* | |
54 | * r28 contains the index of the PAL function | ||
55 | * r29--31 the args | ||
56 | * Return values in ret0--3 (r8--11) | ||
57 | */ | ||
53 | GLOBAL_ENTRY(pal_emulator_static) | 58 | GLOBAL_ENTRY(pal_emulator_static) |
54 | mov r8=-1 | 59 | mov r8=-1 |
55 | mov r9=256 | 60 | mov r9=256 |
@@ -62,7 +67,7 @@ GLOBAL_ENTRY(pal_emulator_static) | |||
62 | cmp.gtu p6,p7=r9,r28 | 67 | cmp.gtu p6,p7=r9,r28 |
63 | (p6) br.cond.sptk.few stacked | 68 | (p6) br.cond.sptk.few stacked |
64 | ;; | 69 | ;; |
65 | static: cmp.eq p6,p7=6,r28 /* PAL_PTCE_INFO */ | 70 | static: cmp.eq p6,p7=PAL_PTCE_INFO,r28 |
66 | (p7) br.cond.sptk.few 1f | 71 | (p7) br.cond.sptk.few 1f |
67 | ;; | 72 | ;; |
68 | mov r8=0 /* status = 0 */ | 73 | mov r8=0 /* status = 0 */ |
@@ -70,21 +75,21 @@ static: cmp.eq p6,p7=6,r28 /* PAL_PTCE_INFO */ | |||
70 | movl r10=0x0000000200000003 /* count[0], count[1] */ | 75 | movl r10=0x0000000200000003 /* count[0], count[1] */ |
71 | movl r11=0x1000000000002000 /* stride[0], stride[1] */ | 76 | movl r11=0x1000000000002000 /* stride[0], stride[1] */ |
72 | br.cond.sptk.few rp | 77 | br.cond.sptk.few rp |
73 | 1: cmp.eq p6,p7=14,r28 /* PAL_FREQ_RATIOS */ | 78 | 1: cmp.eq p6,p7=PAL_FREQ_RATIOS,r28 |
74 | (p7) br.cond.sptk.few 1f | 79 | (p7) br.cond.sptk.few 1f |
75 | mov r8=0 /* status = 0 */ | 80 | mov r8=0 /* status = 0 */ |
76 | movl r9 =0x100000064 /* proc_ratio (1/100) */ | 81 | movl r9 =0x100000064 /* proc_ratio (1/100) */ |
77 | movl r10=0x100000100 /* bus_ratio<<32 (1/256) */ | 82 | movl r10=0x100000100 /* bus_ratio<<32 (1/256) */ |
78 | movl r11=0x100000064 /* itc_ratio<<32 (1/100) */ | 83 | movl r11=0x100000064 /* itc_ratio<<32 (1/100) */ |
79 | ;; | 84 | ;; |
80 | 1: cmp.eq p6,p7=19,r28 /* PAL_RSE_INFO */ | 85 | 1: cmp.eq p6,p7=PAL_RSE_INFO,r28 |
81 | (p7) br.cond.sptk.few 1f | 86 | (p7) br.cond.sptk.few 1f |
82 | mov r8=0 /* status = 0 */ | 87 | mov r8=0 /* status = 0 */ |
83 | mov r9=96 /* num phys stacked */ | 88 | mov r9=96 /* num phys stacked */ |
84 | mov r10=0 /* hints */ | 89 | mov r10=0 /* hints */ |
85 | mov r11=0 | 90 | mov r11=0 |
86 | br.cond.sptk.few rp | 91 | br.cond.sptk.few rp |
87 | 1: cmp.eq p6,p7=1,r28 /* PAL_CACHE_FLUSH */ | 92 | 1: cmp.eq p6,p7=PAL_CACHE_FLUSH,r28 /* PAL_CACHE_FLUSH */ |
88 | (p7) br.cond.sptk.few 1f | 93 | (p7) br.cond.sptk.few 1f |
89 | mov r9=ar.lc | 94 | mov r9=ar.lc |
90 | movl r8=524288 /* flush 512k million cache lines (16MB) */ | 95 | movl r8=524288 /* flush 512k million cache lines (16MB) */ |
@@ -102,7 +107,7 @@ static: cmp.eq p6,p7=6,r28 /* PAL_PTCE_INFO */ | |||
102 | mov ar.lc=r9 | 107 | mov ar.lc=r9 |
103 | mov r8=r0 | 108 | mov r8=r0 |
104 | ;; | 109 | ;; |
105 | 1: cmp.eq p6,p7=15,r28 /* PAL_PERF_MON_INFO */ | 110 | 1: cmp.eq p6,p7=PAL_PERF_MON_INFO,r28 |
106 | (p7) br.cond.sptk.few 1f | 111 | (p7) br.cond.sptk.few 1f |
107 | mov r8=0 /* status = 0 */ | 112 | mov r8=0 /* status = 0 */ |
108 | movl r9 =0x08122f04 /* generic=4 width=47 retired=8 cycles=18 */ | 113 | movl r9 =0x08122f04 /* generic=4 width=47 retired=8 cycles=18 */ |
@@ -138,6 +143,20 @@ static: cmp.eq p6,p7=6,r28 /* PAL_PTCE_INFO */ | |||
138 | st8 [r29]=r0,16 /* clear remaining bits */ | 143 | st8 [r29]=r0,16 /* clear remaining bits */ |
139 | st8 [r18]=r0,16 /* clear remaining bits */ | 144 | st8 [r18]=r0,16 /* clear remaining bits */ |
140 | ;; | 145 | ;; |
146 | 1: cmp.eq p6,p7=PAL_VM_SUMMARY,r28 | ||
147 | (p7) br.cond.sptk.few 1f | ||
148 | mov r8=0 /* status = 0 */ | ||
149 | movl r9=0x2044040020F1865 /* num_tc_levels=2, num_unique_tcs=4 */ | ||
150 | /* max_itr_entry=64, max_dtr_entry=64 */ | ||
151 | /* hash_tag_id=2, max_pkr=15 */ | ||
152 | /* key_size=24, phys_add_size=50, vw=1 */ | ||
153 | movl r10=0x183C /* rid_size=24, impl_va_msb=60 */ | ||
154 | ;; | ||
155 | 1: cmp.eq p6,p7=PAL_MEM_ATTRIB,r28 | ||
156 | (p7) br.cond.sptk.few 1f | ||
157 | mov r8=0 /* status = 0 */ | ||
158 | mov r9=0x80|0x01 /* NatPage|WB */ | ||
159 | ;; | ||
141 | 1: br.cond.sptk.few rp | 160 | 1: br.cond.sptk.few rp |
142 | stacked: | 161 | stacked: |
143 | br.ret.sptk.few rp | 162 | br.ret.sptk.few rp |
diff --git a/arch/ia64/hp/sim/simscsi.c b/arch/ia64/hp/sim/simscsi.c index 56405dbfd739..a3fe97531134 100644 --- a/arch/ia64/hp/sim/simscsi.c +++ b/arch/ia64/hp/sim/simscsi.c | |||
@@ -205,10 +205,11 @@ simscsi_get_disk_size (int fd) | |||
205 | char buf[512]; | 205 | char buf[512]; |
206 | 206 | ||
207 | /* | 207 | /* |
208 | * This is a bit kludgey: the simulator doesn't provide a direct way of determining | 208 | * This is a bit kludgey: the simulator doesn't provide a |
209 | * the disk size, so we do a binary search, assuming a maximum disk size of 4GB. | 209 | * direct way of determining the disk size, so we do a binary |
210 | * search, assuming a maximum disk size of 128GB. | ||
210 | */ | 211 | */ |
211 | for (bit = (4UL << 30)/512; bit != 0; bit >>= 1) { | 212 | for (bit = (128UL << 30)/512; bit != 0; bit >>= 1) { |
212 | req.addr = __pa(&buf); | 213 | req.addr = __pa(&buf); |
213 | req.len = sizeof(buf); | 214 | req.len = sizeof(buf); |
214 | ia64_ssc(fd, 1, __pa(&req), ((sectors | bit) - 1)*512, SSC_READ); | 215 | ia64_ssc(fd, 1, __pa(&req), ((sectors | bit) - 1)*512, SSC_READ); |
@@ -225,14 +226,33 @@ simscsi_readwrite10 (struct scsi_cmnd *sc, int mode) | |||
225 | { | 226 | { |
226 | unsigned long offset; | 227 | unsigned long offset; |
227 | 228 | ||
228 | offset = ( (sc->cmnd[2] << 24) | (sc->cmnd[3] << 16) | 229 | offset = (((unsigned long)sc->cmnd[2] << 24) |
229 | | (sc->cmnd[4] << 8) | (sc->cmnd[5] << 0))*512; | 230 | | ((unsigned long)sc->cmnd[3] << 16) |
231 | | ((unsigned long)sc->cmnd[4] << 8) | ||
232 | | ((unsigned long)sc->cmnd[5] << 0))*512UL; | ||
230 | if (sc->use_sg > 0) | 233 | if (sc->use_sg > 0) |
231 | simscsi_sg_readwrite(sc, mode, offset); | 234 | simscsi_sg_readwrite(sc, mode, offset); |
232 | else | 235 | else |
233 | simscsi_readwrite(sc, mode, offset, ((sc->cmnd[7] << 8) | sc->cmnd[8])*512); | 236 | simscsi_readwrite(sc, mode, offset, ((sc->cmnd[7] << 8) | sc->cmnd[8])*512); |
234 | } | 237 | } |
235 | 238 | ||
239 | static void simscsi_fillresult(struct scsi_cmnd *sc, char *buf, unsigned len) | ||
240 | { | ||
241 | |||
242 | int scatterlen = sc->use_sg; | ||
243 | struct scatterlist *slp; | ||
244 | |||
245 | if (scatterlen == 0) | ||
246 | memcpy(sc->request_buffer, buf, len); | ||
247 | else for (slp = (struct scatterlist *)sc->buffer; scatterlen-- > 0 && len > 0; slp++) { | ||
248 | unsigned thislen = min(len, slp->length); | ||
249 | |||
250 | memcpy(page_address(slp->page) + slp->offset, buf, thislen); | ||
251 | slp++; | ||
252 | len -= thislen; | ||
253 | } | ||
254 | } | ||
255 | |||
236 | static int | 256 | static int |
237 | simscsi_queuecommand (struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *)) | 257 | simscsi_queuecommand (struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *)) |
238 | { | 258 | { |
@@ -240,6 +260,7 @@ simscsi_queuecommand (struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *)) | |||
240 | char fname[MAX_ROOT_LEN+16]; | 260 | char fname[MAX_ROOT_LEN+16]; |
241 | size_t disk_size; | 261 | size_t disk_size; |
242 | char *buf; | 262 | char *buf; |
263 | char localbuf[36]; | ||
243 | #if DEBUG_SIMSCSI | 264 | #if DEBUG_SIMSCSI |
244 | register long sp asm ("sp"); | 265 | register long sp asm ("sp"); |
245 | 266 | ||
@@ -263,7 +284,7 @@ simscsi_queuecommand (struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *)) | |||
263 | /* disk doesn't exist... */ | 284 | /* disk doesn't exist... */ |
264 | break; | 285 | break; |
265 | } | 286 | } |
266 | buf = sc->request_buffer; | 287 | buf = localbuf; |
267 | buf[0] = 0; /* magnetic disk */ | 288 | buf[0] = 0; /* magnetic disk */ |
268 | buf[1] = 0; /* not a removable medium */ | 289 | buf[1] = 0; /* not a removable medium */ |
269 | buf[2] = 2; /* SCSI-2 compliant device */ | 290 | buf[2] = 2; /* SCSI-2 compliant device */ |
@@ -273,6 +294,7 @@ simscsi_queuecommand (struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *)) | |||
273 | buf[6] = 0; /* reserved */ | 294 | buf[6] = 0; /* reserved */ |
274 | buf[7] = 0; /* various flags */ | 295 | buf[7] = 0; /* various flags */ |
275 | memcpy(buf + 8, "HP SIMULATED DISK 0.00", 28); | 296 | memcpy(buf + 8, "HP SIMULATED DISK 0.00", 28); |
297 | simscsi_fillresult(sc, buf, 36); | ||
276 | sc->result = GOOD; | 298 | sc->result = GOOD; |
277 | break; | 299 | break; |
278 | 300 | ||
@@ -304,16 +326,13 @@ simscsi_queuecommand (struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *)) | |||
304 | simscsi_readwrite10(sc, SSC_WRITE); | 326 | simscsi_readwrite10(sc, SSC_WRITE); |
305 | break; | 327 | break; |
306 | 328 | ||
307 | |||
308 | case READ_CAPACITY: | 329 | case READ_CAPACITY: |
309 | if (desc[target_id] < 0 || sc->request_bufflen < 8) { | 330 | if (desc[target_id] < 0 || sc->request_bufflen < 8) { |
310 | break; | 331 | break; |
311 | } | 332 | } |
312 | buf = sc->request_buffer; | 333 | buf = localbuf; |
313 | |||
314 | disk_size = simscsi_get_disk_size(desc[target_id]); | 334 | disk_size = simscsi_get_disk_size(desc[target_id]); |
315 | 335 | ||
316 | /* pretend to be a 1GB disk (partition table contains real stuff): */ | ||
317 | buf[0] = (disk_size >> 24) & 0xff; | 336 | buf[0] = (disk_size >> 24) & 0xff; |
318 | buf[1] = (disk_size >> 16) & 0xff; | 337 | buf[1] = (disk_size >> 16) & 0xff; |
319 | buf[2] = (disk_size >> 8) & 0xff; | 338 | buf[2] = (disk_size >> 8) & 0xff; |
@@ -323,13 +342,14 @@ simscsi_queuecommand (struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *)) | |||
323 | buf[5] = 0; | 342 | buf[5] = 0; |
324 | buf[6] = 2; | 343 | buf[6] = 2; |
325 | buf[7] = 0; | 344 | buf[7] = 0; |
345 | simscsi_fillresult(sc, buf, 8); | ||
326 | sc->result = GOOD; | 346 | sc->result = GOOD; |
327 | break; | 347 | break; |
328 | 348 | ||
329 | case MODE_SENSE: | 349 | case MODE_SENSE: |
330 | case MODE_SENSE_10: | 350 | case MODE_SENSE_10: |
331 | /* sd.c uses this to determine whether disk does write-caching. */ | 351 | /* sd.c uses this to determine whether disk does write-caching. */ |
332 | memset(sc->request_buffer, 0, 128); | 352 | simscsi_fillresult(sc, (char *)empty_zero_page, sc->request_bufflen); |
333 | sc->result = GOOD; | 353 | sc->result = GOOD; |
334 | break; | 354 | break; |
335 | 355 | ||
diff --git a/arch/ia64/hp/sim/simserial.c b/arch/ia64/hp/sim/simserial.c index 7dcb8582ae0d..b42ec37be51c 100644 --- a/arch/ia64/hp/sim/simserial.c +++ b/arch/ia64/hp/sim/simserial.c | |||
@@ -130,7 +130,7 @@ static void rs_stop(struct tty_struct *tty) | |||
130 | 130 | ||
131 | static void rs_start(struct tty_struct *tty) | 131 | static void rs_start(struct tty_struct *tty) |
132 | { | 132 | { |
133 | #if SIMSERIAL_DEBUG | 133 | #ifdef SIMSERIAL_DEBUG |
134 | printk("rs_start: tty->stopped=%d tty->hw_stopped=%d tty->flow_stopped=%d\n", | 134 | printk("rs_start: tty->stopped=%d tty->hw_stopped=%d tty->flow_stopped=%d\n", |
135 | tty->stopped, tty->hw_stopped, tty->flow_stopped); | 135 | tty->stopped, tty->hw_stopped, tty->flow_stopped); |
136 | #endif | 136 | #endif |
diff --git a/arch/ia64/ia32/binfmt_elf32.c b/arch/ia64/ia32/binfmt_elf32.c index 31de70b7c67f..a7280d9f6c16 100644 --- a/arch/ia64/ia32/binfmt_elf32.c +++ b/arch/ia64/ia32/binfmt_elf32.c | |||
@@ -216,12 +216,6 @@ ia32_setup_arg_pages (struct linux_binprm *bprm, int executable_stack) | |||
216 | if (!mpnt) | 216 | if (!mpnt) |
217 | return -ENOMEM; | 217 | return -ENOMEM; |
218 | 218 | ||
219 | if (security_vm_enough_memory((IA32_STACK_TOP - (PAGE_MASK & (unsigned long) bprm->p)) | ||
220 | >> PAGE_SHIFT)) { | ||
221 | kmem_cache_free(vm_area_cachep, mpnt); | ||
222 | return -ENOMEM; | ||
223 | } | ||
224 | |||
225 | memset(mpnt, 0, sizeof(*mpnt)); | 219 | memset(mpnt, 0, sizeof(*mpnt)); |
226 | 220 | ||
227 | down_write(¤t->mm->mmap_sem); | 221 | down_write(¤t->mm->mmap_sem); |
diff --git a/arch/ia64/ia32/ia32_entry.S b/arch/ia64/ia32/ia32_entry.S index 829a6d80711c..494fad6bf376 100644 --- a/arch/ia64/ia32/ia32_entry.S +++ b/arch/ia64/ia32/ia32_entry.S | |||
@@ -1,6 +1,6 @@ | |||
1 | #include <asm/asmmacro.h> | 1 | #include <asm/asmmacro.h> |
2 | #include <asm/ia32.h> | 2 | #include <asm/ia32.h> |
3 | #include <asm/offsets.h> | 3 | #include <asm/asm-offsets.h> |
4 | #include <asm/signal.h> | 4 | #include <asm/signal.h> |
5 | #include <asm/thread_info.h> | 5 | #include <asm/thread_info.h> |
6 | 6 | ||
@@ -215,7 +215,7 @@ ia32_syscall_table: | |||
215 | data8 sys32_fork | 215 | data8 sys32_fork |
216 | data8 sys_read | 216 | data8 sys_read |
217 | data8 sys_write | 217 | data8 sys_write |
218 | data8 sys32_open /* 5 */ | 218 | data8 compat_sys_open /* 5 */ |
219 | data8 sys_close | 219 | data8 sys_close |
220 | data8 sys32_waitpid | 220 | data8 sys32_waitpid |
221 | data8 sys_creat | 221 | data8 sys_creat |
diff --git a/arch/ia64/ia32/sys_ia32.c b/arch/ia64/ia32/sys_ia32.c index c1e20d65dd6c..3fa67ecebc83 100644 --- a/arch/ia64/ia32/sys_ia32.c +++ b/arch/ia64/ia32/sys_ia32.c | |||
@@ -2327,7 +2327,7 @@ sys32_sendfile (int out_fd, int in_fd, int __user *offset, unsigned int count) | |||
2327 | ret = sys_sendfile(out_fd, in_fd, offset ? (off_t __user *) &of : NULL, count); | 2327 | ret = sys_sendfile(out_fd, in_fd, offset ? (off_t __user *) &of : NULL, count); |
2328 | set_fs(old_fs); | 2328 | set_fs(old_fs); |
2329 | 2329 | ||
2330 | if (!ret && offset && put_user(of, offset)) | 2330 | if (offset && put_user(of, offset)) |
2331 | return -EFAULT; | 2331 | return -EFAULT; |
2332 | 2332 | ||
2333 | return ret; | 2333 | return ret; |
@@ -2359,37 +2359,6 @@ sys32_brk (unsigned int brk) | |||
2359 | return ret; | 2359 | return ret; |
2360 | } | 2360 | } |
2361 | 2361 | ||
2362 | /* | ||
2363 | * Exactly like fs/open.c:sys_open(), except that it doesn't set the O_LARGEFILE flag. | ||
2364 | */ | ||
2365 | asmlinkage long | ||
2366 | sys32_open (const char __user * filename, int flags, int mode) | ||
2367 | { | ||
2368 | char * tmp; | ||
2369 | int fd, error; | ||
2370 | |||
2371 | tmp = getname(filename); | ||
2372 | fd = PTR_ERR(tmp); | ||
2373 | if (!IS_ERR(tmp)) { | ||
2374 | fd = get_unused_fd(); | ||
2375 | if (fd >= 0) { | ||
2376 | struct file *f = filp_open(tmp, flags, mode); | ||
2377 | error = PTR_ERR(f); | ||
2378 | if (IS_ERR(f)) | ||
2379 | goto out_error; | ||
2380 | fd_install(fd, f); | ||
2381 | } | ||
2382 | out: | ||
2383 | putname(tmp); | ||
2384 | } | ||
2385 | return fd; | ||
2386 | |||
2387 | out_error: | ||
2388 | put_unused_fd(fd); | ||
2389 | fd = error; | ||
2390 | goto out; | ||
2391 | } | ||
2392 | |||
2393 | /* Structure for ia32 emulation on ia64 */ | 2362 | /* Structure for ia32 emulation on ia64 */ |
2394 | struct epoll_event32 | 2363 | struct epoll_event32 |
2395 | { | 2364 | { |
diff --git a/arch/ia64/kernel/Makefile b/arch/ia64/kernel/Makefile index b242594be55b..307514f7a282 100644 --- a/arch/ia64/kernel/Makefile +++ b/arch/ia64/kernel/Makefile | |||
@@ -16,7 +16,7 @@ obj-$(CONFIG_IA64_HP_ZX1_SWIOTLB) += acpi-ext.o | |||
16 | obj-$(CONFIG_IA64_PALINFO) += palinfo.o | 16 | obj-$(CONFIG_IA64_PALINFO) += palinfo.o |
17 | obj-$(CONFIG_IOSAPIC) += iosapic.o | 17 | obj-$(CONFIG_IOSAPIC) += iosapic.o |
18 | obj-$(CONFIG_MODULES) += module.o | 18 | obj-$(CONFIG_MODULES) += module.o |
19 | obj-$(CONFIG_SMP) += smp.o smpboot.o domain.o | 19 | obj-$(CONFIG_SMP) += smp.o smpboot.o |
20 | obj-$(CONFIG_NUMA) += numa.o | 20 | obj-$(CONFIG_NUMA) += numa.o |
21 | obj-$(CONFIG_PERFMON) += perfmon_default_smpl.o | 21 | obj-$(CONFIG_PERFMON) += perfmon_default_smpl.o |
22 | obj-$(CONFIG_IA64_CYCLONE) += cyclone.o | 22 | obj-$(CONFIG_IA64_CYCLONE) += cyclone.o |
diff --git a/arch/ia64/kernel/acpi-ext.c b/arch/ia64/kernel/acpi-ext.c index 2623df5e2633..13a5b3b49bf8 100644 --- a/arch/ia64/kernel/acpi-ext.c +++ b/arch/ia64/kernel/acpi-ext.c | |||
@@ -17,20 +17,20 @@ | |||
17 | #include <asm/acpi-ext.h> | 17 | #include <asm/acpi-ext.h> |
18 | 18 | ||
19 | struct acpi_vendor_descriptor { | 19 | struct acpi_vendor_descriptor { |
20 | u8 guid_id; | 20 | u8 guid_id; |
21 | efi_guid_t guid; | 21 | efi_guid_t guid; |
22 | }; | 22 | }; |
23 | 23 | ||
24 | struct acpi_vendor_info { | 24 | struct acpi_vendor_info { |
25 | struct acpi_vendor_descriptor *descriptor; | 25 | struct acpi_vendor_descriptor *descriptor; |
26 | u8 *data; | 26 | u8 *data; |
27 | u32 length; | 27 | u32 length; |
28 | }; | 28 | }; |
29 | 29 | ||
30 | acpi_status | 30 | acpi_status |
31 | acpi_vendor_resource_match(struct acpi_resource *resource, void *context) | 31 | acpi_vendor_resource_match(struct acpi_resource *resource, void *context) |
32 | { | 32 | { |
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 length; |
@@ -38,8 +38,8 @@ acpi_vendor_resource_match(struct acpi_resource *resource, void *context) | |||
38 | if (resource->id != ACPI_RSTYPE_VENDOR) | 38 | if (resource->id != ACPI_RSTYPE_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->reserved; |
43 | if (vendor->length <= sizeof(*info->descriptor) || | 43 | if (vendor->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)) |
@@ -50,21 +50,24 @@ acpi_vendor_resource_match(struct acpi_resource *resource, void *context) | |||
50 | if (!info->data) | 50 | if (!info->data) |
51 | return AE_NO_MEMORY; | 51 | return AE_NO_MEMORY; |
52 | 52 | ||
53 | memcpy(info->data, vendor->reserved + sizeof(struct acpi_vendor_descriptor), length); | 53 | memcpy(info->data, |
54 | vendor->reserved + sizeof(struct acpi_vendor_descriptor), | ||
55 | length); | ||
54 | info->length = length; | 56 | info->length = length; |
55 | return AE_CTRL_TERMINATE; | 57 | return AE_CTRL_TERMINATE; |
56 | } | 58 | } |
57 | 59 | ||
58 | acpi_status | 60 | acpi_status |
59 | 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, |
60 | u8 **data, u32 *length) | 62 | u8 ** data, u32 * length) |
61 | { | 63 | { |
62 | struct acpi_vendor_info info; | 64 | struct acpi_vendor_info info; |
63 | 65 | ||
64 | info.descriptor = id; | 66 | info.descriptor = id; |
65 | info.data = NULL; | 67 | info.data = NULL; |
66 | 68 | ||
67 | acpi_walk_resources(obj, METHOD_NAME__CRS, acpi_vendor_resource_match, &info); | 69 | acpi_walk_resources(obj, METHOD_NAME__CRS, acpi_vendor_resource_match, |
70 | &info); | ||
68 | if (!info.data) | 71 | if (!info.data) |
69 | return AE_NOT_FOUND; | 72 | return AE_NOT_FOUND; |
70 | 73 | ||
@@ -75,17 +78,19 @@ acpi_find_vendor_resource(acpi_handle obj, struct acpi_vendor_descriptor *id, | |||
75 | 78 | ||
76 | struct acpi_vendor_descriptor hp_ccsr_descriptor = { | 79 | struct acpi_vendor_descriptor hp_ccsr_descriptor = { |
77 | .guid_id = 2, | 80 | .guid_id = 2, |
78 | .guid = EFI_GUID(0x69e9adf9, 0x924f, 0xab5f, 0xf6, 0x4a, 0x24, 0xd2, 0x01, 0x37, 0x0e, 0xad) | 81 | .guid = |
82 | EFI_GUID(0x69e9adf9, 0x924f, 0xab5f, 0xf6, 0x4a, 0x24, 0xd2, 0x01, | ||
83 | 0x37, 0x0e, 0xad) | ||
79 | }; | 84 | }; |
80 | 85 | ||
81 | acpi_status | 86 | acpi_status hp_acpi_csr_space(acpi_handle obj, u64 * csr_base, u64 * csr_length) |
82 | hp_acpi_csr_space(acpi_handle obj, u64 *csr_base, u64 *csr_length) | ||
83 | { | 87 | { |
84 | acpi_status status; | 88 | acpi_status status; |
85 | u8 *data; | 89 | u8 *data; |
86 | u32 length; | 90 | u32 length; |
87 | 91 | ||
88 | status = acpi_find_vendor_resource(obj, &hp_ccsr_descriptor, &data, &length); | 92 | status = |
93 | acpi_find_vendor_resource(obj, &hp_ccsr_descriptor, &data, &length); | ||
89 | 94 | ||
90 | if (ACPI_FAILURE(status) || length != 16) | 95 | if (ACPI_FAILURE(status) || length != 16) |
91 | return AE_NOT_FOUND; | 96 | return AE_NOT_FOUND; |
diff --git a/arch/ia64/kernel/acpi.c b/arch/ia64/kernel/acpi.c index 9609f243e5d0..9ad94ddf6687 100644 --- a/arch/ia64/kernel/acpi.c +++ b/arch/ia64/kernel/acpi.c | |||
@@ -74,12 +74,11 @@ unsigned int acpi_cpei_override; | |||
74 | unsigned int acpi_cpei_phys_cpuid; | 74 | unsigned int acpi_cpei_phys_cpuid; |
75 | 75 | ||
76 | #define MAX_SAPICS 256 | 76 | #define MAX_SAPICS 256 |
77 | u16 ia64_acpiid_to_sapicid[MAX_SAPICS] = | 77 | u16 ia64_acpiid_to_sapicid[MAX_SAPICS] = {[0 ... MAX_SAPICS - 1] = -1 }; |
78 | { [0 ... MAX_SAPICS - 1] = -1 }; | 78 | |
79 | EXPORT_SYMBOL(ia64_acpiid_to_sapicid); | 79 | EXPORT_SYMBOL(ia64_acpiid_to_sapicid); |
80 | 80 | ||
81 | const char * | 81 | const char *acpi_get_sysname(void) |
82 | acpi_get_sysname (void) | ||
83 | { | 82 | { |
84 | #ifdef CONFIG_IA64_GENERIC | 83 | #ifdef CONFIG_IA64_GENERIC |
85 | unsigned long rsdp_phys; | 84 | unsigned long rsdp_phys; |
@@ -89,27 +88,29 @@ acpi_get_sysname (void) | |||
89 | 88 | ||
90 | rsdp_phys = acpi_find_rsdp(); | 89 | rsdp_phys = acpi_find_rsdp(); |
91 | if (!rsdp_phys) { | 90 | if (!rsdp_phys) { |
92 | printk(KERN_ERR "ACPI 2.0 RSDP not found, default to \"dig\"\n"); | 91 | printk(KERN_ERR |
92 | "ACPI 2.0 RSDP not found, default to \"dig\"\n"); | ||
93 | return "dig"; | 93 | return "dig"; |
94 | } | 94 | } |
95 | 95 | ||
96 | rsdp = (struct acpi20_table_rsdp *) __va(rsdp_phys); | 96 | rsdp = (struct acpi20_table_rsdp *)__va(rsdp_phys); |
97 | if (strncmp(rsdp->signature, RSDP_SIG, sizeof(RSDP_SIG) - 1)) { | 97 | if (strncmp(rsdp->signature, RSDP_SIG, sizeof(RSDP_SIG) - 1)) { |
98 | printk(KERN_ERR "ACPI 2.0 RSDP signature incorrect, default to \"dig\"\n"); | 98 | printk(KERN_ERR |
99 | "ACPI 2.0 RSDP signature incorrect, default to \"dig\"\n"); | ||
99 | return "dig"; | 100 | return "dig"; |
100 | } | 101 | } |
101 | 102 | ||
102 | xsdt = (struct acpi_table_xsdt *) __va(rsdp->xsdt_address); | 103 | xsdt = (struct acpi_table_xsdt *)__va(rsdp->xsdt_address); |
103 | hdr = &xsdt->header; | 104 | hdr = &xsdt->header; |
104 | if (strncmp(hdr->signature, XSDT_SIG, sizeof(XSDT_SIG) - 1)) { | 105 | if (strncmp(hdr->signature, XSDT_SIG, sizeof(XSDT_SIG) - 1)) { |
105 | printk(KERN_ERR "ACPI 2.0 XSDT signature incorrect, default to \"dig\"\n"); | 106 | printk(KERN_ERR |
107 | "ACPI 2.0 XSDT signature incorrect, default to \"dig\"\n"); | ||
106 | return "dig"; | 108 | return "dig"; |
107 | } | 109 | } |
108 | 110 | ||
109 | if (!strcmp(hdr->oem_id, "HP")) { | 111 | if (!strcmp(hdr->oem_id, "HP")) { |
110 | return "hpzx1"; | 112 | return "hpzx1"; |
111 | } | 113 | } else if (!strcmp(hdr->oem_id, "SGI")) { |
112 | else if (!strcmp(hdr->oem_id, "SGI")) { | ||
113 | return "sn2"; | 114 | return "sn2"; |
114 | } | 115 | } |
115 | 116 | ||
@@ -131,7 +132,7 @@ acpi_get_sysname (void) | |||
131 | #endif | 132 | #endif |
132 | } | 133 | } |
133 | 134 | ||
134 | #ifdef CONFIG_ACPI_BOOT | 135 | #ifdef CONFIG_ACPI |
135 | 136 | ||
136 | #define ACPI_MAX_PLATFORM_INTERRUPTS 256 | 137 | #define ACPI_MAX_PLATFORM_INTERRUPTS 256 |
137 | 138 | ||
@@ -146,8 +147,7 @@ enum acpi_irq_model_id acpi_irq_model = ACPI_IRQ_MODEL_IOSAPIC; | |||
146 | * Interrupt routing API for device drivers. Provides interrupt vector for | 147 | * Interrupt routing API for device drivers. Provides interrupt vector for |
147 | * a generic platform event. Currently only CPEI is implemented. | 148 | * a generic platform event. Currently only CPEI is implemented. |
148 | */ | 149 | */ |
149 | int | 150 | int acpi_request_vector(u32 int_type) |
150 | acpi_request_vector (u32 int_type) | ||
151 | { | 151 | { |
152 | int vector = -1; | 152 | int vector = -1; |
153 | 153 | ||
@@ -155,12 +155,12 @@ acpi_request_vector (u32 int_type) | |||
155 | /* corrected platform error interrupt */ | 155 | /* corrected platform error interrupt */ |
156 | vector = platform_intr_list[int_type]; | 156 | vector = platform_intr_list[int_type]; |
157 | } else | 157 | } else |
158 | printk(KERN_ERR "acpi_request_vector(): invalid interrupt type\n"); | 158 | printk(KERN_ERR |
159 | "acpi_request_vector(): invalid interrupt type\n"); | ||
159 | return vector; | 160 | return vector; |
160 | } | 161 | } |
161 | 162 | ||
162 | char * | 163 | char *__acpi_map_table(unsigned long phys_addr, unsigned long size) |
163 | __acpi_map_table (unsigned long phys_addr, unsigned long size) | ||
164 | { | 164 | { |
165 | return __va(phys_addr); | 165 | return __va(phys_addr); |
166 | } | 166 | } |
@@ -169,19 +169,18 @@ __acpi_map_table (unsigned long phys_addr, unsigned long size) | |||
169 | Boot-time Table Parsing | 169 | Boot-time Table Parsing |
170 | -------------------------------------------------------------------------- */ | 170 | -------------------------------------------------------------------------- */ |
171 | 171 | ||
172 | static int total_cpus __initdata; | 172 | static int total_cpus __initdata; |
173 | static int available_cpus __initdata; | 173 | static int available_cpus __initdata; |
174 | struct acpi_table_madt * acpi_madt __initdata; | 174 | struct acpi_table_madt *acpi_madt __initdata; |
175 | static u8 has_8259; | 175 | static u8 has_8259; |
176 | |||
177 | 176 | ||
178 | static int __init | 177 | static int __init |
179 | acpi_parse_lapic_addr_ovr ( | 178 | acpi_parse_lapic_addr_ovr(acpi_table_entry_header * header, |
180 | acpi_table_entry_header *header, const unsigned long end) | 179 | const unsigned long end) |
181 | { | 180 | { |
182 | struct acpi_table_lapic_addr_ovr *lapic; | 181 | struct acpi_table_lapic_addr_ovr *lapic; |
183 | 182 | ||
184 | lapic = (struct acpi_table_lapic_addr_ovr *) header; | 183 | lapic = (struct acpi_table_lapic_addr_ovr *)header; |
185 | 184 | ||
186 | if (BAD_MADT_ENTRY(lapic, end)) | 185 | if (BAD_MADT_ENTRY(lapic, end)) |
187 | return -EINVAL; | 186 | return -EINVAL; |
@@ -193,22 +192,23 @@ acpi_parse_lapic_addr_ovr ( | |||
193 | return 0; | 192 | return 0; |
194 | } | 193 | } |
195 | 194 | ||
196 | |||
197 | static int __init | 195 | static int __init |
198 | acpi_parse_lsapic (acpi_table_entry_header *header, const unsigned long end) | 196 | acpi_parse_lsapic(acpi_table_entry_header * header, const unsigned long end) |
199 | { | 197 | { |
200 | struct acpi_table_lsapic *lsapic; | 198 | struct acpi_table_lsapic *lsapic; |
201 | 199 | ||
202 | lsapic = (struct acpi_table_lsapic *) header; | 200 | lsapic = (struct acpi_table_lsapic *)header; |
203 | 201 | ||
204 | if (BAD_MADT_ENTRY(lsapic, end)) | 202 | if (BAD_MADT_ENTRY(lsapic, end)) |
205 | return -EINVAL; | 203 | return -EINVAL; |
206 | 204 | ||
207 | if (lsapic->flags.enabled) { | 205 | if (lsapic->flags.enabled) { |
208 | #ifdef CONFIG_SMP | 206 | #ifdef CONFIG_SMP |
209 | smp_boot_data.cpu_phys_id[available_cpus] = (lsapic->id << 8) | lsapic->eid; | 207 | smp_boot_data.cpu_phys_id[available_cpus] = |
208 | (lsapic->id << 8) | lsapic->eid; | ||
210 | #endif | 209 | #endif |
211 | ia64_acpiid_to_sapicid[lsapic->acpi_id] = (lsapic->id << 8) | lsapic->eid; | 210 | ia64_acpiid_to_sapicid[lsapic->acpi_id] = |
211 | (lsapic->id << 8) | lsapic->eid; | ||
212 | ++available_cpus; | 212 | ++available_cpus; |
213 | } | 213 | } |
214 | 214 | ||
@@ -216,13 +216,12 @@ acpi_parse_lsapic (acpi_table_entry_header *header, const unsigned long end) | |||
216 | return 0; | 216 | return 0; |
217 | } | 217 | } |
218 | 218 | ||
219 | |||
220 | static int __init | 219 | static int __init |
221 | acpi_parse_lapic_nmi (acpi_table_entry_header *header, const unsigned long end) | 220 | acpi_parse_lapic_nmi(acpi_table_entry_header * header, const unsigned long end) |
222 | { | 221 | { |
223 | struct acpi_table_lapic_nmi *lacpi_nmi; | 222 | struct acpi_table_lapic_nmi *lacpi_nmi; |
224 | 223 | ||
225 | lacpi_nmi = (struct acpi_table_lapic_nmi*) header; | 224 | lacpi_nmi = (struct acpi_table_lapic_nmi *)header; |
226 | 225 | ||
227 | if (BAD_MADT_ENTRY(lacpi_nmi, end)) | 226 | if (BAD_MADT_ENTRY(lacpi_nmi, end)) |
228 | return -EINVAL; | 227 | return -EINVAL; |
@@ -231,13 +230,12 @@ acpi_parse_lapic_nmi (acpi_table_entry_header *header, const unsigned long end) | |||
231 | return 0; | 230 | return 0; |
232 | } | 231 | } |
233 | 232 | ||
234 | |||
235 | static int __init | 233 | static int __init |
236 | acpi_parse_iosapic (acpi_table_entry_header *header, const unsigned long end) | 234 | acpi_parse_iosapic(acpi_table_entry_header * header, const unsigned long end) |
237 | { | 235 | { |
238 | struct acpi_table_iosapic *iosapic; | 236 | struct acpi_table_iosapic *iosapic; |
239 | 237 | ||
240 | iosapic = (struct acpi_table_iosapic *) header; | 238 | iosapic = (struct acpi_table_iosapic *)header; |
241 | 239 | ||
242 | if (BAD_MADT_ENTRY(iosapic, end)) | 240 | if (BAD_MADT_ENTRY(iosapic, end)) |
243 | return -EINVAL; | 241 | return -EINVAL; |
@@ -245,15 +243,14 @@ acpi_parse_iosapic (acpi_table_entry_header *header, const unsigned long end) | |||
245 | return iosapic_init(iosapic->address, iosapic->global_irq_base); | 243 | return iosapic_init(iosapic->address, iosapic->global_irq_base); |
246 | } | 244 | } |
247 | 245 | ||
248 | |||
249 | static int __init | 246 | static int __init |
250 | acpi_parse_plat_int_src ( | 247 | acpi_parse_plat_int_src(acpi_table_entry_header * header, |
251 | acpi_table_entry_header *header, const unsigned long end) | 248 | const unsigned long end) |
252 | { | 249 | { |
253 | struct acpi_table_plat_int_src *plintsrc; | 250 | struct acpi_table_plat_int_src *plintsrc; |
254 | int vector; | 251 | int vector; |
255 | 252 | ||
256 | plintsrc = (struct acpi_table_plat_int_src *) header; | 253 | plintsrc = (struct acpi_table_plat_int_src *)header; |
257 | 254 | ||
258 | if (BAD_MADT_ENTRY(plintsrc, end)) | 255 | if (BAD_MADT_ENTRY(plintsrc, end)) |
259 | return -EINVAL; | 256 | return -EINVAL; |
@@ -267,8 +264,12 @@ acpi_parse_plat_int_src ( | |||
267 | plintsrc->iosapic_vector, | 264 | plintsrc->iosapic_vector, |
268 | plintsrc->eid, | 265 | plintsrc->eid, |
269 | plintsrc->id, | 266 | plintsrc->id, |
270 | (plintsrc->flags.polarity == 1) ? IOSAPIC_POL_HIGH : IOSAPIC_POL_LOW, | 267 | (plintsrc->flags.polarity == |
271 | (plintsrc->flags.trigger == 1) ? IOSAPIC_EDGE : IOSAPIC_LEVEL); | 268 | 1) ? IOSAPIC_POL_HIGH : |
269 | IOSAPIC_POL_LOW, | ||
270 | (plintsrc->flags.trigger == | ||
271 | 1) ? IOSAPIC_EDGE : | ||
272 | IOSAPIC_LEVEL); | ||
272 | 273 | ||
273 | platform_intr_list[plintsrc->type] = vector; | 274 | platform_intr_list[plintsrc->type] = vector; |
274 | if (acpi_madt_rev > 1) { | 275 | if (acpi_madt_rev > 1) { |
@@ -283,7 +284,6 @@ acpi_parse_plat_int_src ( | |||
283 | return 0; | 284 | return 0; |
284 | } | 285 | } |
285 | 286 | ||
286 | |||
287 | unsigned int can_cpei_retarget(void) | 287 | unsigned int can_cpei_retarget(void) |
288 | { | 288 | { |
289 | extern int cpe_vector; | 289 | extern int cpe_vector; |
@@ -322,29 +322,30 @@ unsigned int get_cpei_target_cpu(void) | |||
322 | } | 322 | } |
323 | 323 | ||
324 | static int __init | 324 | static int __init |
325 | acpi_parse_int_src_ovr ( | 325 | acpi_parse_int_src_ovr(acpi_table_entry_header * header, |
326 | acpi_table_entry_header *header, const unsigned long end) | 326 | const unsigned long end) |
327 | { | 327 | { |
328 | struct acpi_table_int_src_ovr *p; | 328 | struct acpi_table_int_src_ovr *p; |
329 | 329 | ||
330 | p = (struct acpi_table_int_src_ovr *) header; | 330 | p = (struct acpi_table_int_src_ovr *)header; |
331 | 331 | ||
332 | if (BAD_MADT_ENTRY(p, end)) | 332 | if (BAD_MADT_ENTRY(p, end)) |
333 | return -EINVAL; | 333 | return -EINVAL; |
334 | 334 | ||
335 | iosapic_override_isa_irq(p->bus_irq, p->global_irq, | 335 | iosapic_override_isa_irq(p->bus_irq, p->global_irq, |
336 | (p->flags.polarity == 1) ? IOSAPIC_POL_HIGH : IOSAPIC_POL_LOW, | 336 | (p->flags.polarity == |
337 | (p->flags.trigger == 1) ? IOSAPIC_EDGE : IOSAPIC_LEVEL); | 337 | 1) ? IOSAPIC_POL_HIGH : IOSAPIC_POL_LOW, |
338 | (p->flags.trigger == | ||
339 | 1) ? IOSAPIC_EDGE : IOSAPIC_LEVEL); | ||
338 | return 0; | 340 | return 0; |
339 | } | 341 | } |
340 | 342 | ||
341 | |||
342 | static int __init | 343 | static int __init |
343 | acpi_parse_nmi_src (acpi_table_entry_header *header, const unsigned long end) | 344 | acpi_parse_nmi_src(acpi_table_entry_header * header, const unsigned long end) |
344 | { | 345 | { |
345 | struct acpi_table_nmi_src *nmi_src; | 346 | struct acpi_table_nmi_src *nmi_src; |
346 | 347 | ||
347 | nmi_src = (struct acpi_table_nmi_src*) header; | 348 | nmi_src = (struct acpi_table_nmi_src *)header; |
348 | 349 | ||
349 | if (BAD_MADT_ENTRY(nmi_src, end)) | 350 | if (BAD_MADT_ENTRY(nmi_src, end)) |
350 | return -EINVAL; | 351 | return -EINVAL; |
@@ -353,11 +354,9 @@ acpi_parse_nmi_src (acpi_table_entry_header *header, const unsigned long end) | |||
353 | return 0; | 354 | return 0; |
354 | } | 355 | } |
355 | 356 | ||
356 | static void __init | 357 | static void __init acpi_madt_oem_check(char *oem_id, char *oem_table_id) |
357 | acpi_madt_oem_check (char *oem_id, char *oem_table_id) | ||
358 | { | 358 | { |
359 | if (!strncmp(oem_id, "IBM", 3) && | 359 | if (!strncmp(oem_id, "IBM", 3) && (!strncmp(oem_table_id, "SERMOW", 6))) { |
360 | (!strncmp(oem_table_id, "SERMOW", 6))) { | ||
361 | 360 | ||
362 | /* | 361 | /* |
363 | * Unfortunately ITC_DRIFT is not yet part of the | 362 | * Unfortunately ITC_DRIFT is not yet part of the |
@@ -370,19 +369,18 @@ acpi_madt_oem_check (char *oem_id, char *oem_table_id) | |||
370 | } | 369 | } |
371 | } | 370 | } |
372 | 371 | ||
373 | static int __init | 372 | static int __init acpi_parse_madt(unsigned long phys_addr, unsigned long size) |
374 | acpi_parse_madt (unsigned long phys_addr, unsigned long size) | ||
375 | { | 373 | { |
376 | if (!phys_addr || !size) | 374 | if (!phys_addr || !size) |
377 | return -EINVAL; | 375 | return -EINVAL; |
378 | 376 | ||
379 | acpi_madt = (struct acpi_table_madt *) __va(phys_addr); | 377 | acpi_madt = (struct acpi_table_madt *)__va(phys_addr); |
380 | 378 | ||
381 | acpi_madt_rev = acpi_madt->header.revision; | 379 | acpi_madt_rev = acpi_madt->header.revision; |
382 | 380 | ||
383 | /* remember the value for reference after free_initmem() */ | 381 | /* remember the value for reference after free_initmem() */ |
384 | #ifdef CONFIG_ITANIUM | 382 | #ifdef CONFIG_ITANIUM |
385 | has_8259 = 1; /* Firmware on old Itanium systems is broken */ | 383 | has_8259 = 1; /* Firmware on old Itanium systems is broken */ |
386 | #else | 384 | #else |
387 | has_8259 = acpi_madt->flags.pcat_compat; | 385 | has_8259 = acpi_madt->flags.pcat_compat; |
388 | #endif | 386 | #endif |
@@ -396,19 +394,18 @@ acpi_parse_madt (unsigned long phys_addr, unsigned long size) | |||
396 | printk(KERN_INFO PREFIX "Local APIC address %p\n", ipi_base_addr); | 394 | printk(KERN_INFO PREFIX "Local APIC address %p\n", ipi_base_addr); |
397 | 395 | ||
398 | acpi_madt_oem_check(acpi_madt->header.oem_id, | 396 | acpi_madt_oem_check(acpi_madt->header.oem_id, |
399 | acpi_madt->header.oem_table_id); | 397 | acpi_madt->header.oem_table_id); |
400 | 398 | ||
401 | return 0; | 399 | return 0; |
402 | } | 400 | } |
403 | 401 | ||
404 | |||
405 | #ifdef CONFIG_ACPI_NUMA | 402 | #ifdef CONFIG_ACPI_NUMA |
406 | 403 | ||
407 | #undef SLIT_DEBUG | 404 | #undef SLIT_DEBUG |
408 | 405 | ||
409 | #define PXM_FLAG_LEN ((MAX_PXM_DOMAINS + 1)/32) | 406 | #define PXM_FLAG_LEN ((MAX_PXM_DOMAINS + 1)/32) |
410 | 407 | ||
411 | static int __initdata srat_num_cpus; /* number of cpus */ | 408 | static int __initdata srat_num_cpus; /* number of cpus */ |
412 | static u32 __devinitdata pxm_flag[PXM_FLAG_LEN]; | 409 | static u32 __devinitdata pxm_flag[PXM_FLAG_LEN]; |
413 | #define pxm_bit_set(bit) (set_bit(bit,(void *)pxm_flag)) | 410 | #define pxm_bit_set(bit) (set_bit(bit,(void *)pxm_flag)) |
414 | #define pxm_bit_test(bit) (test_bit(bit,(void *)pxm_flag)) | 411 | #define pxm_bit_test(bit) (test_bit(bit,(void *)pxm_flag)) |
@@ -421,15 +418,15 @@ static struct acpi_table_slit __initdata *slit_table; | |||
421 | * ACPI 2.0 SLIT (System Locality Information Table) | 418 | * ACPI 2.0 SLIT (System Locality Information Table) |
422 | * http://devresource.hp.com/devresource/Docs/TechPapers/IA64/slit.pdf | 419 | * http://devresource.hp.com/devresource/Docs/TechPapers/IA64/slit.pdf |
423 | */ | 420 | */ |
424 | void __init | 421 | void __init acpi_numa_slit_init(struct acpi_table_slit *slit) |
425 | acpi_numa_slit_init (struct acpi_table_slit *slit) | ||
426 | { | 422 | { |
427 | u32 len; | 423 | u32 len; |
428 | 424 | ||
429 | len = sizeof(struct acpi_table_header) + 8 | 425 | len = sizeof(struct acpi_table_header) + 8 |
430 | + slit->localities * slit->localities; | 426 | + slit->localities * slit->localities; |
431 | if (slit->header.length != len) { | 427 | if (slit->header.length != len) { |
432 | printk(KERN_ERR "ACPI 2.0 SLIT: size mismatch: %d expected, %d actual\n", | 428 | printk(KERN_ERR |
429 | "ACPI 2.0 SLIT: size mismatch: %d expected, %d actual\n", | ||
433 | len, slit->header.length); | 430 | len, slit->header.length); |
434 | memset(numa_slit, 10, sizeof(numa_slit)); | 431 | memset(numa_slit, 10, sizeof(numa_slit)); |
435 | return; | 432 | return; |
@@ -438,19 +435,20 @@ acpi_numa_slit_init (struct acpi_table_slit *slit) | |||
438 | } | 435 | } |
439 | 436 | ||
440 | void __init | 437 | void __init |
441 | acpi_numa_processor_affinity_init (struct acpi_table_processor_affinity *pa) | 438 | acpi_numa_processor_affinity_init(struct acpi_table_processor_affinity *pa) |
442 | { | 439 | { |
443 | /* record this node in proximity bitmap */ | 440 | /* record this node in proximity bitmap */ |
444 | pxm_bit_set(pa->proximity_domain); | 441 | pxm_bit_set(pa->proximity_domain); |
445 | 442 | ||
446 | node_cpuid[srat_num_cpus].phys_id = (pa->apic_id << 8) | (pa->lsapic_eid); | 443 | node_cpuid[srat_num_cpus].phys_id = |
444 | (pa->apic_id << 8) | (pa->lsapic_eid); | ||
447 | /* nid should be overridden as logical node id later */ | 445 | /* nid should be overridden as logical node id later */ |
448 | node_cpuid[srat_num_cpus].nid = pa->proximity_domain; | 446 | node_cpuid[srat_num_cpus].nid = pa->proximity_domain; |
449 | srat_num_cpus++; | 447 | srat_num_cpus++; |
450 | } | 448 | } |
451 | 449 | ||
452 | void __init | 450 | void __init |
453 | acpi_numa_memory_affinity_init (struct acpi_table_memory_affinity *ma) | 451 | acpi_numa_memory_affinity_init(struct acpi_table_memory_affinity *ma) |
454 | { | 452 | { |
455 | unsigned long paddr, size; | 453 | unsigned long paddr, size; |
456 | u8 pxm; | 454 | u8 pxm; |
@@ -487,8 +485,7 @@ acpi_numa_memory_affinity_init (struct acpi_table_memory_affinity *ma) | |||
487 | num_node_memblks++; | 485 | num_node_memblks++; |
488 | } | 486 | } |
489 | 487 | ||
490 | void __init | 488 | void __init acpi_numa_arch_fixup(void) |
491 | acpi_numa_arch_fixup (void) | ||
492 | { | 489 | { |
493 | int i, j, node_from, node_to; | 490 | int i, j, node_from, node_to; |
494 | 491 | ||
@@ -534,21 +531,24 @@ acpi_numa_arch_fixup (void) | |||
534 | for (i = 0; i < srat_num_cpus; i++) | 531 | for (i = 0; i < srat_num_cpus; i++) |
535 | node_cpuid[i].nid = pxm_to_nid_map[node_cpuid[i].nid]; | 532 | node_cpuid[i].nid = pxm_to_nid_map[node_cpuid[i].nid]; |
536 | 533 | ||
537 | printk(KERN_INFO "Number of logical nodes in system = %d\n", num_online_nodes()); | 534 | printk(KERN_INFO "Number of logical nodes in system = %d\n", |
538 | printk(KERN_INFO "Number of memory chunks in system = %d\n", num_node_memblks); | 535 | num_online_nodes()); |
536 | printk(KERN_INFO "Number of memory chunks in system = %d\n", | ||
537 | num_node_memblks); | ||
539 | 538 | ||
540 | if (!slit_table) return; | 539 | if (!slit_table) |
540 | return; | ||
541 | memset(numa_slit, -1, sizeof(numa_slit)); | 541 | memset(numa_slit, -1, sizeof(numa_slit)); |
542 | for (i=0; i<slit_table->localities; i++) { | 542 | for (i = 0; i < slit_table->localities; i++) { |
543 | if (!pxm_bit_test(i)) | 543 | if (!pxm_bit_test(i)) |
544 | continue; | 544 | continue; |
545 | node_from = pxm_to_nid_map[i]; | 545 | node_from = pxm_to_nid_map[i]; |
546 | for (j=0; j<slit_table->localities; j++) { | 546 | for (j = 0; j < slit_table->localities; j++) { |
547 | if (!pxm_bit_test(j)) | 547 | if (!pxm_bit_test(j)) |
548 | continue; | 548 | continue; |
549 | node_to = pxm_to_nid_map[j]; | 549 | node_to = pxm_to_nid_map[j]; |
550 | node_distance(node_from, node_to) = | 550 | node_distance(node_from, node_to) = |
551 | slit_table->entry[i*slit_table->localities + j]; | 551 | slit_table->entry[i * slit_table->localities + j]; |
552 | } | 552 | } |
553 | } | 553 | } |
554 | 554 | ||
@@ -556,36 +556,41 @@ acpi_numa_arch_fixup (void) | |||
556 | printk("ACPI 2.0 SLIT locality table:\n"); | 556 | printk("ACPI 2.0 SLIT locality table:\n"); |
557 | for_each_online_node(i) { | 557 | for_each_online_node(i) { |
558 | for_each_online_node(j) | 558 | for_each_online_node(j) |
559 | printk("%03d ", node_distance(i,j)); | 559 | printk("%03d ", node_distance(i, j)); |
560 | printk("\n"); | 560 | printk("\n"); |
561 | } | 561 | } |
562 | #endif | 562 | #endif |
563 | } | 563 | } |
564 | #endif /* CONFIG_ACPI_NUMA */ | 564 | #endif /* CONFIG_ACPI_NUMA */ |
565 | 565 | ||
566 | unsigned int | 566 | /* |
567 | acpi_register_gsi (u32 gsi, int edge_level, int active_high_low) | 567 | * success: return IRQ number (>=0) |
568 | * failure: return < 0 | ||
569 | */ | ||
570 | int acpi_register_gsi(u32 gsi, int edge_level, int active_high_low) | ||
568 | { | 571 | { |
569 | if (has_8259 && gsi < 16) | 572 | if (has_8259 && gsi < 16) |
570 | return isa_irq_to_vector(gsi); | 573 | return isa_irq_to_vector(gsi); |
571 | 574 | ||
572 | return iosapic_register_intr(gsi, | 575 | return iosapic_register_intr(gsi, |
573 | (active_high_low == ACPI_ACTIVE_HIGH) ? IOSAPIC_POL_HIGH : IOSAPIC_POL_LOW, | 576 | (active_high_low == |
574 | (edge_level == ACPI_EDGE_SENSITIVE) ? IOSAPIC_EDGE : IOSAPIC_LEVEL); | 577 | ACPI_ACTIVE_HIGH) ? IOSAPIC_POL_HIGH : |
578 | IOSAPIC_POL_LOW, | ||
579 | (edge_level == | ||
580 | ACPI_EDGE_SENSITIVE) ? IOSAPIC_EDGE : | ||
581 | IOSAPIC_LEVEL); | ||
575 | } | 582 | } |
583 | |||
576 | EXPORT_SYMBOL(acpi_register_gsi); | 584 | EXPORT_SYMBOL(acpi_register_gsi); |
577 | 585 | ||
578 | #ifdef CONFIG_ACPI_DEALLOCATE_IRQ | 586 | void acpi_unregister_gsi(u32 gsi) |
579 | void | ||
580 | acpi_unregister_gsi (u32 gsi) | ||
581 | { | 587 | { |
582 | iosapic_unregister_intr(gsi); | 588 | iosapic_unregister_intr(gsi); |
583 | } | 589 | } |
590 | |||
584 | EXPORT_SYMBOL(acpi_unregister_gsi); | 591 | EXPORT_SYMBOL(acpi_unregister_gsi); |
585 | #endif /* CONFIG_ACPI_DEALLOCATE_IRQ */ | ||
586 | 592 | ||
587 | static int __init | 593 | static int __init acpi_parse_fadt(unsigned long phys_addr, unsigned long size) |
588 | acpi_parse_fadt (unsigned long phys_addr, unsigned long size) | ||
589 | { | 594 | { |
590 | struct acpi_table_header *fadt_header; | 595 | struct acpi_table_header *fadt_header; |
591 | struct fadt_descriptor_rev2 *fadt; | 596 | struct fadt_descriptor_rev2 *fadt; |
@@ -593,11 +598,11 @@ acpi_parse_fadt (unsigned long phys_addr, unsigned long size) | |||
593 | if (!phys_addr || !size) | 598 | if (!phys_addr || !size) |
594 | return -EINVAL; | 599 | return -EINVAL; |
595 | 600 | ||
596 | fadt_header = (struct acpi_table_header *) __va(phys_addr); | 601 | fadt_header = (struct acpi_table_header *)__va(phys_addr); |
597 | if (fadt_header->revision != 3) | 602 | if (fadt_header->revision != 3) |
598 | return -ENODEV; /* Only deal with ACPI 2.0 FADT */ | 603 | return -ENODEV; /* Only deal with ACPI 2.0 FADT */ |
599 | 604 | ||
600 | fadt = (struct fadt_descriptor_rev2 *) fadt_header; | 605 | fadt = (struct fadt_descriptor_rev2 *)fadt_header; |
601 | 606 | ||
602 | if (!(fadt->iapc_boot_arch & BAF_8042_KEYBOARD_CONTROLLER)) | 607 | if (!(fadt->iapc_boot_arch & BAF_8042_KEYBOARD_CONTROLLER)) |
603 | acpi_kbd_controller_present = 0; | 608 | acpi_kbd_controller_present = 0; |
@@ -609,22 +614,19 @@ acpi_parse_fadt (unsigned long phys_addr, unsigned long size) | |||
609 | return 0; | 614 | return 0; |
610 | } | 615 | } |
611 | 616 | ||
612 | 617 | unsigned long __init acpi_find_rsdp(void) | |
613 | unsigned long __init | ||
614 | acpi_find_rsdp (void) | ||
615 | { | 618 | { |
616 | unsigned long rsdp_phys = 0; | 619 | unsigned long rsdp_phys = 0; |
617 | 620 | ||
618 | if (efi.acpi20) | 621 | if (efi.acpi20) |
619 | rsdp_phys = __pa(efi.acpi20); | 622 | rsdp_phys = __pa(efi.acpi20); |
620 | else if (efi.acpi) | 623 | else if (efi.acpi) |
621 | printk(KERN_WARNING PREFIX "v1.0/r0.71 tables no longer supported\n"); | 624 | printk(KERN_WARNING PREFIX |
625 | "v1.0/r0.71 tables no longer supported\n"); | ||
622 | return rsdp_phys; | 626 | return rsdp_phys; |
623 | } | 627 | } |
624 | 628 | ||
625 | 629 | int __init acpi_boot_init(void) | |
626 | int __init | ||
627 | acpi_boot_init (void) | ||
628 | { | 630 | { |
629 | 631 | ||
630 | /* | 632 | /* |
@@ -642,31 +644,43 @@ acpi_boot_init (void) | |||
642 | 644 | ||
643 | /* Local APIC */ | 645 | /* Local APIC */ |
644 | 646 | ||
645 | if (acpi_table_parse_madt(ACPI_MADT_LAPIC_ADDR_OVR, acpi_parse_lapic_addr_ovr, 0) < 0) | 647 | if (acpi_table_parse_madt |
646 | printk(KERN_ERR PREFIX "Error parsing LAPIC address override entry\n"); | 648 | (ACPI_MADT_LAPIC_ADDR_OVR, acpi_parse_lapic_addr_ovr, 0) < 0) |
649 | printk(KERN_ERR PREFIX | ||
650 | "Error parsing LAPIC address override entry\n"); | ||
647 | 651 | ||
648 | if (acpi_table_parse_madt(ACPI_MADT_LSAPIC, acpi_parse_lsapic, NR_CPUS) < 1) | 652 | if (acpi_table_parse_madt(ACPI_MADT_LSAPIC, acpi_parse_lsapic, NR_CPUS) |
649 | printk(KERN_ERR PREFIX "Error parsing MADT - no LAPIC entries\n"); | 653 | < 1) |
654 | printk(KERN_ERR PREFIX | ||
655 | "Error parsing MADT - no LAPIC entries\n"); | ||
650 | 656 | ||
651 | if (acpi_table_parse_madt(ACPI_MADT_LAPIC_NMI, acpi_parse_lapic_nmi, 0) < 0) | 657 | if (acpi_table_parse_madt(ACPI_MADT_LAPIC_NMI, acpi_parse_lapic_nmi, 0) |
658 | < 0) | ||
652 | printk(KERN_ERR PREFIX "Error parsing LAPIC NMI entry\n"); | 659 | printk(KERN_ERR PREFIX "Error parsing LAPIC NMI entry\n"); |
653 | 660 | ||
654 | /* I/O APIC */ | 661 | /* I/O APIC */ |
655 | 662 | ||
656 | if (acpi_table_parse_madt(ACPI_MADT_IOSAPIC, acpi_parse_iosapic, NR_IOSAPICS) < 1) | 663 | if (acpi_table_parse_madt |
657 | printk(KERN_ERR PREFIX "Error parsing MADT - no IOSAPIC entries\n"); | 664 | (ACPI_MADT_IOSAPIC, acpi_parse_iosapic, NR_IOSAPICS) < 1) |
665 | printk(KERN_ERR PREFIX | ||
666 | "Error parsing MADT - no IOSAPIC entries\n"); | ||
658 | 667 | ||
659 | /* System-Level Interrupt Routing */ | 668 | /* System-Level Interrupt Routing */ |
660 | 669 | ||
661 | if (acpi_table_parse_madt(ACPI_MADT_PLAT_INT_SRC, acpi_parse_plat_int_src, ACPI_MAX_PLATFORM_INTERRUPTS) < 0) | 670 | if (acpi_table_parse_madt |
662 | printk(KERN_ERR PREFIX "Error parsing platform interrupt source entry\n"); | 671 | (ACPI_MADT_PLAT_INT_SRC, acpi_parse_plat_int_src, |
672 | ACPI_MAX_PLATFORM_INTERRUPTS) < 0) | ||
673 | printk(KERN_ERR PREFIX | ||
674 | "Error parsing platform interrupt source entry\n"); | ||
663 | 675 | ||
664 | if (acpi_table_parse_madt(ACPI_MADT_INT_SRC_OVR, acpi_parse_int_src_ovr, 0) < 0) | 676 | if (acpi_table_parse_madt |
665 | printk(KERN_ERR PREFIX "Error parsing interrupt source overrides entry\n"); | 677 | (ACPI_MADT_INT_SRC_OVR, acpi_parse_int_src_ovr, 0) < 0) |
678 | printk(KERN_ERR PREFIX | ||
679 | "Error parsing interrupt source overrides entry\n"); | ||
666 | 680 | ||
667 | if (acpi_table_parse_madt(ACPI_MADT_NMI_SRC, acpi_parse_nmi_src, 0) < 0) | 681 | if (acpi_table_parse_madt(ACPI_MADT_NMI_SRC, acpi_parse_nmi_src, 0) < 0) |
668 | printk(KERN_ERR PREFIX "Error parsing NMI SRC entry\n"); | 682 | printk(KERN_ERR PREFIX "Error parsing NMI SRC entry\n"); |
669 | skip_madt: | 683 | skip_madt: |
670 | 684 | ||
671 | /* | 685 | /* |
672 | * FADT says whether a legacy keyboard controller is present. | 686 | * FADT says whether a legacy keyboard controller is present. |
@@ -681,8 +695,9 @@ acpi_boot_init (void) | |||
681 | if (available_cpus == 0) { | 695 | if (available_cpus == 0) { |
682 | printk(KERN_INFO "ACPI: Found 0 CPUS; assuming 1\n"); | 696 | printk(KERN_INFO "ACPI: Found 0 CPUS; assuming 1\n"); |
683 | printk(KERN_INFO "CPU 0 (0x%04x)", hard_smp_processor_id()); | 697 | printk(KERN_INFO "CPU 0 (0x%04x)", hard_smp_processor_id()); |
684 | smp_boot_data.cpu_phys_id[available_cpus] = hard_smp_processor_id(); | 698 | smp_boot_data.cpu_phys_id[available_cpus] = |
685 | available_cpus = 1; /* We've got at least one of these, no? */ | 699 | hard_smp_processor_id(); |
700 | available_cpus = 1; /* We've got at least one of these, no? */ | ||
686 | } | 701 | } |
687 | smp_boot_data.cpu_count = available_cpus; | 702 | smp_boot_data.cpu_count = available_cpus; |
688 | 703 | ||
@@ -691,8 +706,10 @@ acpi_boot_init (void) | |||
691 | if (srat_num_cpus == 0) { | 706 | if (srat_num_cpus == 0) { |
692 | int cpu, i = 1; | 707 | int cpu, i = 1; |
693 | for (cpu = 0; cpu < smp_boot_data.cpu_count; cpu++) | 708 | for (cpu = 0; cpu < smp_boot_data.cpu_count; cpu++) |
694 | if (smp_boot_data.cpu_phys_id[cpu] != hard_smp_processor_id()) | 709 | if (smp_boot_data.cpu_phys_id[cpu] != |
695 | node_cpuid[i++].phys_id = smp_boot_data.cpu_phys_id[cpu]; | 710 | hard_smp_processor_id()) |
711 | node_cpuid[i++].phys_id = | ||
712 | smp_boot_data.cpu_phys_id[cpu]; | ||
696 | } | 713 | } |
697 | # endif | 714 | # endif |
698 | #endif | 715 | #endif |
@@ -700,12 +717,12 @@ acpi_boot_init (void) | |||
700 | build_cpu_to_node_map(); | 717 | build_cpu_to_node_map(); |
701 | #endif | 718 | #endif |
702 | /* Make boot-up look pretty */ | 719 | /* Make boot-up look pretty */ |
703 | printk(KERN_INFO "%d CPUs available, %d CPUs total\n", available_cpus, total_cpus); | 720 | printk(KERN_INFO "%d CPUs available, %d CPUs total\n", available_cpus, |
721 | total_cpus); | ||
704 | return 0; | 722 | return 0; |
705 | } | 723 | } |
706 | 724 | ||
707 | int | 725 | int acpi_gsi_to_irq(u32 gsi, unsigned int *irq) |
708 | acpi_gsi_to_irq (u32 gsi, unsigned int *irq) | ||
709 | { | 726 | { |
710 | int vector; | 727 | int vector; |
711 | 728 | ||
@@ -726,11 +743,10 @@ acpi_gsi_to_irq (u32 gsi, unsigned int *irq) | |||
726 | */ | 743 | */ |
727 | #ifdef CONFIG_ACPI_HOTPLUG_CPU | 744 | #ifdef CONFIG_ACPI_HOTPLUG_CPU |
728 | static | 745 | static |
729 | int | 746 | int acpi_map_cpu2node(acpi_handle handle, int cpu, long physid) |
730 | acpi_map_cpu2node(acpi_handle handle, int cpu, long physid) | ||
731 | { | 747 | { |
732 | #ifdef CONFIG_ACPI_NUMA | 748 | #ifdef CONFIG_ACPI_NUMA |
733 | int pxm_id; | 749 | int pxm_id; |
734 | 750 | ||
735 | pxm_id = acpi_get_pxm(handle); | 751 | pxm_id = acpi_get_pxm(handle); |
736 | 752 | ||
@@ -738,31 +754,28 @@ acpi_map_cpu2node(acpi_handle handle, int cpu, long physid) | |||
738 | * Assuming that the container driver would have set the proximity | 754 | * Assuming that the container driver would have set the proximity |
739 | * domain and would have initialized pxm_to_nid_map[pxm_id] && pxm_flag | 755 | * domain and would have initialized pxm_to_nid_map[pxm_id] && pxm_flag |
740 | */ | 756 | */ |
741 | node_cpuid[cpu].nid = (pxm_id < 0) ? 0: | 757 | node_cpuid[cpu].nid = (pxm_id < 0) ? 0 : pxm_to_nid_map[pxm_id]; |
742 | pxm_to_nid_map[pxm_id]; | ||
743 | 758 | ||
744 | node_cpuid[cpu].phys_id = physid; | 759 | node_cpuid[cpu].phys_id = physid; |
745 | #endif | 760 | #endif |
746 | return(0); | 761 | return (0); |
747 | } | 762 | } |
748 | 763 | ||
749 | 764 | int acpi_map_lsapic(acpi_handle handle, int *pcpu) | |
750 | int | ||
751 | acpi_map_lsapic(acpi_handle handle, int *pcpu) | ||
752 | { | 765 | { |
753 | struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL}; | 766 | struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; |
754 | union acpi_object *obj; | 767 | union acpi_object *obj; |
755 | struct acpi_table_lsapic *lsapic; | 768 | struct acpi_table_lsapic *lsapic; |
756 | cpumask_t tmp_map; | 769 | cpumask_t tmp_map; |
757 | long physid; | 770 | long physid; |
758 | int cpu; | 771 | int cpu; |
759 | 772 | ||
760 | if (ACPI_FAILURE(acpi_evaluate_object(handle, "_MAT", NULL, &buffer))) | 773 | if (ACPI_FAILURE(acpi_evaluate_object(handle, "_MAT", NULL, &buffer))) |
761 | return -EINVAL; | 774 | return -EINVAL; |
762 | 775 | ||
763 | if (!buffer.length || !buffer.pointer) | 776 | if (!buffer.length || !buffer.pointer) |
764 | return -EINVAL; | 777 | return -EINVAL; |
765 | 778 | ||
766 | obj = buffer.pointer; | 779 | obj = buffer.pointer; |
767 | if (obj->type != ACPI_TYPE_BUFFER || | 780 | if (obj->type != ACPI_TYPE_BUFFER || |
768 | obj->buffer.length < sizeof(*lsapic)) { | 781 | obj->buffer.length < sizeof(*lsapic)) { |
@@ -778,7 +791,7 @@ acpi_map_lsapic(acpi_handle handle, int *pcpu) | |||
778 | return -EINVAL; | 791 | return -EINVAL; |
779 | } | 792 | } |
780 | 793 | ||
781 | physid = ((lsapic->id <<8) | (lsapic->eid)); | 794 | physid = ((lsapic->id << 8) | (lsapic->eid)); |
782 | 795 | ||
783 | acpi_os_free(buffer.pointer); | 796 | acpi_os_free(buffer.pointer); |
784 | buffer.length = ACPI_ALLOCATE_BUFFER; | 797 | buffer.length = ACPI_ALLOCATE_BUFFER; |
@@ -786,50 +799,49 @@ acpi_map_lsapic(acpi_handle handle, int *pcpu) | |||
786 | 799 | ||
787 | cpus_complement(tmp_map, cpu_present_map); | 800 | cpus_complement(tmp_map, cpu_present_map); |
788 | cpu = first_cpu(tmp_map); | 801 | cpu = first_cpu(tmp_map); |
789 | if(cpu >= NR_CPUS) | 802 | if (cpu >= NR_CPUS) |
790 | return -EINVAL; | 803 | return -EINVAL; |
791 | 804 | ||
792 | acpi_map_cpu2node(handle, cpu, physid); | 805 | acpi_map_cpu2node(handle, cpu, physid); |
793 | 806 | ||
794 | cpu_set(cpu, cpu_present_map); | 807 | cpu_set(cpu, cpu_present_map); |
795 | ia64_cpu_to_sapicid[cpu] = physid; | 808 | ia64_cpu_to_sapicid[cpu] = physid; |
796 | ia64_acpiid_to_sapicid[lsapic->acpi_id] = ia64_cpu_to_sapicid[cpu]; | 809 | ia64_acpiid_to_sapicid[lsapic->acpi_id] = ia64_cpu_to_sapicid[cpu]; |
797 | 810 | ||
798 | *pcpu = cpu; | 811 | *pcpu = cpu; |
799 | return(0); | 812 | return (0); |
800 | } | 813 | } |
801 | EXPORT_SYMBOL(acpi_map_lsapic); | ||
802 | 814 | ||
815 | EXPORT_SYMBOL(acpi_map_lsapic); | ||
803 | 816 | ||
804 | int | 817 | int acpi_unmap_lsapic(int cpu) |
805 | acpi_unmap_lsapic(int cpu) | ||
806 | { | 818 | { |
807 | int i; | 819 | int i; |
808 | 820 | ||
809 | for (i=0; i<MAX_SAPICS; i++) { | 821 | for (i = 0; i < MAX_SAPICS; i++) { |
810 | if (ia64_acpiid_to_sapicid[i] == ia64_cpu_to_sapicid[cpu]) { | 822 | if (ia64_acpiid_to_sapicid[i] == ia64_cpu_to_sapicid[cpu]) { |
811 | ia64_acpiid_to_sapicid[i] = -1; | 823 | ia64_acpiid_to_sapicid[i] = -1; |
812 | break; | 824 | break; |
813 | } | 825 | } |
814 | } | 826 | } |
815 | ia64_cpu_to_sapicid[cpu] = -1; | 827 | ia64_cpu_to_sapicid[cpu] = -1; |
816 | cpu_clear(cpu,cpu_present_map); | 828 | cpu_clear(cpu, cpu_present_map); |
817 | 829 | ||
818 | #ifdef CONFIG_ACPI_NUMA | 830 | #ifdef CONFIG_ACPI_NUMA |
819 | /* NUMA specific cleanup's */ | 831 | /* NUMA specific cleanup's */ |
820 | #endif | 832 | #endif |
821 | 833 | ||
822 | return(0); | 834 | return (0); |
823 | } | 835 | } |
836 | |||
824 | EXPORT_SYMBOL(acpi_unmap_lsapic); | 837 | EXPORT_SYMBOL(acpi_unmap_lsapic); |
825 | #endif /* CONFIG_ACPI_HOTPLUG_CPU */ | 838 | #endif /* CONFIG_ACPI_HOTPLUG_CPU */ |
826 | |||
827 | 839 | ||
828 | #ifdef CONFIG_ACPI_NUMA | 840 | #ifdef CONFIG_ACPI_NUMA |
829 | acpi_status __devinit | 841 | static acpi_status __devinit |
830 | acpi_map_iosapic (acpi_handle handle, u32 depth, void *context, void **ret) | 842 | acpi_map_iosapic(acpi_handle handle, u32 depth, void *context, void **ret) |
831 | { | 843 | { |
832 | struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL}; | 844 | struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; |
833 | union acpi_object *obj; | 845 | union acpi_object *obj; |
834 | struct acpi_table_iosapic *iosapic; | 846 | struct acpi_table_iosapic *iosapic; |
835 | unsigned int gsi_base; | 847 | unsigned int gsi_base; |
@@ -878,29 +890,38 @@ acpi_map_iosapic (acpi_handle handle, u32 depth, void *context, void **ret) | |||
878 | map_iosapic_to_node(gsi_base, node); | 890 | map_iosapic_to_node(gsi_base, node); |
879 | return AE_OK; | 891 | return AE_OK; |
880 | } | 892 | } |
881 | #endif /* CONFIG_NUMA */ | ||
882 | 893 | ||
883 | int | 894 | static int __init |
884 | acpi_register_ioapic (acpi_handle handle, u64 phys_addr, u32 gsi_base) | 895 | acpi_map_iosapics (void) |
896 | { | ||
897 | acpi_get_devices(NULL, acpi_map_iosapic, NULL, NULL); | ||
898 | return 0; | ||
899 | } | ||
900 | |||
901 | fs_initcall(acpi_map_iosapics); | ||
902 | #endif /* CONFIG_ACPI_NUMA */ | ||
903 | |||
904 | int acpi_register_ioapic(acpi_handle handle, u64 phys_addr, u32 gsi_base) | ||
885 | { | 905 | { |
886 | int err; | 906 | int err; |
887 | 907 | ||
888 | if ((err = iosapic_init(phys_addr, gsi_base))) | 908 | if ((err = iosapic_init(phys_addr, gsi_base))) |
889 | return err; | 909 | return err; |
890 | 910 | ||
891 | #if CONFIG_ACPI_NUMA | 911 | #ifdef CONFIG_ACPI_NUMA |
892 | acpi_map_iosapic(handle, 0, NULL, NULL); | 912 | acpi_map_iosapic(handle, 0, NULL, NULL); |
893 | #endif /* CONFIG_ACPI_NUMA */ | 913 | #endif /* CONFIG_ACPI_NUMA */ |
894 | 914 | ||
895 | return 0; | 915 | return 0; |
896 | } | 916 | } |
917 | |||
897 | EXPORT_SYMBOL(acpi_register_ioapic); | 918 | EXPORT_SYMBOL(acpi_register_ioapic); |
898 | 919 | ||
899 | int | 920 | int acpi_unregister_ioapic(acpi_handle handle, u32 gsi_base) |
900 | acpi_unregister_ioapic (acpi_handle handle, u32 gsi_base) | ||
901 | { | 921 | { |
902 | return iosapic_remove(gsi_base); | 922 | return iosapic_remove(gsi_base); |
903 | } | 923 | } |
924 | |||
904 | EXPORT_SYMBOL(acpi_unregister_ioapic); | 925 | EXPORT_SYMBOL(acpi_unregister_ioapic); |
905 | 926 | ||
906 | #endif /* CONFIG_ACPI_BOOT */ | 927 | #endif /* CONFIG_ACPI */ |
diff --git a/arch/ia64/kernel/asm-offsets.c b/arch/ia64/kernel/asm-offsets.c index 7d1ae2982c53..77225659e968 100644 --- a/arch/ia64/kernel/asm-offsets.c +++ b/arch/ia64/kernel/asm-offsets.c | |||
@@ -4,6 +4,7 @@ | |||
4 | * to extract and format the required data. | 4 | * to extract and format the required data. |
5 | */ | 5 | */ |
6 | 6 | ||
7 | #define ASM_OFFSETS_C 1 | ||
7 | #include <linux/config.h> | 8 | #include <linux/config.h> |
8 | 9 | ||
9 | #include <linux/sched.h> | 10 | #include <linux/sched.h> |
@@ -211,17 +212,41 @@ void foo(void) | |||
211 | #endif | 212 | #endif |
212 | 213 | ||
213 | BLANK(); | 214 | BLANK(); |
214 | DEFINE(IA64_MCA_CPU_PROC_STATE_DUMP_OFFSET, | 215 | DEFINE(IA64_MCA_CPU_MCA_STACK_OFFSET, |
215 | offsetof (struct ia64_mca_cpu, proc_state_dump)); | 216 | offsetof (struct ia64_mca_cpu, mca_stack)); |
216 | DEFINE(IA64_MCA_CPU_STACK_OFFSET, | ||
217 | offsetof (struct ia64_mca_cpu, stack)); | ||
218 | DEFINE(IA64_MCA_CPU_STACKFRAME_OFFSET, | ||
219 | offsetof (struct ia64_mca_cpu, stackframe)); | ||
220 | DEFINE(IA64_MCA_CPU_RBSTORE_OFFSET, | ||
221 | offsetof (struct ia64_mca_cpu, rbstore)); | ||
222 | DEFINE(IA64_MCA_CPU_INIT_STACK_OFFSET, | 217 | DEFINE(IA64_MCA_CPU_INIT_STACK_OFFSET, |
223 | offsetof (struct ia64_mca_cpu, init_stack)); | 218 | offsetof (struct ia64_mca_cpu, init_stack)); |
224 | BLANK(); | 219 | BLANK(); |
220 | DEFINE(IA64_SAL_OS_STATE_COMMON_OFFSET, | ||
221 | offsetof (struct ia64_sal_os_state, sal_ra)); | ||
222 | DEFINE(IA64_SAL_OS_STATE_OS_GP_OFFSET, | ||
223 | offsetof (struct ia64_sal_os_state, os_gp)); | ||
224 | DEFINE(IA64_SAL_OS_STATE_PAL_MIN_STATE_OFFSET, | ||
225 | offsetof (struct ia64_sal_os_state, pal_min_state)); | ||
226 | DEFINE(IA64_SAL_OS_STATE_PROC_STATE_PARAM_OFFSET, | ||
227 | offsetof (struct ia64_sal_os_state, proc_state_param)); | ||
228 | DEFINE(IA64_SAL_OS_STATE_SIZE, | ||
229 | sizeof (struct ia64_sal_os_state)); | ||
230 | DEFINE(IA64_PMSA_GR_OFFSET, | ||
231 | offsetof (struct pal_min_state_area_s, pmsa_gr)); | ||
232 | DEFINE(IA64_PMSA_BANK1_GR_OFFSET, | ||
233 | offsetof (struct pal_min_state_area_s, pmsa_bank1_gr)); | ||
234 | DEFINE(IA64_PMSA_PR_OFFSET, | ||
235 | offsetof (struct pal_min_state_area_s, pmsa_pr)); | ||
236 | DEFINE(IA64_PMSA_BR0_OFFSET, | ||
237 | offsetof (struct pal_min_state_area_s, pmsa_br0)); | ||
238 | DEFINE(IA64_PMSA_RSC_OFFSET, | ||
239 | offsetof (struct pal_min_state_area_s, pmsa_rsc)); | ||
240 | DEFINE(IA64_PMSA_IIP_OFFSET, | ||
241 | offsetof (struct pal_min_state_area_s, pmsa_iip)); | ||
242 | DEFINE(IA64_PMSA_IPSR_OFFSET, | ||
243 | offsetof (struct pal_min_state_area_s, pmsa_ipsr)); | ||
244 | DEFINE(IA64_PMSA_IFS_OFFSET, | ||
245 | offsetof (struct pal_min_state_area_s, pmsa_ifs)); | ||
246 | DEFINE(IA64_PMSA_XIP_OFFSET, | ||
247 | offsetof (struct pal_min_state_area_s, pmsa_xip)); | ||
248 | BLANK(); | ||
249 | |||
225 | /* used by fsys_gettimeofday in arch/ia64/kernel/fsys.S */ | 250 | /* used by fsys_gettimeofday in arch/ia64/kernel/fsys.S */ |
226 | DEFINE(IA64_TIME_INTERPOLATOR_ADDRESS_OFFSET, offsetof (struct time_interpolator, addr)); | 251 | DEFINE(IA64_TIME_INTERPOLATOR_ADDRESS_OFFSET, offsetof (struct time_interpolator, addr)); |
227 | DEFINE(IA64_TIME_INTERPOLATOR_SOURCE_OFFSET, offsetof (struct time_interpolator, source)); | 252 | DEFINE(IA64_TIME_INTERPOLATOR_SOURCE_OFFSET, offsetof (struct time_interpolator, source)); |
diff --git a/arch/ia64/kernel/domain.c b/arch/ia64/kernel/domain.c deleted file mode 100644 index bbb8efe126b7..000000000000 --- a/arch/ia64/kernel/domain.c +++ /dev/null | |||
@@ -1,396 +0,0 @@ | |||
1 | /* | ||
2 | * arch/ia64/kernel/domain.c | ||
3 | * Architecture specific sched-domains builder. | ||
4 | * | ||
5 | * Copyright (C) 2004 Jesse Barnes | ||
6 | * Copyright (C) 2004 Silicon Graphics, Inc. | ||
7 | */ | ||
8 | |||
9 | #include <linux/sched.h> | ||
10 | #include <linux/percpu.h> | ||
11 | #include <linux/slab.h> | ||
12 | #include <linux/cpumask.h> | ||
13 | #include <linux/init.h> | ||
14 | #include <linux/topology.h> | ||
15 | #include <linux/nodemask.h> | ||
16 | |||
17 | #define SD_NODES_PER_DOMAIN 16 | ||
18 | |||
19 | #ifdef CONFIG_NUMA | ||
20 | /** | ||
21 | * find_next_best_node - find the next node to include in a sched_domain | ||
22 | * @node: node whose sched_domain we're building | ||
23 | * @used_nodes: nodes already in the sched_domain | ||
24 | * | ||
25 | * Find the next node to include in a given scheduling domain. Simply | ||
26 | * finds the closest node not already in the @used_nodes map. | ||
27 | * | ||
28 | * Should use nodemask_t. | ||
29 | */ | ||
30 | static int find_next_best_node(int node, unsigned long *used_nodes) | ||
31 | { | ||
32 | int i, n, val, min_val, best_node = 0; | ||
33 | |||
34 | min_val = INT_MAX; | ||
35 | |||
36 | for (i = 0; i < MAX_NUMNODES; i++) { | ||
37 | /* Start at @node */ | ||
38 | n = (node + i) % MAX_NUMNODES; | ||
39 | |||
40 | if (!nr_cpus_node(n)) | ||
41 | continue; | ||
42 | |||
43 | /* Skip already used nodes */ | ||
44 | if (test_bit(n, used_nodes)) | ||
45 | continue; | ||
46 | |||
47 | /* Simple min distance search */ | ||
48 | val = node_distance(node, n); | ||
49 | |||
50 | if (val < min_val) { | ||
51 | min_val = val; | ||
52 | best_node = n; | ||
53 | } | ||
54 | } | ||
55 | |||
56 | set_bit(best_node, used_nodes); | ||
57 | return best_node; | ||
58 | } | ||
59 | |||
60 | /** | ||
61 | * sched_domain_node_span - get a cpumask for a node's sched_domain | ||
62 | * @node: node whose cpumask we're constructing | ||
63 | * @size: number of nodes to include in this span | ||
64 | * | ||
65 | * Given a node, construct a good cpumask for its sched_domain to span. It | ||
66 | * should be one that prevents unnecessary balancing, but also spreads tasks | ||
67 | * out optimally. | ||
68 | */ | ||
69 | static cpumask_t sched_domain_node_span(int node) | ||
70 | { | ||
71 | int i; | ||
72 | cpumask_t span, nodemask; | ||
73 | DECLARE_BITMAP(used_nodes, MAX_NUMNODES); | ||
74 | |||
75 | cpus_clear(span); | ||
76 | bitmap_zero(used_nodes, MAX_NUMNODES); | ||
77 | |||
78 | nodemask = node_to_cpumask(node); | ||
79 | cpus_or(span, span, nodemask); | ||
80 | set_bit(node, used_nodes); | ||
81 | |||
82 | for (i = 1; i < SD_NODES_PER_DOMAIN; i++) { | ||
83 | int next_node = find_next_best_node(node, used_nodes); | ||
84 | nodemask = node_to_cpumask(next_node); | ||
85 | cpus_or(span, span, nodemask); | ||
86 | } | ||
87 | |||
88 | return span; | ||
89 | } | ||
90 | #endif | ||
91 | |||
92 | /* | ||
93 | * At the moment, CONFIG_SCHED_SMT is never defined, but leave it in so we | ||
94 | * can switch it on easily if needed. | ||
95 | */ | ||
96 | #ifdef CONFIG_SCHED_SMT | ||
97 | static DEFINE_PER_CPU(struct sched_domain, cpu_domains); | ||
98 | static struct sched_group sched_group_cpus[NR_CPUS]; | ||
99 | static int cpu_to_cpu_group(int cpu) | ||
100 | { | ||
101 | return cpu; | ||
102 | } | ||
103 | #endif | ||
104 | |||
105 | static DEFINE_PER_CPU(struct sched_domain, phys_domains); | ||
106 | static struct sched_group sched_group_phys[NR_CPUS]; | ||
107 | static int cpu_to_phys_group(int cpu) | ||
108 | { | ||
109 | #ifdef CONFIG_SCHED_SMT | ||
110 | return first_cpu(cpu_sibling_map[cpu]); | ||
111 | #else | ||
112 | return cpu; | ||
113 | #endif | ||
114 | } | ||
115 | |||
116 | #ifdef CONFIG_NUMA | ||
117 | /* | ||
118 | * The init_sched_build_groups can't handle what we want to do with node | ||
119 | * groups, so roll our own. Now each node has its own list of groups which | ||
120 | * gets dynamically allocated. | ||
121 | */ | ||
122 | static DEFINE_PER_CPU(struct sched_domain, node_domains); | ||
123 | static struct sched_group *sched_group_nodes[MAX_NUMNODES]; | ||
124 | |||
125 | static DEFINE_PER_CPU(struct sched_domain, allnodes_domains); | ||
126 | static struct sched_group sched_group_allnodes[MAX_NUMNODES]; | ||
127 | |||
128 | static int cpu_to_allnodes_group(int cpu) | ||
129 | { | ||
130 | return cpu_to_node(cpu); | ||
131 | } | ||
132 | #endif | ||
133 | |||
134 | /* | ||
135 | * Build sched domains for a given set of cpus and attach the sched domains | ||
136 | * to the individual cpus | ||
137 | */ | ||
138 | void build_sched_domains(const cpumask_t *cpu_map) | ||
139 | { | ||
140 | int i; | ||
141 | |||
142 | /* | ||
143 | * Set up domains for cpus specified by the cpu_map. | ||
144 | */ | ||
145 | for_each_cpu_mask(i, *cpu_map) { | ||
146 | int group; | ||
147 | struct sched_domain *sd = NULL, *p; | ||
148 | cpumask_t nodemask = node_to_cpumask(cpu_to_node(i)); | ||
149 | |||
150 | cpus_and(nodemask, nodemask, *cpu_map); | ||
151 | |||
152 | #ifdef CONFIG_NUMA | ||
153 | if (num_online_cpus() | ||
154 | > SD_NODES_PER_DOMAIN*cpus_weight(nodemask)) { | ||
155 | sd = &per_cpu(allnodes_domains, i); | ||
156 | *sd = SD_ALLNODES_INIT; | ||
157 | sd->span = *cpu_map; | ||
158 | group = cpu_to_allnodes_group(i); | ||
159 | sd->groups = &sched_group_allnodes[group]; | ||
160 | p = sd; | ||
161 | } else | ||
162 | p = NULL; | ||
163 | |||
164 | sd = &per_cpu(node_domains, i); | ||
165 | *sd = SD_NODE_INIT; | ||
166 | sd->span = sched_domain_node_span(cpu_to_node(i)); | ||
167 | sd->parent = p; | ||
168 | cpus_and(sd->span, sd->span, *cpu_map); | ||
169 | #endif | ||
170 | |||
171 | p = sd; | ||
172 | sd = &per_cpu(phys_domains, i); | ||
173 | group = cpu_to_phys_group(i); | ||
174 | *sd = SD_CPU_INIT; | ||
175 | sd->span = nodemask; | ||
176 | sd->parent = p; | ||
177 | sd->groups = &sched_group_phys[group]; | ||
178 | |||
179 | #ifdef CONFIG_SCHED_SMT | ||
180 | p = sd; | ||
181 | sd = &per_cpu(cpu_domains, i); | ||
182 | group = cpu_to_cpu_group(i); | ||
183 | *sd = SD_SIBLING_INIT; | ||
184 | sd->span = cpu_sibling_map[i]; | ||
185 | cpus_and(sd->span, sd->span, *cpu_map); | ||
186 | sd->parent = p; | ||
187 | sd->groups = &sched_group_cpus[group]; | ||
188 | #endif | ||
189 | } | ||
190 | |||
191 | #ifdef CONFIG_SCHED_SMT | ||
192 | /* Set up CPU (sibling) groups */ | ||
193 | for_each_cpu_mask(i, *cpu_map) { | ||
194 | cpumask_t this_sibling_map = cpu_sibling_map[i]; | ||
195 | cpus_and(this_sibling_map, this_sibling_map, *cpu_map); | ||
196 | if (i != first_cpu(this_sibling_map)) | ||
197 | continue; | ||
198 | |||
199 | init_sched_build_groups(sched_group_cpus, this_sibling_map, | ||
200 | &cpu_to_cpu_group); | ||
201 | } | ||
202 | #endif | ||
203 | |||
204 | /* Set up physical groups */ | ||
205 | for (i = 0; i < MAX_NUMNODES; i++) { | ||
206 | cpumask_t nodemask = node_to_cpumask(i); | ||
207 | |||
208 | cpus_and(nodemask, nodemask, *cpu_map); | ||
209 | if (cpus_empty(nodemask)) | ||
210 | continue; | ||
211 | |||
212 | init_sched_build_groups(sched_group_phys, nodemask, | ||
213 | &cpu_to_phys_group); | ||
214 | } | ||
215 | |||
216 | #ifdef CONFIG_NUMA | ||
217 | init_sched_build_groups(sched_group_allnodes, *cpu_map, | ||
218 | &cpu_to_allnodes_group); | ||
219 | |||
220 | for (i = 0; i < MAX_NUMNODES; i++) { | ||
221 | /* Set up node groups */ | ||
222 | struct sched_group *sg, *prev; | ||
223 | cpumask_t nodemask = node_to_cpumask(i); | ||
224 | cpumask_t domainspan; | ||
225 | cpumask_t covered = CPU_MASK_NONE; | ||
226 | int j; | ||
227 | |||
228 | cpus_and(nodemask, nodemask, *cpu_map); | ||
229 | if (cpus_empty(nodemask)) | ||
230 | continue; | ||
231 | |||
232 | domainspan = sched_domain_node_span(i); | ||
233 | cpus_and(domainspan, domainspan, *cpu_map); | ||
234 | |||
235 | sg = kmalloc(sizeof(struct sched_group), GFP_KERNEL); | ||
236 | sched_group_nodes[i] = sg; | ||
237 | for_each_cpu_mask(j, nodemask) { | ||
238 | struct sched_domain *sd; | ||
239 | sd = &per_cpu(node_domains, j); | ||
240 | sd->groups = sg; | ||
241 | if (sd->groups == NULL) { | ||
242 | /* Turn off balancing if we have no groups */ | ||
243 | sd->flags = 0; | ||
244 | } | ||
245 | } | ||
246 | if (!sg) { | ||
247 | printk(KERN_WARNING | ||
248 | "Can not alloc domain group for node %d\n", i); | ||
249 | continue; | ||
250 | } | ||
251 | sg->cpu_power = 0; | ||
252 | sg->cpumask = nodemask; | ||
253 | cpus_or(covered, covered, nodemask); | ||
254 | prev = sg; | ||
255 | |||
256 | for (j = 0; j < MAX_NUMNODES; j++) { | ||
257 | cpumask_t tmp, notcovered; | ||
258 | int n = (i + j) % MAX_NUMNODES; | ||
259 | |||
260 | cpus_complement(notcovered, covered); | ||
261 | cpus_and(tmp, notcovered, *cpu_map); | ||
262 | cpus_and(tmp, tmp, domainspan); | ||
263 | if (cpus_empty(tmp)) | ||
264 | break; | ||
265 | |||
266 | nodemask = node_to_cpumask(n); | ||
267 | cpus_and(tmp, tmp, nodemask); | ||
268 | if (cpus_empty(tmp)) | ||
269 | continue; | ||
270 | |||
271 | sg = kmalloc(sizeof(struct sched_group), GFP_KERNEL); | ||
272 | if (!sg) { | ||
273 | printk(KERN_WARNING | ||
274 | "Can not alloc domain group for node %d\n", j); | ||
275 | break; | ||
276 | } | ||
277 | sg->cpu_power = 0; | ||
278 | sg->cpumask = tmp; | ||
279 | cpus_or(covered, covered, tmp); | ||
280 | prev->next = sg; | ||
281 | prev = sg; | ||
282 | } | ||
283 | prev->next = sched_group_nodes[i]; | ||
284 | } | ||
285 | #endif | ||
286 | |||
287 | /* Calculate CPU power for physical packages and nodes */ | ||
288 | for_each_cpu_mask(i, *cpu_map) { | ||
289 | int power; | ||
290 | struct sched_domain *sd; | ||
291 | #ifdef CONFIG_SCHED_SMT | ||
292 | sd = &per_cpu(cpu_domains, i); | ||
293 | power = SCHED_LOAD_SCALE; | ||
294 | sd->groups->cpu_power = power; | ||
295 | #endif | ||
296 | |||
297 | sd = &per_cpu(phys_domains, i); | ||
298 | power = SCHED_LOAD_SCALE + SCHED_LOAD_SCALE * | ||
299 | (cpus_weight(sd->groups->cpumask)-1) / 10; | ||
300 | sd->groups->cpu_power = power; | ||
301 | |||
302 | #ifdef CONFIG_NUMA | ||
303 | sd = &per_cpu(allnodes_domains, i); | ||
304 | if (sd->groups) { | ||
305 | power = SCHED_LOAD_SCALE + SCHED_LOAD_SCALE * | ||
306 | (cpus_weight(sd->groups->cpumask)-1) / 10; | ||
307 | sd->groups->cpu_power = power; | ||
308 | } | ||
309 | #endif | ||
310 | } | ||
311 | |||
312 | #ifdef CONFIG_NUMA | ||
313 | for (i = 0; i < MAX_NUMNODES; i++) { | ||
314 | struct sched_group *sg = sched_group_nodes[i]; | ||
315 | int j; | ||
316 | |||
317 | if (sg == NULL) | ||
318 | continue; | ||
319 | next_sg: | ||
320 | for_each_cpu_mask(j, sg->cpumask) { | ||
321 | struct sched_domain *sd; | ||
322 | int power; | ||
323 | |||
324 | sd = &per_cpu(phys_domains, j); | ||
325 | if (j != first_cpu(sd->groups->cpumask)) { | ||
326 | /* | ||
327 | * Only add "power" once for each | ||
328 | * physical package. | ||
329 | */ | ||
330 | continue; | ||
331 | } | ||
332 | power = SCHED_LOAD_SCALE + SCHED_LOAD_SCALE * | ||
333 | (cpus_weight(sd->groups->cpumask)-1) / 10; | ||
334 | |||
335 | sg->cpu_power += power; | ||
336 | } | ||
337 | sg = sg->next; | ||
338 | if (sg != sched_group_nodes[i]) | ||
339 | goto next_sg; | ||
340 | } | ||
341 | #endif | ||
342 | |||
343 | /* Attach the domains */ | ||
344 | for_each_cpu_mask(i, *cpu_map) { | ||
345 | struct sched_domain *sd; | ||
346 | #ifdef CONFIG_SCHED_SMT | ||
347 | sd = &per_cpu(cpu_domains, i); | ||
348 | #else | ||
349 | sd = &per_cpu(phys_domains, i); | ||
350 | #endif | ||
351 | cpu_attach_domain(sd, i); | ||
352 | } | ||
353 | } | ||
354 | /* | ||
355 | * Set up scheduler domains and groups. Callers must hold the hotplug lock. | ||
356 | */ | ||
357 | void arch_init_sched_domains(const cpumask_t *cpu_map) | ||
358 | { | ||
359 | cpumask_t cpu_default_map; | ||
360 | |||
361 | /* | ||
362 | * Setup mask for cpus without special case scheduling requirements. | ||
363 | * For now this just excludes isolated cpus, but could be used to | ||
364 | * exclude other special cases in the future. | ||
365 | */ | ||
366 | cpus_andnot(cpu_default_map, *cpu_map, cpu_isolated_map); | ||
367 | |||
368 | build_sched_domains(&cpu_default_map); | ||
369 | } | ||
370 | |||
371 | void arch_destroy_sched_domains(const cpumask_t *cpu_map) | ||
372 | { | ||
373 | #ifdef CONFIG_NUMA | ||
374 | int i; | ||
375 | for (i = 0; i < MAX_NUMNODES; i++) { | ||
376 | cpumask_t nodemask = node_to_cpumask(i); | ||
377 | struct sched_group *oldsg, *sg = sched_group_nodes[i]; | ||
378 | |||
379 | cpus_and(nodemask, nodemask, *cpu_map); | ||
380 | if (cpus_empty(nodemask)) | ||
381 | continue; | ||
382 | |||
383 | if (sg == NULL) | ||
384 | continue; | ||
385 | sg = sg->next; | ||
386 | next_sg: | ||
387 | oldsg = sg; | ||
388 | sg = sg->next; | ||
389 | kfree(oldsg); | ||
390 | if (oldsg != sched_group_nodes[i]) | ||
391 | goto next_sg; | ||
392 | sched_group_nodes[i] = NULL; | ||
393 | } | ||
394 | #endif | ||
395 | } | ||
396 | |||
diff --git a/arch/ia64/kernel/efi.c b/arch/ia64/kernel/efi.c index 179f230816ed..f72ea6aebcb1 100644 --- a/arch/ia64/kernel/efi.c +++ b/arch/ia64/kernel/efi.c | |||
@@ -239,57 +239,30 @@ is_available_memory (efi_memory_desc_t *md) | |||
239 | return 0; | 239 | return 0; |
240 | } | 240 | } |
241 | 241 | ||
242 | /* | 242 | typedef struct kern_memdesc { |
243 | * Trim descriptor MD so its starts at address START_ADDR. If the descriptor covers | 243 | u64 attribute; |
244 | * memory that is normally available to the kernel, issue a warning that some memory | 244 | u64 start; |
245 | * is being ignored. | 245 | u64 num_pages; |
246 | */ | 246 | } kern_memdesc_t; |
247 | static void | ||
248 | trim_bottom (efi_memory_desc_t *md, u64 start_addr) | ||
249 | { | ||
250 | u64 num_skipped_pages; | ||
251 | 247 | ||
252 | if (md->phys_addr >= start_addr || !md->num_pages) | 248 | static kern_memdesc_t *kern_memmap; |
253 | return; | ||
254 | |||
255 | num_skipped_pages = (start_addr - md->phys_addr) >> EFI_PAGE_SHIFT; | ||
256 | if (num_skipped_pages > md->num_pages) | ||
257 | num_skipped_pages = md->num_pages; | ||
258 | |||
259 | if (is_available_memory(md)) | ||
260 | printk(KERN_NOTICE "efi.%s: ignoring %luKB of memory at 0x%lx due to granule hole " | ||
261 | "at 0x%lx\n", __FUNCTION__, | ||
262 | (num_skipped_pages << EFI_PAGE_SHIFT) >> 10, | ||
263 | md->phys_addr, start_addr - IA64_GRANULE_SIZE); | ||
264 | /* | ||
265 | * NOTE: Don't set md->phys_addr to START_ADDR because that could cause the memory | ||
266 | * descriptor list to become unsorted. In such a case, md->num_pages will be | ||
267 | * zero, so the Right Thing will happen. | ||
268 | */ | ||
269 | md->phys_addr += num_skipped_pages << EFI_PAGE_SHIFT; | ||
270 | md->num_pages -= num_skipped_pages; | ||
271 | } | ||
272 | 249 | ||
273 | static void | 250 | static void |
274 | trim_top (efi_memory_desc_t *md, u64 end_addr) | 251 | walk (efi_freemem_callback_t callback, void *arg, u64 attr) |
275 | { | 252 | { |
276 | u64 num_dropped_pages, md_end_addr; | 253 | kern_memdesc_t *k; |
277 | 254 | u64 start, end, voff; | |
278 | md_end_addr = md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT); | ||
279 | |||
280 | if (md_end_addr <= end_addr || !md->num_pages) | ||
281 | return; | ||
282 | 255 | ||
283 | num_dropped_pages = (md_end_addr - end_addr) >> EFI_PAGE_SHIFT; | 256 | voff = (attr == EFI_MEMORY_WB) ? PAGE_OFFSET : __IA64_UNCACHED_OFFSET; |
284 | if (num_dropped_pages > md->num_pages) | 257 | for (k = kern_memmap; k->start != ~0UL; k++) { |
285 | num_dropped_pages = md->num_pages; | 258 | if (k->attribute != attr) |
286 | 259 | continue; | |
287 | if (is_available_memory(md)) | 260 | start = PAGE_ALIGN(k->start); |
288 | printk(KERN_NOTICE "efi.%s: ignoring %luKB of memory at 0x%lx due to granule hole " | 261 | end = (k->start + (k->num_pages << EFI_PAGE_SHIFT)) & PAGE_MASK; |
289 | "at 0x%lx\n", __FUNCTION__, | 262 | if (start < end) |
290 | (num_dropped_pages << EFI_PAGE_SHIFT) >> 10, | 263 | if ((*callback)(start + voff, end + voff, arg) < 0) |
291 | md->phys_addr, end_addr); | 264 | return; |
292 | md->num_pages -= num_dropped_pages; | 265 | } |
293 | } | 266 | } |
294 | 267 | ||
295 | /* | 268 | /* |
@@ -299,148 +272,19 @@ trim_top (efi_memory_desc_t *md, u64 end_addr) | |||
299 | void | 272 | void |
300 | efi_memmap_walk (efi_freemem_callback_t callback, void *arg) | 273 | efi_memmap_walk (efi_freemem_callback_t callback, void *arg) |
301 | { | 274 | { |
302 | int prev_valid = 0; | 275 | walk(callback, arg, EFI_MEMORY_WB); |
303 | struct range { | ||
304 | u64 start; | ||
305 | u64 end; | ||
306 | } prev, curr; | ||
307 | void *efi_map_start, *efi_map_end, *p, *q; | ||
308 | efi_memory_desc_t *md, *check_md; | ||
309 | u64 efi_desc_size, start, end, granule_addr, last_granule_addr, first_non_wb_addr = 0; | ||
310 | unsigned long total_mem = 0; | ||
311 | |||
312 | efi_map_start = __va(ia64_boot_param->efi_memmap); | ||
313 | efi_map_end = efi_map_start + ia64_boot_param->efi_memmap_size; | ||
314 | efi_desc_size = ia64_boot_param->efi_memdesc_size; | ||
315 | |||
316 | for (p = efi_map_start; p < efi_map_end; p += efi_desc_size) { | ||
317 | md = p; | ||
318 | |||
319 | /* skip over non-WB memory descriptors; that's all we're interested in... */ | ||
320 | if (!(md->attribute & EFI_MEMORY_WB)) | ||
321 | continue; | ||
322 | |||
323 | /* | ||
324 | * granule_addr is the base of md's first granule. | ||
325 | * [granule_addr - first_non_wb_addr) is guaranteed to | ||
326 | * be contiguous WB memory. | ||
327 | */ | ||
328 | granule_addr = GRANULEROUNDDOWN(md->phys_addr); | ||
329 | first_non_wb_addr = max(first_non_wb_addr, granule_addr); | ||
330 | |||
331 | if (first_non_wb_addr < md->phys_addr) { | ||
332 | trim_bottom(md, granule_addr + IA64_GRANULE_SIZE); | ||
333 | granule_addr = GRANULEROUNDDOWN(md->phys_addr); | ||
334 | first_non_wb_addr = max(first_non_wb_addr, granule_addr); | ||
335 | } | ||
336 | |||
337 | for (q = p; q < efi_map_end; q += efi_desc_size) { | ||
338 | check_md = q; | ||
339 | |||
340 | if ((check_md->attribute & EFI_MEMORY_WB) && | ||
341 | (check_md->phys_addr == first_non_wb_addr)) | ||
342 | first_non_wb_addr += check_md->num_pages << EFI_PAGE_SHIFT; | ||
343 | else | ||
344 | break; /* non-WB or hole */ | ||
345 | } | ||
346 | |||
347 | last_granule_addr = GRANULEROUNDDOWN(first_non_wb_addr); | ||
348 | if (last_granule_addr < md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT)) | ||
349 | trim_top(md, last_granule_addr); | ||
350 | |||
351 | if (is_available_memory(md)) { | ||
352 | if (md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT) >= max_addr) { | ||
353 | if (md->phys_addr >= max_addr) | ||
354 | continue; | ||
355 | md->num_pages = (max_addr - md->phys_addr) >> EFI_PAGE_SHIFT; | ||
356 | first_non_wb_addr = max_addr; | ||
357 | } | ||
358 | |||
359 | if (total_mem >= mem_limit) | ||
360 | continue; | ||
361 | |||
362 | if (total_mem + (md->num_pages << EFI_PAGE_SHIFT) > mem_limit) { | ||
363 | unsigned long limit_addr = md->phys_addr; | ||
364 | |||
365 | limit_addr += mem_limit - total_mem; | ||
366 | limit_addr = GRANULEROUNDDOWN(limit_addr); | ||
367 | |||
368 | if (md->phys_addr > limit_addr) | ||
369 | continue; | ||
370 | |||
371 | md->num_pages = (limit_addr - md->phys_addr) >> | ||
372 | EFI_PAGE_SHIFT; | ||
373 | first_non_wb_addr = max_addr = md->phys_addr + | ||
374 | (md->num_pages << EFI_PAGE_SHIFT); | ||
375 | } | ||
376 | total_mem += (md->num_pages << EFI_PAGE_SHIFT); | ||
377 | |||
378 | if (md->num_pages == 0) | ||
379 | continue; | ||
380 | |||
381 | curr.start = PAGE_OFFSET + md->phys_addr; | ||
382 | curr.end = curr.start + (md->num_pages << EFI_PAGE_SHIFT); | ||
383 | |||
384 | if (!prev_valid) { | ||
385 | prev = curr; | ||
386 | prev_valid = 1; | ||
387 | } else { | ||
388 | if (curr.start < prev.start) | ||
389 | printk(KERN_ERR "Oops: EFI memory table not ordered!\n"); | ||
390 | |||
391 | if (prev.end == curr.start) { | ||
392 | /* merge two consecutive memory ranges */ | ||
393 | prev.end = curr.end; | ||
394 | } else { | ||
395 | start = PAGE_ALIGN(prev.start); | ||
396 | end = prev.end & PAGE_MASK; | ||
397 | if ((end > start) && (*callback)(start, end, arg) < 0) | ||
398 | return; | ||
399 | prev = curr; | ||
400 | } | ||
401 | } | ||
402 | } | ||
403 | } | ||
404 | if (prev_valid) { | ||
405 | start = PAGE_ALIGN(prev.start); | ||
406 | end = prev.end & PAGE_MASK; | ||
407 | if (end > start) | ||
408 | (*callback)(start, end, arg); | ||
409 | } | ||
410 | } | 276 | } |
411 | 277 | ||
412 | /* | 278 | /* |
413 | * Walk the EFI memory map to pull out leftover pages in the lower | 279 | * Walks the EFI memory map and calls CALLBACK once for each EFI memory descriptor that |
414 | * memory regions which do not end up in the regular memory map and | 280 | * has memory that is available for uncached allocator. |
415 | * stick them into the uncached allocator | ||
416 | * | ||
417 | * The regular walk function is significantly more complex than the | ||
418 | * uncached walk which means it really doesn't make sense to try and | ||
419 | * marge the two. | ||
420 | */ | 281 | */ |
421 | void __init | 282 | void |
422 | efi_memmap_walk_uc (efi_freemem_callback_t callback) | 283 | efi_memmap_walk_uc (efi_freemem_callback_t callback, void *arg) |
423 | { | 284 | { |
424 | void *efi_map_start, *efi_map_end, *p; | 285 | walk(callback, arg, EFI_MEMORY_UC); |
425 | efi_memory_desc_t *md; | ||
426 | u64 efi_desc_size, start, end; | ||
427 | |||
428 | efi_map_start = __va(ia64_boot_param->efi_memmap); | ||
429 | efi_map_end = efi_map_start + ia64_boot_param->efi_memmap_size; | ||
430 | efi_desc_size = ia64_boot_param->efi_memdesc_size; | ||
431 | |||
432 | for (p = efi_map_start; p < efi_map_end; p += efi_desc_size) { | ||
433 | md = p; | ||
434 | if (md->attribute == EFI_MEMORY_UC) { | ||
435 | start = PAGE_ALIGN(md->phys_addr); | ||
436 | end = PAGE_ALIGN((md->phys_addr+(md->num_pages << EFI_PAGE_SHIFT)) & PAGE_MASK); | ||
437 | if ((*callback)(start, end, NULL) < 0) | ||
438 | return; | ||
439 | } | ||
440 | } | ||
441 | } | 286 | } |
442 | 287 | ||
443 | |||
444 | /* | 288 | /* |
445 | * Look for the PAL_CODE region reported by EFI and maps it using an | 289 | * Look for the PAL_CODE region reported by EFI and maps it using an |
446 | * ITR to enable safe PAL calls in virtual mode. See IA-64 Processor | 290 | * ITR to enable safe PAL calls in virtual mode. See IA-64 Processor |
@@ -862,3 +706,307 @@ efi_uart_console_only(void) | |||
862 | printk(KERN_ERR "Malformed %s value\n", name); | 706 | printk(KERN_ERR "Malformed %s value\n", name); |
863 | return 0; | 707 | return 0; |
864 | } | 708 | } |
709 | |||
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 | /* | ||
737 | * Look for the first granule aligned memory descriptor memory | ||
738 | * that is big enough to hold EFI memory map. Make sure this | ||
739 | * descriptor is atleast granule sized so it does not get trimmed | ||
740 | */ | ||
741 | struct kern_memdesc * | ||
742 | find_memmap_space (void) | ||
743 | { | ||
744 | u64 contig_low=0, contig_high=0; | ||
745 | u64 as = 0, ae; | ||
746 | void *efi_map_start, *efi_map_end, *p, *q; | ||
747 | efi_memory_desc_t *md, *pmd = NULL, *check_md; | ||
748 | u64 space_needed, efi_desc_size; | ||
749 | unsigned long total_mem = 0; | ||
750 | |||
751 | efi_map_start = __va(ia64_boot_param->efi_memmap); | ||
752 | efi_map_end = efi_map_start + ia64_boot_param->efi_memmap_size; | ||
753 | efi_desc_size = ia64_boot_param->efi_memdesc_size; | ||
754 | |||
755 | /* | ||
756 | * Worst case: we need 3 kernel descriptors for each efi descriptor | ||
757 | * (if every entry has a WB part in the middle, and UC head and tail), | ||
758 | * plus one for the end marker. | ||
759 | */ | ||
760 | space_needed = sizeof(kern_memdesc_t) * | ||
761 | (3 * (ia64_boot_param->efi_memmap_size/efi_desc_size) + 1); | ||
762 | |||
763 | for (p = efi_map_start; p < efi_map_end; pmd = md, p += efi_desc_size) { | ||
764 | md = p; | ||
765 | if (!efi_wb(md)) { | ||
766 | continue; | ||
767 | } | ||
768 | if (pmd == NULL || !efi_wb(pmd) || efi_md_end(pmd) != md->phys_addr) { | ||
769 | contig_low = GRANULEROUNDUP(md->phys_addr); | ||
770 | contig_high = efi_md_end(md); | ||
771 | for (q = p + efi_desc_size; q < efi_map_end; q += efi_desc_size) { | ||
772 | check_md = q; | ||
773 | if (!efi_wb(check_md)) | ||
774 | break; | ||
775 | if (contig_high != check_md->phys_addr) | ||
776 | break; | ||
777 | contig_high = efi_md_end(check_md); | ||
778 | } | ||
779 | contig_high = GRANULEROUNDDOWN(contig_high); | ||
780 | } | ||
781 | if (!is_available_memory(md) || md->type == EFI_LOADER_DATA) | ||
782 | continue; | ||
783 | |||
784 | /* Round ends inward to granule boundaries */ | ||
785 | as = max(contig_low, md->phys_addr); | ||
786 | ae = min(contig_high, efi_md_end(md)); | ||
787 | |||
788 | /* keep within max_addr= command line arg */ | ||
789 | ae = min(ae, max_addr); | ||
790 | if (ae <= as) | ||
791 | continue; | ||
792 | |||
793 | /* avoid going over mem= command line arg */ | ||
794 | if (total_mem + (ae - as) > mem_limit) | ||
795 | ae -= total_mem + (ae - as) - mem_limit; | ||
796 | |||
797 | if (ae <= as) | ||
798 | continue; | ||
799 | |||
800 | if (ae - as > space_needed) | ||
801 | break; | ||
802 | } | ||
803 | if (p >= efi_map_end) | ||
804 | panic("Can't allocate space for kernel memory descriptors"); | ||
805 | |||
806 | return __va(as); | ||
807 | } | ||
808 | |||
809 | /* | ||
810 | * Walk the EFI memory map and gather all memory available for kernel | ||
811 | * to use. We can allocate partial granules only if the unavailable | ||
812 | * parts exist, and are WB. | ||
813 | */ | ||
814 | void | ||
815 | efi_memmap_init(unsigned long *s, unsigned long *e) | ||
816 | { | ||
817 | struct kern_memdesc *k, *prev = 0; | ||
818 | u64 contig_low=0, contig_high=0; | ||
819 | u64 as, ae, lim; | ||
820 | void *efi_map_start, *efi_map_end, *p, *q; | ||
821 | efi_memory_desc_t *md, *pmd = NULL, *check_md; | ||
822 | u64 efi_desc_size; | ||
823 | unsigned long total_mem = 0; | ||
824 | |||
825 | k = kern_memmap = find_memmap_space(); | ||
826 | |||
827 | efi_map_start = __va(ia64_boot_param->efi_memmap); | ||
828 | efi_map_end = efi_map_start + ia64_boot_param->efi_memmap_size; | ||
829 | efi_desc_size = ia64_boot_param->efi_memdesc_size; | ||
830 | |||
831 | for (p = efi_map_start; p < efi_map_end; pmd = md, p += efi_desc_size) { | ||
832 | md = p; | ||
833 | if (!efi_wb(md)) { | ||
834 | if (efi_uc(md) && (md->type == EFI_CONVENTIONAL_MEMORY || | ||
835 | md->type == EFI_BOOT_SERVICES_DATA)) { | ||
836 | k->attribute = EFI_MEMORY_UC; | ||
837 | k->start = md->phys_addr; | ||
838 | k->num_pages = md->num_pages; | ||
839 | k++; | ||
840 | } | ||
841 | continue; | ||
842 | } | ||
843 | if (pmd == NULL || !efi_wb(pmd) || efi_md_end(pmd) != md->phys_addr) { | ||
844 | contig_low = GRANULEROUNDUP(md->phys_addr); | ||
845 | contig_high = efi_md_end(md); | ||
846 | for (q = p + efi_desc_size; q < efi_map_end; q += efi_desc_size) { | ||
847 | check_md = q; | ||
848 | if (!efi_wb(check_md)) | ||
849 | break; | ||
850 | if (contig_high != check_md->phys_addr) | ||
851 | break; | ||
852 | contig_high = efi_md_end(check_md); | ||
853 | } | ||
854 | contig_high = GRANULEROUNDDOWN(contig_high); | ||
855 | } | ||
856 | if (!is_available_memory(md)) | ||
857 | continue; | ||
858 | |||
859 | /* | ||
860 | * Round ends inward to granule boundaries | ||
861 | * Give trimmings to uncached allocator | ||
862 | */ | ||
863 | if (md->phys_addr < contig_low) { | ||
864 | lim = min(efi_md_end(md), contig_low); | ||
865 | if (efi_uc(md)) { | ||
866 | if (k > kern_memmap && (k-1)->attribute == EFI_MEMORY_UC && | ||
867 | kmd_end(k-1) == md->phys_addr) { | ||
868 | (k-1)->num_pages += (lim - md->phys_addr) >> EFI_PAGE_SHIFT; | ||
869 | } else { | ||
870 | k->attribute = EFI_MEMORY_UC; | ||
871 | k->start = md->phys_addr; | ||
872 | k->num_pages = (lim - md->phys_addr) >> EFI_PAGE_SHIFT; | ||
873 | k++; | ||
874 | } | ||
875 | } | ||
876 | as = contig_low; | ||
877 | } else | ||
878 | as = md->phys_addr; | ||
879 | |||
880 | if (efi_md_end(md) > contig_high) { | ||
881 | lim = max(md->phys_addr, contig_high); | ||
882 | if (efi_uc(md)) { | ||
883 | if (lim == md->phys_addr && k > kern_memmap && | ||
884 | (k-1)->attribute == EFI_MEMORY_UC && | ||
885 | kmd_end(k-1) == md->phys_addr) { | ||
886 | (k-1)->num_pages += md->num_pages; | ||
887 | } else { | ||
888 | k->attribute = EFI_MEMORY_UC; | ||
889 | k->start = lim; | ||
890 | k->num_pages = (efi_md_end(md) - lim) >> EFI_PAGE_SHIFT; | ||
891 | k++; | ||
892 | } | ||
893 | } | ||
894 | ae = contig_high; | ||
895 | } else | ||
896 | ae = efi_md_end(md); | ||
897 | |||
898 | /* keep within max_addr= command line arg */ | ||
899 | ae = min(ae, max_addr); | ||
900 | if (ae <= as) | ||
901 | continue; | ||
902 | |||
903 | /* avoid going over mem= command line arg */ | ||
904 | if (total_mem + (ae - as) > mem_limit) | ||
905 | ae -= total_mem + (ae - as) - mem_limit; | ||
906 | |||
907 | if (ae <= as) | ||
908 | continue; | ||
909 | if (prev && kmd_end(prev) == md->phys_addr) { | ||
910 | prev->num_pages += (ae - as) >> EFI_PAGE_SHIFT; | ||
911 | total_mem += ae - as; | ||
912 | continue; | ||
913 | } | ||
914 | k->attribute = EFI_MEMORY_WB; | ||
915 | k->start = as; | ||
916 | k->num_pages = (ae - as) >> EFI_PAGE_SHIFT; | ||
917 | total_mem += ae - as; | ||
918 | prev = k++; | ||
919 | } | ||
920 | k->start = ~0L; /* end-marker */ | ||
921 | |||
922 | /* reserve the memory we are using for kern_memmap */ | ||
923 | *s = (u64)kern_memmap; | ||
924 | *e = (u64)++k; | ||
925 | } | ||
926 | |||
927 | void | ||
928 | efi_initialize_iomem_resources(struct resource *code_resource, | ||
929 | struct resource *data_resource) | ||
930 | { | ||
931 | struct resource *res; | ||
932 | void *efi_map_start, *efi_map_end, *p; | ||
933 | efi_memory_desc_t *md; | ||
934 | u64 efi_desc_size; | ||
935 | char *name; | ||
936 | unsigned long flags; | ||
937 | |||
938 | efi_map_start = __va(ia64_boot_param->efi_memmap); | ||
939 | efi_map_end = efi_map_start + ia64_boot_param->efi_memmap_size; | ||
940 | efi_desc_size = ia64_boot_param->efi_memdesc_size; | ||
941 | |||
942 | res = NULL; | ||
943 | |||
944 | for (p = efi_map_start; p < efi_map_end; p += efi_desc_size) { | ||
945 | md = p; | ||
946 | |||
947 | if (md->num_pages == 0) /* should not happen */ | ||
948 | continue; | ||
949 | |||
950 | flags = IORESOURCE_MEM; | ||
951 | switch (md->type) { | ||
952 | |||
953 | case EFI_MEMORY_MAPPED_IO: | ||
954 | case EFI_MEMORY_MAPPED_IO_PORT_SPACE: | ||
955 | continue; | ||
956 | |||
957 | case EFI_LOADER_CODE: | ||
958 | case EFI_LOADER_DATA: | ||
959 | case EFI_BOOT_SERVICES_DATA: | ||
960 | case EFI_BOOT_SERVICES_CODE: | ||
961 | case EFI_CONVENTIONAL_MEMORY: | ||
962 | if (md->attribute & EFI_MEMORY_WP) { | ||
963 | name = "System ROM"; | ||
964 | flags |= IORESOURCE_READONLY; | ||
965 | } else { | ||
966 | name = "System RAM"; | ||
967 | } | ||
968 | break; | ||
969 | |||
970 | case EFI_ACPI_MEMORY_NVS: | ||
971 | name = "ACPI Non-volatile Storage"; | ||
972 | flags |= IORESOURCE_BUSY; | ||
973 | break; | ||
974 | |||
975 | case EFI_UNUSABLE_MEMORY: | ||
976 | name = "reserved"; | ||
977 | flags |= IORESOURCE_BUSY | IORESOURCE_DISABLED; | ||
978 | break; | ||
979 | |||
980 | case EFI_RESERVED_TYPE: | ||
981 | case EFI_RUNTIME_SERVICES_CODE: | ||
982 | case EFI_RUNTIME_SERVICES_DATA: | ||
983 | case EFI_ACPI_RECLAIM_MEMORY: | ||
984 | default: | ||
985 | name = "reserved"; | ||
986 | flags |= IORESOURCE_BUSY; | ||
987 | break; | ||
988 | } | ||
989 | |||
990 | if ((res = kcalloc(1, sizeof(struct resource), GFP_KERNEL)) == NULL) { | ||
991 | printk(KERN_ERR "failed to alocate resource for iomem\n"); | ||
992 | return; | ||
993 | } | ||
994 | |||
995 | res->name = name; | ||
996 | res->start = md->phys_addr; | ||
997 | res->end = md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT) - 1; | ||
998 | res->flags = flags; | ||
999 | |||
1000 | if (insert_resource(&iomem_resource, res) < 0) | ||
1001 | kfree(res); | ||
1002 | else { | ||
1003 | /* | ||
1004 | * We don't know which region contains | ||
1005 | * kernel data so we try it repeatedly and | ||
1006 | * let the resource manager test it. | ||
1007 | */ | ||
1008 | insert_resource(res, code_resource); | ||
1009 | insert_resource(res, data_resource); | ||
1010 | } | ||
1011 | } | ||
1012 | } | ||
diff --git a/arch/ia64/kernel/entry.S b/arch/ia64/kernel/entry.S index 9be53e1ea404..0741b066b98f 100644 --- a/arch/ia64/kernel/entry.S +++ b/arch/ia64/kernel/entry.S | |||
@@ -37,7 +37,7 @@ | |||
37 | #include <asm/cache.h> | 37 | #include <asm/cache.h> |
38 | #include <asm/errno.h> | 38 | #include <asm/errno.h> |
39 | #include <asm/kregs.h> | 39 | #include <asm/kregs.h> |
40 | #include <asm/offsets.h> | 40 | #include <asm/asm-offsets.h> |
41 | #include <asm/pgtable.h> | 41 | #include <asm/pgtable.h> |
42 | #include <asm/percpu.h> | 42 | #include <asm/percpu.h> |
43 | #include <asm/processor.h> | 43 | #include <asm/processor.h> |
@@ -204,9 +204,6 @@ GLOBAL_ENTRY(ia64_switch_to) | |||
204 | (p6) br.cond.dpnt .map | 204 | (p6) br.cond.dpnt .map |
205 | ;; | 205 | ;; |
206 | .done: | 206 | .done: |
207 | (p6) ssm psr.ic // if we had to map, reenable the psr.ic bit FIRST!!! | ||
208 | ;; | ||
209 | (p6) srlz.d | ||
210 | ld8 sp=[r21] // load kernel stack pointer of new task | 207 | ld8 sp=[r21] // load kernel stack pointer of new task |
211 | mov IA64_KR(CURRENT)=in0 // update "current" application register | 208 | mov IA64_KR(CURRENT)=in0 // update "current" application register |
212 | mov r8=r13 // return pointer to previously running task | 209 | mov r8=r13 // return pointer to previously running task |
@@ -234,6 +231,9 @@ GLOBAL_ENTRY(ia64_switch_to) | |||
234 | mov IA64_KR(CURRENT_STACK)=r26 // remember last page we mapped... | 231 | mov IA64_KR(CURRENT_STACK)=r26 // remember last page we mapped... |
235 | ;; | 232 | ;; |
236 | itr.d dtr[r25]=r23 // wire in new mapping... | 233 | itr.d dtr[r25]=r23 // wire in new mapping... |
234 | ssm psr.ic // reenable the psr.ic bit | ||
235 | ;; | ||
236 | srlz.d | ||
237 | br.cond.sptk .done | 237 | br.cond.sptk .done |
238 | END(ia64_switch_to) | 238 | END(ia64_switch_to) |
239 | 239 | ||
@@ -470,6 +470,29 @@ ENTRY(load_switch_stack) | |||
470 | br.cond.sptk.many b7 | 470 | br.cond.sptk.many b7 |
471 | END(load_switch_stack) | 471 | END(load_switch_stack) |
472 | 472 | ||
473 | GLOBAL_ENTRY(prefetch_stack) | ||
474 | add r14 = -IA64_SWITCH_STACK_SIZE, sp | ||
475 | add r15 = IA64_TASK_THREAD_KSP_OFFSET, in0 | ||
476 | ;; | ||
477 | ld8 r16 = [r15] // load next's stack pointer | ||
478 | lfetch.fault.excl [r14], 128 | ||
479 | ;; | ||
480 | lfetch.fault.excl [r14], 128 | ||
481 | lfetch.fault [r16], 128 | ||
482 | ;; | ||
483 | lfetch.fault.excl [r14], 128 | ||
484 | lfetch.fault [r16], 128 | ||
485 | ;; | ||
486 | lfetch.fault.excl [r14], 128 | ||
487 | lfetch.fault [r16], 128 | ||
488 | ;; | ||
489 | lfetch.fault.excl [r14], 128 | ||
490 | lfetch.fault [r16], 128 | ||
491 | ;; | ||
492 | lfetch.fault [r16], 128 | ||
493 | br.ret.sptk.many rp | ||
494 | END(prefetch_stack) | ||
495 | |||
473 | GLOBAL_ENTRY(execve) | 496 | GLOBAL_ENTRY(execve) |
474 | mov r15=__NR_execve // put syscall number in place | 497 | mov r15=__NR_execve // put syscall number in place |
475 | break __BREAK_SYSCALL | 498 | break __BREAK_SYSCALL |
diff --git a/arch/ia64/kernel/fsys.S b/arch/ia64/kernel/fsys.S index 7d7684a369d3..2ddbac6f4999 100644 --- a/arch/ia64/kernel/fsys.S +++ b/arch/ia64/kernel/fsys.S | |||
@@ -14,7 +14,7 @@ | |||
14 | 14 | ||
15 | #include <asm/asmmacro.h> | 15 | #include <asm/asmmacro.h> |
16 | #include <asm/errno.h> | 16 | #include <asm/errno.h> |
17 | #include <asm/offsets.h> | 17 | #include <asm/asm-offsets.h> |
18 | #include <asm/percpu.h> | 18 | #include <asm/percpu.h> |
19 | #include <asm/thread_info.h> | 19 | #include <asm/thread_info.h> |
20 | #include <asm/sal.h> | 20 | #include <asm/sal.h> |
diff --git a/arch/ia64/kernel/gate.S b/arch/ia64/kernel/gate.S index 86948ce63e43..86064ca98952 100644 --- a/arch/ia64/kernel/gate.S +++ b/arch/ia64/kernel/gate.S | |||
@@ -10,7 +10,7 @@ | |||
10 | 10 | ||
11 | #include <asm/asmmacro.h> | 11 | #include <asm/asmmacro.h> |
12 | #include <asm/errno.h> | 12 | #include <asm/errno.h> |
13 | #include <asm/offsets.h> | 13 | #include <asm/asm-offsets.h> |
14 | #include <asm/sigcontext.h> | 14 | #include <asm/sigcontext.h> |
15 | #include <asm/system.h> | 15 | #include <asm/system.h> |
16 | #include <asm/unistd.h> | 16 | #include <asm/unistd.h> |
diff --git a/arch/ia64/kernel/head.S b/arch/ia64/kernel/head.S index 8d3a9291b47f..bfe65b2e8621 100644 --- a/arch/ia64/kernel/head.S +++ b/arch/ia64/kernel/head.S | |||
@@ -25,7 +25,7 @@ | |||
25 | #include <asm/fpu.h> | 25 | #include <asm/fpu.h> |
26 | #include <asm/kregs.h> | 26 | #include <asm/kregs.h> |
27 | #include <asm/mmu_context.h> | 27 | #include <asm/mmu_context.h> |
28 | #include <asm/offsets.h> | 28 | #include <asm/asm-offsets.h> |
29 | #include <asm/pal.h> | 29 | #include <asm/pal.h> |
30 | #include <asm/pgtable.h> | 30 | #include <asm/pgtable.h> |
31 | #include <asm/processor.h> | 31 | #include <asm/processor.h> |
diff --git a/arch/ia64/kernel/iosapic.c b/arch/ia64/kernel/iosapic.c index 7936b62f7a2e..574084f343fa 100644 --- a/arch/ia64/kernel/iosapic.c +++ b/arch/ia64/kernel/iosapic.c | |||
@@ -561,7 +561,7 @@ static inline int vector_is_shared (int vector) | |||
561 | return (iosapic_intr_info[vector].count > 1); | 561 | return (iosapic_intr_info[vector].count > 1); |
562 | } | 562 | } |
563 | 563 | ||
564 | static void | 564 | static int |
565 | register_intr (unsigned int gsi, int vector, unsigned char delivery, | 565 | register_intr (unsigned int gsi, int vector, unsigned char delivery, |
566 | unsigned long polarity, unsigned long trigger) | 566 | unsigned long polarity, unsigned long trigger) |
567 | { | 567 | { |
@@ -576,7 +576,7 @@ register_intr (unsigned int gsi, int vector, unsigned char delivery, | |||
576 | index = find_iosapic(gsi); | 576 | index = find_iosapic(gsi); |
577 | if (index < 0) { | 577 | if (index < 0) { |
578 | printk(KERN_WARNING "%s: No IOSAPIC for GSI %u\n", __FUNCTION__, gsi); | 578 | printk(KERN_WARNING "%s: No IOSAPIC for GSI %u\n", __FUNCTION__, gsi); |
579 | return; | 579 | return -ENODEV; |
580 | } | 580 | } |
581 | 581 | ||
582 | iosapic_address = iosapic_lists[index].addr; | 582 | iosapic_address = iosapic_lists[index].addr; |
@@ -587,7 +587,7 @@ register_intr (unsigned int gsi, int vector, unsigned char delivery, | |||
587 | rte = iosapic_alloc_rte(); | 587 | rte = iosapic_alloc_rte(); |
588 | if (!rte) { | 588 | if (!rte) { |
589 | printk(KERN_WARNING "%s: cannot allocate memory\n", __FUNCTION__); | 589 | printk(KERN_WARNING "%s: cannot allocate memory\n", __FUNCTION__); |
590 | return; | 590 | return -ENOMEM; |
591 | } | 591 | } |
592 | 592 | ||
593 | rte_index = gsi - gsi_base; | 593 | rte_index = gsi - gsi_base; |
@@ -603,7 +603,7 @@ register_intr (unsigned int gsi, int vector, unsigned char delivery, | |||
603 | struct iosapic_intr_info *info = &iosapic_intr_info[vector]; | 603 | struct iosapic_intr_info *info = &iosapic_intr_info[vector]; |
604 | if (info->trigger != trigger || info->polarity != polarity) { | 604 | if (info->trigger != trigger || info->polarity != polarity) { |
605 | printk (KERN_WARNING "%s: cannot override the interrupt\n", __FUNCTION__); | 605 | printk (KERN_WARNING "%s: cannot override the interrupt\n", __FUNCTION__); |
606 | return; | 606 | return -EINVAL; |
607 | } | 607 | } |
608 | } | 608 | } |
609 | 609 | ||
@@ -623,6 +623,7 @@ register_intr (unsigned int gsi, int vector, unsigned char delivery, | |||
623 | __FUNCTION__, vector, idesc->handler->typename, irq_type->typename); | 623 | __FUNCTION__, vector, idesc->handler->typename, irq_type->typename); |
624 | idesc->handler = irq_type; | 624 | idesc->handler = irq_type; |
625 | } | 625 | } |
626 | return 0; | ||
626 | } | 627 | } |
627 | 628 | ||
628 | static unsigned int | 629 | static unsigned int |
@@ -710,7 +711,7 @@ int | |||
710 | iosapic_register_intr (unsigned int gsi, | 711 | iosapic_register_intr (unsigned int gsi, |
711 | unsigned long polarity, unsigned long trigger) | 712 | unsigned long polarity, unsigned long trigger) |
712 | { | 713 | { |
713 | int vector, mask = 1; | 714 | int vector, mask = 1, err; |
714 | unsigned int dest; | 715 | unsigned int dest; |
715 | unsigned long flags; | 716 | unsigned long flags; |
716 | struct iosapic_rte_info *rte; | 717 | struct iosapic_rte_info *rte; |
@@ -737,8 +738,8 @@ again: | |||
737 | vector = assign_irq_vector(AUTO_ASSIGN); | 738 | vector = assign_irq_vector(AUTO_ASSIGN); |
738 | if (vector < 0) { | 739 | if (vector < 0) { |
739 | vector = iosapic_find_sharable_vector(trigger, polarity); | 740 | vector = iosapic_find_sharable_vector(trigger, polarity); |
740 | if (vector < 0) | 741 | if (vector < 0) |
741 | panic("%s: out of interrupt vectors!\n", __FUNCTION__); | 742 | return -ENOSPC; |
742 | } | 743 | } |
743 | 744 | ||
744 | spin_lock_irqsave(&irq_descp(vector)->lock, flags); | 745 | spin_lock_irqsave(&irq_descp(vector)->lock, flags); |
@@ -753,8 +754,13 @@ again: | |||
753 | } | 754 | } |
754 | 755 | ||
755 | dest = get_target_cpu(gsi, vector); | 756 | dest = get_target_cpu(gsi, vector); |
756 | register_intr(gsi, vector, IOSAPIC_LOWEST_PRIORITY, | 757 | err = register_intr(gsi, vector, IOSAPIC_LOWEST_PRIORITY, |
757 | polarity, trigger); | 758 | polarity, trigger); |
759 | if (err < 0) { | ||
760 | spin_unlock(&iosapic_lock); | ||
761 | spin_unlock_irqrestore(&irq_descp(vector)->lock, flags); | ||
762 | return err; | ||
763 | } | ||
758 | 764 | ||
759 | /* | 765 | /* |
760 | * If the vector is shared and already unmasked for | 766 | * If the vector is shared and already unmasked for |
@@ -776,7 +782,6 @@ again: | |||
776 | return vector; | 782 | return vector; |
777 | } | 783 | } |
778 | 784 | ||
779 | #ifdef CONFIG_ACPI_DEALLOCATE_IRQ | ||
780 | void | 785 | void |
781 | iosapic_unregister_intr (unsigned int gsi) | 786 | iosapic_unregister_intr (unsigned int gsi) |
782 | { | 787 | { |
@@ -859,7 +864,6 @@ iosapic_unregister_intr (unsigned int gsi) | |||
859 | spin_unlock(&iosapic_lock); | 864 | spin_unlock(&iosapic_lock); |
860 | spin_unlock_irqrestore(&idesc->lock, flags); | 865 | spin_unlock_irqrestore(&idesc->lock, flags); |
861 | } | 866 | } |
862 | #endif /* CONFIG_ACPI_DEALLOCATE_IRQ */ | ||
863 | 867 | ||
864 | /* | 868 | /* |
865 | * ACPI calls this when it finds an entry for a platform interrupt. | 869 | * ACPI calls this when it finds an entry for a platform interrupt. |
diff --git a/arch/ia64/kernel/irq.c b/arch/ia64/kernel/irq.c index 28f2aadc38d0..d33244c32759 100644 --- a/arch/ia64/kernel/irq.c +++ b/arch/ia64/kernel/irq.c | |||
@@ -57,9 +57,9 @@ int show_interrupts(struct seq_file *p, void *v) | |||
57 | 57 | ||
58 | if (i == 0) { | 58 | if (i == 0) { |
59 | seq_printf(p, " "); | 59 | seq_printf(p, " "); |
60 | for (j=0; j<NR_CPUS; j++) | 60 | for_each_online_cpu(j) { |
61 | if (cpu_online(j)) | 61 | seq_printf(p, "CPU%d ",j); |
62 | seq_printf(p, "CPU%d ",j); | 62 | } |
63 | seq_putc(p, '\n'); | 63 | seq_putc(p, '\n'); |
64 | } | 64 | } |
65 | 65 | ||
@@ -72,9 +72,9 @@ int show_interrupts(struct seq_file *p, void *v) | |||
72 | #ifndef CONFIG_SMP | 72 | #ifndef CONFIG_SMP |
73 | seq_printf(p, "%10u ", kstat_irqs(i)); | 73 | seq_printf(p, "%10u ", kstat_irqs(i)); |
74 | #else | 74 | #else |
75 | for (j = 0; j < NR_CPUS; j++) | 75 | for_each_online_cpu(j) { |
76 | if (cpu_online(j)) | 76 | seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]); |
77 | seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]); | 77 | } |
78 | #endif | 78 | #endif |
79 | seq_printf(p, " %14s", irq_desc[i].handler->typename); | 79 | seq_printf(p, " %14s", irq_desc[i].handler->typename); |
80 | seq_printf(p, " %s", action->name); | 80 | seq_printf(p, " %s", action->name); |
@@ -91,23 +91,8 @@ skip: | |||
91 | } | 91 | } |
92 | 92 | ||
93 | #ifdef CONFIG_SMP | 93 | #ifdef CONFIG_SMP |
94 | /* | ||
95 | * This is updated when the user sets irq affinity via /proc | ||
96 | */ | ||
97 | static cpumask_t __cacheline_aligned pending_irq_cpumask[NR_IRQS]; | ||
98 | static unsigned long pending_irq_redir[BITS_TO_LONGS(NR_IRQS)]; | ||
99 | |||
100 | static char irq_redir [NR_IRQS]; // = { [0 ... NR_IRQS-1] = 1 }; | 94 | static char irq_redir [NR_IRQS]; // = { [0 ... NR_IRQS-1] = 1 }; |
101 | 95 | ||
102 | /* | ||
103 | * Arch specific routine for deferred write to iosapic rte to reprogram | ||
104 | * intr destination. | ||
105 | */ | ||
106 | void proc_set_irq_affinity(unsigned int irq, cpumask_t mask_val) | ||
107 | { | ||
108 | pending_irq_cpumask[irq] = mask_val; | ||
109 | } | ||
110 | |||
111 | void set_irq_affinity_info (unsigned int irq, int hwid, int redir) | 96 | void set_irq_affinity_info (unsigned int irq, int hwid, int redir) |
112 | { | 97 | { |
113 | cpumask_t mask = CPU_MASK_NONE; | 98 | cpumask_t mask = CPU_MASK_NONE; |
@@ -116,32 +101,10 @@ void set_irq_affinity_info (unsigned int irq, int hwid, int redir) | |||
116 | 101 | ||
117 | if (irq < NR_IRQS) { | 102 | if (irq < NR_IRQS) { |
118 | irq_affinity[irq] = mask; | 103 | irq_affinity[irq] = mask; |
104 | set_irq_info(irq, mask); | ||
119 | irq_redir[irq] = (char) (redir & 0xff); | 105 | irq_redir[irq] = (char) (redir & 0xff); |
120 | } | 106 | } |
121 | } | 107 | } |
122 | |||
123 | |||
124 | void move_irq(int irq) | ||
125 | { | ||
126 | /* note - we hold desc->lock */ | ||
127 | cpumask_t tmp; | ||
128 | irq_desc_t *desc = irq_descp(irq); | ||
129 | int redir = test_bit(irq, pending_irq_redir); | ||
130 | |||
131 | if (unlikely(!desc->handler->set_affinity)) | ||
132 | return; | ||
133 | |||
134 | if (!cpus_empty(pending_irq_cpumask[irq])) { | ||
135 | cpus_and(tmp, pending_irq_cpumask[irq], cpu_online_map); | ||
136 | if (unlikely(!cpus_empty(tmp))) { | ||
137 | desc->handler->set_affinity(irq | (redir ? IA64_IRQ_REDIRECTED : 0), | ||
138 | pending_irq_cpumask[irq]); | ||
139 | } | ||
140 | cpus_clear(pending_irq_cpumask[irq]); | ||
141 | } | ||
142 | } | ||
143 | |||
144 | |||
145 | #endif /* CONFIG_SMP */ | 108 | #endif /* CONFIG_SMP */ |
146 | 109 | ||
147 | #ifdef CONFIG_HOTPLUG_CPU | 110 | #ifdef CONFIG_HOTPLUG_CPU |
diff --git a/arch/ia64/kernel/ivt.S b/arch/ia64/kernel/ivt.S index 3bb3a13c4047..c13ca0d49c4a 100644 --- a/arch/ia64/kernel/ivt.S +++ b/arch/ia64/kernel/ivt.S | |||
@@ -44,7 +44,7 @@ | |||
44 | #include <asm/break.h> | 44 | #include <asm/break.h> |
45 | #include <asm/ia32.h> | 45 | #include <asm/ia32.h> |
46 | #include <asm/kregs.h> | 46 | #include <asm/kregs.h> |
47 | #include <asm/offsets.h> | 47 | #include <asm/asm-offsets.h> |
48 | #include <asm/pgtable.h> | 48 | #include <asm/pgtable.h> |
49 | #include <asm/processor.h> | 49 | #include <asm/processor.h> |
50 | #include <asm/ptrace.h> | 50 | #include <asm/ptrace.h> |
@@ -69,7 +69,6 @@ | |||
69 | # define DBG_FAULT(i) | 69 | # define DBG_FAULT(i) |
70 | #endif | 70 | #endif |
71 | 71 | ||
72 | #define MINSTATE_VIRT /* needed by minstate.h */ | ||
73 | #include "minstate.h" | 72 | #include "minstate.h" |
74 | 73 | ||
75 | #define FAULT(n) \ | 74 | #define FAULT(n) \ |
diff --git a/arch/ia64/kernel/jprobes.S b/arch/ia64/kernel/jprobes.S index b7fa3ccd2b0f..2323377e3695 100644 --- a/arch/ia64/kernel/jprobes.S +++ b/arch/ia64/kernel/jprobes.S | |||
@@ -49,6 +49,7 @@ | |||
49 | /* | 49 | /* |
50 | * void jprobe_break(void) | 50 | * void jprobe_break(void) |
51 | */ | 51 | */ |
52 | .section .kprobes.text, "ax" | ||
52 | ENTRY(jprobe_break) | 53 | ENTRY(jprobe_break) |
53 | break.m 0x80300 | 54 | break.m 0x80300 |
54 | END(jprobe_break) | 55 | END(jprobe_break) |
diff --git a/arch/ia64/kernel/kprobes.c b/arch/ia64/kernel/kprobes.c index 884f5cd27d8a..471086b808a4 100644 --- a/arch/ia64/kernel/kprobes.c +++ b/arch/ia64/kernel/kprobes.c | |||
@@ -87,12 +87,25 @@ static enum instruction_type bundle_encoding[32][3] = { | |||
87 | * is IP relative instruction and update the kprobe | 87 | * is IP relative instruction and update the kprobe |
88 | * inst flag accordingly | 88 | * inst flag accordingly |
89 | */ | 89 | */ |
90 | static void update_kprobe_inst_flag(uint template, uint slot, uint major_opcode, | 90 | static void __kprobes update_kprobe_inst_flag(uint template, uint slot, |
91 | unsigned long kprobe_inst, struct kprobe *p) | 91 | uint major_opcode, |
92 | unsigned long kprobe_inst, | ||
93 | struct kprobe *p) | ||
92 | { | 94 | { |
93 | p->ainsn.inst_flag = 0; | 95 | p->ainsn.inst_flag = 0; |
94 | p->ainsn.target_br_reg = 0; | 96 | p->ainsn.target_br_reg = 0; |
95 | 97 | ||
98 | /* Check for Break instruction | ||
99 | * Bits 37:40 Major opcode to be zero | ||
100 | * Bits 27:32 X6 to be zero | ||
101 | * Bits 32:35 X3 to be zero | ||
102 | */ | ||
103 | if ((!major_opcode) && (!((kprobe_inst >> 27) & 0x1FF)) ) { | ||
104 | /* is a break instruction */ | ||
105 | p->ainsn.inst_flag |= INST_FLAG_BREAK_INST; | ||
106 | return; | ||
107 | } | ||
108 | |||
96 | if (bundle_encoding[template][slot] == B) { | 109 | if (bundle_encoding[template][slot] == B) { |
97 | switch (major_opcode) { | 110 | switch (major_opcode) { |
98 | case INDIRECT_CALL_OPCODE: | 111 | case INDIRECT_CALL_OPCODE: |
@@ -126,8 +139,10 @@ static void update_kprobe_inst_flag(uint template, uint slot, uint major_opcode | |||
126 | * Returns 0 if supported | 139 | * Returns 0 if supported |
127 | * Returns -EINVAL if unsupported | 140 | * Returns -EINVAL if unsupported |
128 | */ | 141 | */ |
129 | static int unsupported_inst(uint template, uint slot, uint major_opcode, | 142 | static int __kprobes unsupported_inst(uint template, uint slot, |
130 | unsigned long kprobe_inst, struct kprobe *p) | 143 | uint major_opcode, |
144 | unsigned long kprobe_inst, | ||
145 | struct kprobe *p) | ||
131 | { | 146 | { |
132 | unsigned long addr = (unsigned long)p->addr; | 147 | unsigned long addr = (unsigned long)p->addr; |
133 | 148 | ||
@@ -168,8 +183,9 @@ static int unsupported_inst(uint template, uint slot, uint major_opcode, | |||
168 | * on which we are inserting kprobe is cmp instruction | 183 | * on which we are inserting kprobe is cmp instruction |
169 | * with ctype as unc. | 184 | * with ctype as unc. |
170 | */ | 185 | */ |
171 | static uint is_cmp_ctype_unc_inst(uint template, uint slot, uint major_opcode, | 186 | static uint __kprobes is_cmp_ctype_unc_inst(uint template, uint slot, |
172 | unsigned long kprobe_inst) | 187 | uint major_opcode, |
188 | unsigned long kprobe_inst) | ||
173 | { | 189 | { |
174 | cmp_inst_t cmp_inst; | 190 | cmp_inst_t cmp_inst; |
175 | uint ctype_unc = 0; | 191 | uint ctype_unc = 0; |
@@ -201,8 +217,10 @@ out: | |||
201 | * In this function we override the bundle with | 217 | * In this function we override the bundle with |
202 | * the break instruction at the given slot. | 218 | * the break instruction at the given slot. |
203 | */ | 219 | */ |
204 | static void prepare_break_inst(uint template, uint slot, uint major_opcode, | 220 | static void __kprobes prepare_break_inst(uint template, uint slot, |
205 | unsigned long kprobe_inst, struct kprobe *p) | 221 | uint major_opcode, |
222 | unsigned long kprobe_inst, | ||
223 | struct kprobe *p) | ||
206 | { | 224 | { |
207 | unsigned long break_inst = BREAK_INST; | 225 | unsigned long break_inst = BREAK_INST; |
208 | bundle_t *bundle = &p->ainsn.insn.bundle; | 226 | bundle_t *bundle = &p->ainsn.insn.bundle; |
@@ -271,7 +289,8 @@ static inline int in_ivt_functions(unsigned long addr) | |||
271 | && addr < (unsigned long)__end_ivt_text); | 289 | && addr < (unsigned long)__end_ivt_text); |
272 | } | 290 | } |
273 | 291 | ||
274 | static int valid_kprobe_addr(int template, int slot, unsigned long addr) | 292 | static int __kprobes valid_kprobe_addr(int template, int slot, |
293 | unsigned long addr) | ||
275 | { | 294 | { |
276 | if ((slot > 2) || ((bundle_encoding[template][1] == L) && slot > 1)) { | 295 | if ((slot > 2) || ((bundle_encoding[template][1] == L) && slot > 1)) { |
277 | printk(KERN_WARNING "Attempting to insert unaligned kprobe " | 296 | printk(KERN_WARNING "Attempting to insert unaligned kprobe " |
@@ -323,7 +342,7 @@ static void kretprobe_trampoline(void) | |||
323 | * - cleanup by marking the instance as unused | 342 | * - cleanup by marking the instance as unused |
324 | * - long jump back to the original return address | 343 | * - long jump back to the original return address |
325 | */ | 344 | */ |
326 | int trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs) | 345 | int __kprobes trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs) |
327 | { | 346 | { |
328 | struct kretprobe_instance *ri = NULL; | 347 | struct kretprobe_instance *ri = NULL; |
329 | struct hlist_head *head; | 348 | struct hlist_head *head; |
@@ -381,7 +400,8 @@ int trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs) | |||
381 | return 1; | 400 | return 1; |
382 | } | 401 | } |
383 | 402 | ||
384 | void arch_prepare_kretprobe(struct kretprobe *rp, struct pt_regs *regs) | 403 | void __kprobes arch_prepare_kretprobe(struct kretprobe *rp, |
404 | struct pt_regs *regs) | ||
385 | { | 405 | { |
386 | struct kretprobe_instance *ri; | 406 | struct kretprobe_instance *ri; |
387 | 407 | ||
@@ -399,7 +419,7 @@ void arch_prepare_kretprobe(struct kretprobe *rp, struct pt_regs *regs) | |||
399 | } | 419 | } |
400 | } | 420 | } |
401 | 421 | ||
402 | int arch_prepare_kprobe(struct kprobe *p) | 422 | int __kprobes arch_prepare_kprobe(struct kprobe *p) |
403 | { | 423 | { |
404 | unsigned long addr = (unsigned long) p->addr; | 424 | unsigned long addr = (unsigned long) p->addr; |
405 | unsigned long *kprobe_addr = (unsigned long *)(addr & ~0xFULL); | 425 | unsigned long *kprobe_addr = (unsigned long *)(addr & ~0xFULL); |
@@ -430,7 +450,7 @@ int arch_prepare_kprobe(struct kprobe *p) | |||
430 | return 0; | 450 | return 0; |
431 | } | 451 | } |
432 | 452 | ||
433 | void arch_arm_kprobe(struct kprobe *p) | 453 | void __kprobes arch_arm_kprobe(struct kprobe *p) |
434 | { | 454 | { |
435 | unsigned long addr = (unsigned long)p->addr; | 455 | unsigned long addr = (unsigned long)p->addr; |
436 | unsigned long arm_addr = addr & ~0xFULL; | 456 | unsigned long arm_addr = addr & ~0xFULL; |
@@ -439,7 +459,7 @@ void arch_arm_kprobe(struct kprobe *p) | |||
439 | flush_icache_range(arm_addr, arm_addr + sizeof(bundle_t)); | 459 | flush_icache_range(arm_addr, arm_addr + sizeof(bundle_t)); |
440 | } | 460 | } |
441 | 461 | ||
442 | void arch_disarm_kprobe(struct kprobe *p) | 462 | void __kprobes arch_disarm_kprobe(struct kprobe *p) |
443 | { | 463 | { |
444 | unsigned long addr = (unsigned long)p->addr; | 464 | unsigned long addr = (unsigned long)p->addr; |
445 | unsigned long arm_addr = addr & ~0xFULL; | 465 | unsigned long arm_addr = addr & ~0xFULL; |
@@ -449,7 +469,7 @@ void arch_disarm_kprobe(struct kprobe *p) | |||
449 | flush_icache_range(arm_addr, arm_addr + sizeof(bundle_t)); | 469 | flush_icache_range(arm_addr, arm_addr + sizeof(bundle_t)); |
450 | } | 470 | } |
451 | 471 | ||
452 | void arch_remove_kprobe(struct kprobe *p) | 472 | void __kprobes arch_remove_kprobe(struct kprobe *p) |
453 | { | 473 | { |
454 | } | 474 | } |
455 | 475 | ||
@@ -461,7 +481,7 @@ void arch_remove_kprobe(struct kprobe *p) | |||
461 | * to original stack address, handle the case where we need to fixup the | 481 | * to original stack address, handle the case where we need to fixup the |
462 | * relative IP address and/or fixup branch register. | 482 | * relative IP address and/or fixup branch register. |
463 | */ | 483 | */ |
464 | static void resume_execution(struct kprobe *p, struct pt_regs *regs) | 484 | static void __kprobes resume_execution(struct kprobe *p, struct pt_regs *regs) |
465 | { | 485 | { |
466 | unsigned long bundle_addr = ((unsigned long) (&p->opcode.bundle)) & ~0xFULL; | 486 | unsigned long bundle_addr = ((unsigned long) (&p->opcode.bundle)) & ~0xFULL; |
467 | unsigned long resume_addr = (unsigned long)p->addr & ~0xFULL; | 487 | unsigned long resume_addr = (unsigned long)p->addr & ~0xFULL; |
@@ -528,13 +548,16 @@ turn_ss_off: | |||
528 | ia64_psr(regs)->ss = 0; | 548 | ia64_psr(regs)->ss = 0; |
529 | } | 549 | } |
530 | 550 | ||
531 | static void prepare_ss(struct kprobe *p, struct pt_regs *regs) | 551 | static void __kprobes prepare_ss(struct kprobe *p, struct pt_regs *regs) |
532 | { | 552 | { |
533 | unsigned long bundle_addr = (unsigned long) &p->opcode.bundle; | 553 | unsigned long bundle_addr = (unsigned long) &p->opcode.bundle; |
534 | unsigned long slot = (unsigned long)p->addr & 0xf; | 554 | unsigned long slot = (unsigned long)p->addr & 0xf; |
535 | 555 | ||
536 | /* Update instruction pointer (IIP) and slot number (IPSR.ri) */ | 556 | /* single step inline if break instruction */ |
537 | regs->cr_iip = bundle_addr & ~0xFULL; | 557 | if (p->ainsn.inst_flag == INST_FLAG_BREAK_INST) |
558 | regs->cr_iip = (unsigned long)p->addr & ~0xFULL; | ||
559 | else | ||
560 | regs->cr_iip = bundle_addr & ~0xFULL; | ||
538 | 561 | ||
539 | if (slot > 2) | 562 | if (slot > 2) |
540 | slot = 0; | 563 | slot = 0; |
@@ -545,7 +568,39 @@ static void prepare_ss(struct kprobe *p, struct pt_regs *regs) | |||
545 | ia64_psr(regs)->ss = 1; | 568 | ia64_psr(regs)->ss = 1; |
546 | } | 569 | } |
547 | 570 | ||
548 | static int pre_kprobes_handler(struct die_args *args) | 571 | static int __kprobes is_ia64_break_inst(struct pt_regs *regs) |
572 | { | ||
573 | unsigned int slot = ia64_psr(regs)->ri; | ||
574 | unsigned int template, major_opcode; | ||
575 | unsigned long kprobe_inst; | ||
576 | unsigned long *kprobe_addr = (unsigned long *)regs->cr_iip; | ||
577 | bundle_t bundle; | ||
578 | |||
579 | memcpy(&bundle, kprobe_addr, sizeof(bundle_t)); | ||
580 | template = bundle.quad0.template; | ||
581 | |||
582 | /* Move to slot 2, if bundle is MLX type and kprobe slot is 1 */ | ||
583 | if (slot == 1 && bundle_encoding[template][1] == L) | ||
584 | slot++; | ||
585 | |||
586 | /* Get Kprobe probe instruction at given slot*/ | ||
587 | get_kprobe_inst(&bundle, slot, &kprobe_inst, &major_opcode); | ||
588 | |||
589 | /* For break instruction, | ||
590 | * Bits 37:40 Major opcode to be zero | ||
591 | * Bits 27:32 X6 to be zero | ||
592 | * Bits 32:35 X3 to be zero | ||
593 | */ | ||
594 | if (major_opcode || ((kprobe_inst >> 27) & 0x1FF) ) { | ||
595 | /* Not a break instruction */ | ||
596 | return 0; | ||
597 | } | ||
598 | |||
599 | /* Is a break instruction */ | ||
600 | return 1; | ||
601 | } | ||
602 | |||
603 | static int __kprobes pre_kprobes_handler(struct die_args *args) | ||
549 | { | 604 | { |
550 | struct kprobe *p; | 605 | struct kprobe *p; |
551 | int ret = 0; | 606 | int ret = 0; |
@@ -558,7 +613,9 @@ static int pre_kprobes_handler(struct die_args *args) | |||
558 | if (kprobe_running()) { | 613 | if (kprobe_running()) { |
559 | p = get_kprobe(addr); | 614 | p = get_kprobe(addr); |
560 | if (p) { | 615 | if (p) { |
561 | if (kprobe_status == KPROBE_HIT_SS) { | 616 | if ( (kprobe_status == KPROBE_HIT_SS) && |
617 | (p->ainsn.inst_flag == INST_FLAG_BREAK_INST)) { | ||
618 | ia64_psr(regs)->ss = 0; | ||
562 | unlock_kprobes(); | 619 | unlock_kprobes(); |
563 | goto no_kprobe; | 620 | goto no_kprobe; |
564 | } | 621 | } |
@@ -592,6 +649,19 @@ static int pre_kprobes_handler(struct die_args *args) | |||
592 | p = get_kprobe(addr); | 649 | p = get_kprobe(addr); |
593 | if (!p) { | 650 | if (!p) { |
594 | unlock_kprobes(); | 651 | unlock_kprobes(); |
652 | if (!is_ia64_break_inst(regs)) { | ||
653 | /* | ||
654 | * The breakpoint instruction was removed right | ||
655 | * after we hit it. Another cpu has removed | ||
656 | * either a probepoint or a debugger breakpoint | ||
657 | * at this address. In either case, no further | ||
658 | * handling of this interrupt is appropriate. | ||
659 | */ | ||
660 | ret = 1; | ||
661 | |||
662 | } | ||
663 | |||
664 | /* Not one of our break, let kernel handle it */ | ||
595 | goto no_kprobe; | 665 | goto no_kprobe; |
596 | } | 666 | } |
597 | 667 | ||
@@ -616,7 +686,7 @@ no_kprobe: | |||
616 | return ret; | 686 | return ret; |
617 | } | 687 | } |
618 | 688 | ||
619 | static int post_kprobes_handler(struct pt_regs *regs) | 689 | static int __kprobes post_kprobes_handler(struct pt_regs *regs) |
620 | { | 690 | { |
621 | if (!kprobe_running()) | 691 | if (!kprobe_running()) |
622 | return 0; | 692 | return 0; |
@@ -641,7 +711,7 @@ out: | |||
641 | return 1; | 711 | return 1; |
642 | } | 712 | } |
643 | 713 | ||
644 | static int kprobes_fault_handler(struct pt_regs *regs, int trapnr) | 714 | static int __kprobes kprobes_fault_handler(struct pt_regs *regs, int trapnr) |
645 | { | 715 | { |
646 | if (!kprobe_running()) | 716 | if (!kprobe_running()) |
647 | return 0; | 717 | return 0; |
@@ -659,8 +729,8 @@ static int kprobes_fault_handler(struct pt_regs *regs, int trapnr) | |||
659 | return 0; | 729 | return 0; |
660 | } | 730 | } |
661 | 731 | ||
662 | int kprobe_exceptions_notify(struct notifier_block *self, unsigned long val, | 732 | int __kprobes kprobe_exceptions_notify(struct notifier_block *self, |
663 | void *data) | 733 | unsigned long val, void *data) |
664 | { | 734 | { |
665 | struct die_args *args = (struct die_args *)data; | 735 | struct die_args *args = (struct die_args *)data; |
666 | switch(val) { | 736 | switch(val) { |
@@ -681,7 +751,7 @@ int kprobe_exceptions_notify(struct notifier_block *self, unsigned long val, | |||
681 | return NOTIFY_DONE; | 751 | return NOTIFY_DONE; |
682 | } | 752 | } |
683 | 753 | ||
684 | int setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs) | 754 | int __kprobes setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs) |
685 | { | 755 | { |
686 | struct jprobe *jp = container_of(p, struct jprobe, kp); | 756 | struct jprobe *jp = container_of(p, struct jprobe, kp); |
687 | unsigned long addr = ((struct fnptr *)(jp->entry))->ip; | 757 | unsigned long addr = ((struct fnptr *)(jp->entry))->ip; |
@@ -703,7 +773,7 @@ int setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs) | |||
703 | return 1; | 773 | return 1; |
704 | } | 774 | } |
705 | 775 | ||
706 | int longjmp_break_handler(struct kprobe *p, struct pt_regs *regs) | 776 | int __kprobes longjmp_break_handler(struct kprobe *p, struct pt_regs *regs) |
707 | { | 777 | { |
708 | *regs = jprobe_saved_regs; | 778 | *regs = jprobe_saved_regs; |
709 | return 1; | 779 | return 1; |
diff --git a/arch/ia64/kernel/mca.c b/arch/ia64/kernel/mca.c index 4ebbf3974381..52c47da17246 100644 --- a/arch/ia64/kernel/mca.c +++ b/arch/ia64/kernel/mca.c | |||
@@ -48,6 +48,9 @@ | |||
48 | * Delete dead variables and functions. | 48 | * Delete dead variables and functions. |
49 | * Reorder to remove the need for forward declarations and to consolidate | 49 | * Reorder to remove the need for forward declarations and to consolidate |
50 | * related code. | 50 | * related code. |
51 | * | ||
52 | * 2005-08-12 Keith Owens <kaos@sgi.com> | ||
53 | * Convert MCA/INIT handlers to use per event stacks and SAL/OS state. | ||
51 | */ | 54 | */ |
52 | #include <linux/config.h> | 55 | #include <linux/config.h> |
53 | #include <linux/types.h> | 56 | #include <linux/types.h> |
@@ -77,6 +80,8 @@ | |||
77 | #include <asm/irq.h> | 80 | #include <asm/irq.h> |
78 | #include <asm/hw_irq.h> | 81 | #include <asm/hw_irq.h> |
79 | 82 | ||
83 | #include "entry.h" | ||
84 | |||
80 | #if defined(IA64_MCA_DEBUG_INFO) | 85 | #if defined(IA64_MCA_DEBUG_INFO) |
81 | # define IA64_MCA_DEBUG(fmt...) printk(fmt) | 86 | # define IA64_MCA_DEBUG(fmt...) printk(fmt) |
82 | #else | 87 | #else |
@@ -84,9 +89,7 @@ | |||
84 | #endif | 89 | #endif |
85 | 90 | ||
86 | /* Used by mca_asm.S */ | 91 | /* Used by mca_asm.S */ |
87 | ia64_mca_sal_to_os_state_t ia64_sal_to_os_handoff_state; | 92 | u32 ia64_mca_serialize; |
88 | ia64_mca_os_to_sal_state_t ia64_os_to_sal_handoff_state; | ||
89 | u64 ia64_mca_serialize; | ||
90 | DEFINE_PER_CPU(u64, ia64_mca_data); /* == __per_cpu_mca[smp_processor_id()] */ | 93 | DEFINE_PER_CPU(u64, ia64_mca_data); /* == __per_cpu_mca[smp_processor_id()] */ |
91 | DEFINE_PER_CPU(u64, ia64_mca_per_cpu_pte); /* PTE to map per-CPU area */ | 94 | DEFINE_PER_CPU(u64, ia64_mca_per_cpu_pte); /* PTE to map per-CPU area */ |
92 | DEFINE_PER_CPU(u64, ia64_mca_pal_pte); /* PTE to map PAL code */ | 95 | DEFINE_PER_CPU(u64, ia64_mca_pal_pte); /* PTE to map PAL code */ |
@@ -95,8 +98,10 @@ DEFINE_PER_CPU(u64, ia64_mca_pal_base); /* vaddr PAL code granule */ | |||
95 | unsigned long __per_cpu_mca[NR_CPUS]; | 98 | unsigned long __per_cpu_mca[NR_CPUS]; |
96 | 99 | ||
97 | /* In mca_asm.S */ | 100 | /* In mca_asm.S */ |
98 | extern void ia64_monarch_init_handler (void); | 101 | extern void ia64_os_init_dispatch_monarch (void); |
99 | extern void ia64_slave_init_handler (void); | 102 | extern void ia64_os_init_dispatch_slave (void); |
103 | |||
104 | static int monarch_cpu = -1; | ||
100 | 105 | ||
101 | static ia64_mc_info_t ia64_mc_info; | 106 | static ia64_mc_info_t ia64_mc_info; |
102 | 107 | ||
@@ -234,7 +239,8 @@ ia64_log_get(int sal_info_type, u8 **buffer, int irq_safe) | |||
234 | * This function retrieves a specified error record type from SAL | 239 | * This function retrieves a specified error record type from SAL |
235 | * and wakes up any processes waiting for error records. | 240 | * and wakes up any processes waiting for error records. |
236 | * | 241 | * |
237 | * Inputs : sal_info_type (Type of error record MCA/CMC/CPE/INIT) | 242 | * Inputs : sal_info_type (Type of error record MCA/CMC/CPE) |
243 | * FIXME: remove MCA and irq_safe. | ||
238 | */ | 244 | */ |
239 | static void | 245 | static void |
240 | ia64_mca_log_sal_error_record(int sal_info_type) | 246 | ia64_mca_log_sal_error_record(int sal_info_type) |
@@ -242,7 +248,7 @@ ia64_mca_log_sal_error_record(int sal_info_type) | |||
242 | u8 *buffer; | 248 | u8 *buffer; |
243 | sal_log_record_header_t *rh; | 249 | sal_log_record_header_t *rh; |
244 | u64 size; | 250 | u64 size; |
245 | int irq_safe = sal_info_type != SAL_INFO_TYPE_MCA && sal_info_type != SAL_INFO_TYPE_INIT; | 251 | int irq_safe = sal_info_type != SAL_INFO_TYPE_MCA; |
246 | #ifdef IA64_MCA_DEBUG_INFO | 252 | #ifdef IA64_MCA_DEBUG_INFO |
247 | static const char * const rec_name[] = { "MCA", "INIT", "CMC", "CPE" }; | 253 | static const char * const rec_name[] = { "MCA", "INIT", "CMC", "CPE" }; |
248 | #endif | 254 | #endif |
@@ -330,191 +336,6 @@ ia64_mca_cpe_int_handler (int cpe_irq, void *arg, struct pt_regs *ptregs) | |||
330 | 336 | ||
331 | #endif /* CONFIG_ACPI */ | 337 | #endif /* CONFIG_ACPI */ |
332 | 338 | ||
333 | static void | ||
334 | show_min_state (pal_min_state_area_t *minstate) | ||
335 | { | ||
336 | u64 iip = minstate->pmsa_iip + ((struct ia64_psr *)(&minstate->pmsa_ipsr))->ri; | ||
337 | u64 xip = minstate->pmsa_xip + ((struct ia64_psr *)(&minstate->pmsa_xpsr))->ri; | ||
338 | |||
339 | printk("NaT bits\t%016lx\n", minstate->pmsa_nat_bits); | ||
340 | printk("pr\t\t%016lx\n", minstate->pmsa_pr); | ||
341 | printk("b0\t\t%016lx ", minstate->pmsa_br0); print_symbol("%s\n", minstate->pmsa_br0); | ||
342 | printk("ar.rsc\t\t%016lx\n", minstate->pmsa_rsc); | ||
343 | printk("cr.iip\t\t%016lx ", iip); print_symbol("%s\n", iip); | ||
344 | printk("cr.ipsr\t\t%016lx\n", minstate->pmsa_ipsr); | ||
345 | printk("cr.ifs\t\t%016lx\n", minstate->pmsa_ifs); | ||
346 | printk("xip\t\t%016lx ", xip); print_symbol("%s\n", xip); | ||
347 | printk("xpsr\t\t%016lx\n", minstate->pmsa_xpsr); | ||
348 | printk("xfs\t\t%016lx\n", minstate->pmsa_xfs); | ||
349 | printk("b1\t\t%016lx ", minstate->pmsa_br1); | ||
350 | print_symbol("%s\n", minstate->pmsa_br1); | ||
351 | |||
352 | printk("\nstatic registers r0-r15:\n"); | ||
353 | printk(" r0- 3 %016lx %016lx %016lx %016lx\n", | ||
354 | 0UL, minstate->pmsa_gr[0], minstate->pmsa_gr[1], minstate->pmsa_gr[2]); | ||
355 | printk(" r4- 7 %016lx %016lx %016lx %016lx\n", | ||
356 | minstate->pmsa_gr[3], minstate->pmsa_gr[4], | ||
357 | minstate->pmsa_gr[5], minstate->pmsa_gr[6]); | ||
358 | printk(" r8-11 %016lx %016lx %016lx %016lx\n", | ||
359 | minstate->pmsa_gr[7], minstate->pmsa_gr[8], | ||
360 | minstate->pmsa_gr[9], minstate->pmsa_gr[10]); | ||
361 | printk("r12-15 %016lx %016lx %016lx %016lx\n", | ||
362 | minstate->pmsa_gr[11], minstate->pmsa_gr[12], | ||
363 | minstate->pmsa_gr[13], minstate->pmsa_gr[14]); | ||
364 | |||
365 | printk("\nbank 0:\n"); | ||
366 | printk("r16-19 %016lx %016lx %016lx %016lx\n", | ||
367 | minstate->pmsa_bank0_gr[0], minstate->pmsa_bank0_gr[1], | ||
368 | minstate->pmsa_bank0_gr[2], minstate->pmsa_bank0_gr[3]); | ||
369 | printk("r20-23 %016lx %016lx %016lx %016lx\n", | ||
370 | minstate->pmsa_bank0_gr[4], minstate->pmsa_bank0_gr[5], | ||
371 | minstate->pmsa_bank0_gr[6], minstate->pmsa_bank0_gr[7]); | ||
372 | printk("r24-27 %016lx %016lx %016lx %016lx\n", | ||
373 | minstate->pmsa_bank0_gr[8], minstate->pmsa_bank0_gr[9], | ||
374 | minstate->pmsa_bank0_gr[10], minstate->pmsa_bank0_gr[11]); | ||
375 | printk("r28-31 %016lx %016lx %016lx %016lx\n", | ||
376 | minstate->pmsa_bank0_gr[12], minstate->pmsa_bank0_gr[13], | ||
377 | minstate->pmsa_bank0_gr[14], minstate->pmsa_bank0_gr[15]); | ||
378 | |||
379 | printk("\nbank 1:\n"); | ||
380 | printk("r16-19 %016lx %016lx %016lx %016lx\n", | ||
381 | minstate->pmsa_bank1_gr[0], minstate->pmsa_bank1_gr[1], | ||
382 | minstate->pmsa_bank1_gr[2], minstate->pmsa_bank1_gr[3]); | ||
383 | printk("r20-23 %016lx %016lx %016lx %016lx\n", | ||
384 | minstate->pmsa_bank1_gr[4], minstate->pmsa_bank1_gr[5], | ||
385 | minstate->pmsa_bank1_gr[6], minstate->pmsa_bank1_gr[7]); | ||
386 | printk("r24-27 %016lx %016lx %016lx %016lx\n", | ||
387 | minstate->pmsa_bank1_gr[8], minstate->pmsa_bank1_gr[9], | ||
388 | minstate->pmsa_bank1_gr[10], minstate->pmsa_bank1_gr[11]); | ||
389 | printk("r28-31 %016lx %016lx %016lx %016lx\n", | ||
390 | minstate->pmsa_bank1_gr[12], minstate->pmsa_bank1_gr[13], | ||
391 | minstate->pmsa_bank1_gr[14], minstate->pmsa_bank1_gr[15]); | ||
392 | } | ||
393 | |||
394 | static void | ||
395 | fetch_min_state (pal_min_state_area_t *ms, struct pt_regs *pt, struct switch_stack *sw) | ||
396 | { | ||
397 | u64 *dst_banked, *src_banked, bit, shift, nat_bits; | ||
398 | int i; | ||
399 | |||
400 | /* | ||
401 | * First, update the pt-regs and switch-stack structures with the contents stored | ||
402 | * in the min-state area: | ||
403 | */ | ||
404 | if (((struct ia64_psr *) &ms->pmsa_ipsr)->ic == 0) { | ||
405 | pt->cr_ipsr = ms->pmsa_xpsr; | ||
406 | pt->cr_iip = ms->pmsa_xip; | ||
407 | pt->cr_ifs = ms->pmsa_xfs; | ||
408 | } else { | ||
409 | pt->cr_ipsr = ms->pmsa_ipsr; | ||
410 | pt->cr_iip = ms->pmsa_iip; | ||
411 | pt->cr_ifs = ms->pmsa_ifs; | ||
412 | } | ||
413 | pt->ar_rsc = ms->pmsa_rsc; | ||
414 | pt->pr = ms->pmsa_pr; | ||
415 | pt->r1 = ms->pmsa_gr[0]; | ||
416 | pt->r2 = ms->pmsa_gr[1]; | ||
417 | pt->r3 = ms->pmsa_gr[2]; | ||
418 | sw->r4 = ms->pmsa_gr[3]; | ||
419 | sw->r5 = ms->pmsa_gr[4]; | ||
420 | sw->r6 = ms->pmsa_gr[5]; | ||
421 | sw->r7 = ms->pmsa_gr[6]; | ||
422 | pt->r8 = ms->pmsa_gr[7]; | ||
423 | pt->r9 = ms->pmsa_gr[8]; | ||
424 | pt->r10 = ms->pmsa_gr[9]; | ||
425 | pt->r11 = ms->pmsa_gr[10]; | ||
426 | pt->r12 = ms->pmsa_gr[11]; | ||
427 | pt->r13 = ms->pmsa_gr[12]; | ||
428 | pt->r14 = ms->pmsa_gr[13]; | ||
429 | pt->r15 = ms->pmsa_gr[14]; | ||
430 | dst_banked = &pt->r16; /* r16-r31 are contiguous in struct pt_regs */ | ||
431 | src_banked = ms->pmsa_bank1_gr; | ||
432 | for (i = 0; i < 16; ++i) | ||
433 | dst_banked[i] = src_banked[i]; | ||
434 | pt->b0 = ms->pmsa_br0; | ||
435 | sw->b1 = ms->pmsa_br1; | ||
436 | |||
437 | /* construct the NaT bits for the pt-regs structure: */ | ||
438 | # define PUT_NAT_BIT(dst, addr) \ | ||
439 | do { \ | ||
440 | bit = nat_bits & 1; nat_bits >>= 1; \ | ||
441 | shift = ((unsigned long) addr >> 3) & 0x3f; \ | ||
442 | dst = ((dst) & ~(1UL << shift)) | (bit << shift); \ | ||
443 | } while (0) | ||
444 | |||
445 | /* Rotate the saved NaT bits such that bit 0 corresponds to pmsa_gr[0]: */ | ||
446 | shift = ((unsigned long) &ms->pmsa_gr[0] >> 3) & 0x3f; | ||
447 | nat_bits = (ms->pmsa_nat_bits >> shift) | (ms->pmsa_nat_bits << (64 - shift)); | ||
448 | |||
449 | PUT_NAT_BIT(sw->caller_unat, &pt->r1); | ||
450 | PUT_NAT_BIT(sw->caller_unat, &pt->r2); | ||
451 | PUT_NAT_BIT(sw->caller_unat, &pt->r3); | ||
452 | PUT_NAT_BIT(sw->ar_unat, &sw->r4); | ||
453 | PUT_NAT_BIT(sw->ar_unat, &sw->r5); | ||
454 | PUT_NAT_BIT(sw->ar_unat, &sw->r6); | ||
455 | PUT_NAT_BIT(sw->ar_unat, &sw->r7); | ||
456 | PUT_NAT_BIT(sw->caller_unat, &pt->r8); PUT_NAT_BIT(sw->caller_unat, &pt->r9); | ||
457 | PUT_NAT_BIT(sw->caller_unat, &pt->r10); PUT_NAT_BIT(sw->caller_unat, &pt->r11); | ||
458 | PUT_NAT_BIT(sw->caller_unat, &pt->r12); PUT_NAT_BIT(sw->caller_unat, &pt->r13); | ||
459 | PUT_NAT_BIT(sw->caller_unat, &pt->r14); PUT_NAT_BIT(sw->caller_unat, &pt->r15); | ||
460 | nat_bits >>= 16; /* skip over bank0 NaT bits */ | ||
461 | PUT_NAT_BIT(sw->caller_unat, &pt->r16); PUT_NAT_BIT(sw->caller_unat, &pt->r17); | ||
462 | PUT_NAT_BIT(sw->caller_unat, &pt->r18); PUT_NAT_BIT(sw->caller_unat, &pt->r19); | ||
463 | PUT_NAT_BIT(sw->caller_unat, &pt->r20); PUT_NAT_BIT(sw->caller_unat, &pt->r21); | ||
464 | PUT_NAT_BIT(sw->caller_unat, &pt->r22); PUT_NAT_BIT(sw->caller_unat, &pt->r23); | ||
465 | PUT_NAT_BIT(sw->caller_unat, &pt->r24); PUT_NAT_BIT(sw->caller_unat, &pt->r25); | ||
466 | PUT_NAT_BIT(sw->caller_unat, &pt->r26); PUT_NAT_BIT(sw->caller_unat, &pt->r27); | ||
467 | PUT_NAT_BIT(sw->caller_unat, &pt->r28); PUT_NAT_BIT(sw->caller_unat, &pt->r29); | ||
468 | PUT_NAT_BIT(sw->caller_unat, &pt->r30); PUT_NAT_BIT(sw->caller_unat, &pt->r31); | ||
469 | } | ||
470 | |||
471 | static void | ||
472 | init_handler_platform (pal_min_state_area_t *ms, | ||
473 | struct pt_regs *pt, struct switch_stack *sw) | ||
474 | { | ||
475 | struct unw_frame_info info; | ||
476 | |||
477 | /* if a kernel debugger is available call it here else just dump the registers */ | ||
478 | |||
479 | /* | ||
480 | * Wait for a bit. On some machines (e.g., HP's zx2000 and zx6000, INIT can be | ||
481 | * generated via the BMC's command-line interface, but since the console is on the | ||
482 | * same serial line, the user will need some time to switch out of the BMC before | ||
483 | * the dump begins. | ||
484 | */ | ||
485 | printk("Delaying for 5 seconds...\n"); | ||
486 | udelay(5*1000000); | ||
487 | show_min_state(ms); | ||
488 | |||
489 | printk("Backtrace of current task (pid %d, %s)\n", current->pid, current->comm); | ||
490 | fetch_min_state(ms, pt, sw); | ||
491 | unw_init_from_interruption(&info, current, pt, sw); | ||
492 | ia64_do_show_stack(&info, NULL); | ||
493 | |||
494 | #ifdef CONFIG_SMP | ||
495 | /* read_trylock() would be handy... */ | ||
496 | if (!tasklist_lock.write_lock) | ||
497 | read_lock(&tasklist_lock); | ||
498 | #endif | ||
499 | { | ||
500 | struct task_struct *g, *t; | ||
501 | do_each_thread (g, t) { | ||
502 | if (t == current) | ||
503 | continue; | ||
504 | |||
505 | printk("\nBacktrace of pid %d (%s)\n", t->pid, t->comm); | ||
506 | show_stack(t, NULL); | ||
507 | } while_each_thread (g, t); | ||
508 | } | ||
509 | #ifdef CONFIG_SMP | ||
510 | if (!tasklist_lock.write_lock) | ||
511 | read_unlock(&tasklist_lock); | ||
512 | #endif | ||
513 | |||
514 | printk("\nINIT dump complete. Please reboot now.\n"); | ||
515 | while (1); /* hang city if no debugger */ | ||
516 | } | ||
517 | |||
518 | #ifdef CONFIG_ACPI | 339 | #ifdef CONFIG_ACPI |
519 | /* | 340 | /* |
520 | * ia64_mca_register_cpev | 341 | * ia64_mca_register_cpev |
@@ -657,42 +478,6 @@ ia64_mca_cmc_vector_enable_keventd(void *unused) | |||
657 | } | 478 | } |
658 | 479 | ||
659 | /* | 480 | /* |
660 | * ia64_mca_wakeup_ipi_wait | ||
661 | * | ||
662 | * Wait for the inter-cpu interrupt to be sent by the | ||
663 | * monarch processor once it is done with handling the | ||
664 | * MCA. | ||
665 | * | ||
666 | * Inputs : None | ||
667 | * Outputs : None | ||
668 | */ | ||
669 | static void | ||
670 | ia64_mca_wakeup_ipi_wait(void) | ||
671 | { | ||
672 | int irr_num = (IA64_MCA_WAKEUP_VECTOR >> 6); | ||
673 | int irr_bit = (IA64_MCA_WAKEUP_VECTOR & 0x3f); | ||
674 | u64 irr = 0; | ||
675 | |||
676 | do { | ||
677 | switch(irr_num) { | ||
678 | case 0: | ||
679 | irr = ia64_getreg(_IA64_REG_CR_IRR0); | ||
680 | break; | ||
681 | case 1: | ||
682 | irr = ia64_getreg(_IA64_REG_CR_IRR1); | ||
683 | break; | ||
684 | case 2: | ||
685 | irr = ia64_getreg(_IA64_REG_CR_IRR2); | ||
686 | break; | ||
687 | case 3: | ||
688 | irr = ia64_getreg(_IA64_REG_CR_IRR3); | ||
689 | break; | ||
690 | } | ||
691 | cpu_relax(); | ||
692 | } while (!(irr & (1UL << irr_bit))) ; | ||
693 | } | ||
694 | |||
695 | /* | ||
696 | * ia64_mca_wakeup | 481 | * ia64_mca_wakeup |
697 | * | 482 | * |
698 | * Send an inter-cpu interrupt to wake-up a particular cpu | 483 | * Send an inter-cpu interrupt to wake-up a particular cpu |
@@ -723,9 +508,7 @@ ia64_mca_wakeup_all(void) | |||
723 | int cpu; | 508 | int cpu; |
724 | 509 | ||
725 | /* Clear the Rendez checkin flag for all cpus */ | 510 | /* Clear the Rendez checkin flag for all cpus */ |
726 | for(cpu = 0; cpu < NR_CPUS; cpu++) { | 511 | for_each_online_cpu(cpu) { |
727 | if (!cpu_online(cpu)) | ||
728 | continue; | ||
729 | if (ia64_mc_info.imi_rendez_checkin[cpu] == IA64_MCA_RENDEZ_CHECKIN_DONE) | 512 | if (ia64_mc_info.imi_rendez_checkin[cpu] == IA64_MCA_RENDEZ_CHECKIN_DONE) |
730 | ia64_mca_wakeup(cpu); | 513 | ia64_mca_wakeup(cpu); |
731 | } | 514 | } |
@@ -757,11 +540,9 @@ ia64_mca_rendez_int_handler(int rendez_irq, void *arg, struct pt_regs *ptregs) | |||
757 | */ | 540 | */ |
758 | ia64_sal_mc_rendez(); | 541 | ia64_sal_mc_rendez(); |
759 | 542 | ||
760 | /* Wait for the wakeup IPI from the monarch | 543 | /* Wait for the monarch cpu to exit. */ |
761 | * This waiting is done by polling on the wakeup-interrupt | 544 | while (monarch_cpu != -1) |
762 | * vector bit in the processor's IRRs | 545 | cpu_relax(); /* spin until monarch leaves */ |
763 | */ | ||
764 | ia64_mca_wakeup_ipi_wait(); | ||
765 | 546 | ||
766 | /* Enable all interrupts */ | 547 | /* Enable all interrupts */ |
767 | local_irq_restore(flags); | 548 | local_irq_restore(flags); |
@@ -789,53 +570,13 @@ ia64_mca_wakeup_int_handler(int wakeup_irq, void *arg, struct pt_regs *ptregs) | |||
789 | return IRQ_HANDLED; | 570 | return IRQ_HANDLED; |
790 | } | 571 | } |
791 | 572 | ||
792 | /* | ||
793 | * ia64_return_to_sal_check | ||
794 | * | ||
795 | * This is function called before going back from the OS_MCA handler | ||
796 | * to the OS_MCA dispatch code which finally takes the control back | ||
797 | * to the SAL. | ||
798 | * The main purpose of this routine is to setup the OS_MCA to SAL | ||
799 | * return state which can be used by the OS_MCA dispatch code | ||
800 | * just before going back to SAL. | ||
801 | * | ||
802 | * Inputs : None | ||
803 | * Outputs : None | ||
804 | */ | ||
805 | |||
806 | static void | ||
807 | ia64_return_to_sal_check(int recover) | ||
808 | { | ||
809 | |||
810 | /* Copy over some relevant stuff from the sal_to_os_mca_handoff | ||
811 | * so that it can be used at the time of os_mca_to_sal_handoff | ||
812 | */ | ||
813 | ia64_os_to_sal_handoff_state.imots_sal_gp = | ||
814 | ia64_sal_to_os_handoff_state.imsto_sal_gp; | ||
815 | |||
816 | ia64_os_to_sal_handoff_state.imots_sal_check_ra = | ||
817 | ia64_sal_to_os_handoff_state.imsto_sal_check_ra; | ||
818 | |||
819 | if (recover) | ||
820 | ia64_os_to_sal_handoff_state.imots_os_status = IA64_MCA_CORRECTED; | ||
821 | else | ||
822 | ia64_os_to_sal_handoff_state.imots_os_status = IA64_MCA_COLD_BOOT; | ||
823 | |||
824 | /* Default = tell SAL to return to same context */ | ||
825 | ia64_os_to_sal_handoff_state.imots_context = IA64_MCA_SAME_CONTEXT; | ||
826 | |||
827 | ia64_os_to_sal_handoff_state.imots_new_min_state = | ||
828 | (u64 *)ia64_sal_to_os_handoff_state.pal_min_state; | ||
829 | |||
830 | } | ||
831 | |||
832 | /* Function pointer for extra MCA recovery */ | 573 | /* Function pointer for extra MCA recovery */ |
833 | int (*ia64_mca_ucmc_extension) | 574 | int (*ia64_mca_ucmc_extension) |
834 | (void*,ia64_mca_sal_to_os_state_t*,ia64_mca_os_to_sal_state_t*) | 575 | (void*,struct ia64_sal_os_state*) |
835 | = NULL; | 576 | = NULL; |
836 | 577 | ||
837 | int | 578 | int |
838 | ia64_reg_MCA_extension(void *fn) | 579 | ia64_reg_MCA_extension(int (*fn)(void *, struct ia64_sal_os_state *)) |
839 | { | 580 | { |
840 | if (ia64_mca_ucmc_extension) | 581 | if (ia64_mca_ucmc_extension) |
841 | return 1; | 582 | return 1; |
@@ -854,8 +595,321 @@ ia64_unreg_MCA_extension(void) | |||
854 | EXPORT_SYMBOL(ia64_reg_MCA_extension); | 595 | EXPORT_SYMBOL(ia64_reg_MCA_extension); |
855 | EXPORT_SYMBOL(ia64_unreg_MCA_extension); | 596 | EXPORT_SYMBOL(ia64_unreg_MCA_extension); |
856 | 597 | ||
598 | |||
599 | static inline void | ||
600 | copy_reg(const u64 *fr, u64 fnat, u64 *tr, u64 *tnat) | ||
601 | { | ||
602 | u64 fslot, tslot, nat; | ||
603 | *tr = *fr; | ||
604 | fslot = ((unsigned long)fr >> 3) & 63; | ||
605 | tslot = ((unsigned long)tr >> 3) & 63; | ||
606 | *tnat &= ~(1UL << tslot); | ||
607 | nat = (fnat >> fslot) & 1; | ||
608 | *tnat |= (nat << tslot); | ||
609 | } | ||
610 | |||
611 | /* On entry to this routine, we are running on the per cpu stack, see | ||
612 | * mca_asm.h. The original stack has not been touched by this event. Some of | ||
613 | * the original stack's registers will be in the RBS on this stack. This stack | ||
614 | * also contains a partial pt_regs and switch_stack, the rest of the data is in | ||
615 | * PAL minstate. | ||
616 | * | ||
617 | * The first thing to do is modify the original stack to look like a blocked | ||
618 | * task so we can run backtrace on the original task. Also mark the per cpu | ||
619 | * stack as current to ensure that we use the correct task state, it also means | ||
620 | * that we can do backtrace on the MCA/INIT handler code itself. | ||
621 | */ | ||
622 | |||
623 | static task_t * | ||
624 | ia64_mca_modify_original_stack(struct pt_regs *regs, | ||
625 | const struct switch_stack *sw, | ||
626 | struct ia64_sal_os_state *sos, | ||
627 | const char *type) | ||
628 | { | ||
629 | char *p, comm[sizeof(current->comm)]; | ||
630 | ia64_va va; | ||
631 | extern char ia64_leave_kernel[]; /* Need asm address, not function descriptor */ | ||
632 | const pal_min_state_area_t *ms = sos->pal_min_state; | ||
633 | task_t *previous_current; | ||
634 | struct pt_regs *old_regs; | ||
635 | struct switch_stack *old_sw; | ||
636 | unsigned size = sizeof(struct pt_regs) + | ||
637 | sizeof(struct switch_stack) + 16; | ||
638 | u64 *old_bspstore, *old_bsp; | ||
639 | u64 *new_bspstore, *new_bsp; | ||
640 | u64 old_unat, old_rnat, new_rnat, nat; | ||
641 | u64 slots, loadrs = regs->loadrs; | ||
642 | u64 r12 = ms->pmsa_gr[12-1], r13 = ms->pmsa_gr[13-1]; | ||
643 | u64 ar_bspstore = regs->ar_bspstore; | ||
644 | u64 ar_bsp = regs->ar_bspstore + (loadrs >> 16); | ||
645 | const u64 *bank; | ||
646 | const char *msg; | ||
647 | int cpu = smp_processor_id(); | ||
648 | |||
649 | previous_current = curr_task(cpu); | ||
650 | set_curr_task(cpu, current); | ||
651 | if ((p = strchr(current->comm, ' '))) | ||
652 | *p = '\0'; | ||
653 | |||
654 | /* Best effort attempt to cope with MCA/INIT delivered while in | ||
655 | * physical mode. | ||
656 | */ | ||
657 | regs->cr_ipsr = ms->pmsa_ipsr; | ||
658 | if (ia64_psr(regs)->dt == 0) { | ||
659 | va.l = r12; | ||
660 | if (va.f.reg == 0) { | ||
661 | va.f.reg = 7; | ||
662 | r12 = va.l; | ||
663 | } | ||
664 | va.l = r13; | ||
665 | if (va.f.reg == 0) { | ||
666 | va.f.reg = 7; | ||
667 | r13 = va.l; | ||
668 | } | ||
669 | } | ||
670 | if (ia64_psr(regs)->rt == 0) { | ||
671 | va.l = ar_bspstore; | ||
672 | if (va.f.reg == 0) { | ||
673 | va.f.reg = 7; | ||
674 | ar_bspstore = va.l; | ||
675 | } | ||
676 | va.l = ar_bsp; | ||
677 | if (va.f.reg == 0) { | ||
678 | va.f.reg = 7; | ||
679 | ar_bsp = va.l; | ||
680 | } | ||
681 | } | ||
682 | |||
683 | /* mca_asm.S ia64_old_stack() cannot assume that the dirty registers | ||
684 | * have been copied to the old stack, the old stack may fail the | ||
685 | * validation tests below. So ia64_old_stack() must restore the dirty | ||
686 | * registers from the new stack. The old and new bspstore probably | ||
687 | * have different alignments, so loadrs calculated on the old bsp | ||
688 | * cannot be used to restore from the new bsp. Calculate a suitable | ||
689 | * loadrs for the new stack and save it in the new pt_regs, where | ||
690 | * ia64_old_stack() can get it. | ||
691 | */ | ||
692 | old_bspstore = (u64 *)ar_bspstore; | ||
693 | old_bsp = (u64 *)ar_bsp; | ||
694 | slots = ia64_rse_num_regs(old_bspstore, old_bsp); | ||
695 | new_bspstore = (u64 *)((u64)current + IA64_RBS_OFFSET); | ||
696 | new_bsp = ia64_rse_skip_regs(new_bspstore, slots); | ||
697 | regs->loadrs = (new_bsp - new_bspstore) * 8 << 16; | ||
698 | |||
699 | /* Verify the previous stack state before we change it */ | ||
700 | if (user_mode(regs)) { | ||
701 | msg = "occurred in user space"; | ||
702 | goto no_mod; | ||
703 | } | ||
704 | if (r13 != sos->prev_IA64_KR_CURRENT) { | ||
705 | msg = "inconsistent previous current and r13"; | ||
706 | goto no_mod; | ||
707 | } | ||
708 | if ((r12 - r13) >= KERNEL_STACK_SIZE) { | ||
709 | msg = "inconsistent r12 and r13"; | ||
710 | goto no_mod; | ||
711 | } | ||
712 | if ((ar_bspstore - r13) >= KERNEL_STACK_SIZE) { | ||
713 | msg = "inconsistent ar.bspstore and r13"; | ||
714 | goto no_mod; | ||
715 | } | ||
716 | va.p = old_bspstore; | ||
717 | if (va.f.reg < 5) { | ||
718 | msg = "old_bspstore is in the wrong region"; | ||
719 | goto no_mod; | ||
720 | } | ||
721 | if ((ar_bsp - r13) >= KERNEL_STACK_SIZE) { | ||
722 | msg = "inconsistent ar.bsp and r13"; | ||
723 | goto no_mod; | ||
724 | } | ||
725 | size += (ia64_rse_skip_regs(old_bspstore, slots) - old_bspstore) * 8; | ||
726 | if (ar_bspstore + size > r12) { | ||
727 | msg = "no room for blocked state"; | ||
728 | goto no_mod; | ||
729 | } | ||
730 | |||
731 | /* Change the comm field on the MCA/INT task to include the pid that | ||
732 | * was interrupted, it makes for easier debugging. If that pid was 0 | ||
733 | * (swapper or nested MCA/INIT) then use the start of the previous comm | ||
734 | * field suffixed with its cpu. | ||
735 | */ | ||
736 | if (previous_current->pid) | ||
737 | snprintf(comm, sizeof(comm), "%s %d", | ||
738 | current->comm, previous_current->pid); | ||
739 | else { | ||
740 | int l; | ||
741 | if ((p = strchr(previous_current->comm, ' '))) | ||
742 | l = p - previous_current->comm; | ||
743 | else | ||
744 | l = strlen(previous_current->comm); | ||
745 | snprintf(comm, sizeof(comm), "%s %*s %d", | ||
746 | current->comm, l, previous_current->comm, | ||
747 | previous_current->thread_info->cpu); | ||
748 | } | ||
749 | memcpy(current->comm, comm, sizeof(current->comm)); | ||
750 | |||
751 | /* Make the original task look blocked. First stack a struct pt_regs, | ||
752 | * describing the state at the time of interrupt. mca_asm.S built a | ||
753 | * partial pt_regs, copy it and fill in the blanks using minstate. | ||
754 | */ | ||
755 | p = (char *)r12 - sizeof(*regs); | ||
756 | old_regs = (struct pt_regs *)p; | ||
757 | memcpy(old_regs, regs, sizeof(*regs)); | ||
758 | /* If ipsr.ic then use pmsa_{iip,ipsr,ifs}, else use | ||
759 | * pmsa_{xip,xpsr,xfs} | ||
760 | */ | ||
761 | if (ia64_psr(regs)->ic) { | ||
762 | old_regs->cr_iip = ms->pmsa_iip; | ||
763 | old_regs->cr_ipsr = ms->pmsa_ipsr; | ||
764 | old_regs->cr_ifs = ms->pmsa_ifs; | ||
765 | } else { | ||
766 | old_regs->cr_iip = ms->pmsa_xip; | ||
767 | old_regs->cr_ipsr = ms->pmsa_xpsr; | ||
768 | old_regs->cr_ifs = ms->pmsa_xfs; | ||
769 | } | ||
770 | old_regs->pr = ms->pmsa_pr; | ||
771 | old_regs->b0 = ms->pmsa_br0; | ||
772 | old_regs->loadrs = loadrs; | ||
773 | old_regs->ar_rsc = ms->pmsa_rsc; | ||
774 | old_unat = old_regs->ar_unat; | ||
775 | copy_reg(&ms->pmsa_gr[1-1], ms->pmsa_nat_bits, &old_regs->r1, &old_unat); | ||
776 | copy_reg(&ms->pmsa_gr[2-1], ms->pmsa_nat_bits, &old_regs->r2, &old_unat); | ||
777 | copy_reg(&ms->pmsa_gr[3-1], ms->pmsa_nat_bits, &old_regs->r3, &old_unat); | ||
778 | copy_reg(&ms->pmsa_gr[8-1], ms->pmsa_nat_bits, &old_regs->r8, &old_unat); | ||
779 | copy_reg(&ms->pmsa_gr[9-1], ms->pmsa_nat_bits, &old_regs->r9, &old_unat); | ||
780 | copy_reg(&ms->pmsa_gr[10-1], ms->pmsa_nat_bits, &old_regs->r10, &old_unat); | ||
781 | copy_reg(&ms->pmsa_gr[11-1], ms->pmsa_nat_bits, &old_regs->r11, &old_unat); | ||
782 | copy_reg(&ms->pmsa_gr[12-1], ms->pmsa_nat_bits, &old_regs->r12, &old_unat); | ||
783 | copy_reg(&ms->pmsa_gr[13-1], ms->pmsa_nat_bits, &old_regs->r13, &old_unat); | ||
784 | copy_reg(&ms->pmsa_gr[14-1], ms->pmsa_nat_bits, &old_regs->r14, &old_unat); | ||
785 | copy_reg(&ms->pmsa_gr[15-1], ms->pmsa_nat_bits, &old_regs->r15, &old_unat); | ||
786 | if (ia64_psr(old_regs)->bn) | ||
787 | bank = ms->pmsa_bank1_gr; | ||
788 | else | ||
789 | bank = ms->pmsa_bank0_gr; | ||
790 | copy_reg(&bank[16-16], ms->pmsa_nat_bits, &old_regs->r16, &old_unat); | ||
791 | copy_reg(&bank[17-16], ms->pmsa_nat_bits, &old_regs->r17, &old_unat); | ||
792 | copy_reg(&bank[18-16], ms->pmsa_nat_bits, &old_regs->r18, &old_unat); | ||
793 | copy_reg(&bank[19-16], ms->pmsa_nat_bits, &old_regs->r19, &old_unat); | ||
794 | copy_reg(&bank[20-16], ms->pmsa_nat_bits, &old_regs->r20, &old_unat); | ||
795 | copy_reg(&bank[21-16], ms->pmsa_nat_bits, &old_regs->r21, &old_unat); | ||
796 | copy_reg(&bank[22-16], ms->pmsa_nat_bits, &old_regs->r22, &old_unat); | ||
797 | copy_reg(&bank[23-16], ms->pmsa_nat_bits, &old_regs->r23, &old_unat); | ||
798 | copy_reg(&bank[24-16], ms->pmsa_nat_bits, &old_regs->r24, &old_unat); | ||
799 | copy_reg(&bank[25-16], ms->pmsa_nat_bits, &old_regs->r25, &old_unat); | ||
800 | copy_reg(&bank[26-16], ms->pmsa_nat_bits, &old_regs->r26, &old_unat); | ||
801 | copy_reg(&bank[27-16], ms->pmsa_nat_bits, &old_regs->r27, &old_unat); | ||
802 | copy_reg(&bank[28-16], ms->pmsa_nat_bits, &old_regs->r28, &old_unat); | ||
803 | copy_reg(&bank[29-16], ms->pmsa_nat_bits, &old_regs->r29, &old_unat); | ||
804 | copy_reg(&bank[30-16], ms->pmsa_nat_bits, &old_regs->r30, &old_unat); | ||
805 | copy_reg(&bank[31-16], ms->pmsa_nat_bits, &old_regs->r31, &old_unat); | ||
806 | |||
807 | /* Next stack a struct switch_stack. mca_asm.S built a partial | ||
808 | * switch_stack, copy it and fill in the blanks using pt_regs and | ||
809 | * minstate. | ||
810 | * | ||
811 | * In the synthesized switch_stack, b0 points to ia64_leave_kernel, | ||
812 | * ar.pfs is set to 0. | ||
813 | * | ||
814 | * unwind.c::unw_unwind() does special processing for interrupt frames. | ||
815 | * It checks if the PRED_NON_SYSCALL predicate is set, if the predicate | ||
816 | * is clear then unw_unwind() does _not_ adjust bsp over pt_regs. Not | ||
817 | * that this is documented, of course. Set PRED_NON_SYSCALL in the | ||
818 | * switch_stack on the original stack so it will unwind correctly when | ||
819 | * unwind.c reads pt_regs. | ||
820 | * | ||
821 | * thread.ksp is updated to point to the synthesized switch_stack. | ||
822 | */ | ||
823 | p -= sizeof(struct switch_stack); | ||
824 | old_sw = (struct switch_stack *)p; | ||
825 | memcpy(old_sw, sw, sizeof(*sw)); | ||
826 | old_sw->caller_unat = old_unat; | ||
827 | old_sw->ar_fpsr = old_regs->ar_fpsr; | ||
828 | copy_reg(&ms->pmsa_gr[4-1], ms->pmsa_nat_bits, &old_sw->r4, &old_unat); | ||
829 | copy_reg(&ms->pmsa_gr[5-1], ms->pmsa_nat_bits, &old_sw->r5, &old_unat); | ||
830 | copy_reg(&ms->pmsa_gr[6-1], ms->pmsa_nat_bits, &old_sw->r6, &old_unat); | ||
831 | copy_reg(&ms->pmsa_gr[7-1], ms->pmsa_nat_bits, &old_sw->r7, &old_unat); | ||
832 | old_sw->b0 = (u64)ia64_leave_kernel; | ||
833 | old_sw->b1 = ms->pmsa_br1; | ||
834 | old_sw->ar_pfs = 0; | ||
835 | old_sw->ar_unat = old_unat; | ||
836 | old_sw->pr = old_regs->pr | (1UL << PRED_NON_SYSCALL); | ||
837 | previous_current->thread.ksp = (u64)p - 16; | ||
838 | |||
839 | /* Finally copy the original stack's registers back to its RBS. | ||
840 | * Registers from ar.bspstore through ar.bsp at the time of the event | ||
841 | * are in the current RBS, copy them back to the original stack. The | ||
842 | * copy must be done register by register because the original bspstore | ||
843 | * and the current one have different alignments, so the saved RNAT | ||
844 | * data occurs at different places. | ||
845 | * | ||
846 | * mca_asm does cover, so the old_bsp already includes all registers at | ||
847 | * the time of MCA/INIT. It also does flushrs, so all registers before | ||
848 | * this function have been written to backing store on the MCA/INIT | ||
849 | * stack. | ||
850 | */ | ||
851 | new_rnat = ia64_get_rnat(ia64_rse_rnat_addr(new_bspstore)); | ||
852 | old_rnat = regs->ar_rnat; | ||
853 | while (slots--) { | ||
854 | if (ia64_rse_is_rnat_slot(new_bspstore)) { | ||
855 | new_rnat = ia64_get_rnat(new_bspstore++); | ||
856 | } | ||
857 | if (ia64_rse_is_rnat_slot(old_bspstore)) { | ||
858 | *old_bspstore++ = old_rnat; | ||
859 | old_rnat = 0; | ||
860 | } | ||
861 | nat = (new_rnat >> ia64_rse_slot_num(new_bspstore)) & 1UL; | ||
862 | old_rnat &= ~(1UL << ia64_rse_slot_num(old_bspstore)); | ||
863 | old_rnat |= (nat << ia64_rse_slot_num(old_bspstore)); | ||
864 | *old_bspstore++ = *new_bspstore++; | ||
865 | } | ||
866 | old_sw->ar_bspstore = (unsigned long)old_bspstore; | ||
867 | old_sw->ar_rnat = old_rnat; | ||
868 | |||
869 | sos->prev_task = previous_current; | ||
870 | return previous_current; | ||
871 | |||
872 | no_mod: | ||
873 | printk(KERN_INFO "cpu %d, %s %s, original stack not modified\n", | ||
874 | smp_processor_id(), type, msg); | ||
875 | return previous_current; | ||
876 | } | ||
877 | |||
878 | /* The monarch/slave interaction is based on monarch_cpu and requires that all | ||
879 | * slaves have entered rendezvous before the monarch leaves. If any cpu has | ||
880 | * not entered rendezvous yet then wait a bit. The assumption is that any | ||
881 | * slave that has not rendezvoused after a reasonable time is never going to do | ||
882 | * so. In this context, slave includes cpus that respond to the MCA rendezvous | ||
883 | * interrupt, as well as cpus that receive the INIT slave event. | ||
884 | */ | ||
885 | |||
886 | static void | ||
887 | ia64_wait_for_slaves(int monarch) | ||
888 | { | ||
889 | int c, wait = 0; | ||
890 | for_each_online_cpu(c) { | ||
891 | if (c == monarch) | ||
892 | continue; | ||
893 | if (ia64_mc_info.imi_rendez_checkin[c] == IA64_MCA_RENDEZ_CHECKIN_NOTDONE) { | ||
894 | udelay(1000); /* short wait first */ | ||
895 | wait = 1; | ||
896 | break; | ||
897 | } | ||
898 | } | ||
899 | if (!wait) | ||
900 | return; | ||
901 | for_each_online_cpu(c) { | ||
902 | if (c == monarch) | ||
903 | continue; | ||
904 | if (ia64_mc_info.imi_rendez_checkin[c] == IA64_MCA_RENDEZ_CHECKIN_NOTDONE) { | ||
905 | udelay(5*1000000); /* wait 5 seconds for slaves (arbitrary) */ | ||
906 | break; | ||
907 | } | ||
908 | } | ||
909 | } | ||
910 | |||
857 | /* | 911 | /* |
858 | * ia64_mca_ucmc_handler | 912 | * ia64_mca_handler |
859 | * | 913 | * |
860 | * This is uncorrectable machine check handler called from OS_MCA | 914 | * This is uncorrectable machine check handler called from OS_MCA |
861 | * dispatch code which is in turn called from SAL_CHECK(). | 915 | * dispatch code which is in turn called from SAL_CHECK(). |
@@ -866,16 +920,28 @@ EXPORT_SYMBOL(ia64_unreg_MCA_extension); | |||
866 | * further MCA logging is enabled by clearing logs. | 920 | * further MCA logging is enabled by clearing logs. |
867 | * Monarch also has the duty of sending wakeup-IPIs to pull the | 921 | * Monarch also has the duty of sending wakeup-IPIs to pull the |
868 | * slave processors out of rendezvous spinloop. | 922 | * slave processors out of rendezvous spinloop. |
869 | * | ||
870 | * Inputs : None | ||
871 | * Outputs : None | ||
872 | */ | 923 | */ |
873 | void | 924 | void |
874 | ia64_mca_ucmc_handler(void) | 925 | ia64_mca_handler(struct pt_regs *regs, struct switch_stack *sw, |
926 | struct ia64_sal_os_state *sos) | ||
875 | { | 927 | { |
876 | pal_processor_state_info_t *psp = (pal_processor_state_info_t *) | 928 | pal_processor_state_info_t *psp = (pal_processor_state_info_t *) |
877 | &ia64_sal_to_os_handoff_state.proc_state_param; | 929 | &sos->proc_state_param; |
878 | int recover; | 930 | int recover, cpu = smp_processor_id(); |
931 | task_t *previous_current; | ||
932 | |||
933 | oops_in_progress = 1; /* FIXME: make printk NMI/MCA/INIT safe */ | ||
934 | previous_current = ia64_mca_modify_original_stack(regs, sw, sos, "MCA"); | ||
935 | monarch_cpu = cpu; | ||
936 | ia64_wait_for_slaves(cpu); | ||
937 | |||
938 | /* Wakeup all the processors which are spinning in the rendezvous loop. | ||
939 | * They will leave SAL, then spin in the OS with interrupts disabled | ||
940 | * until this monarch cpu leaves the MCA handler. That gets control | ||
941 | * back to the OS so we can backtrace the other cpus, backtrace when | ||
942 | * spinning in SAL does not work. | ||
943 | */ | ||
944 | ia64_mca_wakeup_all(); | ||
879 | 945 | ||
880 | /* Get the MCA error record and log it */ | 946 | /* Get the MCA error record and log it */ |
881 | ia64_mca_log_sal_error_record(SAL_INFO_TYPE_MCA); | 947 | ia64_mca_log_sal_error_record(SAL_INFO_TYPE_MCA); |
@@ -883,25 +949,20 @@ ia64_mca_ucmc_handler(void) | |||
883 | /* TLB error is only exist in this SAL error record */ | 949 | /* TLB error is only exist in this SAL error record */ |
884 | recover = (psp->tc && !(psp->cc || psp->bc || psp->rc || psp->uc)) | 950 | recover = (psp->tc && !(psp->cc || psp->bc || psp->rc || psp->uc)) |
885 | /* other error recovery */ | 951 | /* other error recovery */ |
886 | || (ia64_mca_ucmc_extension | 952 | || (ia64_mca_ucmc_extension |
887 | && ia64_mca_ucmc_extension( | 953 | && ia64_mca_ucmc_extension( |
888 | IA64_LOG_CURR_BUFFER(SAL_INFO_TYPE_MCA), | 954 | IA64_LOG_CURR_BUFFER(SAL_INFO_TYPE_MCA), |
889 | &ia64_sal_to_os_handoff_state, | 955 | sos)); |
890 | &ia64_os_to_sal_handoff_state)); | ||
891 | 956 | ||
892 | if (recover) { | 957 | if (recover) { |
893 | sal_log_record_header_t *rh = IA64_LOG_CURR_BUFFER(SAL_INFO_TYPE_MCA); | 958 | sal_log_record_header_t *rh = IA64_LOG_CURR_BUFFER(SAL_INFO_TYPE_MCA); |
894 | rh->severity = sal_log_severity_corrected; | 959 | rh->severity = sal_log_severity_corrected; |
895 | ia64_sal_clear_state_info(SAL_INFO_TYPE_MCA); | 960 | ia64_sal_clear_state_info(SAL_INFO_TYPE_MCA); |
961 | sos->os_status = IA64_MCA_CORRECTED; | ||
896 | } | 962 | } |
897 | /* | ||
898 | * Wakeup all the processors which are spinning in the rendezvous | ||
899 | * loop. | ||
900 | */ | ||
901 | ia64_mca_wakeup_all(); | ||
902 | 963 | ||
903 | /* Return to SAL */ | 964 | set_curr_task(cpu, previous_current); |
904 | ia64_return_to_sal_check(recover); | 965 | monarch_cpu = -1; |
905 | } | 966 | } |
906 | 967 | ||
907 | static DECLARE_WORK(cmc_disable_work, ia64_mca_cmc_vector_disable_keventd, NULL); | 968 | static DECLARE_WORK(cmc_disable_work, ia64_mca_cmc_vector_disable_keventd, NULL); |
@@ -953,6 +1014,11 @@ ia64_mca_cmc_int_handler(int cmc_irq, void *arg, struct pt_regs *ptregs) | |||
953 | 1014 | ||
954 | cmc_polling_enabled = 1; | 1015 | cmc_polling_enabled = 1; |
955 | spin_unlock(&cmc_history_lock); | 1016 | spin_unlock(&cmc_history_lock); |
1017 | /* If we're being hit with CMC interrupts, we won't | ||
1018 | * ever execute the schedule_work() below. Need to | ||
1019 | * disable CMC interrupts on this processor now. | ||
1020 | */ | ||
1021 | ia64_mca_cmc_vector_disable(NULL); | ||
956 | schedule_work(&cmc_disable_work); | 1022 | schedule_work(&cmc_disable_work); |
957 | 1023 | ||
958 | /* | 1024 | /* |
@@ -1125,34 +1191,114 @@ ia64_mca_cpe_poll (unsigned long dummy) | |||
1125 | /* | 1191 | /* |
1126 | * C portion of the OS INIT handler | 1192 | * C portion of the OS INIT handler |
1127 | * | 1193 | * |
1128 | * Called from ia64_monarch_init_handler | 1194 | * Called from ia64_os_init_dispatch |
1129 | * | ||
1130 | * Inputs: pointer to pt_regs where processor info was saved. | ||
1131 | * | 1195 | * |
1132 | * Returns: | 1196 | * Inputs: pointer to pt_regs where processor info was saved. SAL/OS state for |
1133 | * 0 if SAL must warm boot the System | 1197 | * this event. This code is used for both monarch and slave INIT events, see |
1134 | * 1 if SAL must return to interrupted context using PAL_MC_RESUME | 1198 | * sos->monarch. |
1135 | * | 1199 | * |
1200 | * All INIT events switch to the INIT stack and change the previous process to | ||
1201 | * blocked status. If one of the INIT events is the monarch then we are | ||
1202 | * probably processing the nmi button/command. Use the monarch cpu to dump all | ||
1203 | * the processes. The slave INIT events all spin until the monarch cpu | ||
1204 | * returns. We can also get INIT slave events for MCA, in which case the MCA | ||
1205 | * process is the monarch. | ||
1136 | */ | 1206 | */ |
1207 | |||
1137 | void | 1208 | void |
1138 | ia64_init_handler (struct pt_regs *pt, struct switch_stack *sw) | 1209 | ia64_init_handler(struct pt_regs *regs, struct switch_stack *sw, |
1210 | struct ia64_sal_os_state *sos) | ||
1139 | { | 1211 | { |
1140 | pal_min_state_area_t *ms; | 1212 | static atomic_t slaves; |
1213 | static atomic_t monarchs; | ||
1214 | task_t *previous_current; | ||
1215 | int cpu = smp_processor_id(), c; | ||
1216 | struct task_struct *g, *t; | ||
1141 | 1217 | ||
1142 | oops_in_progress = 1; /* avoid deadlock in printk, but it makes recovery dodgy */ | 1218 | oops_in_progress = 1; /* FIXME: make printk NMI/MCA/INIT safe */ |
1143 | console_loglevel = 15; /* make sure printks make it to console */ | 1219 | console_loglevel = 15; /* make sure printks make it to console */ |
1144 | 1220 | ||
1145 | printk(KERN_INFO "Entered OS INIT handler. PSP=%lx\n", | 1221 | printk(KERN_INFO "Entered OS INIT handler. PSP=%lx cpu=%d monarch=%ld\n", |
1146 | ia64_sal_to_os_handoff_state.proc_state_param); | 1222 | sos->proc_state_param, cpu, sos->monarch); |
1223 | salinfo_log_wakeup(SAL_INFO_TYPE_INIT, NULL, 0, 0); | ||
1147 | 1224 | ||
1148 | /* | 1225 | previous_current = ia64_mca_modify_original_stack(regs, sw, sos, "INIT"); |
1149 | * Address of minstate area provided by PAL is physical, | 1226 | sos->os_status = IA64_INIT_RESUME; |
1150 | * uncacheable (bit 63 set). Convert to Linux virtual | 1227 | |
1151 | * address in region 6. | 1228 | /* FIXME: Workaround for broken proms that drive all INIT events as |
1229 | * slaves. The last slave that enters is promoted to be a monarch. | ||
1230 | * Remove this code in September 2006, that gives platforms a year to | ||
1231 | * fix their proms and get their customers updated. | ||
1152 | */ | 1232 | */ |
1153 | ms = (pal_min_state_area_t *)(ia64_sal_to_os_handoff_state.pal_min_state | (6ul<<61)); | 1233 | if (!sos->monarch && atomic_add_return(1, &slaves) == num_online_cpus()) { |
1234 | printk(KERN_WARNING "%s: Promoting cpu %d to monarch.\n", | ||
1235 | __FUNCTION__, cpu); | ||
1236 | atomic_dec(&slaves); | ||
1237 | sos->monarch = 1; | ||
1238 | } | ||
1239 | |||
1240 | /* FIXME: Workaround for broken proms that drive all INIT events as | ||
1241 | * monarchs. Second and subsequent monarchs are demoted to slaves. | ||
1242 | * Remove this code in September 2006, that gives platforms a year to | ||
1243 | * fix their proms and get their customers updated. | ||
1244 | */ | ||
1245 | if (sos->monarch && atomic_add_return(1, &monarchs) > 1) { | ||
1246 | printk(KERN_WARNING "%s: Demoting cpu %d to slave.\n", | ||
1247 | __FUNCTION__, cpu); | ||
1248 | atomic_dec(&monarchs); | ||
1249 | sos->monarch = 0; | ||
1250 | } | ||
1154 | 1251 | ||
1155 | init_handler_platform(ms, pt, sw); /* call platform specific routines */ | 1252 | if (!sos->monarch) { |
1253 | ia64_mc_info.imi_rendez_checkin[cpu] = IA64_MCA_RENDEZ_CHECKIN_INIT; | ||
1254 | while (monarch_cpu == -1) | ||
1255 | cpu_relax(); /* spin until monarch enters */ | ||
1256 | while (monarch_cpu != -1) | ||
1257 | cpu_relax(); /* spin until monarch leaves */ | ||
1258 | printk("Slave on cpu %d returning to normal service.\n", cpu); | ||
1259 | set_curr_task(cpu, previous_current); | ||
1260 | ia64_mc_info.imi_rendez_checkin[cpu] = IA64_MCA_RENDEZ_CHECKIN_NOTDONE; | ||
1261 | atomic_dec(&slaves); | ||
1262 | return; | ||
1263 | } | ||
1264 | |||
1265 | monarch_cpu = cpu; | ||
1266 | |||
1267 | /* | ||
1268 | * Wait for a bit. On some machines (e.g., HP's zx2000 and zx6000, INIT can be | ||
1269 | * generated via the BMC's command-line interface, but since the console is on the | ||
1270 | * same serial line, the user will need some time to switch out of the BMC before | ||
1271 | * the dump begins. | ||
1272 | */ | ||
1273 | printk("Delaying for 5 seconds...\n"); | ||
1274 | udelay(5*1000000); | ||
1275 | ia64_wait_for_slaves(cpu); | ||
1276 | printk(KERN_ERR "Processes interrupted by INIT -"); | ||
1277 | for_each_online_cpu(c) { | ||
1278 | struct ia64_sal_os_state *s; | ||
1279 | t = __va(__per_cpu_mca[c] + IA64_MCA_CPU_INIT_STACK_OFFSET); | ||
1280 | s = (struct ia64_sal_os_state *)((char *)t + MCA_SOS_OFFSET); | ||
1281 | g = s->prev_task; | ||
1282 | if (g) { | ||
1283 | if (g->pid) | ||
1284 | printk(" %d", g->pid); | ||
1285 | else | ||
1286 | printk(" %d (cpu %d task 0x%p)", g->pid, task_cpu(g), g); | ||
1287 | } | ||
1288 | } | ||
1289 | printk("\n\n"); | ||
1290 | if (read_trylock(&tasklist_lock)) { | ||
1291 | do_each_thread (g, t) { | ||
1292 | printk("\nBacktrace of pid %d (%s)\n", t->pid, t->comm); | ||
1293 | show_stack(t, NULL); | ||
1294 | } while_each_thread (g, t); | ||
1295 | read_unlock(&tasklist_lock); | ||
1296 | } | ||
1297 | printk("\nINIT dump complete. Monarch on cpu %d returning to normal service.\n", cpu); | ||
1298 | atomic_dec(&monarchs); | ||
1299 | set_curr_task(cpu, previous_current); | ||
1300 | monarch_cpu = -1; | ||
1301 | return; | ||
1156 | } | 1302 | } |
1157 | 1303 | ||
1158 | static int __init | 1304 | static int __init |
@@ -1202,6 +1348,34 @@ static struct irqaction mca_cpep_irqaction = { | |||
1202 | }; | 1348 | }; |
1203 | #endif /* CONFIG_ACPI */ | 1349 | #endif /* CONFIG_ACPI */ |
1204 | 1350 | ||
1351 | /* Minimal format of the MCA/INIT stacks. The pseudo processes that run on | ||
1352 | * these stacks can never sleep, they cannot return from the kernel to user | ||
1353 | * space, they do not appear in a normal ps listing. So there is no need to | ||
1354 | * format most of the fields. | ||
1355 | */ | ||
1356 | |||
1357 | static void | ||
1358 | format_mca_init_stack(void *mca_data, unsigned long offset, | ||
1359 | const char *type, int cpu) | ||
1360 | { | ||
1361 | struct task_struct *p = (struct task_struct *)((char *)mca_data + offset); | ||
1362 | struct thread_info *ti; | ||
1363 | memset(p, 0, KERNEL_STACK_SIZE); | ||
1364 | ti = (struct thread_info *)((char *)p + IA64_TASK_SIZE); | ||
1365 | ti->flags = _TIF_MCA_INIT; | ||
1366 | ti->preempt_count = 1; | ||
1367 | ti->task = p; | ||
1368 | ti->cpu = cpu; | ||
1369 | p->thread_info = ti; | ||
1370 | p->state = TASK_UNINTERRUPTIBLE; | ||
1371 | __set_bit(cpu, &p->cpus_allowed); | ||
1372 | INIT_LIST_HEAD(&p->tasks); | ||
1373 | p->parent = p->real_parent = p->group_leader = p; | ||
1374 | INIT_LIST_HEAD(&p->children); | ||
1375 | INIT_LIST_HEAD(&p->sibling); | ||
1376 | strncpy(p->comm, type, sizeof(p->comm)-1); | ||
1377 | } | ||
1378 | |||
1205 | /* Do per-CPU MCA-related initialization. */ | 1379 | /* Do per-CPU MCA-related initialization. */ |
1206 | 1380 | ||
1207 | void __devinit | 1381 | void __devinit |
@@ -1214,19 +1388,28 @@ ia64_mca_cpu_init(void *cpu_data) | |||
1214 | int cpu; | 1388 | int cpu; |
1215 | 1389 | ||
1216 | mca_data = alloc_bootmem(sizeof(struct ia64_mca_cpu) | 1390 | mca_data = alloc_bootmem(sizeof(struct ia64_mca_cpu) |
1217 | * NR_CPUS); | 1391 | * NR_CPUS + KERNEL_STACK_SIZE); |
1392 | mca_data = (void *)(((unsigned long)mca_data + | ||
1393 | KERNEL_STACK_SIZE - 1) & | ||
1394 | (-KERNEL_STACK_SIZE)); | ||
1218 | for (cpu = 0; cpu < NR_CPUS; cpu++) { | 1395 | for (cpu = 0; cpu < NR_CPUS; cpu++) { |
1396 | format_mca_init_stack(mca_data, | ||
1397 | offsetof(struct ia64_mca_cpu, mca_stack), | ||
1398 | "MCA", cpu); | ||
1399 | format_mca_init_stack(mca_data, | ||
1400 | offsetof(struct ia64_mca_cpu, init_stack), | ||
1401 | "INIT", cpu); | ||
1219 | __per_cpu_mca[cpu] = __pa(mca_data); | 1402 | __per_cpu_mca[cpu] = __pa(mca_data); |
1220 | mca_data += sizeof(struct ia64_mca_cpu); | 1403 | mca_data += sizeof(struct ia64_mca_cpu); |
1221 | } | 1404 | } |
1222 | } | 1405 | } |
1223 | 1406 | ||
1224 | /* | 1407 | /* |
1225 | * The MCA info structure was allocated earlier and its | 1408 | * The MCA info structure was allocated earlier and its |
1226 | * physical address saved in __per_cpu_mca[cpu]. Copy that | 1409 | * physical address saved in __per_cpu_mca[cpu]. Copy that |
1227 | * address * to ia64_mca_data so we can access it as a per-CPU | 1410 | * address * to ia64_mca_data so we can access it as a per-CPU |
1228 | * variable. | 1411 | * variable. |
1229 | */ | 1412 | */ |
1230 | __get_cpu_var(ia64_mca_data) = __per_cpu_mca[smp_processor_id()]; | 1413 | __get_cpu_var(ia64_mca_data) = __per_cpu_mca[smp_processor_id()]; |
1231 | 1414 | ||
1232 | /* | 1415 | /* |
@@ -1236,11 +1419,11 @@ ia64_mca_cpu_init(void *cpu_data) | |||
1236 | __get_cpu_var(ia64_mca_per_cpu_pte) = | 1419 | __get_cpu_var(ia64_mca_per_cpu_pte) = |
1237 | pte_val(mk_pte_phys(__pa(cpu_data), PAGE_KERNEL)); | 1420 | pte_val(mk_pte_phys(__pa(cpu_data), PAGE_KERNEL)); |
1238 | 1421 | ||
1239 | /* | 1422 | /* |
1240 | * Also, stash away a copy of the PAL address and the PTE | 1423 | * Also, stash away a copy of the PAL address and the PTE |
1241 | * needed to map it. | 1424 | * needed to map it. |
1242 | */ | 1425 | */ |
1243 | pal_vaddr = efi_get_pal_addr(); | 1426 | pal_vaddr = efi_get_pal_addr(); |
1244 | if (!pal_vaddr) | 1427 | if (!pal_vaddr) |
1245 | return; | 1428 | return; |
1246 | __get_cpu_var(ia64_mca_pal_base) = | 1429 | __get_cpu_var(ia64_mca_pal_base) = |
@@ -1272,8 +1455,8 @@ ia64_mca_cpu_init(void *cpu_data) | |||
1272 | void __init | 1455 | void __init |
1273 | ia64_mca_init(void) | 1456 | ia64_mca_init(void) |
1274 | { | 1457 | { |
1275 | ia64_fptr_t *mon_init_ptr = (ia64_fptr_t *)ia64_monarch_init_handler; | 1458 | ia64_fptr_t *init_hldlr_ptr_monarch = (ia64_fptr_t *)ia64_os_init_dispatch_monarch; |
1276 | ia64_fptr_t *slave_init_ptr = (ia64_fptr_t *)ia64_slave_init_handler; | 1459 | ia64_fptr_t *init_hldlr_ptr_slave = (ia64_fptr_t *)ia64_os_init_dispatch_slave; |
1277 | ia64_fptr_t *mca_hldlr_ptr = (ia64_fptr_t *)ia64_os_mca_dispatch; | 1460 | ia64_fptr_t *mca_hldlr_ptr = (ia64_fptr_t *)ia64_os_mca_dispatch; |
1278 | int i; | 1461 | int i; |
1279 | s64 rc; | 1462 | s64 rc; |
@@ -1351,9 +1534,9 @@ ia64_mca_init(void) | |||
1351 | * XXX - disable SAL checksum by setting size to 0, should be | 1534 | * XXX - disable SAL checksum by setting size to 0, should be |
1352 | * size of the actual init handler in mca_asm.S. | 1535 | * size of the actual init handler in mca_asm.S. |
1353 | */ | 1536 | */ |
1354 | ia64_mc_info.imi_monarch_init_handler = ia64_tpa(mon_init_ptr->fp); | 1537 | ia64_mc_info.imi_monarch_init_handler = ia64_tpa(init_hldlr_ptr_monarch->fp); |
1355 | ia64_mc_info.imi_monarch_init_handler_size = 0; | 1538 | ia64_mc_info.imi_monarch_init_handler_size = 0; |
1356 | ia64_mc_info.imi_slave_init_handler = ia64_tpa(slave_init_ptr->fp); | 1539 | ia64_mc_info.imi_slave_init_handler = ia64_tpa(init_hldlr_ptr_slave->fp); |
1357 | ia64_mc_info.imi_slave_init_handler_size = 0; | 1540 | ia64_mc_info.imi_slave_init_handler_size = 0; |
1358 | 1541 | ||
1359 | IA64_MCA_DEBUG("%s: OS INIT handler at %lx\n", __FUNCTION__, | 1542 | IA64_MCA_DEBUG("%s: OS INIT handler at %lx\n", __FUNCTION__, |
diff --git a/arch/ia64/kernel/mca_asm.S b/arch/ia64/kernel/mca_asm.S index ef3fd7265b67..db32fc1d3935 100644 --- a/arch/ia64/kernel/mca_asm.S +++ b/arch/ia64/kernel/mca_asm.S | |||
@@ -16,6 +16,9 @@ | |||
16 | // 04/11/12 Russ Anderson <rja@sgi.com> | 16 | // 04/11/12 Russ Anderson <rja@sgi.com> |
17 | // Added per cpu MCA/INIT stack save areas. | 17 | // Added per cpu MCA/INIT stack save areas. |
18 | // | 18 | // |
19 | // 12/08/05 Keith Owens <kaos@sgi.com> | ||
20 | // Use per cpu MCA/INIT stacks for all data. | ||
21 | // | ||
19 | #include <linux/config.h> | 22 | #include <linux/config.h> |
20 | #include <linux/threads.h> | 23 | #include <linux/threads.h> |
21 | 24 | ||
@@ -25,96 +28,23 @@ | |||
25 | #include <asm/mca_asm.h> | 28 | #include <asm/mca_asm.h> |
26 | #include <asm/mca.h> | 29 | #include <asm/mca.h> |
27 | 30 | ||
28 | /* | 31 | #include "entry.h" |
29 | * When we get a machine check, the kernel stack pointer is no longer | ||
30 | * valid, so we need to set a new stack pointer. | ||
31 | */ | ||
32 | #define MINSTATE_PHYS /* Make sure stack access is physical for MINSTATE */ | ||
33 | |||
34 | /* | ||
35 | * Needed for return context to SAL | ||
36 | */ | ||
37 | #define IA64_MCA_SAME_CONTEXT 0 | ||
38 | #define IA64_MCA_COLD_BOOT -2 | ||
39 | |||
40 | #include "minstate.h" | ||
41 | |||
42 | /* | ||
43 | * SAL_TO_OS_MCA_HANDOFF_STATE (SAL 3.0 spec) | ||
44 | * 1. GR1 = OS GP | ||
45 | * 2. GR8 = PAL_PROC physical address | ||
46 | * 3. GR9 = SAL_PROC physical address | ||
47 | * 4. GR10 = SAL GP (physical) | ||
48 | * 5. GR11 = Rendez state | ||
49 | * 6. GR12 = Return address to location within SAL_CHECK | ||
50 | */ | ||
51 | #define SAL_TO_OS_MCA_HANDOFF_STATE_SAVE(_tmp) \ | ||
52 | LOAD_PHYSICAL(p0, _tmp, ia64_sal_to_os_handoff_state);; \ | ||
53 | st8 [_tmp]=r1,0x08;; \ | ||
54 | st8 [_tmp]=r8,0x08;; \ | ||
55 | st8 [_tmp]=r9,0x08;; \ | ||
56 | st8 [_tmp]=r10,0x08;; \ | ||
57 | st8 [_tmp]=r11,0x08;; \ | ||
58 | st8 [_tmp]=r12,0x08;; \ | ||
59 | st8 [_tmp]=r17,0x08;; \ | ||
60 | st8 [_tmp]=r18,0x08 | ||
61 | |||
62 | /* | ||
63 | * OS_MCA_TO_SAL_HANDOFF_STATE (SAL 3.0 spec) | ||
64 | * (p6) is executed if we never entered virtual mode (TLB error) | ||
65 | * (p7) is executed if we entered virtual mode as expected (normal case) | ||
66 | * 1. GR8 = OS_MCA return status | ||
67 | * 2. GR9 = SAL GP (physical) | ||
68 | * 3. GR10 = 0/1 returning same/new context | ||
69 | * 4. GR22 = New min state save area pointer | ||
70 | * returns ptr to SAL rtn save loc in _tmp | ||
71 | */ | ||
72 | #define OS_MCA_TO_SAL_HANDOFF_STATE_RESTORE(_tmp) \ | ||
73 | movl _tmp=ia64_os_to_sal_handoff_state;; \ | ||
74 | DATA_VA_TO_PA(_tmp);; \ | ||
75 | ld8 r8=[_tmp],0x08;; \ | ||
76 | ld8 r9=[_tmp],0x08;; \ | ||
77 | ld8 r10=[_tmp],0x08;; \ | ||
78 | ld8 r22=[_tmp],0x08;; | ||
79 | // now _tmp is pointing to SAL rtn save location | ||
80 | |||
81 | /* | ||
82 | * COLD_BOOT_HANDOFF_STATE() sets ia64_mca_os_to_sal_state | ||
83 | * imots_os_status=IA64_MCA_COLD_BOOT | ||
84 | * imots_sal_gp=SAL GP | ||
85 | * imots_context=IA64_MCA_SAME_CONTEXT | ||
86 | * imots_new_min_state=Min state save area pointer | ||
87 | * imots_sal_check_ra=Return address to location within SAL_CHECK | ||
88 | * | ||
89 | */ | ||
90 | #define COLD_BOOT_HANDOFF_STATE(sal_to_os_handoff,os_to_sal_handoff,tmp)\ | ||
91 | movl tmp=IA64_MCA_COLD_BOOT; \ | ||
92 | movl sal_to_os_handoff=__pa(ia64_sal_to_os_handoff_state); \ | ||
93 | movl os_to_sal_handoff=__pa(ia64_os_to_sal_handoff_state);; \ | ||
94 | st8 [os_to_sal_handoff]=tmp,8;; \ | ||
95 | ld8 tmp=[sal_to_os_handoff],48;; \ | ||
96 | st8 [os_to_sal_handoff]=tmp,8;; \ | ||
97 | movl tmp=IA64_MCA_SAME_CONTEXT;; \ | ||
98 | st8 [os_to_sal_handoff]=tmp,8;; \ | ||
99 | ld8 tmp=[sal_to_os_handoff],-8;; \ | ||
100 | st8 [os_to_sal_handoff]=tmp,8;; \ | ||
101 | ld8 tmp=[sal_to_os_handoff];; \ | ||
102 | st8 [os_to_sal_handoff]=tmp;; | ||
103 | 32 | ||
104 | #define GET_IA64_MCA_DATA(reg) \ | 33 | #define GET_IA64_MCA_DATA(reg) \ |
105 | GET_THIS_PADDR(reg, ia64_mca_data) \ | 34 | GET_THIS_PADDR(reg, ia64_mca_data) \ |
106 | ;; \ | 35 | ;; \ |
107 | ld8 reg=[reg] | 36 | ld8 reg=[reg] |
108 | 37 | ||
109 | .global ia64_os_mca_dispatch | ||
110 | .global ia64_os_mca_dispatch_end | ||
111 | .global ia64_sal_to_os_handoff_state | ||
112 | .global ia64_os_to_sal_handoff_state | ||
113 | .global ia64_do_tlb_purge | 38 | .global ia64_do_tlb_purge |
39 | .global ia64_os_mca_dispatch | ||
40 | .global ia64_os_init_dispatch_monarch | ||
41 | .global ia64_os_init_dispatch_slave | ||
114 | 42 | ||
115 | .text | 43 | .text |
116 | .align 16 | 44 | .align 16 |
117 | 45 | ||
46 | //StartMain//////////////////////////////////////////////////////////////////// | ||
47 | |||
118 | /* | 48 | /* |
119 | * Just the TLB purge part is moved to a separate function | 49 | * Just the TLB purge part is moved to a separate function |
120 | * so we can re-use the code for cpu hotplug code as well | 50 | * so we can re-use the code for cpu hotplug code as well |
@@ -207,34 +137,31 @@ ia64_do_tlb_purge: | |||
207 | br.sptk.many b1 | 137 | br.sptk.many b1 |
208 | ;; | 138 | ;; |
209 | 139 | ||
210 | ia64_os_mca_dispatch: | 140 | //EndMain////////////////////////////////////////////////////////////////////// |
141 | |||
142 | //StartMain//////////////////////////////////////////////////////////////////// | ||
211 | 143 | ||
144 | ia64_os_mca_dispatch: | ||
212 | // Serialize all MCA processing | 145 | // Serialize all MCA processing |
213 | mov r3=1;; | 146 | mov r3=1;; |
214 | LOAD_PHYSICAL(p0,r2,ia64_mca_serialize);; | 147 | LOAD_PHYSICAL(p0,r2,ia64_mca_serialize);; |
215 | ia64_os_mca_spin: | 148 | ia64_os_mca_spin: |
216 | xchg8 r4=[r2],r3;; | 149 | xchg4 r4=[r2],r3;; |
217 | cmp.ne p6,p0=r4,r0 | 150 | cmp.ne p6,p0=r4,r0 |
218 | (p6) br ia64_os_mca_spin | 151 | (p6) br ia64_os_mca_spin |
219 | 152 | ||
220 | // Save the SAL to OS MCA handoff state as defined | 153 | mov r3=IA64_MCA_CPU_MCA_STACK_OFFSET // use the MCA stack |
221 | // by SAL SPEC 3.0 | 154 | LOAD_PHYSICAL(p0,r2,1f) // return address |
222 | // NOTE : The order in which the state gets saved | 155 | mov r19=1 // All MCA events are treated as monarch (for now) |
223 | // is dependent on the way the C-structure | 156 | br.sptk ia64_state_save // save the state that is not in minstate |
224 | // for ia64_mca_sal_to_os_state_t has been | 157 | 1: |
225 | // defined in include/asm/mca.h | ||
226 | SAL_TO_OS_MCA_HANDOFF_STATE_SAVE(r2) | ||
227 | ;; | ||
228 | |||
229 | // LOG PROCESSOR STATE INFO FROM HERE ON.. | ||
230 | begin_os_mca_dump: | ||
231 | br ia64_os_mca_proc_state_dump;; | ||
232 | |||
233 | ia64_os_mca_done_dump: | ||
234 | 158 | ||
235 | LOAD_PHYSICAL(p0,r16,ia64_sal_to_os_handoff_state+56) | 159 | GET_IA64_MCA_DATA(r2) |
160 | // Using MCA stack, struct ia64_sal_os_state, variable proc_state_param | ||
161 | ;; | ||
162 | add r3=IA64_MCA_CPU_MCA_STACK_OFFSET+MCA_SOS_OFFSET+IA64_SAL_OS_STATE_PROC_STATE_PARAM_OFFSET, r2 | ||
236 | ;; | 163 | ;; |
237 | ld8 r18=[r16] // Get processor state parameter on existing PALE_CHECK. | 164 | ld8 r18=[r3] // Get processor state parameter on existing PALE_CHECK. |
238 | ;; | 165 | ;; |
239 | tbit.nz p6,p7=r18,60 | 166 | tbit.nz p6,p7=r18,60 |
240 | (p7) br.spnt done_tlb_purge_and_reload | 167 | (p7) br.spnt done_tlb_purge_and_reload |
@@ -323,624 +250,849 @@ ia64_reload_tr: | |||
323 | itr.d dtr[r20]=r16 | 250 | itr.d dtr[r20]=r16 |
324 | ;; | 251 | ;; |
325 | srlz.d | 252 | srlz.d |
326 | ;; | ||
327 | br.sptk.many done_tlb_purge_and_reload | ||
328 | err: | ||
329 | COLD_BOOT_HANDOFF_STATE(r20,r21,r22) | ||
330 | br.sptk.many ia64_os_mca_done_restore | ||
331 | 253 | ||
332 | done_tlb_purge_and_reload: | 254 | done_tlb_purge_and_reload: |
333 | 255 | ||
334 | // Setup new stack frame for OS_MCA handling | 256 | // switch to per cpu MCA stack |
335 | GET_IA64_MCA_DATA(r2) | 257 | mov r3=IA64_MCA_CPU_MCA_STACK_OFFSET // use the MCA stack |
336 | ;; | 258 | LOAD_PHYSICAL(p0,r2,1f) // return address |
337 | add r3 = IA64_MCA_CPU_STACKFRAME_OFFSET, r2 | 259 | br.sptk ia64_new_stack |
338 | add r2 = IA64_MCA_CPU_RBSTORE_OFFSET, r2 | 260 | 1: |
339 | ;; | 261 | |
340 | rse_switch_context(r6,r3,r2);; // RSC management in this new context | 262 | // everything saved, now we can set the kernel registers |
263 | mov r3=IA64_MCA_CPU_MCA_STACK_OFFSET // use the MCA stack | ||
264 | LOAD_PHYSICAL(p0,r2,1f) // return address | ||
265 | br.sptk ia64_set_kernel_registers | ||
266 | 1: | ||
341 | 267 | ||
268 | // This must be done in physical mode | ||
342 | GET_IA64_MCA_DATA(r2) | 269 | GET_IA64_MCA_DATA(r2) |
343 | ;; | 270 | ;; |
344 | add r2 = IA64_MCA_CPU_STACK_OFFSET+IA64_MCA_STACK_SIZE-16, r2 | 271 | mov r7=r2 |
345 | ;; | ||
346 | mov r12=r2 // establish new stack-pointer | ||
347 | 272 | ||
348 | // Enter virtual mode from physical mode | 273 | // Enter virtual mode from physical mode |
349 | VIRTUAL_MODE_ENTER(r2, r3, ia64_os_mca_virtual_begin, r4) | 274 | VIRTUAL_MODE_ENTER(r2, r3, ia64_os_mca_virtual_begin, r4) |
350 | ia64_os_mca_virtual_begin: | 275 | |
276 | // This code returns to SAL via SOS r2, in general SAL has no unwind | ||
277 | // data. To get a clean termination when backtracing the C MCA/INIT | ||
278 | // handler, set a dummy return address of 0 in this routine. That | ||
279 | // requires that ia64_os_mca_virtual_begin be a global function. | ||
280 | ENTRY(ia64_os_mca_virtual_begin) | ||
281 | .prologue | ||
282 | .save rp,r0 | ||
283 | .body | ||
284 | |||
285 | mov ar.rsc=3 // set eager mode for C handler | ||
286 | mov r2=r7 // see GET_IA64_MCA_DATA above | ||
287 | ;; | ||
351 | 288 | ||
352 | // Call virtual mode handler | 289 | // Call virtual mode handler |
353 | movl r2=ia64_mca_ucmc_handler;; | 290 | alloc r14=ar.pfs,0,0,3,0 |
354 | mov b6=r2;; | 291 | ;; |
355 | br.call.sptk.many b0=b6;; | 292 | DATA_PA_TO_VA(r2,r7) |
356 | .ret0: | 293 | ;; |
294 | add out0=IA64_MCA_CPU_MCA_STACK_OFFSET+MCA_PT_REGS_OFFSET, r2 | ||
295 | add out1=IA64_MCA_CPU_MCA_STACK_OFFSET+MCA_SWITCH_STACK_OFFSET, r2 | ||
296 | add out2=IA64_MCA_CPU_MCA_STACK_OFFSET+MCA_SOS_OFFSET, r2 | ||
297 | br.call.sptk.many b0=ia64_mca_handler | ||
298 | |||
357 | // Revert back to physical mode before going back to SAL | 299 | // Revert back to physical mode before going back to SAL |
358 | PHYSICAL_MODE_ENTER(r2, r3, ia64_os_mca_virtual_end, r4) | 300 | PHYSICAL_MODE_ENTER(r2, r3, ia64_os_mca_virtual_end, r4) |
359 | ia64_os_mca_virtual_end: | 301 | ia64_os_mca_virtual_end: |
360 | 302 | ||
361 | // restore the original stack frame here | 303 | END(ia64_os_mca_virtual_begin) |
304 | |||
305 | // switch back to previous stack | ||
306 | alloc r14=ar.pfs,0,0,0,0 // remove the MCA handler frame | ||
307 | mov r3=IA64_MCA_CPU_MCA_STACK_OFFSET // use the MCA stack | ||
308 | LOAD_PHYSICAL(p0,r2,1f) // return address | ||
309 | br.sptk ia64_old_stack | ||
310 | 1: | ||
311 | |||
312 | mov r3=IA64_MCA_CPU_MCA_STACK_OFFSET // use the MCA stack | ||
313 | LOAD_PHYSICAL(p0,r2,1f) // return address | ||
314 | br.sptk ia64_state_restore // restore the SAL state | ||
315 | 1: | ||
316 | |||
317 | mov b0=r12 // SAL_CHECK return address | ||
318 | |||
319 | // release lock | ||
320 | LOAD_PHYSICAL(p0,r3,ia64_mca_serialize);; | ||
321 | st4.rel [r3]=r0 | ||
322 | |||
323 | br b0 | ||
324 | |||
325 | //EndMain////////////////////////////////////////////////////////////////////// | ||
326 | |||
327 | //StartMain//////////////////////////////////////////////////////////////////// | ||
328 | |||
329 | // | ||
330 | // SAL to OS entry point for INIT on all processors. This has been defined for | ||
331 | // registration purposes with SAL as a part of ia64_mca_init. Monarch and | ||
332 | // slave INIT have identical processing, except for the value of the | ||
333 | // sos->monarch flag in r19. | ||
334 | // | ||
335 | |||
336 | ia64_os_init_dispatch_monarch: | ||
337 | mov r19=1 // Bow, bow, ye lower middle classes! | ||
338 | br.sptk ia64_os_init_dispatch | ||
339 | |||
340 | ia64_os_init_dispatch_slave: | ||
341 | mov r19=0 // <igor>yeth, mathter</igor> | ||
342 | |||
343 | ia64_os_init_dispatch: | ||
344 | |||
345 | mov r3=IA64_MCA_CPU_INIT_STACK_OFFSET // use the INIT stack | ||
346 | LOAD_PHYSICAL(p0,r2,1f) // return address | ||
347 | br.sptk ia64_state_save // save the state that is not in minstate | ||
348 | 1: | ||
349 | |||
350 | // switch to per cpu INIT stack | ||
351 | mov r3=IA64_MCA_CPU_INIT_STACK_OFFSET // use the INIT stack | ||
352 | LOAD_PHYSICAL(p0,r2,1f) // return address | ||
353 | br.sptk ia64_new_stack | ||
354 | 1: | ||
355 | |||
356 | // everything saved, now we can set the kernel registers | ||
357 | mov r3=IA64_MCA_CPU_INIT_STACK_OFFSET // use the INIT stack | ||
358 | LOAD_PHYSICAL(p0,r2,1f) // return address | ||
359 | br.sptk ia64_set_kernel_registers | ||
360 | 1: | ||
361 | |||
362 | // This must be done in physical mode | ||
362 | GET_IA64_MCA_DATA(r2) | 363 | GET_IA64_MCA_DATA(r2) |
363 | ;; | 364 | ;; |
364 | add r2 = IA64_MCA_CPU_STACKFRAME_OFFSET, r2 | 365 | mov r7=r2 |
365 | ;; | 366 | |
366 | movl r4=IA64_PSR_MC | 367 | // Enter virtual mode from physical mode |
368 | VIRTUAL_MODE_ENTER(r2, r3, ia64_os_init_virtual_begin, r4) | ||
369 | |||
370 | // This code returns to SAL via SOS r2, in general SAL has no unwind | ||
371 | // data. To get a clean termination when backtracing the C MCA/INIT | ||
372 | // handler, set a dummy return address of 0 in this routine. That | ||
373 | // requires that ia64_os_init_virtual_begin be a global function. | ||
374 | ENTRY(ia64_os_init_virtual_begin) | ||
375 | .prologue | ||
376 | .save rp,r0 | ||
377 | .body | ||
378 | |||
379 | mov ar.rsc=3 // set eager mode for C handler | ||
380 | mov r2=r7 // see GET_IA64_MCA_DATA above | ||
367 | ;; | 381 | ;; |
368 | rse_return_context(r4,r3,r2) // switch from interrupt context for RSE | ||
369 | 382 | ||
370 | // let us restore all the registers from our PSI structure | 383 | // Call virtual mode handler |
371 | mov r8=gp | 384 | alloc r14=ar.pfs,0,0,3,0 |
372 | ;; | 385 | ;; |
373 | begin_os_mca_restore: | 386 | DATA_PA_TO_VA(r2,r7) |
374 | br ia64_os_mca_proc_state_restore;; | 387 | ;; |
388 | add out0=IA64_MCA_CPU_INIT_STACK_OFFSET+MCA_PT_REGS_OFFSET, r2 | ||
389 | add out1=IA64_MCA_CPU_INIT_STACK_OFFSET+MCA_SWITCH_STACK_OFFSET, r2 | ||
390 | add out2=IA64_MCA_CPU_INIT_STACK_OFFSET+MCA_SOS_OFFSET, r2 | ||
391 | br.call.sptk.many b0=ia64_init_handler | ||
375 | 392 | ||
376 | ia64_os_mca_done_restore: | 393 | // Revert back to physical mode before going back to SAL |
377 | OS_MCA_TO_SAL_HANDOFF_STATE_RESTORE(r2);; | 394 | PHYSICAL_MODE_ENTER(r2, r3, ia64_os_init_virtual_end, r4) |
378 | // branch back to SALE_CHECK | 395 | ia64_os_init_virtual_end: |
379 | ld8 r3=[r2];; | ||
380 | mov b0=r3;; // SAL_CHECK return address | ||
381 | 396 | ||
382 | // release lock | 397 | END(ia64_os_init_virtual_begin) |
383 | movl r3=ia64_mca_serialize;; | ||
384 | DATA_VA_TO_PA(r3);; | ||
385 | st8.rel [r3]=r0 | ||
386 | 398 | ||
399 | mov r3=IA64_MCA_CPU_INIT_STACK_OFFSET // use the INIT stack | ||
400 | LOAD_PHYSICAL(p0,r2,1f) // return address | ||
401 | br.sptk ia64_state_restore // restore the SAL state | ||
402 | 1: | ||
403 | |||
404 | // switch back to previous stack | ||
405 | alloc r14=ar.pfs,0,0,0,0 // remove the INIT handler frame | ||
406 | mov r3=IA64_MCA_CPU_INIT_STACK_OFFSET // use the INIT stack | ||
407 | LOAD_PHYSICAL(p0,r2,1f) // return address | ||
408 | br.sptk ia64_old_stack | ||
409 | 1: | ||
410 | |||
411 | mov b0=r12 // SAL_CHECK return address | ||
387 | br b0 | 412 | br b0 |
388 | ;; | 413 | |
389 | ia64_os_mca_dispatch_end: | ||
390 | //EndMain////////////////////////////////////////////////////////////////////// | 414 | //EndMain////////////////////////////////////////////////////////////////////// |
391 | 415 | ||
416 | // common defines for the stubs | ||
417 | #define ms r4 | ||
418 | #define regs r5 | ||
419 | #define temp1 r2 /* careful, it overlaps with input registers */ | ||
420 | #define temp2 r3 /* careful, it overlaps with input registers */ | ||
421 | #define temp3 r7 | ||
422 | #define temp4 r14 | ||
423 | |||
392 | 424 | ||
393 | //++ | 425 | //++ |
394 | // Name: | 426 | // Name: |
395 | // ia64_os_mca_proc_state_dump() | 427 | // ia64_state_save() |
396 | // | 428 | // |
397 | // Stub Description: | 429 | // Stub Description: |
398 | // | 430 | // |
399 | // This stub dumps the processor state during MCHK to a data area | 431 | // Save the state that is not in minstate. This is sensitive to the layout of |
432 | // struct ia64_sal_os_state in mca.h. | ||
433 | // | ||
434 | // r2 contains the return address, r3 contains either | ||
435 | // IA64_MCA_CPU_MCA_STACK_OFFSET or IA64_MCA_CPU_INIT_STACK_OFFSET. | ||
436 | // | ||
437 | // The OS to SAL section of struct ia64_sal_os_state is set to a default | ||
438 | // value of cold boot (MCA) or warm boot (INIT) and return to the same | ||
439 | // context. ia64_sal_os_state is also used to hold some registers that | ||
440 | // need to be saved and restored across the stack switches. | ||
441 | // | ||
442 | // Most input registers to this stub come from PAL/SAL | ||
443 | // r1 os gp, physical | ||
444 | // r8 pal_proc entry point | ||
445 | // r9 sal_proc entry point | ||
446 | // r10 sal gp | ||
447 | // r11 MCA - rendevzous state, INIT - reason code | ||
448 | // r12 sal return address | ||
449 | // r17 pal min_state | ||
450 | // r18 processor state parameter | ||
451 | // r19 monarch flag, set by the caller of this routine | ||
452 | // | ||
453 | // In addition to the SAL to OS state, this routine saves all the | ||
454 | // registers that appear in struct pt_regs and struct switch_stack, | ||
455 | // excluding those that are already in the PAL minstate area. This | ||
456 | // results in a partial pt_regs and switch_stack, the C code copies the | ||
457 | // remaining registers from PAL minstate to pt_regs and switch_stack. The | ||
458 | // resulting structures contain all the state of the original process when | ||
459 | // MCA/INIT occurred. | ||
400 | // | 460 | // |
401 | //-- | 461 | //-- |
402 | 462 | ||
403 | ia64_os_mca_proc_state_dump: | 463 | ia64_state_save: |
404 | // Save bank 1 GRs 16-31 which will be used by c-language code when we switch | 464 | add regs=MCA_SOS_OFFSET, r3 |
405 | // to virtual addressing mode. | 465 | add ms=MCA_SOS_OFFSET+8, r3 |
406 | GET_IA64_MCA_DATA(r2) | 466 | mov b0=r2 // save return address |
467 | cmp.eq p1,p2=IA64_MCA_CPU_MCA_STACK_OFFSET, r3 | ||
468 | ;; | ||
469 | GET_IA64_MCA_DATA(temp2) | ||
470 | ;; | ||
471 | add temp1=temp2, regs // struct ia64_sal_os_state on MCA or INIT stack | ||
472 | add temp2=temp2, ms // struct ia64_sal_os_state+8 on MCA or INIT stack | ||
473 | ;; | ||
474 | mov regs=temp1 // save the start of sos | ||
475 | st8 [temp1]=r1,16 // os_gp | ||
476 | st8 [temp2]=r8,16 // pal_proc | ||
477 | ;; | ||
478 | st8 [temp1]=r9,16 // sal_proc | ||
479 | st8 [temp2]=r11,16 // rv_rc | ||
480 | mov r11=cr.iipa | ||
407 | ;; | 481 | ;; |
408 | add r2 = IA64_MCA_CPU_PROC_STATE_DUMP_OFFSET, r2 | 482 | st8 [temp1]=r18,16 // proc_state_param |
409 | ;; | 483 | st8 [temp2]=r19,16 // monarch |
410 | // save ar.NaT | 484 | mov r6=IA64_KR(CURRENT) |
411 | mov r5=ar.unat // ar.unat | 485 | ;; |
412 | 486 | st8 [temp1]=r12,16 // sal_ra | |
413 | // save banked GRs 16-31 along with NaT bits | 487 | st8 [temp2]=r10,16 // sal_gp |
414 | bsw.1;; | 488 | mov r12=cr.isr |
415 | st8.spill [r2]=r16,8;; | 489 | ;; |
416 | st8.spill [r2]=r17,8;; | 490 | st8 [temp1]=r17,16 // pal_min_state |
417 | st8.spill [r2]=r18,8;; | 491 | st8 [temp2]=r6,16 // prev_IA64_KR_CURRENT |
418 | st8.spill [r2]=r19,8;; | 492 | mov r6=IA64_KR(CURRENT_STACK) |
419 | st8.spill [r2]=r20,8;; | 493 | ;; |
420 | st8.spill [r2]=r21,8;; | 494 | st8 [temp1]=r6,16 // prev_IA64_KR_CURRENT_STACK |
421 | st8.spill [r2]=r22,8;; | 495 | st8 [temp2]=r0,16 // prev_task, starts off as NULL |
422 | st8.spill [r2]=r23,8;; | 496 | mov r6=cr.ifa |
423 | st8.spill [r2]=r24,8;; | 497 | ;; |
424 | st8.spill [r2]=r25,8;; | 498 | st8 [temp1]=r12,16 // cr.isr |
425 | st8.spill [r2]=r26,8;; | 499 | st8 [temp2]=r6,16 // cr.ifa |
426 | st8.spill [r2]=r27,8;; | 500 | mov r12=cr.itir |
427 | st8.spill [r2]=r28,8;; | 501 | ;; |
428 | st8.spill [r2]=r29,8;; | 502 | st8 [temp1]=r12,16 // cr.itir |
429 | st8.spill [r2]=r30,8;; | 503 | st8 [temp2]=r11,16 // cr.iipa |
430 | st8.spill [r2]=r31,8;; | 504 | mov r12=cr.iim |
431 | 505 | ;; | |
432 | mov r4=ar.unat;; | 506 | st8 [temp1]=r12,16 // cr.iim |
433 | st8 [r2]=r4,8 // save User NaT bits for r16-r31 | 507 | (p1) mov r12=IA64_MCA_COLD_BOOT |
434 | mov ar.unat=r5 // restore original unat | 508 | (p2) mov r12=IA64_INIT_WARM_BOOT |
435 | bsw.0;; | 509 | mov r6=cr.iha |
436 | 510 | ;; | |
437 | //save BRs | 511 | st8 [temp2]=r6,16 // cr.iha |
438 | add r4=8,r2 // duplicate r2 in r4 | 512 | st8 [temp1]=r12 // os_status, default is cold boot |
439 | add r6=2*8,r2 // duplicate r2 in r4 | 513 | mov r6=IA64_MCA_SAME_CONTEXT |
440 | 514 | ;; | |
441 | mov r3=b0 | 515 | st8 [temp1]=r6 // context, default is same context |
442 | mov r5=b1 | 516 | |
443 | mov r7=b2;; | 517 | // Save the pt_regs data that is not in minstate. The previous code |
444 | st8 [r2]=r3,3*8 | 518 | // left regs at sos. |
445 | st8 [r4]=r5,3*8 | 519 | add regs=MCA_PT_REGS_OFFSET-MCA_SOS_OFFSET, regs |
446 | st8 [r6]=r7,3*8;; | 520 | ;; |
447 | 521 | add temp1=PT(B6), regs | |
448 | mov r3=b3 | 522 | mov temp3=b6 |
449 | mov r5=b4 | 523 | mov temp4=b7 |
450 | mov r7=b5;; | 524 | add temp2=PT(B7), regs |
451 | st8 [r2]=r3,3*8 | 525 | ;; |
452 | st8 [r4]=r5,3*8 | 526 | st8 [temp1]=temp3,PT(AR_CSD)-PT(B6) // save b6 |
453 | st8 [r6]=r7,3*8;; | 527 | st8 [temp2]=temp4,PT(AR_SSD)-PT(B7) // save b7 |
454 | 528 | mov temp3=ar.csd | |
455 | mov r3=b6 | 529 | mov temp4=ar.ssd |
456 | mov r5=b7;; | 530 | cover // must be last in group |
457 | st8 [r2]=r3,2*8 | 531 | ;; |
458 | st8 [r4]=r5,2*8;; | 532 | st8 [temp1]=temp3,PT(AR_UNAT)-PT(AR_CSD) // save ar.csd |
459 | 533 | st8 [temp2]=temp4,PT(AR_PFS)-PT(AR_SSD) // save ar.ssd | |
460 | cSaveCRs: | 534 | mov temp3=ar.unat |
461 | // save CRs | 535 | mov temp4=ar.pfs |
462 | add r4=8,r2 // duplicate r2 in r4 | 536 | ;; |
463 | add r6=2*8,r2 // duplicate r2 in r4 | 537 | st8 [temp1]=temp3,PT(AR_RNAT)-PT(AR_UNAT) // save ar.unat |
464 | 538 | st8 [temp2]=temp4,PT(AR_BSPSTORE)-PT(AR_PFS) // save ar.pfs | |
465 | mov r3=cr.dcr | 539 | mov temp3=ar.rnat |
466 | mov r5=cr.itm | 540 | mov temp4=ar.bspstore |
467 | mov r7=cr.iva;; | 541 | ;; |
468 | 542 | st8 [temp1]=temp3,PT(LOADRS)-PT(AR_RNAT) // save ar.rnat | |
469 | st8 [r2]=r3,8*8 | 543 | st8 [temp2]=temp4,PT(AR_FPSR)-PT(AR_BSPSTORE) // save ar.bspstore |
470 | st8 [r4]=r5,3*8 | 544 | mov temp3=ar.bsp |
471 | st8 [r6]=r7,3*8;; // 48 byte rements | 545 | ;; |
472 | 546 | sub temp3=temp3, temp4 // ar.bsp - ar.bspstore | |
473 | mov r3=cr.pta;; | 547 | mov temp4=ar.fpsr |
474 | st8 [r2]=r3,8*8;; // 64 byte rements | 548 | ;; |
475 | 549 | shl temp3=temp3,16 // compute ar.rsc to be used for "loadrs" | |
476 | // if PSR.ic=0, reading interruption registers causes an illegal operation fault | 550 | ;; |
477 | mov r3=psr;; | 551 | st8 [temp1]=temp3,PT(AR_CCV)-PT(LOADRS) // save loadrs |
478 | tbit.nz.unc p6,p0=r3,PSR_IC;; // PSI Valid Log bit pos. test | 552 | st8 [temp2]=temp4,PT(F6)-PT(AR_FPSR) // save ar.fpsr |
479 | (p6) st8 [r2]=r0,9*8+160 // increment by 232 byte inc. | 553 | mov temp3=ar.ccv |
480 | begin_skip_intr_regs: | 554 | ;; |
481 | (p6) br SkipIntrRegs;; | 555 | st8 [temp1]=temp3,PT(F7)-PT(AR_CCV) // save ar.ccv |
482 | 556 | stf.spill [temp2]=f6,PT(F8)-PT(F6) | |
483 | add r4=8,r2 // duplicate r2 in r4 | 557 | ;; |
484 | add r6=2*8,r2 // duplicate r2 in r6 | 558 | stf.spill [temp1]=f7,PT(F9)-PT(F7) |
485 | 559 | stf.spill [temp2]=f8,PT(F10)-PT(F8) | |
486 | mov r3=cr.ipsr | 560 | ;; |
487 | mov r5=cr.isr | 561 | stf.spill [temp1]=f9,PT(F11)-PT(F9) |
488 | mov r7=r0;; | 562 | stf.spill [temp2]=f10 |
489 | st8 [r2]=r3,3*8 | 563 | ;; |
490 | st8 [r4]=r5,3*8 | 564 | stf.spill [temp1]=f11 |
491 | st8 [r6]=r7,3*8;; | 565 | |
492 | 566 | // Save the switch_stack data that is not in minstate nor pt_regs. The | |
493 | mov r3=cr.iip | 567 | // previous code left regs at pt_regs. |
494 | mov r5=cr.ifa | 568 | add regs=MCA_SWITCH_STACK_OFFSET-MCA_PT_REGS_OFFSET, regs |
495 | mov r7=cr.itir;; | 569 | ;; |
496 | st8 [r2]=r3,3*8 | 570 | add temp1=SW(F2), regs |
497 | st8 [r4]=r5,3*8 | 571 | add temp2=SW(F3), regs |
498 | st8 [r6]=r7,3*8;; | 572 | ;; |
499 | 573 | stf.spill [temp1]=f2,32 | |
500 | mov r3=cr.iipa | 574 | stf.spill [temp2]=f3,32 |
501 | mov r5=cr.ifs | 575 | ;; |
502 | mov r7=cr.iim;; | 576 | stf.spill [temp1]=f4,32 |
503 | st8 [r2]=r3,3*8 | 577 | stf.spill [temp2]=f5,32 |
504 | st8 [r4]=r5,3*8 | 578 | ;; |
505 | st8 [r6]=r7,3*8;; | 579 | stf.spill [temp1]=f12,32 |
506 | 580 | stf.spill [temp2]=f13,32 | |
507 | mov r3=cr25;; // cr.iha | 581 | ;; |
508 | st8 [r2]=r3,160;; // 160 byte rement | 582 | stf.spill [temp1]=f14,32 |
509 | 583 | stf.spill [temp2]=f15,32 | |
510 | SkipIntrRegs: | 584 | ;; |
511 | st8 [r2]=r0,152;; // another 152 byte . | 585 | stf.spill [temp1]=f16,32 |
512 | 586 | stf.spill [temp2]=f17,32 | |
513 | add r4=8,r2 // duplicate r2 in r4 | 587 | ;; |
514 | add r6=2*8,r2 // duplicate r2 in r6 | 588 | stf.spill [temp1]=f18,32 |
515 | 589 | stf.spill [temp2]=f19,32 | |
516 | mov r3=cr.lid | 590 | ;; |
517 | // mov r5=cr.ivr // cr.ivr, don't read it | 591 | stf.spill [temp1]=f20,32 |
518 | mov r7=cr.tpr;; | 592 | stf.spill [temp2]=f21,32 |
519 | st8 [r2]=r3,3*8 | 593 | ;; |
520 | st8 [r4]=r5,3*8 | 594 | stf.spill [temp1]=f22,32 |
521 | st8 [r6]=r7,3*8;; | 595 | stf.spill [temp2]=f23,32 |
522 | 596 | ;; | |
523 | mov r3=r0 // cr.eoi => cr67 | 597 | stf.spill [temp1]=f24,32 |
524 | mov r5=r0 // cr.irr0 => cr68 | 598 | stf.spill [temp2]=f25,32 |
525 | mov r7=r0;; // cr.irr1 => cr69 | 599 | ;; |
526 | st8 [r2]=r3,3*8 | 600 | stf.spill [temp1]=f26,32 |
527 | st8 [r4]=r5,3*8 | 601 | stf.spill [temp2]=f27,32 |
528 | st8 [r6]=r7,3*8;; | 602 | ;; |
529 | 603 | stf.spill [temp1]=f28,32 | |
530 | mov r3=r0 // cr.irr2 => cr70 | 604 | stf.spill [temp2]=f29,32 |
531 | mov r5=r0 // cr.irr3 => cr71 | 605 | ;; |
532 | mov r7=cr.itv;; | 606 | stf.spill [temp1]=f30,SW(B2)-SW(F30) |
533 | st8 [r2]=r3,3*8 | 607 | stf.spill [temp2]=f31,SW(B3)-SW(F31) |
534 | st8 [r4]=r5,3*8 | 608 | mov temp3=b2 |
535 | st8 [r6]=r7,3*8;; | 609 | mov temp4=b3 |
536 | 610 | ;; | |
537 | mov r3=cr.pmv | 611 | st8 [temp1]=temp3,16 // save b2 |
538 | mov r5=cr.cmcv;; | 612 | st8 [temp2]=temp4,16 // save b3 |
539 | st8 [r2]=r3,7*8 | 613 | mov temp3=b4 |
540 | st8 [r4]=r5,7*8;; | 614 | mov temp4=b5 |
541 | 615 | ;; | |
542 | mov r3=r0 // cr.lrr0 => cr80 | 616 | st8 [temp1]=temp3,SW(AR_LC)-SW(B4) // save b4 |
543 | mov r5=r0;; // cr.lrr1 => cr81 | 617 | st8 [temp2]=temp4 // save b5 |
544 | st8 [r2]=r3,23*8 | 618 | mov temp3=ar.lc |
545 | st8 [r4]=r5,23*8;; | 619 | ;; |
546 | 620 | st8 [temp1]=temp3 // save ar.lc | |
547 | adds r2=25*8,r2;; | 621 | |
548 | 622 | // FIXME: Some proms are incorrectly accessing the minstate area as | |
549 | cSaveARs: | 623 | // cached data. The C code uses region 6, uncached virtual. Ensure |
550 | // save ARs | 624 | // that there is no cache data lying around for the first 1K of the |
551 | add r4=8,r2 // duplicate r2 in r4 | 625 | // minstate area. |
552 | add r6=2*8,r2 // duplicate r2 in r6 | 626 | // Remove this code in September 2006, that gives platforms a year to |
553 | 627 | // fix their proms and get their customers updated. | |
554 | mov r3=ar.k0 | 628 | |
555 | mov r5=ar.k1 | 629 | add r1=32*1,r17 |
556 | mov r7=ar.k2;; | 630 | add r2=32*2,r17 |
557 | st8 [r2]=r3,3*8 | 631 | add r3=32*3,r17 |
558 | st8 [r4]=r5,3*8 | 632 | add r4=32*4,r17 |
559 | st8 [r6]=r7,3*8;; | 633 | add r5=32*5,r17 |
560 | 634 | add r6=32*6,r17 | |
561 | mov r3=ar.k3 | 635 | add r7=32*7,r17 |
562 | mov r5=ar.k4 | 636 | ;; |
563 | mov r7=ar.k5;; | 637 | fc r17 |
564 | st8 [r2]=r3,3*8 | 638 | fc r1 |
565 | st8 [r4]=r5,3*8 | 639 | fc r2 |
566 | st8 [r6]=r7,3*8;; | 640 | fc r3 |
567 | 641 | fc r4 | |
568 | mov r3=ar.k6 | 642 | fc r5 |
569 | mov r5=ar.k7 | 643 | fc r6 |
570 | mov r7=r0;; // ar.kr8 | 644 | fc r7 |
571 | st8 [r2]=r3,10*8 | 645 | add r17=32*8,r17 |
572 | st8 [r4]=r5,10*8 | 646 | add r1=32*8,r1 |
573 | st8 [r6]=r7,10*8;; // rement by 72 bytes | 647 | add r2=32*8,r2 |
574 | 648 | add r3=32*8,r3 | |
575 | mov r3=ar.rsc | 649 | add r4=32*8,r4 |
576 | mov ar.rsc=r0 // put RSE in enforced lazy mode | 650 | add r5=32*8,r5 |
577 | mov r5=ar.bsp | 651 | add r6=32*8,r6 |
578 | ;; | 652 | add r7=32*8,r7 |
579 | mov r7=ar.bspstore;; | 653 | ;; |
580 | st8 [r2]=r3,3*8 | 654 | fc r17 |
581 | st8 [r4]=r5,3*8 | 655 | fc r1 |
582 | st8 [r6]=r7,3*8;; | 656 | fc r2 |
583 | 657 | fc r3 | |
584 | mov r3=ar.rnat;; | 658 | fc r4 |
585 | st8 [r2]=r3,8*13 // increment by 13x8 bytes | 659 | fc r5 |
586 | 660 | fc r6 | |
587 | mov r3=ar.ccv;; | 661 | fc r7 |
588 | st8 [r2]=r3,8*4 | 662 | add r17=32*8,r17 |
589 | 663 | add r1=32*8,r1 | |
590 | mov r3=ar.unat;; | 664 | add r2=32*8,r2 |
591 | st8 [r2]=r3,8*4 | 665 | add r3=32*8,r3 |
592 | 666 | add r4=32*8,r4 | |
593 | mov r3=ar.fpsr;; | 667 | add r5=32*8,r5 |
594 | st8 [r2]=r3,8*4 | 668 | add r6=32*8,r6 |
595 | 669 | add r7=32*8,r7 | |
596 | mov r3=ar.itc;; | 670 | ;; |
597 | st8 [r2]=r3,160 // 160 | 671 | fc r17 |
598 | 672 | fc r1 | |
599 | mov r3=ar.pfs;; | 673 | fc r2 |
600 | st8 [r2]=r3,8 | 674 | fc r3 |
601 | 675 | fc r4 | |
602 | mov r3=ar.lc;; | 676 | fc r5 |
603 | st8 [r2]=r3,8 | 677 | fc r6 |
604 | 678 | fc r7 | |
605 | mov r3=ar.ec;; | 679 | add r17=32*8,r17 |
606 | st8 [r2]=r3 | 680 | add r1=32*8,r1 |
607 | add r2=8*62,r2 //padding | 681 | add r2=32*8,r2 |
608 | 682 | add r3=32*8,r3 | |
609 | // save RRs | 683 | add r4=32*8,r4 |
610 | mov ar.lc=0x08-1 | 684 | add r5=32*8,r5 |
611 | movl r4=0x00;; | 685 | add r6=32*8,r6 |
612 | 686 | add r7=32*8,r7 | |
613 | cStRR: | 687 | ;; |
614 | dep.z r5=r4,61,3;; | 688 | fc r17 |
615 | mov r3=rr[r5];; | 689 | fc r1 |
616 | st8 [r2]=r3,8 | 690 | fc r2 |
617 | add r4=1,r4 | 691 | fc r3 |
618 | br.cloop.sptk.few cStRR | 692 | fc r4 |
619 | ;; | 693 | fc r5 |
620 | end_os_mca_dump: | 694 | fc r6 |
621 | br ia64_os_mca_done_dump;; | 695 | fc r7 |
696 | |||
697 | br.sptk b0 | ||
622 | 698 | ||
623 | //EndStub////////////////////////////////////////////////////////////////////// | 699 | //EndStub////////////////////////////////////////////////////////////////////// |
624 | 700 | ||
625 | 701 | ||
626 | //++ | 702 | //++ |
627 | // Name: | 703 | // Name: |
628 | // ia64_os_mca_proc_state_restore() | 704 | // ia64_state_restore() |
629 | // | 705 | // |
630 | // Stub Description: | 706 | // Stub Description: |
631 | // | 707 | // |
632 | // This is a stub to restore the saved processor state during MCHK | 708 | // Restore the SAL/OS state. This is sensitive to the layout of struct |
709 | // ia64_sal_os_state in mca.h. | ||
710 | // | ||
711 | // r2 contains the return address, r3 contains either | ||
712 | // IA64_MCA_CPU_MCA_STACK_OFFSET or IA64_MCA_CPU_INIT_STACK_OFFSET. | ||
713 | // | ||
714 | // In addition to the SAL to OS state, this routine restores all the | ||
715 | // registers that appear in struct pt_regs and struct switch_stack, | ||
716 | // excluding those in the PAL minstate area. | ||
633 | // | 717 | // |
634 | //-- | 718 | //-- |
635 | 719 | ||
636 | ia64_os_mca_proc_state_restore: | 720 | ia64_state_restore: |
721 | // Restore the switch_stack data that is not in minstate nor pt_regs. | ||
722 | add regs=MCA_SWITCH_STACK_OFFSET, r3 | ||
723 | mov b0=r2 // save return address | ||
724 | ;; | ||
725 | GET_IA64_MCA_DATA(temp2) | ||
726 | ;; | ||
727 | add regs=temp2, regs | ||
728 | ;; | ||
729 | add temp1=SW(F2), regs | ||
730 | add temp2=SW(F3), regs | ||
731 | ;; | ||
732 | ldf.fill f2=[temp1],32 | ||
733 | ldf.fill f3=[temp2],32 | ||
734 | ;; | ||
735 | ldf.fill f4=[temp1],32 | ||
736 | ldf.fill f5=[temp2],32 | ||
737 | ;; | ||
738 | ldf.fill f12=[temp1],32 | ||
739 | ldf.fill f13=[temp2],32 | ||
740 | ;; | ||
741 | ldf.fill f14=[temp1],32 | ||
742 | ldf.fill f15=[temp2],32 | ||
743 | ;; | ||
744 | ldf.fill f16=[temp1],32 | ||
745 | ldf.fill f17=[temp2],32 | ||
746 | ;; | ||
747 | ldf.fill f18=[temp1],32 | ||
748 | ldf.fill f19=[temp2],32 | ||
749 | ;; | ||
750 | ldf.fill f20=[temp1],32 | ||
751 | ldf.fill f21=[temp2],32 | ||
752 | ;; | ||
753 | ldf.fill f22=[temp1],32 | ||
754 | ldf.fill f23=[temp2],32 | ||
755 | ;; | ||
756 | ldf.fill f24=[temp1],32 | ||
757 | ldf.fill f25=[temp2],32 | ||
758 | ;; | ||
759 | ldf.fill f26=[temp1],32 | ||
760 | ldf.fill f27=[temp2],32 | ||
761 | ;; | ||
762 | ldf.fill f28=[temp1],32 | ||
763 | ldf.fill f29=[temp2],32 | ||
764 | ;; | ||
765 | ldf.fill f30=[temp1],SW(B2)-SW(F30) | ||
766 | ldf.fill f31=[temp2],SW(B3)-SW(F31) | ||
767 | ;; | ||
768 | ld8 temp3=[temp1],16 // restore b2 | ||
769 | ld8 temp4=[temp2],16 // restore b3 | ||
770 | ;; | ||
771 | mov b2=temp3 | ||
772 | mov b3=temp4 | ||
773 | ld8 temp3=[temp1],SW(AR_LC)-SW(B4) // restore b4 | ||
774 | ld8 temp4=[temp2] // restore b5 | ||
775 | ;; | ||
776 | mov b4=temp3 | ||
777 | mov b5=temp4 | ||
778 | ld8 temp3=[temp1] // restore ar.lc | ||
779 | ;; | ||
780 | mov ar.lc=temp3 | ||
637 | 781 | ||
638 | // Restore bank1 GR16-31 | 782 | // Restore the pt_regs data that is not in minstate. The previous code |
639 | GET_IA64_MCA_DATA(r2) | 783 | // left regs at switch_stack. |
784 | add regs=MCA_PT_REGS_OFFSET-MCA_SWITCH_STACK_OFFSET, regs | ||
785 | ;; | ||
786 | add temp1=PT(B6), regs | ||
787 | add temp2=PT(B7), regs | ||
788 | ;; | ||
789 | ld8 temp3=[temp1],PT(AR_CSD)-PT(B6) // restore b6 | ||
790 | ld8 temp4=[temp2],PT(AR_SSD)-PT(B7) // restore b7 | ||
791 | ;; | ||
792 | mov b6=temp3 | ||
793 | mov b7=temp4 | ||
794 | ld8 temp3=[temp1],PT(AR_UNAT)-PT(AR_CSD) // restore ar.csd | ||
795 | ld8 temp4=[temp2],PT(AR_PFS)-PT(AR_SSD) // restore ar.ssd | ||
640 | ;; | 796 | ;; |
641 | add r2 = IA64_MCA_CPU_PROC_STATE_DUMP_OFFSET, r2 | 797 | mov ar.csd=temp3 |
642 | 798 | mov ar.ssd=temp4 | |
643 | restore_GRs: // restore bank-1 GRs 16-31 | 799 | ld8 temp3=[temp1] // restore ar.unat |
644 | bsw.1;; | 800 | add temp1=PT(AR_CCV)-PT(AR_UNAT), temp1 |
645 | add r3=16*8,r2;; // to get to NaT of GR 16-31 | 801 | ld8 temp4=[temp2],PT(AR_FPSR)-PT(AR_PFS) // restore ar.pfs |
646 | ld8 r3=[r3];; | 802 | ;; |
647 | mov ar.unat=r3;; // first restore NaT | 803 | mov ar.unat=temp3 |
648 | 804 | mov ar.pfs=temp4 | |
649 | ld8.fill r16=[r2],8;; | 805 | // ar.rnat, ar.bspstore, loadrs are restore in ia64_old_stack. |
650 | ld8.fill r17=[r2],8;; | 806 | ld8 temp3=[temp1],PT(F6)-PT(AR_CCV) // restore ar.ccv |
651 | ld8.fill r18=[r2],8;; | 807 | ld8 temp4=[temp2],PT(F7)-PT(AR_FPSR) // restore ar.fpsr |
652 | ld8.fill r19=[r2],8;; | 808 | ;; |
653 | ld8.fill r20=[r2],8;; | 809 | mov ar.ccv=temp3 |
654 | ld8.fill r21=[r2],8;; | 810 | mov ar.fpsr=temp4 |
655 | ld8.fill r22=[r2],8;; | 811 | ldf.fill f6=[temp1],PT(F8)-PT(F6) |
656 | ld8.fill r23=[r2],8;; | 812 | ldf.fill f7=[temp2],PT(F9)-PT(F7) |
657 | ld8.fill r24=[r2],8;; | 813 | ;; |
658 | ld8.fill r25=[r2],8;; | 814 | ldf.fill f8=[temp1],PT(F10)-PT(F8) |
659 | ld8.fill r26=[r2],8;; | 815 | ldf.fill f9=[temp2],PT(F11)-PT(F9) |
660 | ld8.fill r27=[r2],8;; | 816 | ;; |
661 | ld8.fill r28=[r2],8;; | 817 | ldf.fill f10=[temp1] |
662 | ld8.fill r29=[r2],8;; | 818 | ldf.fill f11=[temp2] |
663 | ld8.fill r30=[r2],8;; | 819 | |
664 | ld8.fill r31=[r2],8;; | 820 | // Restore the SAL to OS state. The previous code left regs at pt_regs. |
665 | 821 | add regs=MCA_SOS_OFFSET-MCA_PT_REGS_OFFSET, regs | |
666 | ld8 r3=[r2],8;; // increment to skip NaT | 822 | ;; |
667 | bsw.0;; | 823 | add temp1=IA64_SAL_OS_STATE_COMMON_OFFSET, regs |
668 | 824 | add temp2=IA64_SAL_OS_STATE_COMMON_OFFSET+8, regs | |
669 | restore_BRs: | 825 | ;; |
670 | add r4=8,r2 // duplicate r2 in r4 | 826 | ld8 r12=[temp1],16 // sal_ra |
671 | add r6=2*8,r2;; // duplicate r2 in r4 | 827 | ld8 r9=[temp2],16 // sal_gp |
672 | 828 | ;; | |
673 | ld8 r3=[r2],3*8 | 829 | ld8 r22=[temp1],16 // pal_min_state, virtual |
674 | ld8 r5=[r4],3*8 | 830 | ld8 r21=[temp2],16 // prev_IA64_KR_CURRENT |
675 | ld8 r7=[r6],3*8;; | 831 | ;; |
676 | mov b0=r3 | 832 | ld8 r16=[temp1],16 // prev_IA64_KR_CURRENT_STACK |
677 | mov b1=r5 | 833 | ld8 r20=[temp2],16 // prev_task |
678 | mov b2=r7;; | 834 | ;; |
679 | 835 | ld8 temp3=[temp1],16 // cr.isr | |
680 | ld8 r3=[r2],3*8 | 836 | ld8 temp4=[temp2],16 // cr.ifa |
681 | ld8 r5=[r4],3*8 | 837 | ;; |
682 | ld8 r7=[r6],3*8;; | 838 | mov cr.isr=temp3 |
683 | mov b3=r3 | 839 | mov cr.ifa=temp4 |
684 | mov b4=r5 | 840 | ld8 temp3=[temp1],16 // cr.itir |
685 | mov b5=r7;; | 841 | ld8 temp4=[temp2],16 // cr.iipa |
686 | 842 | ;; | |
687 | ld8 r3=[r2],2*8 | 843 | mov cr.itir=temp3 |
688 | ld8 r5=[r4],2*8;; | 844 | mov cr.iipa=temp4 |
689 | mov b6=r3 | 845 | ld8 temp3=[temp1],16 // cr.iim |
690 | mov b7=r5;; | 846 | ld8 temp4=[temp2],16 // cr.iha |
691 | 847 | ;; | |
692 | restore_CRs: | 848 | mov cr.iim=temp3 |
693 | add r4=8,r2 // duplicate r2 in r4 | 849 | mov cr.iha=temp4 |
694 | add r6=2*8,r2;; // duplicate r2 in r4 | 850 | dep r22=0,r22,62,2 // pal_min_state, physical, uncached |
695 | 851 | mov IA64_KR(CURRENT)=r21 | |
696 | ld8 r3=[r2],8*8 | 852 | ld8 r8=[temp1] // os_status |
697 | ld8 r5=[r4],3*8 | 853 | ld8 r10=[temp2] // context |
698 | ld8 r7=[r6],3*8;; // 48 byte increments | 854 | |
699 | mov cr.dcr=r3 | 855 | /* Wire IA64_TR_CURRENT_STACK to the stack that we are resuming to. To |
700 | mov cr.itm=r5 | 856 | * avoid any dependencies on the algorithm in ia64_switch_to(), just |
701 | mov cr.iva=r7;; | 857 | * purge any existing CURRENT_STACK mapping and insert the new one. |
702 | 858 | * | |
703 | ld8 r3=[r2],8*8;; // 64 byte increments | 859 | * r16 contains prev_IA64_KR_CURRENT_STACK, r21 contains |
704 | // mov cr.pta=r3 | 860 | * prev_IA64_KR_CURRENT, these values may have been changed by the C |
705 | 861 | * code. Do not use r8, r9, r10, r22, they contain values ready for | |
706 | 862 | * the return to SAL. | |
707 | // if PSR.ic=1, reading interruption registers causes an illegal operation fault | 863 | */ |
708 | mov r3=psr;; | 864 | |
709 | tbit.nz.unc p6,p0=r3,PSR_IC;; // PSI Valid Log bit pos. test | 865 | mov r15=IA64_KR(CURRENT_STACK) // physical granule mapped by IA64_TR_CURRENT_STACK |
710 | (p6) st8 [r2]=r0,9*8+160 // increment by 232 byte inc. | 866 | ;; |
711 | 867 | shl r15=r15,IA64_GRANULE_SHIFT | |
712 | begin_rskip_intr_regs: | 868 | ;; |
713 | (p6) br rSkipIntrRegs;; | 869 | dep r15=-1,r15,61,3 // virtual granule |
714 | 870 | mov r18=IA64_GRANULE_SHIFT<<2 // for cr.itir.ps | |
715 | add r4=8,r2 // duplicate r2 in r4 | 871 | ;; |
716 | add r6=2*8,r2;; // duplicate r2 in r4 | 872 | ptr.d r15,r18 |
717 | 873 | ;; | |
718 | ld8 r3=[r2],3*8 | 874 | srlz.d |
719 | ld8 r5=[r4],3*8 | 875 | |
720 | ld8 r7=[r6],3*8;; | 876 | extr.u r19=r21,61,3 // r21 = prev_IA64_KR_CURRENT |
721 | mov cr.ipsr=r3 | 877 | shl r20=r16,IA64_GRANULE_SHIFT // r16 = prev_IA64_KR_CURRENT_STACK |
722 | // mov cr.isr=r5 // cr.isr is read only | 878 | movl r21=PAGE_KERNEL // page properties |
723 | 879 | ;; | |
724 | ld8 r3=[r2],3*8 | 880 | mov IA64_KR(CURRENT_STACK)=r16 |
725 | ld8 r5=[r4],3*8 | 881 | cmp.ne p6,p0=RGN_KERNEL,r19 // new stack is in the kernel region? |
726 | ld8 r7=[r6],3*8;; | 882 | or r21=r20,r21 // construct PA | page properties |
727 | mov cr.iip=r3 | 883 | (p6) br.spnt 1f // the dreaded cpu 0 idle task in region 5:( |
728 | mov cr.ifa=r5 | 884 | ;; |
729 | mov cr.itir=r7;; | 885 | mov cr.itir=r18 |
730 | 886 | mov cr.ifa=r21 | |
731 | ld8 r3=[r2],3*8 | 887 | mov r20=IA64_TR_CURRENT_STACK |
732 | ld8 r5=[r4],3*8 | 888 | ;; |
733 | ld8 r7=[r6],3*8;; | 889 | itr.d dtr[r20]=r21 |
734 | mov cr.iipa=r3 | 890 | ;; |
735 | mov cr.ifs=r5 | 891 | srlz.d |
736 | mov cr.iim=r7 | 892 | 1: |
737 | 893 | ||
738 | ld8 r3=[r2],160;; // 160 byte increment | 894 | br.sptk b0 |
739 | mov cr.iha=r3 | ||
740 | |||
741 | rSkipIntrRegs: | ||
742 | ld8 r3=[r2],152;; // another 152 byte inc. | ||
743 | |||
744 | add r4=8,r2 // duplicate r2 in r4 | ||
745 | add r6=2*8,r2;; // duplicate r2 in r6 | ||
746 | |||
747 | ld8 r3=[r2],8*3 | ||
748 | ld8 r5=[r4],8*3 | ||
749 | ld8 r7=[r6],8*3;; | ||
750 | mov cr.lid=r3 | ||
751 | // mov cr.ivr=r5 // cr.ivr is read only | ||
752 | mov cr.tpr=r7;; | ||
753 | |||
754 | ld8 r3=[r2],8*3 | ||
755 | ld8 r5=[r4],8*3 | ||
756 | ld8 r7=[r6],8*3;; | ||
757 | // mov cr.eoi=r3 | ||
758 | // mov cr.irr0=r5 // cr.irr0 is read only | ||
759 | // mov cr.irr1=r7;; // cr.irr1 is read only | ||
760 | |||
761 | ld8 r3=[r2],8*3 | ||
762 | ld8 r5=[r4],8*3 | ||
763 | ld8 r7=[r6],8*3;; | ||
764 | // mov cr.irr2=r3 // cr.irr2 is read only | ||
765 | // mov cr.irr3=r5 // cr.irr3 is read only | ||
766 | mov cr.itv=r7;; | ||
767 | |||
768 | ld8 r3=[r2],8*7 | ||
769 | ld8 r5=[r4],8*7;; | ||
770 | mov cr.pmv=r3 | ||
771 | mov cr.cmcv=r5;; | ||
772 | |||
773 | ld8 r3=[r2],8*23 | ||
774 | ld8 r5=[r4],8*23;; | ||
775 | adds r2=8*23,r2 | ||
776 | adds r4=8*23,r4;; | ||
777 | // mov cr.lrr0=r3 | ||
778 | // mov cr.lrr1=r5 | ||
779 | |||
780 | adds r2=8*2,r2;; | ||
781 | |||
782 | restore_ARs: | ||
783 | add r4=8,r2 // duplicate r2 in r4 | ||
784 | add r6=2*8,r2;; // duplicate r2 in r4 | ||
785 | |||
786 | ld8 r3=[r2],3*8 | ||
787 | ld8 r5=[r4],3*8 | ||
788 | ld8 r7=[r6],3*8;; | ||
789 | mov ar.k0=r3 | ||
790 | mov ar.k1=r5 | ||
791 | mov ar.k2=r7;; | ||
792 | |||
793 | ld8 r3=[r2],3*8 | ||
794 | ld8 r5=[r4],3*8 | ||
795 | ld8 r7=[r6],3*8;; | ||
796 | mov ar.k3=r3 | ||
797 | mov ar.k4=r5 | ||
798 | mov ar.k5=r7;; | ||
799 | |||
800 | ld8 r3=[r2],10*8 | ||
801 | ld8 r5=[r4],10*8 | ||
802 | ld8 r7=[r6],10*8;; | ||
803 | mov ar.k6=r3 | ||
804 | mov ar.k7=r5 | ||
805 | ;; | ||
806 | |||
807 | ld8 r3=[r2],3*8 | ||
808 | ld8 r5=[r4],3*8 | ||
809 | ld8 r7=[r6],3*8;; | ||
810 | // mov ar.rsc=r3 | ||
811 | // mov ar.bsp=r5 // ar.bsp is read only | ||
812 | mov ar.rsc=r0 // make sure that RSE is in enforced lazy mode | ||
813 | ;; | ||
814 | mov ar.bspstore=r7;; | ||
815 | |||
816 | ld8 r9=[r2],8*13;; | ||
817 | mov ar.rnat=r9 | ||
818 | |||
819 | mov ar.rsc=r3 | ||
820 | ld8 r3=[r2],8*4;; | ||
821 | mov ar.ccv=r3 | ||
822 | |||
823 | ld8 r3=[r2],8*4;; | ||
824 | mov ar.unat=r3 | ||
825 | |||
826 | ld8 r3=[r2],8*4;; | ||
827 | mov ar.fpsr=r3 | ||
828 | |||
829 | ld8 r3=[r2],160;; // 160 | ||
830 | // mov ar.itc=r3 | ||
831 | |||
832 | ld8 r3=[r2],8;; | ||
833 | mov ar.pfs=r3 | ||
834 | |||
835 | ld8 r3=[r2],8;; | ||
836 | mov ar.lc=r3 | ||
837 | |||
838 | ld8 r3=[r2];; | ||
839 | mov ar.ec=r3 | ||
840 | add r2=8*62,r2;; // padding | ||
841 | |||
842 | restore_RRs: | ||
843 | mov r5=ar.lc | ||
844 | mov ar.lc=0x08-1 | ||
845 | movl r4=0x00;; | ||
846 | cStRRr: | ||
847 | dep.z r7=r4,61,3 | ||
848 | ld8 r3=[r2],8;; | ||
849 | mov rr[r7]=r3 // what are its access previledges? | ||
850 | add r4=1,r4 | ||
851 | br.cloop.sptk.few cStRRr | ||
852 | ;; | ||
853 | mov ar.lc=r5 | ||
854 | ;; | ||
855 | end_os_mca_restore: | ||
856 | br ia64_os_mca_done_restore;; | ||
857 | 895 | ||
858 | //EndStub////////////////////////////////////////////////////////////////////// | 896 | //EndStub////////////////////////////////////////////////////////////////////// |
859 | 897 | ||
860 | 898 | ||
861 | // ok, the issue here is that we need to save state information so | 899 | //++ |
862 | // it can be useable by the kernel debugger and show regs routines. | 900 | // Name: |
863 | // In order to do this, our best bet is save the current state (plus | 901 | // ia64_new_stack() |
864 | // the state information obtain from the MIN_STATE_AREA) into a pt_regs | ||
865 | // format. This way we can pass it on in a useable format. | ||
866 | // | 902 | // |
867 | 903 | // Stub Description: | |
868 | // | 904 | // |
869 | // SAL to OS entry point for INIT on the monarch processor | 905 | // Switch to the MCA/INIT stack. |
870 | // This has been defined for registration purposes with SAL | ||
871 | // as a part of ia64_mca_init. | ||
872 | // | 906 | // |
873 | // When we get here, the following registers have been | 907 | // r2 contains the return address, r3 contains either |
874 | // set by the SAL for our use | 908 | // IA64_MCA_CPU_MCA_STACK_OFFSET or IA64_MCA_CPU_INIT_STACK_OFFSET. |
875 | // | 909 | // |
876 | // 1. GR1 = OS INIT GP | 910 | // On entry RBS is still on the original stack, this routine switches RBS |
877 | // 2. GR8 = PAL_PROC physical address | 911 | // to use the MCA/INIT stack. |
878 | // 3. GR9 = SAL_PROC physical address | ||
879 | // 4. GR10 = SAL GP (physical) | ||
880 | // 5. GR11 = Init Reason | ||
881 | // 0 = Received INIT for event other than crash dump switch | ||
882 | // 1 = Received wakeup at the end of an OS_MCA corrected machine check | ||
883 | // 2 = Received INIT dude to CrashDump switch assertion | ||
884 | // | 912 | // |
885 | // 6. GR12 = Return address to location within SAL_INIT procedure | 913 | // On entry, sos->pal_min_state is physical, on exit it is virtual. |
886 | 914 | // | |
915 | //-- | ||
887 | 916 | ||
888 | GLOBAL_ENTRY(ia64_monarch_init_handler) | 917 | ia64_new_stack: |
889 | .prologue | 918 | add regs=MCA_PT_REGS_OFFSET, r3 |
890 | // stash the information the SAL passed to os | 919 | add temp2=MCA_SOS_OFFSET+IA64_SAL_OS_STATE_PAL_MIN_STATE_OFFSET, r3 |
891 | SAL_TO_OS_MCA_HANDOFF_STATE_SAVE(r2) | 920 | mov b0=r2 // save return address |
921 | GET_IA64_MCA_DATA(temp1) | ||
922 | invala | ||
892 | ;; | 923 | ;; |
893 | SAVE_MIN_WITH_COVER | 924 | add temp2=temp2, temp1 // struct ia64_sal_os_state.pal_min_state on MCA or INIT stack |
925 | add regs=regs, temp1 // struct pt_regs on MCA or INIT stack | ||
894 | ;; | 926 | ;; |
895 | mov r8=cr.ifa | 927 | // Address of minstate area provided by PAL is physical, uncacheable. |
896 | mov r9=cr.isr | 928 | // Convert to Linux virtual address in region 6 for C code. |
897 | adds r3=8,r2 // set up second base pointer | 929 | ld8 ms=[temp2] // pal_min_state, physical |
898 | ;; | 930 | ;; |
899 | SAVE_REST | 931 | dep temp1=-1,ms,62,2 // set region 6 |
900 | 932 | mov temp3=IA64_RBS_OFFSET-MCA_PT_REGS_OFFSET | |
901 | // ok, enough should be saved at this point to be dangerous, and supply | 933 | ;; |
902 | // information for a dump | 934 | st8 [temp2]=temp1 // pal_min_state, virtual |
903 | // We need to switch to Virtual mode before hitting the C functions. | ||
904 | 935 | ||
905 | movl r2=IA64_PSR_IT|IA64_PSR_IC|IA64_PSR_DT|IA64_PSR_RT|IA64_PSR_DFH|IA64_PSR_BN | 936 | add temp4=temp3, regs // start of bspstore on new stack |
906 | mov r3=psr // get the current psr, minimum enabled at this point | ||
907 | ;; | 937 | ;; |
908 | or r2=r2,r3 | 938 | mov ar.bspstore=temp4 // switch RBS to MCA/INIT stack |
909 | ;; | 939 | ;; |
910 | movl r3=IVirtual_Switch | 940 | flushrs // must be first in group |
941 | br.sptk b0 | ||
942 | |||
943 | //EndStub////////////////////////////////////////////////////////////////////// | ||
944 | |||
945 | |||
946 | //++ | ||
947 | // Name: | ||
948 | // ia64_old_stack() | ||
949 | // | ||
950 | // Stub Description: | ||
951 | // | ||
952 | // Switch to the old stack. | ||
953 | // | ||
954 | // r2 contains the return address, r3 contains either | ||
955 | // IA64_MCA_CPU_MCA_STACK_OFFSET or IA64_MCA_CPU_INIT_STACK_OFFSET. | ||
956 | // | ||
957 | // On entry, pal_min_state is virtual, on exit it is physical. | ||
958 | // | ||
959 | // On entry RBS is on the MCA/INIT stack, this routine switches RBS | ||
960 | // back to the previous stack. | ||
961 | // | ||
962 | // The psr is set to all zeroes. SAL return requires either all zeroes or | ||
963 | // just psr.mc set. Leaving psr.mc off allows INIT to be issued if this | ||
964 | // code does not perform correctly. | ||
965 | // | ||
966 | // The dirty registers at the time of the event were flushed to the | ||
967 | // MCA/INIT stack in ia64_pt_regs_save(). Restore the dirty registers | ||
968 | // before reverting to the previous bspstore. | ||
969 | //-- | ||
970 | |||
971 | ia64_old_stack: | ||
972 | add regs=MCA_PT_REGS_OFFSET, r3 | ||
973 | mov b0=r2 // save return address | ||
974 | GET_IA64_MCA_DATA(temp2) | ||
975 | LOAD_PHYSICAL(p0,temp1,1f) | ||
911 | ;; | 976 | ;; |
912 | mov cr.iip=r3 // short return to set the appropriate bits | 977 | mov cr.ipsr=r0 |
913 | mov cr.ipsr=r2 // need to do an rfi to set appropriate bits | 978 | mov cr.ifs=r0 |
979 | mov cr.iip=temp1 | ||
914 | ;; | 980 | ;; |
981 | invala | ||
915 | rfi | 982 | rfi |
983 | 1: | ||
984 | |||
985 | add regs=regs, temp2 // struct pt_regs on MCA or INIT stack | ||
916 | ;; | 986 | ;; |
917 | IVirtual_Switch: | 987 | add temp1=PT(LOADRS), regs |
918 | // | ||
919 | // We should now be running virtual | ||
920 | // | ||
921 | // Let's call the C handler to get the rest of the state info | ||
922 | // | ||
923 | alloc r14=ar.pfs,0,0,2,0 // now it's safe (must be first in insn group!) | ||
924 | ;; | 988 | ;; |
925 | adds out0=16,sp // out0 = pointer to pt_regs | 989 | ld8 temp2=[temp1],PT(AR_BSPSTORE)-PT(LOADRS) // restore loadrs |
990 | ;; | ||
991 | ld8 temp3=[temp1],PT(AR_RNAT)-PT(AR_BSPSTORE) // restore ar.bspstore | ||
992 | mov ar.rsc=temp2 | ||
993 | ;; | ||
994 | loadrs | ||
995 | ld8 temp4=[temp1] // restore ar.rnat | ||
996 | ;; | ||
997 | mov ar.bspstore=temp3 // back to old stack | ||
998 | ;; | ||
999 | mov ar.rnat=temp4 | ||
926 | ;; | 1000 | ;; |
927 | DO_SAVE_SWITCH_STACK | ||
928 | .body | ||
929 | adds out1=16,sp // out0 = pointer to switch_stack | ||
930 | 1001 | ||
931 | br.call.sptk.many rp=ia64_init_handler | 1002 | br.sptk b0 |
932 | .ret1: | 1003 | |
1004 | //EndStub////////////////////////////////////////////////////////////////////// | ||
933 | 1005 | ||
934 | return_from_init: | ||
935 | br.sptk return_from_init | ||
936 | END(ia64_monarch_init_handler) | ||
937 | 1006 | ||
1007 | //++ | ||
1008 | // Name: | ||
1009 | // ia64_set_kernel_registers() | ||
1010 | // | ||
1011 | // Stub Description: | ||
1012 | // | ||
1013 | // Set the registers that are required by the C code in order to run on an | ||
1014 | // MCA/INIT stack. | ||
938 | // | 1015 | // |
939 | // SAL to OS entry point for INIT on the slave processor | 1016 | // r2 contains the return address, r3 contains either |
940 | // This has been defined for registration purposes with SAL | 1017 | // IA64_MCA_CPU_MCA_STACK_OFFSET or IA64_MCA_CPU_INIT_STACK_OFFSET. |
941 | // as a part of ia64_mca_init. | ||
942 | // | 1018 | // |
1019 | //-- | ||
943 | 1020 | ||
944 | GLOBAL_ENTRY(ia64_slave_init_handler) | 1021 | ia64_set_kernel_registers: |
945 | 1: br.sptk 1b | 1022 | add temp3=MCA_SP_OFFSET, r3 |
946 | END(ia64_slave_init_handler) | 1023 | add temp4=MCA_SOS_OFFSET+IA64_SAL_OS_STATE_OS_GP_OFFSET, r3 |
1024 | mov b0=r2 // save return address | ||
1025 | GET_IA64_MCA_DATA(temp1) | ||
1026 | ;; | ||
1027 | add temp4=temp4, temp1 // &struct ia64_sal_os_state.os_gp | ||
1028 | add r12=temp1, temp3 // kernel stack pointer on MCA/INIT stack | ||
1029 | add r13=temp1, r3 // set current to start of MCA/INIT stack | ||
1030 | add r20=temp1, r3 // physical start of MCA/INIT stack | ||
1031 | ;; | ||
1032 | ld8 r1=[temp4] // OS GP from SAL OS state | ||
1033 | ;; | ||
1034 | DATA_PA_TO_VA(r1,temp1) | ||
1035 | DATA_PA_TO_VA(r12,temp2) | ||
1036 | DATA_PA_TO_VA(r13,temp3) | ||
1037 | ;; | ||
1038 | mov IA64_KR(CURRENT)=r13 | ||
1039 | |||
1040 | /* Wire IA64_TR_CURRENT_STACK to the MCA/INIT handler stack. To avoid | ||
1041 | * any dependencies on the algorithm in ia64_switch_to(), just purge | ||
1042 | * any existing CURRENT_STACK mapping and insert the new one. | ||
1043 | */ | ||
1044 | |||
1045 | mov r16=IA64_KR(CURRENT_STACK) // physical granule mapped by IA64_TR_CURRENT_STACK | ||
1046 | ;; | ||
1047 | shl r16=r16,IA64_GRANULE_SHIFT | ||
1048 | ;; | ||
1049 | dep r16=-1,r16,61,3 // virtual granule | ||
1050 | mov r18=IA64_GRANULE_SHIFT<<2 // for cr.itir.ps | ||
1051 | ;; | ||
1052 | ptr.d r16,r18 | ||
1053 | ;; | ||
1054 | srlz.d | ||
1055 | |||
1056 | shr.u r16=r20,IA64_GRANULE_SHIFT // r20 = physical start of MCA/INIT stack | ||
1057 | movl r21=PAGE_KERNEL // page properties | ||
1058 | ;; | ||
1059 | mov IA64_KR(CURRENT_STACK)=r16 | ||
1060 | or r21=r20,r21 // construct PA | page properties | ||
1061 | ;; | ||
1062 | mov cr.itir=r18 | ||
1063 | mov cr.ifa=r13 | ||
1064 | mov r20=IA64_TR_CURRENT_STACK | ||
1065 | ;; | ||
1066 | itr.d dtr[r20]=r21 | ||
1067 | ;; | ||
1068 | srlz.d | ||
1069 | |||
1070 | br.sptk b0 | ||
1071 | |||
1072 | //EndStub////////////////////////////////////////////////////////////////////// | ||
1073 | |||
1074 | #undef ms | ||
1075 | #undef regs | ||
1076 | #undef temp1 | ||
1077 | #undef temp2 | ||
1078 | #undef temp3 | ||
1079 | #undef temp4 | ||
1080 | |||
1081 | |||
1082 | // Support function for mca.c, it is here to avoid using inline asm. Given the | ||
1083 | // address of an rnat slot, if that address is below the current ar.bspstore | ||
1084 | // then return the contents of that slot, otherwise return the contents of | ||
1085 | // ar.rnat. | ||
1086 | GLOBAL_ENTRY(ia64_get_rnat) | ||
1087 | alloc r14=ar.pfs,1,0,0,0 | ||
1088 | mov ar.rsc=0 | ||
1089 | ;; | ||
1090 | mov r14=ar.bspstore | ||
1091 | ;; | ||
1092 | cmp.lt p6,p7=in0,r14 | ||
1093 | ;; | ||
1094 | (p6) ld8 r8=[in0] | ||
1095 | (p7) mov r8=ar.rnat | ||
1096 | mov ar.rsc=3 | ||
1097 | br.ret.sptk.many rp | ||
1098 | END(ia64_get_rnat) | ||
diff --git a/arch/ia64/kernel/mca_drv.c b/arch/ia64/kernel/mca_drv.c index abc0113a821d..f081c60ab206 100644 --- a/arch/ia64/kernel/mca_drv.c +++ b/arch/ia64/kernel/mca_drv.c | |||
@@ -4,6 +4,8 @@ | |||
4 | * | 4 | * |
5 | * Copyright (C) 2004 FUJITSU LIMITED | 5 | * Copyright (C) 2004 FUJITSU LIMITED |
6 | * Copyright (C) Hidetoshi Seto (seto.hidetoshi@jp.fujitsu.com) | 6 | * Copyright (C) Hidetoshi Seto (seto.hidetoshi@jp.fujitsu.com) |
7 | * Copyright (C) 2005 Silicon Graphics, Inc | ||
8 | * Copyright (C) 2005 Keith Owens <kaos@sgi.com> | ||
7 | */ | 9 | */ |
8 | #include <linux/config.h> | 10 | #include <linux/config.h> |
9 | #include <linux/types.h> | 11 | #include <linux/types.h> |
@@ -38,10 +40,6 @@ | |||
38 | /* max size of SAL error record (default) */ | 40 | /* max size of SAL error record (default) */ |
39 | static int sal_rec_max = 10000; | 41 | static int sal_rec_max = 10000; |
40 | 42 | ||
41 | /* from mca.c */ | ||
42 | static ia64_mca_sal_to_os_state_t *sal_to_os_handoff_state; | ||
43 | static ia64_mca_os_to_sal_state_t *os_to_sal_handoff_state; | ||
44 | |||
45 | /* from mca_drv_asm.S */ | 43 | /* from mca_drv_asm.S */ |
46 | extern void *mca_handler_bhhook(void); | 44 | extern void *mca_handler_bhhook(void); |
47 | 45 | ||
@@ -58,8 +56,9 @@ static struct page *page_isolate[MAX_PAGE_ISOLATE]; | |||
58 | static int num_page_isolate = 0; | 56 | static int num_page_isolate = 0; |
59 | 57 | ||
60 | typedef enum { | 58 | typedef enum { |
61 | ISOLATE_NG = 0, | 59 | ISOLATE_NG, |
62 | ISOLATE_OK = 1 | 60 | ISOLATE_OK, |
61 | ISOLATE_NONE | ||
63 | } isolate_status_t; | 62 | } isolate_status_t; |
64 | 63 | ||
65 | /* | 64 | /* |
@@ -76,7 +75,7 @@ static struct { | |||
76 | * @paddr: poisoned memory location | 75 | * @paddr: poisoned memory location |
77 | * | 76 | * |
78 | * Return value: | 77 | * Return value: |
79 | * ISOLATE_OK / ISOLATE_NG | 78 | * one of isolate_status_t, ISOLATE_OK/NG/NONE. |
80 | */ | 79 | */ |
81 | 80 | ||
82 | static isolate_status_t | 81 | static isolate_status_t |
@@ -86,23 +85,26 @@ mca_page_isolate(unsigned long paddr) | |||
86 | struct page *p; | 85 | struct page *p; |
87 | 86 | ||
88 | /* whether physical address is valid or not */ | 87 | /* whether physical address is valid or not */ |
89 | if ( !ia64_phys_addr_valid(paddr) ) | 88 | if (!ia64_phys_addr_valid(paddr)) |
90 | return ISOLATE_NG; | 89 | return ISOLATE_NONE; |
90 | |||
91 | if (!pfn_valid(paddr)) | ||
92 | return ISOLATE_NONE; | ||
91 | 93 | ||
92 | /* convert physical address to physical page number */ | 94 | /* convert physical address to physical page number */ |
93 | p = pfn_to_page(paddr>>PAGE_SHIFT); | 95 | p = pfn_to_page(paddr>>PAGE_SHIFT); |
94 | 96 | ||
95 | /* check whether a page number have been already registered or not */ | 97 | /* check whether a page number have been already registered or not */ |
96 | for( i = 0; i < num_page_isolate; i++ ) | 98 | for (i = 0; i < num_page_isolate; i++) |
97 | if( page_isolate[i] == p ) | 99 | if (page_isolate[i] == p) |
98 | return ISOLATE_OK; /* already listed */ | 100 | return ISOLATE_OK; /* already listed */ |
99 | 101 | ||
100 | /* limitation check */ | 102 | /* limitation check */ |
101 | if( num_page_isolate == MAX_PAGE_ISOLATE ) | 103 | if (num_page_isolate == MAX_PAGE_ISOLATE) |
102 | return ISOLATE_NG; | 104 | return ISOLATE_NG; |
103 | 105 | ||
104 | /* kick pages having attribute 'SLAB' or 'Reserved' */ | 106 | /* kick pages having attribute 'SLAB' or 'Reserved' */ |
105 | if( PageSlab(p) || PageReserved(p) ) | 107 | if (PageSlab(p) || PageReserved(p)) |
106 | return ISOLATE_NG; | 108 | return ISOLATE_NG; |
107 | 109 | ||
108 | /* add attribute 'Reserved' and register the page */ | 110 | /* add attribute 'Reserved' and register the page */ |
@@ -124,10 +126,15 @@ mca_handler_bh(unsigned long paddr) | |||
124 | current->pid, current->comm); | 126 | current->pid, current->comm); |
125 | 127 | ||
126 | spin_lock(&mca_bh_lock); | 128 | spin_lock(&mca_bh_lock); |
127 | if (mca_page_isolate(paddr) == ISOLATE_OK) { | 129 | switch (mca_page_isolate(paddr)) { |
130 | case ISOLATE_OK: | ||
128 | printk(KERN_DEBUG "Page isolation: ( %lx ) success.\n", paddr); | 131 | printk(KERN_DEBUG "Page isolation: ( %lx ) success.\n", paddr); |
129 | } else { | 132 | break; |
133 | case ISOLATE_NG: | ||
130 | printk(KERN_DEBUG "Page isolation: ( %lx ) failure.\n", paddr); | 134 | printk(KERN_DEBUG "Page isolation: ( %lx ) failure.\n", paddr); |
135 | break; | ||
136 | default: | ||
137 | break; | ||
131 | } | 138 | } |
132 | spin_unlock(&mca_bh_lock); | 139 | spin_unlock(&mca_bh_lock); |
133 | 140 | ||
@@ -141,10 +148,10 @@ mca_handler_bh(unsigned long paddr) | |||
141 | * @peidx: pointer to index of processor error section | 148 | * @peidx: pointer to index of processor error section |
142 | */ | 149 | */ |
143 | 150 | ||
144 | static void | 151 | static void |
145 | mca_make_peidx(sal_log_processor_info_t *slpi, peidx_table_t *peidx) | 152 | mca_make_peidx(sal_log_processor_info_t *slpi, peidx_table_t *peidx) |
146 | { | 153 | { |
147 | /* | 154 | /* |
148 | * calculate the start address of | 155 | * calculate the start address of |
149 | * "struct cpuid_info" and "sal_processor_static_info_t". | 156 | * "struct cpuid_info" and "sal_processor_static_info_t". |
150 | */ | 157 | */ |
@@ -166,7 +173,7 @@ mca_make_peidx(sal_log_processor_info_t *slpi, peidx_table_t *peidx) | |||
166 | } | 173 | } |
167 | 174 | ||
168 | /** | 175 | /** |
169 | * mca_make_slidx - Make index of SAL error record | 176 | * mca_make_slidx - Make index of SAL error record |
170 | * @buffer: pointer to SAL error record | 177 | * @buffer: pointer to SAL error record |
171 | * @slidx: pointer to index of SAL error record | 178 | * @slidx: pointer to index of SAL error record |
172 | * | 179 | * |
@@ -174,12 +181,12 @@ mca_make_peidx(sal_log_processor_info_t *slpi, peidx_table_t *peidx) | |||
174 | * 1 if record has platform error / 0 if not | 181 | * 1 if record has platform error / 0 if not |
175 | */ | 182 | */ |
176 | #define LOG_INDEX_ADD_SECT_PTR(sect, ptr) \ | 183 | #define LOG_INDEX_ADD_SECT_PTR(sect, ptr) \ |
177 | { slidx_list_t *hl = &slidx_pool.buffer[slidx_pool.cur_idx]; \ | 184 | {slidx_list_t *hl = &slidx_pool.buffer[slidx_pool.cur_idx]; \ |
178 | hl->hdr = ptr; \ | 185 | hl->hdr = ptr; \ |
179 | list_add(&hl->list, &(sect)); \ | 186 | list_add(&hl->list, &(sect)); \ |
180 | slidx_pool.cur_idx = (slidx_pool.cur_idx + 1)%slidx_pool.max_idx; } | 187 | slidx_pool.cur_idx = (slidx_pool.cur_idx + 1)%slidx_pool.max_idx; } |
181 | 188 | ||
182 | static int | 189 | static int |
183 | mca_make_slidx(void *buffer, slidx_table_t *slidx) | 190 | mca_make_slidx(void *buffer, slidx_table_t *slidx) |
184 | { | 191 | { |
185 | int platform_err = 0; | 192 | int platform_err = 0; |
@@ -216,28 +223,36 @@ mca_make_slidx(void *buffer, slidx_table_t *slidx) | |||
216 | sp = (sal_log_section_hdr_t *)((char*)buffer + ercd_pos); | 223 | sp = (sal_log_section_hdr_t *)((char*)buffer + ercd_pos); |
217 | if (!efi_guidcmp(sp->guid, SAL_PROC_DEV_ERR_SECT_GUID)) { | 224 | if (!efi_guidcmp(sp->guid, SAL_PROC_DEV_ERR_SECT_GUID)) { |
218 | LOG_INDEX_ADD_SECT_PTR(slidx->proc_err, sp); | 225 | LOG_INDEX_ADD_SECT_PTR(slidx->proc_err, sp); |
219 | } else if (!efi_guidcmp(sp->guid, SAL_PLAT_MEM_DEV_ERR_SECT_GUID)) { | 226 | } else if (!efi_guidcmp(sp->guid, |
227 | SAL_PLAT_MEM_DEV_ERR_SECT_GUID)) { | ||
220 | platform_err = 1; | 228 | platform_err = 1; |
221 | LOG_INDEX_ADD_SECT_PTR(slidx->mem_dev_err, sp); | 229 | LOG_INDEX_ADD_SECT_PTR(slidx->mem_dev_err, sp); |
222 | } else if (!efi_guidcmp(sp->guid, SAL_PLAT_SEL_DEV_ERR_SECT_GUID)) { | 230 | } else if (!efi_guidcmp(sp->guid, |
231 | SAL_PLAT_SEL_DEV_ERR_SECT_GUID)) { | ||
223 | platform_err = 1; | 232 | platform_err = 1; |
224 | LOG_INDEX_ADD_SECT_PTR(slidx->sel_dev_err, sp); | 233 | LOG_INDEX_ADD_SECT_PTR(slidx->sel_dev_err, sp); |
225 | } else if (!efi_guidcmp(sp->guid, SAL_PLAT_PCI_BUS_ERR_SECT_GUID)) { | 234 | } else if (!efi_guidcmp(sp->guid, |
235 | SAL_PLAT_PCI_BUS_ERR_SECT_GUID)) { | ||
226 | platform_err = 1; | 236 | platform_err = 1; |
227 | LOG_INDEX_ADD_SECT_PTR(slidx->pci_bus_err, sp); | 237 | LOG_INDEX_ADD_SECT_PTR(slidx->pci_bus_err, sp); |
228 | } else if (!efi_guidcmp(sp->guid, SAL_PLAT_SMBIOS_DEV_ERR_SECT_GUID)) { | 238 | } else if (!efi_guidcmp(sp->guid, |
239 | SAL_PLAT_SMBIOS_DEV_ERR_SECT_GUID)) { | ||
229 | platform_err = 1; | 240 | platform_err = 1; |
230 | LOG_INDEX_ADD_SECT_PTR(slidx->smbios_dev_err, sp); | 241 | LOG_INDEX_ADD_SECT_PTR(slidx->smbios_dev_err, sp); |
231 | } else if (!efi_guidcmp(sp->guid, SAL_PLAT_PCI_COMP_ERR_SECT_GUID)) { | 242 | } else if (!efi_guidcmp(sp->guid, |
243 | SAL_PLAT_PCI_COMP_ERR_SECT_GUID)) { | ||
232 | platform_err = 1; | 244 | platform_err = 1; |
233 | LOG_INDEX_ADD_SECT_PTR(slidx->pci_comp_err, sp); | 245 | LOG_INDEX_ADD_SECT_PTR(slidx->pci_comp_err, sp); |
234 | } else if (!efi_guidcmp(sp->guid, SAL_PLAT_SPECIFIC_ERR_SECT_GUID)) { | 246 | } else if (!efi_guidcmp(sp->guid, |
247 | SAL_PLAT_SPECIFIC_ERR_SECT_GUID)) { | ||
235 | platform_err = 1; | 248 | platform_err = 1; |
236 | LOG_INDEX_ADD_SECT_PTR(slidx->plat_specific_err, sp); | 249 | LOG_INDEX_ADD_SECT_PTR(slidx->plat_specific_err, sp); |
237 | } else if (!efi_guidcmp(sp->guid, SAL_PLAT_HOST_CTLR_ERR_SECT_GUID)) { | 250 | } else if (!efi_guidcmp(sp->guid, |
251 | SAL_PLAT_HOST_CTLR_ERR_SECT_GUID)) { | ||
238 | platform_err = 1; | 252 | platform_err = 1; |
239 | LOG_INDEX_ADD_SECT_PTR(slidx->host_ctlr_err, sp); | 253 | LOG_INDEX_ADD_SECT_PTR(slidx->host_ctlr_err, sp); |
240 | } else if (!efi_guidcmp(sp->guid, SAL_PLAT_BUS_ERR_SECT_GUID)) { | 254 | } else if (!efi_guidcmp(sp->guid, |
255 | SAL_PLAT_BUS_ERR_SECT_GUID)) { | ||
241 | platform_err = 1; | 256 | platform_err = 1; |
242 | LOG_INDEX_ADD_SECT_PTR(slidx->plat_bus_err, sp); | 257 | LOG_INDEX_ADD_SECT_PTR(slidx->plat_bus_err, sp); |
243 | } else { | 258 | } else { |
@@ -255,15 +270,16 @@ mca_make_slidx(void *buffer, slidx_table_t *slidx) | |||
255 | * Return value: | 270 | * Return value: |
256 | * 0 on Success / -ENOMEM on Failure | 271 | * 0 on Success / -ENOMEM on Failure |
257 | */ | 272 | */ |
258 | static int | 273 | static int |
259 | init_record_index_pools(void) | 274 | init_record_index_pools(void) |
260 | { | 275 | { |
261 | int i; | 276 | int i; |
262 | int rec_max_size; /* Maximum size of SAL error records */ | 277 | int rec_max_size; /* Maximum size of SAL error records */ |
263 | int sect_min_size; /* Minimum size of SAL error sections */ | 278 | int sect_min_size; /* Minimum size of SAL error sections */ |
264 | /* minimum size table of each section */ | 279 | /* minimum size table of each section */ |
265 | static int sal_log_sect_min_sizes[] = { | 280 | static int sal_log_sect_min_sizes[] = { |
266 | sizeof(sal_log_processor_info_t) + sizeof(sal_processor_static_info_t), | 281 | sizeof(sal_log_processor_info_t) |
282 | + sizeof(sal_processor_static_info_t), | ||
267 | sizeof(sal_log_mem_dev_err_info_t), | 283 | sizeof(sal_log_mem_dev_err_info_t), |
268 | sizeof(sal_log_sel_dev_err_info_t), | 284 | sizeof(sal_log_sel_dev_err_info_t), |
269 | sizeof(sal_log_pci_bus_err_info_t), | 285 | sizeof(sal_log_pci_bus_err_info_t), |
@@ -296,7 +312,8 @@ init_record_index_pools(void) | |||
296 | 312 | ||
297 | /* - 3 - */ | 313 | /* - 3 - */ |
298 | slidx_pool.max_idx = (rec_max_size/sect_min_size) * 2 + 1; | 314 | slidx_pool.max_idx = (rec_max_size/sect_min_size) * 2 + 1; |
299 | slidx_pool.buffer = (slidx_list_t *) kmalloc(slidx_pool.max_idx * sizeof(slidx_list_t), GFP_KERNEL); | 315 | slidx_pool.buffer = (slidx_list_t *) |
316 | kmalloc(slidx_pool.max_idx * sizeof(slidx_list_t), GFP_KERNEL); | ||
300 | 317 | ||
301 | return slidx_pool.buffer ? 0 : -ENOMEM; | 318 | return slidx_pool.buffer ? 0 : -ENOMEM; |
302 | } | 319 | } |
@@ -310,24 +327,27 @@ init_record_index_pools(void) | |||
310 | * is_mca_global - Check whether this MCA is global or not | 327 | * is_mca_global - Check whether this MCA is global or not |
311 | * @peidx: pointer of index of processor error section | 328 | * @peidx: pointer of index of processor error section |
312 | * @pbci: pointer to pal_bus_check_info_t | 329 | * @pbci: pointer to pal_bus_check_info_t |
330 | * @sos: pointer to hand off struct between SAL and OS | ||
313 | * | 331 | * |
314 | * Return value: | 332 | * Return value: |
315 | * MCA_IS_LOCAL / MCA_IS_GLOBAL | 333 | * MCA_IS_LOCAL / MCA_IS_GLOBAL |
316 | */ | 334 | */ |
317 | 335 | ||
318 | static mca_type_t | 336 | static mca_type_t |
319 | is_mca_global(peidx_table_t *peidx, pal_bus_check_info_t *pbci) | 337 | is_mca_global(peidx_table_t *peidx, pal_bus_check_info_t *pbci, |
338 | struct ia64_sal_os_state *sos) | ||
320 | { | 339 | { |
321 | pal_processor_state_info_t *psp = (pal_processor_state_info_t*)peidx_psp(peidx); | 340 | pal_processor_state_info_t *psp = |
341 | (pal_processor_state_info_t*)peidx_psp(peidx); | ||
322 | 342 | ||
323 | /* | 343 | /* |
324 | * PAL can request a rendezvous, if the MCA has a global scope. | 344 | * PAL can request a rendezvous, if the MCA has a global scope. |
325 | * If "rz_always" flag is set, SAL requests MCA rendezvous | 345 | * If "rz_always" flag is set, SAL requests MCA rendezvous |
326 | * in spite of global MCA. | 346 | * in spite of global MCA. |
327 | * Therefore it is local MCA when rendezvous has not been requested. | 347 | * Therefore it is local MCA when rendezvous has not been requested. |
328 | * Failed to rendezvous, the system must be down. | 348 | * Failed to rendezvous, the system must be down. |
329 | */ | 349 | */ |
330 | switch (sal_to_os_handoff_state->imsto_rendez_state) { | 350 | switch (sos->rv_rc) { |
331 | case -1: /* SAL rendezvous unsuccessful */ | 351 | case -1: /* SAL rendezvous unsuccessful */ |
332 | return MCA_IS_GLOBAL; | 352 | return MCA_IS_GLOBAL; |
333 | case 0: /* SAL rendezvous not required */ | 353 | case 0: /* SAL rendezvous not required */ |
@@ -382,13 +402,16 @@ is_mca_global(peidx_table_t *peidx, pal_bus_check_info_t *pbci) | |||
382 | * @slidx: pointer of index of SAL error record | 402 | * @slidx: pointer of index of SAL error record |
383 | * @peidx: pointer of index of processor error section | 403 | * @peidx: pointer of index of processor error section |
384 | * @pbci: pointer of pal_bus_check_info | 404 | * @pbci: pointer of pal_bus_check_info |
405 | * @sos: pointer to hand off struct between SAL and OS | ||
385 | * | 406 | * |
386 | * Return value: | 407 | * Return value: |
387 | * 1 on Success / 0 on Failure | 408 | * 1 on Success / 0 on Failure |
388 | */ | 409 | */ |
389 | 410 | ||
390 | static int | 411 | static int |
391 | recover_from_read_error(slidx_table_t *slidx, peidx_table_t *peidx, pal_bus_check_info_t *pbci) | 412 | recover_from_read_error(slidx_table_t *slidx, |
413 | peidx_table_t *peidx, pal_bus_check_info_t *pbci, | ||
414 | struct ia64_sal_os_state *sos) | ||
392 | { | 415 | { |
393 | sal_log_mod_error_info_t *smei; | 416 | sal_log_mod_error_info_t *smei; |
394 | pal_min_state_area_t *pmsa; | 417 | pal_min_state_area_t *pmsa; |
@@ -426,7 +449,7 @@ recover_from_read_error(slidx_table_t *slidx, peidx_table_t *peidx, pal_bus_chec | |||
426 | * setup for resume to bottom half of MCA, | 449 | * setup for resume to bottom half of MCA, |
427 | * "mca_handler_bhhook" | 450 | * "mca_handler_bhhook" |
428 | */ | 451 | */ |
429 | pmsa = (pal_min_state_area_t *)(sal_to_os_handoff_state->pal_min_state | (6ul<<61)); | 452 | pmsa = sos->pal_min_state; |
430 | /* pass to bhhook as 1st argument (gr8) */ | 453 | /* pass to bhhook as 1st argument (gr8) */ |
431 | pmsa->pmsa_gr[8-1] = smei->target_identifier; | 454 | pmsa->pmsa_gr[8-1] = smei->target_identifier; |
432 | /* set interrupted return address (but no use) */ | 455 | /* set interrupted return address (but no use) */ |
@@ -453,23 +476,28 @@ recover_from_read_error(slidx_table_t *slidx, peidx_table_t *peidx, pal_bus_chec | |||
453 | * @slidx: pointer of index of SAL error record | 476 | * @slidx: pointer of index of SAL error record |
454 | * @peidx: pointer of index of processor error section | 477 | * @peidx: pointer of index of processor error section |
455 | * @pbci: pointer of pal_bus_check_info | 478 | * @pbci: pointer of pal_bus_check_info |
479 | * @sos: pointer to hand off struct between SAL and OS | ||
456 | * | 480 | * |
457 | * Return value: | 481 | * Return value: |
458 | * 1 on Success / 0 on Failure | 482 | * 1 on Success / 0 on Failure |
459 | */ | 483 | */ |
460 | 484 | ||
461 | static int | 485 | static int |
462 | recover_from_platform_error(slidx_table_t *slidx, peidx_table_t *peidx, pal_bus_check_info_t *pbci) | 486 | recover_from_platform_error(slidx_table_t *slidx, peidx_table_t *peidx, |
487 | pal_bus_check_info_t *pbci, | ||
488 | struct ia64_sal_os_state *sos) | ||
463 | { | 489 | { |
464 | int status = 0; | 490 | int status = 0; |
465 | pal_processor_state_info_t *psp = (pal_processor_state_info_t*)peidx_psp(peidx); | 491 | pal_processor_state_info_t *psp = |
492 | (pal_processor_state_info_t*)peidx_psp(peidx); | ||
466 | 493 | ||
467 | if (psp->bc && pbci->eb && pbci->bsi == 0) { | 494 | if (psp->bc && pbci->eb && pbci->bsi == 0) { |
468 | switch(pbci->type) { | 495 | switch(pbci->type) { |
469 | case 1: /* partial read */ | 496 | case 1: /* partial read */ |
470 | case 3: /* full line(cpu) read */ | 497 | case 3: /* full line(cpu) read */ |
471 | case 9: /* I/O space read */ | 498 | case 9: /* I/O space read */ |
472 | status = recover_from_read_error(slidx, peidx, pbci); | 499 | status = recover_from_read_error(slidx, peidx, pbci, |
500 | sos); | ||
473 | break; | 501 | break; |
474 | case 0: /* unknown */ | 502 | case 0: /* unknown */ |
475 | case 2: /* partial write */ | 503 | case 2: /* partial write */ |
@@ -480,7 +508,8 @@ recover_from_platform_error(slidx_table_t *slidx, peidx_table_t *peidx, pal_bus_ | |||
480 | case 8: /* write coalescing transactions */ | 508 | case 8: /* write coalescing transactions */ |
481 | case 10: /* I/O space write */ | 509 | case 10: /* I/O space write */ |
482 | case 11: /* inter-processor interrupt message(IPI) */ | 510 | case 11: /* inter-processor interrupt message(IPI) */ |
483 | case 12: /* interrupt acknowledge or external task priority cycle */ | 511 | case 12: /* interrupt acknowledge or |
512 | external task priority cycle */ | ||
484 | default: | 513 | default: |
485 | break; | 514 | break; |
486 | } | 515 | } |
@@ -495,6 +524,7 @@ recover_from_platform_error(slidx_table_t *slidx, peidx_table_t *peidx, pal_bus_ | |||
495 | * @slidx: pointer of index of SAL error record | 524 | * @slidx: pointer of index of SAL error record |
496 | * @peidx: pointer of index of processor error section | 525 | * @peidx: pointer of index of processor error section |
497 | * @pbci: pointer of pal_bus_check_info | 526 | * @pbci: pointer of pal_bus_check_info |
527 | * @sos: pointer to hand off struct between SAL and OS | ||
498 | * | 528 | * |
499 | * Return value: | 529 | * Return value: |
500 | * 1 on Success / 0 on Failure | 530 | * 1 on Success / 0 on Failure |
@@ -508,14 +538,17 @@ recover_from_platform_error(slidx_table_t *slidx, peidx_table_t *peidx, pal_bus_ | |||
508 | */ | 538 | */ |
509 | 539 | ||
510 | static int | 540 | static int |
511 | recover_from_processor_error(int platform, slidx_table_t *slidx, peidx_table_t *peidx, pal_bus_check_info_t *pbci) | 541 | recover_from_processor_error(int platform, slidx_table_t *slidx, |
542 | peidx_table_t *peidx, pal_bus_check_info_t *pbci, | ||
543 | struct ia64_sal_os_state *sos) | ||
512 | { | 544 | { |
513 | pal_processor_state_info_t *psp = (pal_processor_state_info_t*)peidx_psp(peidx); | 545 | pal_processor_state_info_t *psp = |
546 | (pal_processor_state_info_t*)peidx_psp(peidx); | ||
514 | 547 | ||
515 | /* | 548 | /* |
516 | * We cannot recover errors with other than bus_check. | 549 | * We cannot recover errors with other than bus_check. |
517 | */ | 550 | */ |
518 | if (psp->cc || psp->rc || psp->uc) | 551 | if (psp->cc || psp->rc || psp->uc) |
519 | return 0; | 552 | return 0; |
520 | 553 | ||
521 | /* | 554 | /* |
@@ -544,10 +577,10 @@ recover_from_processor_error(int platform, slidx_table_t *slidx, peidx_table_t * | |||
544 | * (e.g. a load from poisoned memory) | 577 | * (e.g. a load from poisoned memory) |
545 | * This means "there are some platform errors". | 578 | * This means "there are some platform errors". |
546 | */ | 579 | */ |
547 | if (platform) | 580 | if (platform) |
548 | return recover_from_platform_error(slidx, peidx, pbci); | 581 | return recover_from_platform_error(slidx, peidx, pbci, sos); |
549 | /* | 582 | /* |
550 | * On account of strange SAL error record, we cannot recover. | 583 | * On account of strange SAL error record, we cannot recover. |
551 | */ | 584 | */ |
552 | return 0; | 585 | return 0; |
553 | } | 586 | } |
@@ -555,15 +588,14 @@ recover_from_processor_error(int platform, slidx_table_t *slidx, peidx_table_t * | |||
555 | /** | 588 | /** |
556 | * mca_try_to_recover - Try to recover from MCA | 589 | * mca_try_to_recover - Try to recover from MCA |
557 | * @rec: pointer to a SAL error record | 590 | * @rec: pointer to a SAL error record |
591 | * @sos: pointer to hand off struct between SAL and OS | ||
558 | * | 592 | * |
559 | * Return value: | 593 | * Return value: |
560 | * 1 on Success / 0 on Failure | 594 | * 1 on Success / 0 on Failure |
561 | */ | 595 | */ |
562 | 596 | ||
563 | static int | 597 | static int |
564 | mca_try_to_recover(void *rec, | 598 | mca_try_to_recover(void *rec, struct ia64_sal_os_state *sos) |
565 | ia64_mca_sal_to_os_state_t *sal_to_os_state, | ||
566 | ia64_mca_os_to_sal_state_t *os_to_sal_state) | ||
567 | { | 599 | { |
568 | int platform_err; | 600 | int platform_err; |
569 | int n_proc_err; | 601 | int n_proc_err; |
@@ -571,10 +603,6 @@ mca_try_to_recover(void *rec, | |||
571 | peidx_table_t peidx; | 603 | peidx_table_t peidx; |
572 | pal_bus_check_info_t pbci; | 604 | pal_bus_check_info_t pbci; |
573 | 605 | ||
574 | /* handoff state from/to mca.c */ | ||
575 | sal_to_os_handoff_state = sal_to_os_state; | ||
576 | os_to_sal_handoff_state = os_to_sal_state; | ||
577 | |||
578 | /* Make index of SAL error record */ | 606 | /* Make index of SAL error record */ |
579 | platform_err = mca_make_slidx(rec, &slidx); | 607 | platform_err = mca_make_slidx(rec, &slidx); |
580 | 608 | ||
@@ -591,17 +619,19 @@ mca_try_to_recover(void *rec, | |||
591 | } | 619 | } |
592 | 620 | ||
593 | /* Make index of processor error section */ | 621 | /* Make index of processor error section */ |
594 | mca_make_peidx((sal_log_processor_info_t*)slidx_first_entry(&slidx.proc_err)->hdr, &peidx); | 622 | mca_make_peidx((sal_log_processor_info_t*) |
623 | slidx_first_entry(&slidx.proc_err)->hdr, &peidx); | ||
595 | 624 | ||
596 | /* Extract Processor BUS_CHECK[0] */ | 625 | /* Extract Processor BUS_CHECK[0] */ |
597 | *((u64*)&pbci) = peidx_check_info(&peidx, bus_check, 0); | 626 | *((u64*)&pbci) = peidx_check_info(&peidx, bus_check, 0); |
598 | 627 | ||
599 | /* Check whether MCA is global or not */ | 628 | /* Check whether MCA is global or not */ |
600 | if (is_mca_global(&peidx, &pbci)) | 629 | if (is_mca_global(&peidx, &pbci, sos)) |
601 | return 0; | 630 | return 0; |
602 | 631 | ||
603 | /* Try to recover a processor error */ | 632 | /* Try to recover a processor error */ |
604 | return recover_from_processor_error(platform_err, &slidx, &peidx, &pbci); | 633 | return recover_from_processor_error(platform_err, &slidx, &peidx, |
634 | &pbci, sos); | ||
605 | } | 635 | } |
606 | 636 | ||
607 | /* | 637 | /* |
@@ -614,7 +644,7 @@ int __init mca_external_handler_init(void) | |||
614 | return -ENOMEM; | 644 | return -ENOMEM; |
615 | 645 | ||
616 | /* register external mca handlers */ | 646 | /* register external mca handlers */ |
617 | if (ia64_reg_MCA_extension(mca_try_to_recover)){ | 647 | if (ia64_reg_MCA_extension(mca_try_to_recover)) { |
618 | printk(KERN_ERR "ia64_reg_MCA_extension failed.\n"); | 648 | printk(KERN_ERR "ia64_reg_MCA_extension failed.\n"); |
619 | kfree(slidx_pool.buffer); | 649 | kfree(slidx_pool.buffer); |
620 | return -EFAULT; | 650 | return -EFAULT; |
diff --git a/arch/ia64/kernel/mca_drv.h b/arch/ia64/kernel/mca_drv.h index 0227b761f2c4..e2f6fa1e0ef6 100644 --- a/arch/ia64/kernel/mca_drv.h +++ b/arch/ia64/kernel/mca_drv.h | |||
@@ -6,7 +6,7 @@ | |||
6 | * Copyright (C) Hidetoshi Seto (seto.hidetoshi@jp.fujitsu.com) | 6 | * Copyright (C) Hidetoshi Seto (seto.hidetoshi@jp.fujitsu.com) |
7 | */ | 7 | */ |
8 | /* | 8 | /* |
9 | * Processor error section: | 9 | * Processor error section: |
10 | * | 10 | * |
11 | * +-sal_log_processor_info_t *info-------------+ | 11 | * +-sal_log_processor_info_t *info-------------+ |
12 | * | sal_log_section_hdr_t header; | | 12 | * | sal_log_section_hdr_t header; | |
diff --git a/arch/ia64/kernel/mca_drv_asm.S b/arch/ia64/kernel/mca_drv_asm.S index 2d7e0217638d..3f298ee4d00c 100644 --- a/arch/ia64/kernel/mca_drv_asm.S +++ b/arch/ia64/kernel/mca_drv_asm.S | |||
@@ -13,45 +13,45 @@ | |||
13 | #include <asm/ptrace.h> | 13 | #include <asm/ptrace.h> |
14 | 14 | ||
15 | GLOBAL_ENTRY(mca_handler_bhhook) | 15 | GLOBAL_ENTRY(mca_handler_bhhook) |
16 | invala // clear RSE ? | 16 | invala // clear RSE ? |
17 | ;; // | 17 | ;; |
18 | cover // | 18 | cover |
19 | ;; // | 19 | ;; |
20 | clrrrb // | 20 | clrrrb |
21 | ;; | 21 | ;; |
22 | alloc r16=ar.pfs,0,2,1,0 // make a new frame | 22 | alloc r16=ar.pfs,0,2,1,0 // make a new frame |
23 | ;; | 23 | ;; |
24 | mov ar.rsc=0 | 24 | mov ar.rsc=0 |
25 | ;; | 25 | ;; |
26 | mov r13=IA64_KR(CURRENT) // current task pointer | 26 | mov r13=IA64_KR(CURRENT) // current task pointer |
27 | ;; | 27 | ;; |
28 | mov r2=r13 | 28 | mov r2=r13 |
29 | ;; | 29 | ;; |
30 | addl r22=IA64_RBS_OFFSET,r2 | 30 | addl r22=IA64_RBS_OFFSET,r2 |
31 | ;; | 31 | ;; |
32 | mov ar.bspstore=r22 | 32 | mov ar.bspstore=r22 |
33 | ;; | 33 | ;; |
34 | addl sp=IA64_STK_OFFSET-IA64_PT_REGS_SIZE,r2 | 34 | addl sp=IA64_STK_OFFSET-IA64_PT_REGS_SIZE,r2 |
35 | ;; | 35 | ;; |
36 | adds r2=IA64_TASK_THREAD_ON_USTACK_OFFSET,r13 | 36 | adds r2=IA64_TASK_THREAD_ON_USTACK_OFFSET,r13 |
37 | ;; | 37 | ;; |
38 | st1 [r2]=r0 // clear current->thread.on_ustack flag | 38 | st1 [r2]=r0 // clear current->thread.on_ustack flag |
39 | mov loc0=r16 | 39 | mov loc0=r16 |
40 | movl loc1=mca_handler_bh // recovery C function | 40 | movl loc1=mca_handler_bh // recovery C function |
41 | ;; | 41 | ;; |
42 | mov out0=r8 // poisoned address | 42 | mov out0=r8 // poisoned address |
43 | mov b6=loc1 | 43 | mov b6=loc1 |
44 | ;; | 44 | ;; |
45 | mov loc1=rp | 45 | mov loc1=rp |
46 | ;; | 46 | ;; |
47 | ssm psr.i | 47 | ssm psr.i |
48 | ;; | 48 | ;; |
49 | br.call.sptk.many rp=b6 // does not return ... | 49 | br.call.sptk.many rp=b6 // does not return ... |
50 | ;; | 50 | ;; |
51 | mov ar.pfs=loc0 | 51 | mov ar.pfs=loc0 |
52 | mov rp=loc1 | 52 | mov rp=loc1 |
53 | ;; | 53 | ;; |
54 | mov r8=r0 | 54 | mov r8=r0 |
55 | br.ret.sptk.many rp | 55 | br.ret.sptk.many rp |
56 | ;; | 56 | ;; |
57 | END(mca_handler_bhhook) | 57 | END(mca_handler_bhhook) |
diff --git a/arch/ia64/kernel/minstate.h b/arch/ia64/kernel/minstate.h index f6d8a010d99b..85ed54179afa 100644 --- a/arch/ia64/kernel/minstate.h +++ b/arch/ia64/kernel/minstate.h | |||
@@ -5,73 +5,6 @@ | |||
5 | #include "entry.h" | 5 | #include "entry.h" |
6 | 6 | ||
7 | /* | 7 | /* |
8 | * For ivt.s we want to access the stack virtually so we don't have to disable translation | ||
9 | * on interrupts. | ||
10 | * | ||
11 | * On entry: | ||
12 | * r1: pointer to current task (ar.k6) | ||
13 | */ | ||
14 | #define MINSTATE_START_SAVE_MIN_VIRT \ | ||
15 | (pUStk) mov ar.rsc=0; /* set enforced lazy mode, pl 0, little-endian, loadrs=0 */ \ | ||
16 | ;; \ | ||
17 | (pUStk) mov.m r24=ar.rnat; \ | ||
18 | (pUStk) addl r22=IA64_RBS_OFFSET,r1; /* compute base of RBS */ \ | ||
19 | (pKStk) mov r1=sp; /* get sp */ \ | ||
20 | ;; \ | ||
21 | (pUStk) lfetch.fault.excl.nt1 [r22]; \ | ||
22 | (pUStk) addl r1=IA64_STK_OFFSET-IA64_PT_REGS_SIZE,r1; /* compute base of memory stack */ \ | ||
23 | (pUStk) mov r23=ar.bspstore; /* save ar.bspstore */ \ | ||
24 | ;; \ | ||
25 | (pUStk) mov ar.bspstore=r22; /* switch to kernel RBS */ \ | ||
26 | (pKStk) addl r1=-IA64_PT_REGS_SIZE,r1; /* if in kernel mode, use sp (r12) */ \ | ||
27 | ;; \ | ||
28 | (pUStk) mov r18=ar.bsp; \ | ||
29 | (pUStk) mov ar.rsc=0x3; /* set eager mode, pl 0, little-endian, loadrs=0 */ | ||
30 | |||
31 | #define MINSTATE_END_SAVE_MIN_VIRT \ | ||
32 | bsw.1; /* switch back to bank 1 (must be last in insn group) */ \ | ||
33 | ;; | ||
34 | |||
35 | /* | ||
36 | * For mca_asm.S we want to access the stack physically since the state is saved before we | ||
37 | * go virtual and don't want to destroy the iip or ipsr. | ||
38 | */ | ||
39 | #define MINSTATE_START_SAVE_MIN_PHYS \ | ||
40 | (pKStk) mov r3=IA64_KR(PER_CPU_DATA);; \ | ||
41 | (pKStk) addl r3=THIS_CPU(ia64_mca_data),r3;; \ | ||
42 | (pKStk) ld8 r3 = [r3];; \ | ||
43 | (pKStk) addl r3=IA64_MCA_CPU_INIT_STACK_OFFSET,r3;; \ | ||
44 | (pKStk) addl r1=IA64_STK_OFFSET-IA64_PT_REGS_SIZE,r3; \ | ||
45 | (pUStk) mov ar.rsc=0; /* set enforced lazy mode, pl 0, little-endian, loadrs=0 */ \ | ||
46 | (pUStk) addl r22=IA64_RBS_OFFSET,r1; /* compute base of register backing store */ \ | ||
47 | ;; \ | ||
48 | (pUStk) mov r24=ar.rnat; \ | ||
49 | (pUStk) addl r1=IA64_STK_OFFSET-IA64_PT_REGS_SIZE,r1; /* compute base of memory stack */ \ | ||
50 | (pUStk) mov r23=ar.bspstore; /* save ar.bspstore */ \ | ||
51 | (pUStk) dep r22=-1,r22,61,3; /* compute kernel virtual addr of RBS */ \ | ||
52 | ;; \ | ||
53 | (pUStk) mov ar.bspstore=r22; /* switch to kernel RBS */ \ | ||
54 | ;; \ | ||
55 | (pUStk) mov r18=ar.bsp; \ | ||
56 | (pUStk) mov ar.rsc=0x3; /* set eager mode, pl 0, little-endian, loadrs=0 */ \ | ||
57 | |||
58 | #define MINSTATE_END_SAVE_MIN_PHYS \ | ||
59 | dep r12=-1,r12,61,3; /* make sp a kernel virtual address */ \ | ||
60 | ;; | ||
61 | |||
62 | #ifdef MINSTATE_VIRT | ||
63 | # define MINSTATE_GET_CURRENT(reg) mov reg=IA64_KR(CURRENT) | ||
64 | # define MINSTATE_START_SAVE_MIN MINSTATE_START_SAVE_MIN_VIRT | ||
65 | # define MINSTATE_END_SAVE_MIN MINSTATE_END_SAVE_MIN_VIRT | ||
66 | #endif | ||
67 | |||
68 | #ifdef MINSTATE_PHYS | ||
69 | # define MINSTATE_GET_CURRENT(reg) mov reg=IA64_KR(CURRENT);; tpa reg=reg | ||
70 | # define MINSTATE_START_SAVE_MIN MINSTATE_START_SAVE_MIN_PHYS | ||
71 | # define MINSTATE_END_SAVE_MIN MINSTATE_END_SAVE_MIN_PHYS | ||
72 | #endif | ||
73 | |||
74 | /* | ||
75 | * DO_SAVE_MIN switches to the kernel stacks (if necessary) and saves | 8 | * DO_SAVE_MIN switches to the kernel stacks (if necessary) and saves |
76 | * the minimum state necessary that allows us to turn psr.ic back | 9 | * the minimum state necessary that allows us to turn psr.ic back |
77 | * on. | 10 | * on. |
@@ -97,7 +30,7 @@ | |||
97 | * we can pass interruption state as arguments to a handler. | 30 | * we can pass interruption state as arguments to a handler. |
98 | */ | 31 | */ |
99 | #define DO_SAVE_MIN(COVER,SAVE_IFS,EXTRA) \ | 32 | #define DO_SAVE_MIN(COVER,SAVE_IFS,EXTRA) \ |
100 | MINSTATE_GET_CURRENT(r16); /* M (or M;;I) */ \ | 33 | mov r16=IA64_KR(CURRENT); /* M */ \ |
101 | mov r27=ar.rsc; /* M */ \ | 34 | mov r27=ar.rsc; /* M */ \ |
102 | mov r20=r1; /* A */ \ | 35 | mov r20=r1; /* A */ \ |
103 | mov r25=ar.unat; /* M */ \ | 36 | mov r25=ar.unat; /* M */ \ |
@@ -118,7 +51,21 @@ | |||
118 | SAVE_IFS; \ | 51 | SAVE_IFS; \ |
119 | cmp.eq pKStk,pUStk=r0,r17; /* are we in kernel mode already? */ \ | 52 | cmp.eq pKStk,pUStk=r0,r17; /* are we in kernel mode already? */ \ |
120 | ;; \ | 53 | ;; \ |
121 | MINSTATE_START_SAVE_MIN \ | 54 | (pUStk) mov ar.rsc=0; /* set enforced lazy mode, pl 0, little-endian, loadrs=0 */ \ |
55 | ;; \ | ||
56 | (pUStk) mov.m r24=ar.rnat; \ | ||
57 | (pUStk) addl r22=IA64_RBS_OFFSET,r1; /* compute base of RBS */ \ | ||
58 | (pKStk) mov r1=sp; /* get sp */ \ | ||
59 | ;; \ | ||
60 | (pUStk) lfetch.fault.excl.nt1 [r22]; \ | ||
61 | (pUStk) addl r1=IA64_STK_OFFSET-IA64_PT_REGS_SIZE,r1; /* compute base of memory stack */ \ | ||
62 | (pUStk) mov r23=ar.bspstore; /* save ar.bspstore */ \ | ||
63 | ;; \ | ||
64 | (pUStk) mov ar.bspstore=r22; /* switch to kernel RBS */ \ | ||
65 | (pKStk) addl r1=-IA64_PT_REGS_SIZE,r1; /* if in kernel mode, use sp (r12) */ \ | ||
66 | ;; \ | ||
67 | (pUStk) mov r18=ar.bsp; \ | ||
68 | (pUStk) mov ar.rsc=0x3; /* set eager mode, pl 0, little-endian, loadrs=0 */ \ | ||
122 | adds r17=2*L1_CACHE_BYTES,r1; /* really: biggest cache-line size */ \ | 69 | adds r17=2*L1_CACHE_BYTES,r1; /* really: biggest cache-line size */ \ |
123 | adds r16=PT(CR_IPSR),r1; \ | 70 | adds r16=PT(CR_IPSR),r1; \ |
124 | ;; \ | 71 | ;; \ |
@@ -181,7 +128,8 @@ | |||
181 | EXTRA; \ | 128 | EXTRA; \ |
182 | movl r1=__gp; /* establish kernel global pointer */ \ | 129 | movl r1=__gp; /* establish kernel global pointer */ \ |
183 | ;; \ | 130 | ;; \ |
184 | MINSTATE_END_SAVE_MIN | 131 | bsw.1; /* switch back to bank 1 (must be last in insn group) */ \ |
132 | ;; | ||
185 | 133 | ||
186 | /* | 134 | /* |
187 | * SAVE_REST saves the remainder of pt_regs (with psr.ic on). | 135 | * SAVE_REST saves the remainder of pt_regs (with psr.ic on). |
diff --git a/arch/ia64/kernel/module.c b/arch/ia64/kernel/module.c index f1aca7cffd12..7a2f0a798d12 100644 --- a/arch/ia64/kernel/module.c +++ b/arch/ia64/kernel/module.c | |||
@@ -947,8 +947,8 @@ void | |||
947 | percpu_modcopy (void *pcpudst, const void *src, unsigned long size) | 947 | percpu_modcopy (void *pcpudst, const void *src, unsigned long size) |
948 | { | 948 | { |
949 | unsigned int i; | 949 | unsigned int i; |
950 | for (i = 0; i < NR_CPUS; i++) | 950 | for_each_cpu(i) { |
951 | if (cpu_possible(i)) | 951 | memcpy(pcpudst + __per_cpu_offset[i], src, size); |
952 | memcpy(pcpudst + __per_cpu_offset[i], src, size); | 952 | } |
953 | } | 953 | } |
954 | #endif /* CONFIG_SMP */ | 954 | #endif /* CONFIG_SMP */ |
diff --git a/arch/ia64/kernel/palinfo.c b/arch/ia64/kernel/palinfo.c index 25e7c8344564..89faa603c6be 100644 --- a/arch/ia64/kernel/palinfo.c +++ b/arch/ia64/kernel/palinfo.c | |||
@@ -307,11 +307,9 @@ vm_info(char *page) | |||
307 | 307 | ||
308 | if ((status = ia64_pal_vm_summary(&vm_info_1, &vm_info_2)) !=0) { | 308 | if ((status = ia64_pal_vm_summary(&vm_info_1, &vm_info_2)) !=0) { |
309 | printk(KERN_ERR "ia64_pal_vm_summary=%ld\n", status); | 309 | printk(KERN_ERR "ia64_pal_vm_summary=%ld\n", status); |
310 | return 0; | 310 | } else { |
311 | } | ||
312 | 311 | ||
313 | 312 | p += sprintf(p, | |
314 | p += sprintf(p, | ||
315 | "Physical Address Space : %d bits\n" | 313 | "Physical Address Space : %d bits\n" |
316 | "Virtual Address Space : %d bits\n" | 314 | "Virtual Address Space : %d bits\n" |
317 | "Protection Key Registers(PKR) : %d\n" | 315 | "Protection Key Registers(PKR) : %d\n" |
@@ -319,92 +317,99 @@ vm_info(char *page) | |||
319 | "Hash Tag ID : 0x%x\n" | 317 | "Hash Tag ID : 0x%x\n" |
320 | "Size of RR.rid : %d\n", | 318 | "Size of RR.rid : %d\n", |
321 | vm_info_1.pal_vm_info_1_s.phys_add_size, | 319 | vm_info_1.pal_vm_info_1_s.phys_add_size, |
322 | vm_info_2.pal_vm_info_2_s.impl_va_msb+1, vm_info_1.pal_vm_info_1_s.max_pkr+1, | 320 | vm_info_2.pal_vm_info_2_s.impl_va_msb+1, |
323 | vm_info_1.pal_vm_info_1_s.key_size, vm_info_1.pal_vm_info_1_s.hash_tag_id, | 321 | vm_info_1.pal_vm_info_1_s.max_pkr+1, |
322 | vm_info_1.pal_vm_info_1_s.key_size, | ||
323 | vm_info_1.pal_vm_info_1_s.hash_tag_id, | ||
324 | vm_info_2.pal_vm_info_2_s.rid_size); | 324 | vm_info_2.pal_vm_info_2_s.rid_size); |
325 | } | ||
325 | 326 | ||
326 | if (ia64_pal_mem_attrib(&attrib) != 0) | 327 | if (ia64_pal_mem_attrib(&attrib) == 0) { |
327 | return 0; | 328 | p += sprintf(p, "Supported memory attributes : "); |
328 | 329 | sep = ""; | |
329 | p += sprintf(p, "Supported memory attributes : "); | 330 | for (i = 0; i < 8; i++) { |
330 | sep = ""; | 331 | if (attrib & (1 << i)) { |
331 | for (i = 0; i < 8; i++) { | 332 | p += sprintf(p, "%s%s", sep, mem_attrib[i]); |
332 | if (attrib & (1 << i)) { | 333 | sep = ", "; |
333 | p += sprintf(p, "%s%s", sep, mem_attrib[i]); | 334 | } |
334 | sep = ", "; | ||
335 | } | 335 | } |
336 | p += sprintf(p, "\n"); | ||
336 | } | 337 | } |
337 | p += sprintf(p, "\n"); | ||
338 | 338 | ||
339 | if ((status = ia64_pal_vm_page_size(&tr_pages, &vw_pages)) !=0) { | 339 | if ((status = ia64_pal_vm_page_size(&tr_pages, &vw_pages)) !=0) { |
340 | printk(KERN_ERR "ia64_pal_vm_page_size=%ld\n", status); | 340 | printk(KERN_ERR "ia64_pal_vm_page_size=%ld\n", status); |
341 | return 0; | 341 | } else { |
342 | } | ||
343 | |||
344 | p += sprintf(p, | ||
345 | "\nTLB walker : %simplemented\n" | ||
346 | "Number of DTR : %d\n" | ||
347 | "Number of ITR : %d\n" | ||
348 | "TLB insertable page sizes : ", | ||
349 | vm_info_1.pal_vm_info_1_s.vw ? "" : "not ", | ||
350 | vm_info_1.pal_vm_info_1_s.max_dtr_entry+1, | ||
351 | vm_info_1.pal_vm_info_1_s.max_itr_entry+1); | ||
352 | 342 | ||
343 | p += sprintf(p, | ||
344 | "\nTLB walker : %simplemented\n" | ||
345 | "Number of DTR : %d\n" | ||
346 | "Number of ITR : %d\n" | ||
347 | "TLB insertable page sizes : ", | ||
348 | vm_info_1.pal_vm_info_1_s.vw ? "" : "not ", | ||
349 | vm_info_1.pal_vm_info_1_s.max_dtr_entry+1, | ||
350 | vm_info_1.pal_vm_info_1_s.max_itr_entry+1); | ||
353 | 351 | ||
354 | p = bitvector_process(p, tr_pages); | ||
355 | 352 | ||
356 | p += sprintf(p, "\nTLB purgeable page sizes : "); | 353 | p = bitvector_process(p, tr_pages); |
357 | 354 | ||
358 | p = bitvector_process(p, vw_pages); | 355 | p += sprintf(p, "\nTLB purgeable page sizes : "); |
359 | 356 | ||
357 | p = bitvector_process(p, vw_pages); | ||
358 | } | ||
360 | if ((status=ia64_get_ptce(&ptce)) != 0) { | 359 | if ((status=ia64_get_ptce(&ptce)) != 0) { |
361 | printk(KERN_ERR "ia64_get_ptce=%ld\n", status); | 360 | printk(KERN_ERR "ia64_get_ptce=%ld\n", status); |
362 | return 0; | 361 | } else { |
363 | } | 362 | p += sprintf(p, |
364 | |||
365 | p += sprintf(p, | ||
366 | "\nPurge base address : 0x%016lx\n" | 363 | "\nPurge base address : 0x%016lx\n" |
367 | "Purge outer loop count : %d\n" | 364 | "Purge outer loop count : %d\n" |
368 | "Purge inner loop count : %d\n" | 365 | "Purge inner loop count : %d\n" |
369 | "Purge outer loop stride : %d\n" | 366 | "Purge outer loop stride : %d\n" |
370 | "Purge inner loop stride : %d\n", | 367 | "Purge inner loop stride : %d\n", |
371 | ptce.base, ptce.count[0], ptce.count[1], ptce.stride[0], ptce.stride[1]); | 368 | ptce.base, ptce.count[0], ptce.count[1], |
369 | ptce.stride[0], ptce.stride[1]); | ||
372 | 370 | ||
373 | p += sprintf(p, | 371 | p += sprintf(p, |
374 | "TC Levels : %d\n" | 372 | "TC Levels : %d\n" |
375 | "Unique TC(s) : %d\n", | 373 | "Unique TC(s) : %d\n", |
376 | vm_info_1.pal_vm_info_1_s.num_tc_levels, | 374 | vm_info_1.pal_vm_info_1_s.num_tc_levels, |
377 | vm_info_1.pal_vm_info_1_s.max_unique_tcs); | 375 | vm_info_1.pal_vm_info_1_s.max_unique_tcs); |
378 | 376 | ||
379 | for(i=0; i < vm_info_1.pal_vm_info_1_s.num_tc_levels; i++) { | 377 | for(i=0; i < vm_info_1.pal_vm_info_1_s.num_tc_levels; i++) { |
380 | for (j=2; j>0 ; j--) { | 378 | for (j=2; j>0 ; j--) { |
381 | tc_pages = 0; /* just in case */ | 379 | tc_pages = 0; /* just in case */ |
382 | 380 | ||
383 | 381 | ||
384 | /* even without unification, some levels may not be present */ | 382 | /* even without unification, some levels may not be present */ |
385 | if ((status=ia64_pal_vm_info(i,j, &tc_info, &tc_pages)) != 0) { | 383 | if ((status=ia64_pal_vm_info(i,j, &tc_info, &tc_pages)) != 0) { |
386 | continue; | 384 | continue; |
387 | } | 385 | } |
388 | 386 | ||
389 | p += sprintf(p, | 387 | p += sprintf(p, |
390 | "\n%s Translation Cache Level %d:\n" | 388 | "\n%s Translation Cache Level %d:\n" |
391 | "\tHash sets : %d\n" | 389 | "\tHash sets : %d\n" |
392 | "\tAssociativity : %d\n" | 390 | "\tAssociativity : %d\n" |
393 | "\tNumber of entries : %d\n" | 391 | "\tNumber of entries : %d\n" |
394 | "\tFlags : ", | 392 | "\tFlags : ", |
395 | cache_types[j+tc_info.tc_unified], i+1, tc_info.tc_num_sets, | 393 | cache_types[j+tc_info.tc_unified], i+1, |
396 | tc_info.tc_associativity, tc_info.tc_num_entries); | 394 | tc_info.tc_num_sets, |
395 | tc_info.tc_associativity, | ||
396 | tc_info.tc_num_entries); | ||
397 | 397 | ||
398 | if (tc_info.tc_pf) p += sprintf(p, "PreferredPageSizeOptimized "); | 398 | if (tc_info.tc_pf) |
399 | if (tc_info.tc_unified) p += sprintf(p, "Unified "); | 399 | p += sprintf(p, "PreferredPageSizeOptimized "); |
400 | if (tc_info.tc_reduce_tr) p += sprintf(p, "TCReduction"); | 400 | if (tc_info.tc_unified) |
401 | p += sprintf(p, "Unified "); | ||
402 | if (tc_info.tc_reduce_tr) | ||
403 | p += sprintf(p, "TCReduction"); | ||
401 | 404 | ||
402 | p += sprintf(p, "\n\tSupported page sizes: "); | 405 | p += sprintf(p, "\n\tSupported page sizes: "); |
403 | 406 | ||
404 | p = bitvector_process(p, tc_pages); | 407 | p = bitvector_process(p, tc_pages); |
405 | 408 | ||
406 | /* when unified date (j=2) is enough */ | 409 | /* when unified date (j=2) is enough */ |
407 | if (tc_info.tc_unified) break; | 410 | if (tc_info.tc_unified) |
411 | break; | ||
412 | } | ||
408 | } | 413 | } |
409 | } | 414 | } |
410 | p += sprintf(p, "\n"); | 415 | p += sprintf(p, "\n"); |
@@ -440,14 +445,14 @@ register_info(char *page) | |||
440 | p += sprintf(p, "\n"); | 445 | p += sprintf(p, "\n"); |
441 | } | 446 | } |
442 | 447 | ||
443 | if (ia64_pal_rse_info(&phys_stacked, &hints) != 0) return 0; | 448 | if (ia64_pal_rse_info(&phys_stacked, &hints) == 0) { |
444 | 449 | ||
445 | p += sprintf(p, | 450 | p += sprintf(p, |
446 | "RSE stacked physical registers : %ld\n" | 451 | "RSE stacked physical registers : %ld\n" |
447 | "RSE load/store hints : %ld (%s)\n", | 452 | "RSE load/store hints : %ld (%s)\n", |
448 | phys_stacked, hints.ph_data, | 453 | phys_stacked, hints.ph_data, |
449 | hints.ph_data < RSE_HINTS_COUNT ? rse_hints[hints.ph_data]: "(??)"); | 454 | hints.ph_data < RSE_HINTS_COUNT ? rse_hints[hints.ph_data]: "(??)"); |
450 | 455 | } | |
451 | if (ia64_pal_debug_info(&iregs, &dregs)) | 456 | if (ia64_pal_debug_info(&iregs, &dregs)) |
452 | return 0; | 457 | return 0; |
453 | 458 | ||
diff --git a/arch/ia64/kernel/patch.c b/arch/ia64/kernel/patch.c index 367804a605fa..6a4ac7d70b35 100644 --- a/arch/ia64/kernel/patch.c +++ b/arch/ia64/kernel/patch.c | |||
@@ -64,22 +64,30 @@ ia64_patch (u64 insn_addr, u64 mask, u64 val) | |||
64 | void | 64 | void |
65 | ia64_patch_imm64 (u64 insn_addr, u64 val) | 65 | ia64_patch_imm64 (u64 insn_addr, u64 val) |
66 | { | 66 | { |
67 | ia64_patch(insn_addr, | 67 | /* The assembler may generate offset pointing to either slot 1 |
68 | or slot 2 for a long (2-slot) instruction, occupying slots 1 | ||
69 | and 2. */ | ||
70 | insn_addr &= -16UL; | ||
71 | ia64_patch(insn_addr + 2, | ||
68 | 0x01fffefe000UL, ( ((val & 0x8000000000000000UL) >> 27) /* bit 63 -> 36 */ | 72 | 0x01fffefe000UL, ( ((val & 0x8000000000000000UL) >> 27) /* bit 63 -> 36 */ |
69 | | ((val & 0x0000000000200000UL) << 0) /* bit 21 -> 21 */ | 73 | | ((val & 0x0000000000200000UL) << 0) /* bit 21 -> 21 */ |
70 | | ((val & 0x00000000001f0000UL) << 6) /* bit 16 -> 22 */ | 74 | | ((val & 0x00000000001f0000UL) << 6) /* bit 16 -> 22 */ |
71 | | ((val & 0x000000000000ff80UL) << 20) /* bit 7 -> 27 */ | 75 | | ((val & 0x000000000000ff80UL) << 20) /* bit 7 -> 27 */ |
72 | | ((val & 0x000000000000007fUL) << 13) /* bit 0 -> 13 */)); | 76 | | ((val & 0x000000000000007fUL) << 13) /* bit 0 -> 13 */)); |
73 | ia64_patch(insn_addr - 1, 0x1ffffffffffUL, val >> 22); | 77 | ia64_patch(insn_addr + 1, 0x1ffffffffffUL, val >> 22); |
74 | } | 78 | } |
75 | 79 | ||
76 | void | 80 | void |
77 | ia64_patch_imm60 (u64 insn_addr, u64 val) | 81 | ia64_patch_imm60 (u64 insn_addr, u64 val) |
78 | { | 82 | { |
79 | ia64_patch(insn_addr, | 83 | /* The assembler may generate offset pointing to either slot 1 |
84 | or slot 2 for a long (2-slot) instruction, occupying slots 1 | ||
85 | and 2. */ | ||
86 | insn_addr &= -16UL; | ||
87 | ia64_patch(insn_addr + 2, | ||
80 | 0x011ffffe000UL, ( ((val & 0x0800000000000000UL) >> 23) /* bit 59 -> 36 */ | 88 | 0x011ffffe000UL, ( ((val & 0x0800000000000000UL) >> 23) /* bit 59 -> 36 */ |
81 | | ((val & 0x00000000000fffffUL) << 13) /* bit 0 -> 13 */)); | 89 | | ((val & 0x00000000000fffffUL) << 13) /* bit 0 -> 13 */)); |
82 | ia64_patch(insn_addr - 1, 0x1fffffffffcUL, val >> 18); | 90 | ia64_patch(insn_addr + 1, 0x1fffffffffcUL, val >> 18); |
83 | } | 91 | } |
84 | 92 | ||
85 | /* | 93 | /* |
diff --git a/arch/ia64/kernel/perfmon.c b/arch/ia64/kernel/perfmon.c index f1201ac8a116..d71731ee5b61 100644 --- a/arch/ia64/kernel/perfmon.c +++ b/arch/ia64/kernel/perfmon.c | |||
@@ -38,6 +38,7 @@ | |||
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/rcupdate.h> | ||
41 | 42 | ||
42 | #include <asm/errno.h> | 43 | #include <asm/errno.h> |
43 | #include <asm/intrinsics.h> | 44 | #include <asm/intrinsics.h> |
@@ -496,7 +497,7 @@ typedef struct { | |||
496 | static pfm_stats_t pfm_stats[NR_CPUS]; | 497 | static pfm_stats_t pfm_stats[NR_CPUS]; |
497 | static pfm_session_t pfm_sessions; /* global sessions information */ | 498 | static pfm_session_t pfm_sessions; /* global sessions information */ |
498 | 499 | ||
499 | static spinlock_t pfm_alt_install_check = SPIN_LOCK_UNLOCKED; | 500 | static DEFINE_SPINLOCK(pfm_alt_install_check); |
500 | static pfm_intr_handler_desc_t *pfm_alt_intr_handler; | 501 | static pfm_intr_handler_desc_t *pfm_alt_intr_handler; |
501 | 502 | ||
502 | static struct proc_dir_entry *perfmon_dir; | 503 | static struct proc_dir_entry *perfmon_dir; |
@@ -573,7 +574,7 @@ pfm_protect_ctx_ctxsw(pfm_context_t *x) | |||
573 | return 0UL; | 574 | return 0UL; |
574 | } | 575 | } |
575 | 576 | ||
576 | static inline unsigned long | 577 | static inline void |
577 | pfm_unprotect_ctx_ctxsw(pfm_context_t *x, unsigned long f) | 578 | pfm_unprotect_ctx_ctxsw(pfm_context_t *x, unsigned long f) |
578 | { | 579 | { |
579 | spin_unlock(&(x)->ctx_lock); | 580 | spin_unlock(&(x)->ctx_lock); |
@@ -2217,15 +2218,18 @@ static void | |||
2217 | pfm_free_fd(int fd, struct file *file) | 2218 | pfm_free_fd(int fd, struct file *file) |
2218 | { | 2219 | { |
2219 | struct files_struct *files = current->files; | 2220 | struct files_struct *files = current->files; |
2221 | struct fdtable *fdt; | ||
2220 | 2222 | ||
2221 | /* | 2223 | /* |
2222 | * there ie no fd_uninstall(), so we do it here | 2224 | * there ie no fd_uninstall(), so we do it here |
2223 | */ | 2225 | */ |
2224 | spin_lock(&files->file_lock); | 2226 | spin_lock(&files->file_lock); |
2225 | files->fd[fd] = NULL; | 2227 | fdt = files_fdtable(files); |
2228 | rcu_assign_pointer(fdt->fd[fd], NULL); | ||
2226 | spin_unlock(&files->file_lock); | 2229 | spin_unlock(&files->file_lock); |
2227 | 2230 | ||
2228 | if (file) put_filp(file); | 2231 | if (file) |
2232 | put_filp(file); | ||
2229 | put_unused_fd(fd); | 2233 | put_unused_fd(fd); |
2230 | } | 2234 | } |
2231 | 2235 | ||
diff --git a/arch/ia64/kernel/salinfo.c b/arch/ia64/kernel/salinfo.c index 6f0cc7a6634e..ca68e6e44a72 100644 --- a/arch/ia64/kernel/salinfo.c +++ b/arch/ia64/kernel/salinfo.c | |||
@@ -22,6 +22,11 @@ | |||
22 | * | 22 | * |
23 | * Dec 5 2004 kaos@sgi.com | 23 | * Dec 5 2004 kaos@sgi.com |
24 | * Standardize which records are cleared automatically. | 24 | * Standardize which records are cleared automatically. |
25 | * | ||
26 | * Aug 18 2005 kaos@sgi.com | ||
27 | * mca.c may not pass a buffer, a NULL buffer just indicates that a new | ||
28 | * record is available in SAL. | ||
29 | * Replace some NR_CPUS by cpus_online, for hotplug cpu. | ||
25 | */ | 30 | */ |
26 | 31 | ||
27 | #include <linux/types.h> | 32 | #include <linux/types.h> |
@@ -193,7 +198,7 @@ shift1_data_saved (struct salinfo_data *data, int shift) | |||
193 | * The buffer passed from mca.c points to the output from ia64_log_get. This is | 198 | * The buffer passed from mca.c points to the output from ia64_log_get. This is |
194 | * a persistent buffer but its contents can change between the interrupt and | 199 | * a persistent buffer but its contents can change between the interrupt and |
195 | * when user space processes the record. Save the record id to identify | 200 | * when user space processes the record. Save the record id to identify |
196 | * changes. | 201 | * changes. If the buffer is NULL then just update the bitmap. |
197 | */ | 202 | */ |
198 | void | 203 | void |
199 | salinfo_log_wakeup(int type, u8 *buffer, u64 size, int irqsafe) | 204 | salinfo_log_wakeup(int type, u8 *buffer, u64 size, int irqsafe) |
@@ -206,27 +211,29 @@ salinfo_log_wakeup(int type, u8 *buffer, u64 size, int irqsafe) | |||
206 | 211 | ||
207 | BUG_ON(type >= ARRAY_SIZE(salinfo_log_name)); | 212 | BUG_ON(type >= ARRAY_SIZE(salinfo_log_name)); |
208 | 213 | ||
209 | if (irqsafe) | 214 | if (buffer) { |
210 | spin_lock_irqsave(&data_saved_lock, flags); | 215 | if (irqsafe) |
211 | for (i = 0, data_saved = data->data_saved; i < saved_size; ++i, ++data_saved) { | 216 | spin_lock_irqsave(&data_saved_lock, flags); |
212 | if (!data_saved->buffer) | 217 | for (i = 0, data_saved = data->data_saved; i < saved_size; ++i, ++data_saved) { |
213 | break; | 218 | if (!data_saved->buffer) |
214 | } | 219 | break; |
215 | if (i == saved_size) { | 220 | } |
216 | if (!data->saved_num) { | 221 | if (i == saved_size) { |
217 | shift1_data_saved(data, 0); | 222 | if (!data->saved_num) { |
218 | data_saved = data->data_saved + saved_size - 1; | 223 | shift1_data_saved(data, 0); |
219 | } else | 224 | data_saved = data->data_saved + saved_size - 1; |
220 | data_saved = NULL; | 225 | } else |
221 | } | 226 | data_saved = NULL; |
222 | if (data_saved) { | 227 | } |
223 | data_saved->cpu = smp_processor_id(); | 228 | if (data_saved) { |
224 | data_saved->id = ((sal_log_record_header_t *)buffer)->id; | 229 | data_saved->cpu = smp_processor_id(); |
225 | data_saved->size = size; | 230 | data_saved->id = ((sal_log_record_header_t *)buffer)->id; |
226 | data_saved->buffer = buffer; | 231 | data_saved->size = size; |
232 | data_saved->buffer = buffer; | ||
233 | } | ||
234 | if (irqsafe) | ||
235 | spin_unlock_irqrestore(&data_saved_lock, flags); | ||
227 | } | 236 | } |
228 | if (irqsafe) | ||
229 | spin_unlock_irqrestore(&data_saved_lock, flags); | ||
230 | 237 | ||
231 | if (!test_and_set_bit(smp_processor_id(), &data->cpu_event)) { | 238 | if (!test_and_set_bit(smp_processor_id(), &data->cpu_event)) { |
232 | if (irqsafe) | 239 | if (irqsafe) |
@@ -244,7 +251,7 @@ salinfo_timeout_check(struct salinfo_data *data) | |||
244 | int i; | 251 | int i; |
245 | if (!data->open) | 252 | if (!data->open) |
246 | return; | 253 | return; |
247 | for (i = 0; i < NR_CPUS; ++i) { | 254 | for_each_online_cpu(i) { |
248 | if (test_bit(i, &data->cpu_event)) { | 255 | if (test_bit(i, &data->cpu_event)) { |
249 | /* double up() is not a problem, user space will see no | 256 | /* double up() is not a problem, user space will see no |
250 | * records for the additional "events". | 257 | * records for the additional "events". |
@@ -291,7 +298,7 @@ retry: | |||
291 | 298 | ||
292 | n = data->cpu_check; | 299 | n = data->cpu_check; |
293 | for (i = 0; i < NR_CPUS; i++) { | 300 | for (i = 0; i < NR_CPUS; i++) { |
294 | if (test_bit(n, &data->cpu_event)) { | 301 | if (test_bit(n, &data->cpu_event) && cpu_online(n)) { |
295 | cpu = n; | 302 | cpu = n; |
296 | break; | 303 | break; |
297 | } | 304 | } |
@@ -585,11 +592,10 @@ salinfo_init(void) | |||
585 | 592 | ||
586 | /* we missed any events before now */ | 593 | /* we missed any events before now */ |
587 | online = 0; | 594 | online = 0; |
588 | for (j = 0; j < NR_CPUS; j++) | 595 | for_each_online_cpu(j) { |
589 | if (cpu_online(j)) { | 596 | set_bit(j, &data->cpu_event); |
590 | set_bit(j, &data->cpu_event); | 597 | ++online; |
591 | ++online; | 598 | } |
592 | } | ||
593 | sema_init(&data->sem, online); | 599 | sema_init(&data->sem, online); |
594 | 600 | ||
595 | *sdir++ = dir; | 601 | *sdir++ = dir; |
diff --git a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c index 84f89da7c640..fc56ca2da358 100644 --- a/arch/ia64/kernel/setup.c +++ b/arch/ia64/kernel/setup.c | |||
@@ -78,6 +78,19 @@ struct screen_info screen_info; | |||
78 | unsigned long vga_console_iobase; | 78 | unsigned long vga_console_iobase; |
79 | unsigned long vga_console_membase; | 79 | unsigned long vga_console_membase; |
80 | 80 | ||
81 | static struct resource data_resource = { | ||
82 | .name = "Kernel data", | ||
83 | .flags = IORESOURCE_BUSY | IORESOURCE_MEM | ||
84 | }; | ||
85 | |||
86 | static struct resource code_resource = { | ||
87 | .name = "Kernel code", | ||
88 | .flags = IORESOURCE_BUSY | IORESOURCE_MEM | ||
89 | }; | ||
90 | extern void efi_initialize_iomem_resources(struct resource *, | ||
91 | struct resource *); | ||
92 | extern char _text[], _end[], _etext[]; | ||
93 | |||
81 | unsigned long ia64_max_cacheline_size; | 94 | unsigned long ia64_max_cacheline_size; |
82 | unsigned long ia64_iobase; /* virtual address for I/O accesses */ | 95 | unsigned long ia64_iobase; /* virtual address for I/O accesses */ |
83 | EXPORT_SYMBOL(ia64_iobase); | 96 | EXPORT_SYMBOL(ia64_iobase); |
@@ -171,6 +184,22 @@ sort_regions (struct rsvd_region *rsvd_region, int max) | |||
171 | } | 184 | } |
172 | } | 185 | } |
173 | 186 | ||
187 | /* | ||
188 | * Request address space for all standard resources | ||
189 | */ | ||
190 | static int __init register_memory(void) | ||
191 | { | ||
192 | code_resource.start = ia64_tpa(_text); | ||
193 | code_resource.end = ia64_tpa(_etext) - 1; | ||
194 | data_resource.start = ia64_tpa(_etext); | ||
195 | data_resource.end = ia64_tpa(_end) - 1; | ||
196 | efi_initialize_iomem_resources(&code_resource, &data_resource); | ||
197 | |||
198 | return 0; | ||
199 | } | ||
200 | |||
201 | __initcall(register_memory); | ||
202 | |||
174 | /** | 203 | /** |
175 | * reserve_memory - setup reserved memory areas | 204 | * reserve_memory - setup reserved memory areas |
176 | * | 205 | * |
@@ -211,6 +240,9 @@ reserve_memory (void) | |||
211 | } | 240 | } |
212 | #endif | 241 | #endif |
213 | 242 | ||
243 | efi_memmap_init(&rsvd_region[n].start, &rsvd_region[n].end); | ||
244 | n++; | ||
245 | |||
214 | /* end of memory marker */ | 246 | /* end of memory marker */ |
215 | rsvd_region[n].start = ~0UL; | 247 | rsvd_region[n].start = ~0UL; |
216 | rsvd_region[n].end = ~0UL; | 248 | rsvd_region[n].end = ~0UL; |
@@ -244,28 +276,31 @@ find_initrd (void) | |||
244 | static void __init | 276 | static void __init |
245 | io_port_init (void) | 277 | io_port_init (void) |
246 | { | 278 | { |
247 | extern unsigned long ia64_iobase; | ||
248 | unsigned long phys_iobase; | 279 | unsigned long phys_iobase; |
249 | 280 | ||
250 | /* | 281 | /* |
251 | * Set `iobase' to the appropriate address in region 6 (uncached access range). | 282 | * Set `iobase' based on the EFI memory map or, failing that, the |
283 | * value firmware left in ar.k0. | ||
252 | * | 284 | * |
253 | * The EFI memory map is the "preferred" location to get the I/O port space base, | 285 | * Note that in ia32 mode, IN/OUT instructions use ar.k0 to compute |
254 | * rather the relying on AR.KR0. This should become more clear in future SAL | 286 | * the port's virtual address, so ia32_load_state() loads it with a |
255 | * specs. We'll fall back to getting it out of AR.KR0 if no appropriate entry is | 287 | * user virtual address. But in ia64 mode, glibc uses the |
256 | * found in the memory map. | 288 | * *physical* address in ar.k0 to mmap the appropriate area from |
289 | * /dev/mem, and the inX()/outX() interfaces use MMIO. In both | ||
290 | * cases, user-mode can only use the legacy 0-64K I/O port space. | ||
291 | * | ||
292 | * ar.k0 is not involved in kernel I/O port accesses, which can use | ||
293 | * any of the I/O port spaces and are done via MMIO using the | ||
294 | * virtual mmio_base from the appropriate io_space[]. | ||
257 | */ | 295 | */ |
258 | phys_iobase = efi_get_iobase(); | 296 | phys_iobase = efi_get_iobase(); |
259 | if (phys_iobase) | 297 | if (!phys_iobase) { |
260 | /* set AR.KR0 since this is all we use it for anyway */ | ||
261 | ia64_set_kr(IA64_KR_IO_BASE, phys_iobase); | ||
262 | else { | ||
263 | phys_iobase = ia64_get_kr(IA64_KR_IO_BASE); | 298 | phys_iobase = ia64_get_kr(IA64_KR_IO_BASE); |
264 | printk(KERN_INFO "No I/O port range found in EFI memory map, falling back " | 299 | printk(KERN_INFO "No I/O port range found in EFI memory map, " |
265 | "to AR.KR0\n"); | 300 | "falling back to AR.KR0 (0x%lx)\n", phys_iobase); |
266 | printk(KERN_INFO "I/O port base = 0x%lx\n", phys_iobase); | ||
267 | } | 301 | } |
268 | ia64_iobase = (unsigned long) ioremap(phys_iobase, 0); | 302 | ia64_iobase = (unsigned long) ioremap(phys_iobase, 0); |
303 | ia64_set_kr(IA64_KR_IO_BASE, __pa(ia64_iobase)); | ||
269 | 304 | ||
270 | /* setup legacy IO port space */ | 305 | /* setup legacy IO port space */ |
271 | io_space[0].mmio_base = ia64_iobase; | 306 | io_space[0].mmio_base = ia64_iobase; |
@@ -384,7 +419,7 @@ setup_arch (char **cmdline_p) | |||
384 | if (early_console_setup(*cmdline_p) == 0) | 419 | if (early_console_setup(*cmdline_p) == 0) |
385 | mark_bsp_online(); | 420 | mark_bsp_online(); |
386 | 421 | ||
387 | #ifdef CONFIG_ACPI_BOOT | 422 | #ifdef CONFIG_ACPI |
388 | /* Initialize the ACPI boot-time table parser */ | 423 | /* Initialize the ACPI boot-time table parser */ |
389 | acpi_table_init(); | 424 | acpi_table_init(); |
390 | # ifdef CONFIG_ACPI_NUMA | 425 | # ifdef CONFIG_ACPI_NUMA |
@@ -420,7 +455,7 @@ setup_arch (char **cmdline_p) | |||
420 | 455 | ||
421 | cpu_init(); /* initialize the bootstrap CPU */ | 456 | cpu_init(); /* initialize the bootstrap CPU */ |
422 | 457 | ||
423 | #ifdef CONFIG_ACPI_BOOT | 458 | #ifdef CONFIG_ACPI |
424 | acpi_boot_init(); | 459 | acpi_boot_init(); |
425 | #endif | 460 | #endif |
426 | 461 | ||
@@ -526,7 +561,7 @@ show_cpuinfo (struct seq_file *m, void *v) | |||
526 | c->itc_freq / 1000000, c->itc_freq % 1000000, | 561 | c->itc_freq / 1000000, c->itc_freq % 1000000, |
527 | lpj*HZ/500000, (lpj*HZ/5000) % 100); | 562 | lpj*HZ/500000, (lpj*HZ/5000) % 100); |
528 | #ifdef CONFIG_SMP | 563 | #ifdef CONFIG_SMP |
529 | seq_printf(m, "siblings : %u\n", c->num_log); | 564 | seq_printf(m, "siblings : %u\n", cpus_weight(cpu_core_map[cpunum])); |
530 | if (c->threads_per_core > 1 || c->cores_per_socket > 1) | 565 | if (c->threads_per_core > 1 || c->cores_per_socket > 1) |
531 | seq_printf(m, | 566 | seq_printf(m, |
532 | "physical id: %u\n" | 567 | "physical id: %u\n" |
diff --git a/arch/ia64/kernel/smp.c b/arch/ia64/kernel/smp.c index 0166a9847095..657ac99a451c 100644 --- a/arch/ia64/kernel/smp.c +++ b/arch/ia64/kernel/smp.c | |||
@@ -185,8 +185,8 @@ send_IPI_allbutself (int op) | |||
185 | { | 185 | { |
186 | unsigned int i; | 186 | unsigned int i; |
187 | 187 | ||
188 | for (i = 0; i < NR_CPUS; i++) { | 188 | for_each_online_cpu(i) { |
189 | if (cpu_online(i) && i != smp_processor_id()) | 189 | if (i != smp_processor_id()) |
190 | send_IPI_single(i, op); | 190 | send_IPI_single(i, op); |
191 | } | 191 | } |
192 | } | 192 | } |
@@ -199,9 +199,9 @@ send_IPI_all (int op) | |||
199 | { | 199 | { |
200 | int i; | 200 | int i; |
201 | 201 | ||
202 | for (i = 0; i < NR_CPUS; i++) | 202 | for_each_online_cpu(i) { |
203 | if (cpu_online(i)) | 203 | send_IPI_single(i, op); |
204 | send_IPI_single(i, op); | 204 | } |
205 | } | 205 | } |
206 | 206 | ||
207 | /* | 207 | /* |
diff --git a/arch/ia64/kernel/smpboot.c b/arch/ia64/kernel/smpboot.c index 7d72c0d872b3..400a48987124 100644 --- a/arch/ia64/kernel/smpboot.c +++ b/arch/ia64/kernel/smpboot.c | |||
@@ -694,9 +694,9 @@ smp_cpus_done (unsigned int dummy) | |||
694 | * Allow the user to impress friends. | 694 | * Allow the user to impress friends. |
695 | */ | 695 | */ |
696 | 696 | ||
697 | for (cpu = 0; cpu < NR_CPUS; cpu++) | 697 | for_each_online_cpu(cpu) { |
698 | if (cpu_online(cpu)) | 698 | bogosum += cpu_data(cpu)->loops_per_jiffy; |
699 | bogosum += cpu_data(cpu)->loops_per_jiffy; | 699 | } |
700 | 700 | ||
701 | printk(KERN_INFO "Total of %d processors activated (%lu.%02lu BogoMIPS).\n", | 701 | printk(KERN_INFO "Total of %d processors activated (%lu.%02lu BogoMIPS).\n", |
702 | (int)num_online_cpus(), bogosum/(500000/HZ), (bogosum/(5000/HZ))%100); | 702 | (int)num_online_cpus(), bogosum/(500000/HZ), (bogosum/(5000/HZ))%100); |
diff --git a/arch/ia64/kernel/topology.c b/arch/ia64/kernel/topology.c index 92ff46ad21e2..706b7734e191 100644 --- a/arch/ia64/kernel/topology.c +++ b/arch/ia64/kernel/topology.c | |||
@@ -36,7 +36,7 @@ int arch_register_cpu(int num) | |||
36 | parent = &sysfs_nodes[cpu_to_node(num)]; | 36 | parent = &sysfs_nodes[cpu_to_node(num)]; |
37 | #endif /* CONFIG_NUMA */ | 37 | #endif /* CONFIG_NUMA */ |
38 | 38 | ||
39 | #ifdef CONFIG_ACPI_BOOT | 39 | #ifdef CONFIG_ACPI |
40 | /* | 40 | /* |
41 | * If CPEI cannot be re-targetted, and this is | 41 | * If CPEI cannot be re-targetted, and this is |
42 | * CPEI target, then dont create the control file | 42 | * CPEI target, then dont create the control file |
diff --git a/arch/ia64/kernel/traps.c b/arch/ia64/kernel/traps.c index 4440c8343fa4..f970359e7edf 100644 --- a/arch/ia64/kernel/traps.c +++ b/arch/ia64/kernel/traps.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/vt_kern.h> /* For unblank_screen() */ | 15 | #include <linux/vt_kern.h> /* For unblank_screen() */ |
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 | 19 | ||
19 | #include <asm/fpswa.h> | 20 | #include <asm/fpswa.h> |
20 | #include <asm/ia32.h> | 21 | #include <asm/ia32.h> |
@@ -122,7 +123,7 @@ die_if_kernel (char *str, struct pt_regs *regs, long err) | |||
122 | } | 123 | } |
123 | 124 | ||
124 | void | 125 | void |
125 | ia64_bad_break (unsigned long break_num, struct pt_regs *regs) | 126 | __kprobes ia64_bad_break (unsigned long break_num, struct pt_regs *regs) |
126 | { | 127 | { |
127 | siginfo_t siginfo; | 128 | siginfo_t siginfo; |
128 | int sig, code; | 129 | int sig, code; |
@@ -444,7 +445,7 @@ ia64_illegal_op_fault (unsigned long ec, long arg1, long arg2, long arg3, | |||
444 | return rv; | 445 | return rv; |
445 | } | 446 | } |
446 | 447 | ||
447 | void | 448 | void __kprobes |
448 | ia64_fault (unsigned long vector, unsigned long isr, unsigned long ifa, | 449 | ia64_fault (unsigned long vector, unsigned long isr, unsigned long ifa, |
449 | unsigned long iim, unsigned long itir, long arg5, long arg6, | 450 | unsigned long iim, unsigned long itir, long arg5, long arg6, |
450 | long arg7, struct pt_regs regs) | 451 | long arg7, struct pt_regs regs) |
diff --git a/arch/ia64/kernel/uncached.c b/arch/ia64/kernel/uncached.c index 4e9d06c48a8b..c6d40446c2c4 100644 --- a/arch/ia64/kernel/uncached.c +++ b/arch/ia64/kernel/uncached.c | |||
@@ -205,23 +205,18 @@ EXPORT_SYMBOL(uncached_free_page); | |||
205 | static int __init | 205 | static int __init |
206 | uncached_build_memmap(unsigned long start, unsigned long end, void *arg) | 206 | uncached_build_memmap(unsigned long start, unsigned long end, void *arg) |
207 | { | 207 | { |
208 | long length; | 208 | long length = end - start; |
209 | unsigned long vstart, vend; | ||
210 | int node; | 209 | int node; |
211 | 210 | ||
212 | length = end - start; | ||
213 | vstart = start + __IA64_UNCACHED_OFFSET; | ||
214 | vend = end + __IA64_UNCACHED_OFFSET; | ||
215 | |||
216 | dprintk(KERN_ERR "uncached_build_memmap(%lx %lx)\n", start, end); | 211 | dprintk(KERN_ERR "uncached_build_memmap(%lx %lx)\n", start, end); |
217 | 212 | ||
218 | memset((char *)vstart, 0, length); | 213 | memset((char *)start, 0, length); |
219 | 214 | ||
220 | node = paddr_to_nid(start); | 215 | node = paddr_to_nid(start - __IA64_UNCACHED_OFFSET); |
221 | 216 | ||
222 | for (; vstart < vend ; vstart += PAGE_SIZE) { | 217 | for (; start < end ; start += PAGE_SIZE) { |
223 | dprintk(KERN_INFO "sticking %lx into the pool!\n", vstart); | 218 | dprintk(KERN_INFO "sticking %lx into the pool!\n", start); |
224 | gen_pool_free(uncached_pool[node], vstart, PAGE_SIZE); | 219 | gen_pool_free(uncached_pool[node], start, PAGE_SIZE); |
225 | } | 220 | } |
226 | 221 | ||
227 | return 0; | 222 | return 0; |
diff --git a/arch/ia64/kernel/unwind.c b/arch/ia64/kernel/unwind.c index 3288be47bc75..93d5a3b41f69 100644 --- a/arch/ia64/kernel/unwind.c +++ b/arch/ia64/kernel/unwind.c | |||
@@ -2020,28 +2020,6 @@ init_frame_info (struct unw_frame_info *info, struct task_struct *t, | |||
2020 | } | 2020 | } |
2021 | 2021 | ||
2022 | void | 2022 | void |
2023 | unw_init_from_interruption (struct unw_frame_info *info, struct task_struct *t, | ||
2024 | struct pt_regs *pt, struct switch_stack *sw) | ||
2025 | { | ||
2026 | unsigned long sof; | ||
2027 | |||
2028 | init_frame_info(info, t, sw, pt->r12); | ||
2029 | info->cfm_loc = &pt->cr_ifs; | ||
2030 | info->unat_loc = &pt->ar_unat; | ||
2031 | info->pfs_loc = &pt->ar_pfs; | ||
2032 | sof = *info->cfm_loc & 0x7f; | ||
2033 | info->bsp = (unsigned long) ia64_rse_skip_regs((unsigned long *) info->regstk.top, -sof); | ||
2034 | info->ip = pt->cr_iip + ia64_psr(pt)->ri; | ||
2035 | info->pt = (unsigned long) pt; | ||
2036 | UNW_DPRINT(3, "unwind.%s:\n" | ||
2037 | " bsp 0x%lx\n" | ||
2038 | " sof 0x%lx\n" | ||
2039 | " ip 0x%lx\n", | ||
2040 | __FUNCTION__, info->bsp, sof, info->ip); | ||
2041 | find_save_locs(info); | ||
2042 | } | ||
2043 | |||
2044 | void | ||
2045 | unw_init_frame_info (struct unw_frame_info *info, struct task_struct *t, struct switch_stack *sw) | 2023 | unw_init_frame_info (struct unw_frame_info *info, struct task_struct *t, struct switch_stack *sw) |
2046 | { | 2024 | { |
2047 | unsigned long sol; | 2025 | unsigned long sol; |
diff --git a/arch/ia64/kernel/vmlinux.lds.S b/arch/ia64/kernel/vmlinux.lds.S index a676e79e0681..30d8564e9603 100644 --- a/arch/ia64/kernel/vmlinux.lds.S +++ b/arch/ia64/kernel/vmlinux.lds.S | |||
@@ -48,6 +48,7 @@ SECTIONS | |||
48 | *(.text) | 48 | *(.text) |
49 | SCHED_TEXT | 49 | SCHED_TEXT |
50 | LOCK_TEXT | 50 | LOCK_TEXT |
51 | KPROBES_TEXT | ||
51 | *(.gnu.linkonce.t*) | 52 | *(.gnu.linkonce.t*) |
52 | } | 53 | } |
53 | .text2 : AT(ADDR(.text2) - LOAD_OFFSET) | 54 | .text2 : AT(ADDR(.text2) - LOAD_OFFSET) |
diff --git a/arch/ia64/lib/Makefile b/arch/ia64/lib/Makefile index 799407e7726f..cb1af597370b 100644 --- a/arch/ia64/lib/Makefile +++ b/arch/ia64/lib/Makefile | |||
@@ -15,7 +15,6 @@ lib-$(CONFIG_ITANIUM) += copy_page.o copy_user.o memcpy.o | |||
15 | lib-$(CONFIG_MCKINLEY) += copy_page_mck.o memcpy_mck.o | 15 | lib-$(CONFIG_MCKINLEY) += copy_page_mck.o memcpy_mck.o |
16 | lib-$(CONFIG_PERFMON) += carta_random.o | 16 | lib-$(CONFIG_PERFMON) += carta_random.o |
17 | lib-$(CONFIG_MD_RAID5) += xor.o | 17 | lib-$(CONFIG_MD_RAID5) += xor.o |
18 | lib-$(CONFIG_HAVE_DEC_LOCK) += dec_and_lock.o | ||
19 | 18 | ||
20 | AFLAGS___divdi3.o = | 19 | AFLAGS___divdi3.o = |
21 | AFLAGS___udivdi3.o = -DUNSIGNED | 20 | AFLAGS___udivdi3.o = -DUNSIGNED |
diff --git a/arch/ia64/lib/dec_and_lock.c b/arch/ia64/lib/dec_and_lock.c deleted file mode 100644 index c7ce92f968f1..000000000000 --- a/arch/ia64/lib/dec_and_lock.c +++ /dev/null | |||
@@ -1,42 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2003 Jerome Marchand, Bull S.A. | ||
3 | * Cleaned up by David Mosberger-Tang <davidm@hpl.hp.com> | ||
4 | * | ||
5 | * This file is released under the GPLv2, or at your option any later version. | ||
6 | * | ||
7 | * ia64 version of "atomic_dec_and_lock()" using the atomic "cmpxchg" instruction. This | ||
8 | * code is an adaptation of the x86 version of "atomic_dec_and_lock()". | ||
9 | */ | ||
10 | |||
11 | #include <linux/compiler.h> | ||
12 | #include <linux/module.h> | ||
13 | #include <linux/spinlock.h> | ||
14 | #include <asm/atomic.h> | ||
15 | |||
16 | /* | ||
17 | * Decrement REFCOUNT and if the count reaches zero, acquire the spinlock. Both of these | ||
18 | * operations have to be done atomically, so that the count doesn't drop to zero without | ||
19 | * acquiring the spinlock first. | ||
20 | */ | ||
21 | int | ||
22 | _atomic_dec_and_lock (atomic_t *refcount, spinlock_t *lock) | ||
23 | { | ||
24 | int old, new; | ||
25 | |||
26 | do { | ||
27 | old = atomic_read(refcount); | ||
28 | new = old - 1; | ||
29 | |||
30 | if (unlikely (old == 1)) { | ||
31 | /* oops, we may be decrementing to zero, do it the slow way... */ | ||
32 | spin_lock(lock); | ||
33 | if (atomic_dec_and_test(refcount)) | ||
34 | return 1; | ||
35 | spin_unlock(lock); | ||
36 | return 0; | ||
37 | } | ||
38 | } while (cmpxchg(&refcount->counter, old, new) != old); | ||
39 | return 0; | ||
40 | } | ||
41 | |||
42 | EXPORT_SYMBOL(_atomic_dec_and_lock); | ||
diff --git a/arch/ia64/lib/flush.S b/arch/ia64/lib/flush.S index 3e2cfa2c6d39..2a0d27f2f21b 100644 --- a/arch/ia64/lib/flush.S +++ b/arch/ia64/lib/flush.S | |||
@@ -20,6 +20,7 @@ | |||
20 | * | 20 | * |
21 | * Note: "in0" and "in1" are preserved for debugging purposes. | 21 | * Note: "in0" and "in1" are preserved for debugging purposes. |
22 | */ | 22 | */ |
23 | .section .kprobes.text,"ax" | ||
23 | GLOBAL_ENTRY(flush_icache_range) | 24 | GLOBAL_ENTRY(flush_icache_range) |
24 | 25 | ||
25 | .prologue | 26 | .prologue |
diff --git a/arch/ia64/lib/memcpy_mck.S b/arch/ia64/lib/memcpy_mck.S index 6f308e62c137..46c9331e7ab5 100644 --- a/arch/ia64/lib/memcpy_mck.S +++ b/arch/ia64/lib/memcpy_mck.S | |||
@@ -625,8 +625,11 @@ EK(.ex_handler, (p17) st8 [dst1]=r39,8); \ | |||
625 | clrrrb | 625 | clrrrb |
626 | ;; | 626 | ;; |
627 | alloc saved_pfs_stack=ar.pfs,3,3,3,0 | 627 | alloc saved_pfs_stack=ar.pfs,3,3,3,0 |
628 | cmp.lt p8,p0=A,r0 | ||
628 | sub B = dst0, saved_in0 // how many byte copied so far | 629 | sub B = dst0, saved_in0 // how many byte copied so far |
629 | ;; | 630 | ;; |
631 | (p8) mov A = 0; // A shouldn't be negative, cap it | ||
632 | ;; | ||
630 | sub C = A, B | 633 | sub C = A, B |
631 | sub D = saved_in2, A | 634 | sub D = saved_in2, A |
632 | ;; | 635 | ;; |
diff --git a/arch/ia64/lib/swiotlb.c b/arch/ia64/lib/swiotlb.c index dbc0b3e449c5..48e5ff26eb1d 100644 --- a/arch/ia64/lib/swiotlb.c +++ b/arch/ia64/lib/swiotlb.c | |||
@@ -49,6 +49,15 @@ | |||
49 | */ | 49 | */ |
50 | #define IO_TLB_SHIFT 11 | 50 | #define IO_TLB_SHIFT 11 |
51 | 51 | ||
52 | #define SLABS_PER_PAGE (1 << (PAGE_SHIFT - IO_TLB_SHIFT)) | ||
53 | |||
54 | /* | ||
55 | * Minimum IO TLB size to bother booting with. Systems with mainly | ||
56 | * 64bit capable cards will only lightly use the swiotlb. If we can't | ||
57 | * allocate a contiguous 1MB, we're probably in trouble anyway. | ||
58 | */ | ||
59 | #define IO_TLB_MIN_SLABS ((1<<20) >> IO_TLB_SHIFT) | ||
60 | |||
52 | int swiotlb_force; | 61 | int swiotlb_force; |
53 | 62 | ||
54 | /* | 63 | /* |
@@ -123,8 +132,8 @@ swiotlb_init_with_default_size (size_t default_size) | |||
123 | /* | 132 | /* |
124 | * Get IO TLB memory from the low pages | 133 | * Get IO TLB memory from the low pages |
125 | */ | 134 | */ |
126 | io_tlb_start = alloc_bootmem_low_pages(io_tlb_nslabs * | 135 | io_tlb_start = alloc_bootmem_low_pages_limit(io_tlb_nslabs * |
127 | (1 << IO_TLB_SHIFT)); | 136 | (1 << IO_TLB_SHIFT), 0x100000000); |
128 | if (!io_tlb_start) | 137 | if (!io_tlb_start) |
129 | panic("Cannot allocate SWIOTLB buffer"); | 138 | panic("Cannot allocate SWIOTLB buffer"); |
130 | io_tlb_end = io_tlb_start + io_tlb_nslabs * (1 << IO_TLB_SHIFT); | 139 | io_tlb_end = io_tlb_start + io_tlb_nslabs * (1 << IO_TLB_SHIFT); |
@@ -154,6 +163,99 @@ swiotlb_init (void) | |||
154 | swiotlb_init_with_default_size(64 * (1<<20)); /* default to 64MB */ | 163 | swiotlb_init_with_default_size(64 * (1<<20)); /* default to 64MB */ |
155 | } | 164 | } |
156 | 165 | ||
166 | /* | ||
167 | * Systems with larger DMA zones (those that don't support ISA) can | ||
168 | * initialize the swiotlb later using the slab allocator if needed. | ||
169 | * This should be just like above, but with some error catching. | ||
170 | */ | ||
171 | int | ||
172 | swiotlb_late_init_with_default_size (size_t default_size) | ||
173 | { | ||
174 | unsigned long i, req_nslabs = io_tlb_nslabs; | ||
175 | unsigned int order; | ||
176 | |||
177 | if (!io_tlb_nslabs) { | ||
178 | io_tlb_nslabs = (default_size >> IO_TLB_SHIFT); | ||
179 | io_tlb_nslabs = ALIGN(io_tlb_nslabs, IO_TLB_SEGSIZE); | ||
180 | } | ||
181 | |||
182 | /* | ||
183 | * Get IO TLB memory from the low pages | ||
184 | */ | ||
185 | order = get_order(io_tlb_nslabs * (1 << IO_TLB_SHIFT)); | ||
186 | io_tlb_nslabs = SLABS_PER_PAGE << order; | ||
187 | |||
188 | while ((SLABS_PER_PAGE << order) > IO_TLB_MIN_SLABS) { | ||
189 | io_tlb_start = (char *)__get_free_pages(GFP_DMA | __GFP_NOWARN, | ||
190 | order); | ||
191 | if (io_tlb_start) | ||
192 | break; | ||
193 | order--; | ||
194 | } | ||
195 | |||
196 | if (!io_tlb_start) | ||
197 | goto cleanup1; | ||
198 | |||
199 | if (order != get_order(io_tlb_nslabs * (1 << IO_TLB_SHIFT))) { | ||
200 | printk(KERN_WARNING "Warning: only able to allocate %ld MB " | ||
201 | "for software IO TLB\n", (PAGE_SIZE << order) >> 20); | ||
202 | io_tlb_nslabs = SLABS_PER_PAGE << order; | ||
203 | } | ||
204 | io_tlb_end = io_tlb_start + io_tlb_nslabs * (1 << IO_TLB_SHIFT); | ||
205 | memset(io_tlb_start, 0, io_tlb_nslabs * (1 << IO_TLB_SHIFT)); | ||
206 | |||
207 | /* | ||
208 | * Allocate and initialize the free list array. This array is used | ||
209 | * to find contiguous free memory regions of size up to IO_TLB_SEGSIZE | ||
210 | * between io_tlb_start and io_tlb_end. | ||
211 | */ | ||
212 | io_tlb_list = (unsigned int *)__get_free_pages(GFP_KERNEL, | ||
213 | get_order(io_tlb_nslabs * sizeof(int))); | ||
214 | if (!io_tlb_list) | ||
215 | goto cleanup2; | ||
216 | |||
217 | for (i = 0; i < io_tlb_nslabs; i++) | ||
218 | io_tlb_list[i] = IO_TLB_SEGSIZE - OFFSET(i, IO_TLB_SEGSIZE); | ||
219 | io_tlb_index = 0; | ||
220 | |||
221 | io_tlb_orig_addr = (unsigned char **)__get_free_pages(GFP_KERNEL, | ||
222 | get_order(io_tlb_nslabs * sizeof(char *))); | ||
223 | if (!io_tlb_orig_addr) | ||
224 | goto cleanup3; | ||
225 | |||
226 | memset(io_tlb_orig_addr, 0, io_tlb_nslabs * sizeof(char *)); | ||
227 | |||
228 | /* | ||
229 | * Get the overflow emergency buffer | ||
230 | */ | ||
231 | io_tlb_overflow_buffer = (void *)__get_free_pages(GFP_DMA, | ||
232 | get_order(io_tlb_overflow)); | ||
233 | if (!io_tlb_overflow_buffer) | ||
234 | goto cleanup4; | ||
235 | |||
236 | printk(KERN_INFO "Placing %ldMB software IO TLB between 0x%lx - " | ||
237 | "0x%lx\n", (io_tlb_nslabs * (1 << IO_TLB_SHIFT)) >> 20, | ||
238 | virt_to_phys(io_tlb_start), virt_to_phys(io_tlb_end)); | ||
239 | |||
240 | return 0; | ||
241 | |||
242 | cleanup4: | ||
243 | free_pages((unsigned long)io_tlb_orig_addr, get_order(io_tlb_nslabs * | ||
244 | sizeof(char *))); | ||
245 | io_tlb_orig_addr = NULL; | ||
246 | cleanup3: | ||
247 | free_pages((unsigned long)io_tlb_list, get_order(io_tlb_nslabs * | ||
248 | sizeof(int))); | ||
249 | io_tlb_list = NULL; | ||
250 | io_tlb_end = NULL; | ||
251 | cleanup2: | ||
252 | free_pages((unsigned long)io_tlb_start, order); | ||
253 | io_tlb_start = NULL; | ||
254 | cleanup1: | ||
255 | io_tlb_nslabs = req_nslabs; | ||
256 | return -ENOMEM; | ||
257 | } | ||
258 | |||
157 | static inline int | 259 | static inline int |
158 | address_needs_mapping(struct device *hwdev, dma_addr_t addr) | 260 | address_needs_mapping(struct device *hwdev, dma_addr_t addr) |
159 | { | 261 | { |
diff --git a/arch/ia64/mm/Makefile b/arch/ia64/mm/Makefile index 7078f67887ec..d78d20f0a0f0 100644 --- a/arch/ia64/mm/Makefile +++ b/arch/ia64/mm/Makefile | |||
@@ -7,6 +7,5 @@ obj-y := init.o fault.o tlb.o extable.o | |||
7 | obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o | 7 | obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o |
8 | obj-$(CONFIG_NUMA) += numa.o | 8 | obj-$(CONFIG_NUMA) += numa.o |
9 | obj-$(CONFIG_DISCONTIGMEM) += discontig.o | 9 | obj-$(CONFIG_DISCONTIGMEM) += discontig.o |
10 | ifndef CONFIG_DISCONTIGMEM | 10 | obj-$(CONFIG_SPARSEMEM) += discontig.o |
11 | obj-y += contig.o | 11 | obj-$(CONFIG_FLATMEM) += contig.o |
12 | endif | ||
diff --git a/arch/ia64/mm/contig.c b/arch/ia64/mm/contig.c index 91a055f5731f..acaaec4e4681 100644 --- a/arch/ia64/mm/contig.c +++ b/arch/ia64/mm/contig.c | |||
@@ -269,7 +269,7 @@ paging_init (void) | |||
269 | efi_memmap_walk(find_largest_hole, (u64 *)&max_gap); | 269 | efi_memmap_walk(find_largest_hole, (u64 *)&max_gap); |
270 | if (max_gap < LARGE_GAP) { | 270 | if (max_gap < LARGE_GAP) { |
271 | vmem_map = (struct page *) 0; | 271 | vmem_map = (struct page *) 0; |
272 | free_area_init_node(0, &contig_page_data, zones_size, 0, | 272 | free_area_init_node(0, NODE_DATA(0), zones_size, 0, |
273 | zholes_size); | 273 | zholes_size); |
274 | } else { | 274 | } else { |
275 | unsigned long map_size; | 275 | unsigned long map_size; |
@@ -282,7 +282,7 @@ paging_init (void) | |||
282 | efi_memmap_walk(create_mem_map_page_table, NULL); | 282 | efi_memmap_walk(create_mem_map_page_table, NULL); |
283 | 283 | ||
284 | NODE_DATA(0)->node_mem_map = vmem_map; | 284 | NODE_DATA(0)->node_mem_map = vmem_map; |
285 | free_area_init_node(0, &contig_page_data, zones_size, | 285 | free_area_init_node(0, NODE_DATA(0), zones_size, |
286 | 0, zholes_size); | 286 | 0, zholes_size); |
287 | 287 | ||
288 | printk("Virtual mem_map starts at 0x%p\n", mem_map); | 288 | printk("Virtual mem_map starts at 0x%p\n", mem_map); |
diff --git a/arch/ia64/mm/discontig.c b/arch/ia64/mm/discontig.c index b5c90e548195..a3788fb84809 100644 --- a/arch/ia64/mm/discontig.c +++ b/arch/ia64/mm/discontig.c | |||
@@ -421,6 +421,37 @@ static void __init memory_less_nodes(void) | |||
421 | return; | 421 | return; |
422 | } | 422 | } |
423 | 423 | ||
424 | #ifdef CONFIG_SPARSEMEM | ||
425 | /** | ||
426 | * register_sparse_mem - notify SPARSEMEM that this memory range exists. | ||
427 | * @start: physical start of range | ||
428 | * @end: physical end of range | ||
429 | * @arg: unused | ||
430 | * | ||
431 | * Simply calls SPARSEMEM to register memory section(s). | ||
432 | */ | ||
433 | static int __init register_sparse_mem(unsigned long start, unsigned long end, | ||
434 | void *arg) | ||
435 | { | ||
436 | int nid; | ||
437 | |||
438 | start = __pa(start) >> PAGE_SHIFT; | ||
439 | end = __pa(end) >> PAGE_SHIFT; | ||
440 | nid = early_pfn_to_nid(start); | ||
441 | memory_present(nid, start, end); | ||
442 | |||
443 | return 0; | ||
444 | } | ||
445 | |||
446 | static void __init arch_sparse_init(void) | ||
447 | { | ||
448 | efi_memmap_walk(register_sparse_mem, NULL); | ||
449 | sparse_init(); | ||
450 | } | ||
451 | #else | ||
452 | #define arch_sparse_init() do {} while (0) | ||
453 | #endif | ||
454 | |||
424 | /** | 455 | /** |
425 | * find_memory - walk the EFI memory map and setup the bootmem allocator | 456 | * find_memory - walk the EFI memory map and setup the bootmem allocator |
426 | * | 457 | * |
@@ -528,8 +559,10 @@ void show_mem(void) | |||
528 | int shared = 0, cached = 0, reserved = 0; | 559 | int shared = 0, cached = 0, reserved = 0; |
529 | printk("Node ID: %d\n", pgdat->node_id); | 560 | printk("Node ID: %d\n", pgdat->node_id); |
530 | for(i = 0; i < pgdat->node_spanned_pages; i++) { | 561 | for(i = 0; i < pgdat->node_spanned_pages; i++) { |
531 | struct page *page = pgdat_page_nr(pgdat, i); | 562 | struct page *page; |
532 | if (!ia64_pfn_valid(pgdat->node_start_pfn+i)) | 563 | if (pfn_valid(pgdat->node_start_pfn + i)) |
564 | page = pfn_to_page(pgdat->node_start_pfn + i); | ||
565 | else | ||
533 | continue; | 566 | continue; |
534 | if (PageReserved(page)) | 567 | if (PageReserved(page)) |
535 | reserved++; | 568 | reserved++; |
@@ -648,12 +681,16 @@ void __init paging_init(void) | |||
648 | 681 | ||
649 | max_dma = virt_to_phys((void *) MAX_DMA_ADDRESS) >> PAGE_SHIFT; | 682 | max_dma = virt_to_phys((void *) MAX_DMA_ADDRESS) >> PAGE_SHIFT; |
650 | 683 | ||
684 | arch_sparse_init(); | ||
685 | |||
651 | efi_memmap_walk(filter_rsvd_memory, count_node_pages); | 686 | efi_memmap_walk(filter_rsvd_memory, count_node_pages); |
652 | 687 | ||
688 | #ifdef CONFIG_VIRTUAL_MEM_MAP | ||
653 | vmalloc_end -= PAGE_ALIGN(max_low_pfn * sizeof(struct page)); | 689 | vmalloc_end -= PAGE_ALIGN(max_low_pfn * sizeof(struct page)); |
654 | vmem_map = (struct page *) vmalloc_end; | 690 | vmem_map = (struct page *) vmalloc_end; |
655 | efi_memmap_walk(create_mem_map_page_table, NULL); | 691 | efi_memmap_walk(create_mem_map_page_table, NULL); |
656 | printk("Virtual mem_map starts at 0x%p\n", vmem_map); | 692 | printk("Virtual mem_map starts at 0x%p\n", vmem_map); |
693 | #endif | ||
657 | 694 | ||
658 | for_each_online_node(node) { | 695 | for_each_online_node(node) { |
659 | memset(zones_size, 0, sizeof(zones_size)); | 696 | memset(zones_size, 0, sizeof(zones_size)); |
@@ -690,7 +727,9 @@ void __init paging_init(void) | |||
690 | 727 | ||
691 | pfn_offset = mem_data[node].min_pfn; | 728 | pfn_offset = mem_data[node].min_pfn; |
692 | 729 | ||
730 | #ifdef CONFIG_VIRTUAL_MEM_MAP | ||
693 | NODE_DATA(node)->node_mem_map = vmem_map + pfn_offset; | 731 | NODE_DATA(node)->node_mem_map = vmem_map + pfn_offset; |
732 | #endif | ||
694 | free_area_init_node(node, NODE_DATA(node), zones_size, | 733 | free_area_init_node(node, NODE_DATA(node), zones_size, |
695 | pfn_offset, zholes_size); | 734 | pfn_offset, zholes_size); |
696 | } | 735 | } |
diff --git a/arch/ia64/mm/fault.c b/arch/ia64/mm/fault.c index ff62551eb3a1..3c32af910d60 100644 --- a/arch/ia64/mm/fault.c +++ b/arch/ia64/mm/fault.c | |||
@@ -9,6 +9,7 @@ | |||
9 | #include <linux/mm.h> | 9 | #include <linux/mm.h> |
10 | #include <linux/smp_lock.h> | 10 | #include <linux/smp_lock.h> |
11 | #include <linux/interrupt.h> | 11 | #include <linux/interrupt.h> |
12 | #include <linux/kprobes.h> | ||
12 | 13 | ||
13 | #include <asm/pgtable.h> | 14 | #include <asm/pgtable.h> |
14 | #include <asm/processor.h> | 15 | #include <asm/processor.h> |
@@ -76,7 +77,7 @@ mapped_kernel_page_is_present (unsigned long address) | |||
76 | return pte_present(pte); | 77 | return pte_present(pte); |
77 | } | 78 | } |
78 | 79 | ||
79 | void | 80 | void __kprobes |
80 | ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_regs *regs) | 81 | ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_regs *regs) |
81 | { | 82 | { |
82 | int signal = SIGSEGV, code = SEGV_MAPERR; | 83 | int signal = SIGSEGV, code = SEGV_MAPERR; |
@@ -229,9 +230,6 @@ ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_regs *re | |||
229 | return; | 230 | return; |
230 | } | 231 | } |
231 | 232 | ||
232 | if (ia64_done_with_exception(regs)) | ||
233 | return; | ||
234 | |||
235 | /* | 233 | /* |
236 | * Since we have no vma's for region 5, we might get here even if the address is | 234 | * Since we have no vma's for region 5, we might get here even if the address is |
237 | * valid, due to the VHPT walker inserting a non present translation that becomes | 235 | * valid, due to the VHPT walker inserting a non present translation that becomes |
@@ -242,6 +240,9 @@ ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_regs *re | |||
242 | if (REGION_NUMBER(address) == 5 && mapped_kernel_page_is_present(address)) | 240 | if (REGION_NUMBER(address) == 5 && mapped_kernel_page_is_present(address)) |
243 | return; | 241 | return; |
244 | 242 | ||
243 | if (ia64_done_with_exception(regs)) | ||
244 | return; | ||
245 | |||
245 | /* | 246 | /* |
246 | * Oops. The kernel tried to access some bad page. We'll have to terminate things | 247 | * Oops. The kernel tried to access some bad page. We'll have to terminate things |
247 | * with extreme prejudice. | 248 | * with extreme prejudice. |
diff --git a/arch/ia64/mm/init.c b/arch/ia64/mm/init.c index 65f9958db9f0..98246acd4991 100644 --- a/arch/ia64/mm/init.c +++ b/arch/ia64/mm/init.c | |||
@@ -382,13 +382,22 @@ ia64_mmu_init (void *my_cpu_data) | |||
382 | 382 | ||
383 | if (impl_va_bits < 51 || impl_va_bits > 61) | 383 | if (impl_va_bits < 51 || impl_va_bits > 61) |
384 | panic("CPU has bogus IMPL_VA_MSB value of %lu!\n", impl_va_bits - 1); | 384 | panic("CPU has bogus IMPL_VA_MSB value of %lu!\n", impl_va_bits - 1); |
385 | /* | ||
386 | * mapped_space_bits - PAGE_SHIFT is the total number of ptes we need, | ||
387 | * which must fit into "vmlpt_bits - pte_bits" slots. Second half of | ||
388 | * the test makes sure that our mapped space doesn't overlap the | ||
389 | * unimplemented hole in the middle of the region. | ||
390 | */ | ||
391 | if ((mapped_space_bits - PAGE_SHIFT > vmlpt_bits - pte_bits) || | ||
392 | (mapped_space_bits > impl_va_bits - 1)) | ||
393 | panic("Cannot build a big enough virtual-linear page table" | ||
394 | " to cover mapped address space.\n" | ||
395 | " Try using a smaller page size.\n"); | ||
396 | |||
385 | 397 | ||
386 | /* place the VMLPT at the end of each page-table mapped region: */ | 398 | /* place the VMLPT at the end of each page-table mapped region: */ |
387 | pta = POW2(61) - POW2(vmlpt_bits); | 399 | pta = POW2(61) - POW2(vmlpt_bits); |
388 | 400 | ||
389 | if (POW2(mapped_space_bits) >= pta) | ||
390 | panic("mm/init: overlap between virtually mapped linear page table and " | ||
391 | "mapped kernel space!"); | ||
392 | /* | 401 | /* |
393 | * Set the (virtually mapped linear) page table address. Bit | 402 | * Set the (virtually mapped linear) page table address. Bit |
394 | * 8 selects between the short and long format, bits 2-7 the | 403 | * 8 selects between the short and long format, bits 2-7 the |
@@ -584,7 +593,7 @@ mem_init (void) | |||
584 | platform_dma_init(); | 593 | platform_dma_init(); |
585 | #endif | 594 | #endif |
586 | 595 | ||
587 | #ifndef CONFIG_DISCONTIGMEM | 596 | #ifdef CONFIG_FLATMEM |
588 | if (!mem_map) | 597 | if (!mem_map) |
589 | BUG(); | 598 | BUG(); |
590 | max_mapnr = max_low_pfn; | 599 | max_mapnr = max_low_pfn; |
diff --git a/arch/ia64/mm/numa.c b/arch/ia64/mm/numa.c index 77118bbf3d8b..4e5c8b36ad93 100644 --- a/arch/ia64/mm/numa.c +++ b/arch/ia64/mm/numa.c | |||
@@ -47,3 +47,27 @@ paddr_to_nid(unsigned long paddr) | |||
47 | 47 | ||
48 | return (i < num_node_memblks) ? node_memblk[i].nid : (num_node_memblks ? -1 : 0); | 48 | return (i < num_node_memblks) ? node_memblk[i].nid : (num_node_memblks ? -1 : 0); |
49 | } | 49 | } |
50 | |||
51 | #if defined(CONFIG_SPARSEMEM) && defined(CONFIG_NUMA) | ||
52 | /* | ||
53 | * Because of holes evaluate on section limits. | ||
54 | * If the section of memory exists, then return the node where the section | ||
55 | * resides. Otherwise return node 0 as the default. This is used by | ||
56 | * SPARSEMEM to allocate the SPARSEMEM sectionmap on the NUMA node where | ||
57 | * the section resides. | ||
58 | */ | ||
59 | int early_pfn_to_nid(unsigned long pfn) | ||
60 | { | ||
61 | int i, section = pfn >> PFN_SECTION_SHIFT, ssec, esec; | ||
62 | |||
63 | for (i = 0; i < num_node_memblks; i++) { | ||
64 | ssec = node_memblk[i].start_paddr >> PA_SECTION_SHIFT; | ||
65 | esec = (node_memblk[i].start_paddr + node_memblk[i].size + | ||
66 | ((1L << PA_SECTION_SHIFT) - 1)) >> PA_SECTION_SHIFT; | ||
67 | if (section >= ssec && section < esec) | ||
68 | return node_memblk[i].nid; | ||
69 | } | ||
70 | |||
71 | return 0; | ||
72 | } | ||
73 | #endif | ||
diff --git a/arch/ia64/mm/tlb.c b/arch/ia64/mm/tlb.c index 464557e4ed82..987fb754d6ad 100644 --- a/arch/ia64/mm/tlb.c +++ b/arch/ia64/mm/tlb.c | |||
@@ -77,9 +77,10 @@ wrap_mmu_context (struct mm_struct *mm) | |||
77 | /* can't call flush_tlb_all() here because of race condition with O(1) scheduler [EF] */ | 77 | /* can't call flush_tlb_all() here because of race condition with O(1) scheduler [EF] */ |
78 | { | 78 | { |
79 | int cpu = get_cpu(); /* prevent preemption/migration */ | 79 | int cpu = get_cpu(); /* prevent preemption/migration */ |
80 | for (i = 0; i < NR_CPUS; ++i) | 80 | for_each_online_cpu(i) { |
81 | if (cpu_online(i) && (i != cpu)) | 81 | if (i != cpu) |
82 | per_cpu(ia64_need_tlb_flush, i) = 1; | 82 | per_cpu(ia64_need_tlb_flush, i) = 1; |
83 | } | ||
83 | put_cpu(); | 84 | put_cpu(); |
84 | } | 85 | } |
85 | local_flush_tlb_all(); | 86 | local_flush_tlb_all(); |
diff --git a/arch/ia64/pci/pci.c b/arch/ia64/pci/pci.c index 9977c122e9fa..017cfc3f4789 100644 --- a/arch/ia64/pci/pci.c +++ b/arch/ia64/pci/pci.c | |||
@@ -120,29 +120,6 @@ struct pci_ops pci_root_ops = { | |||
120 | .write = pci_write, | 120 | .write = pci_write, |
121 | }; | 121 | }; |
122 | 122 | ||
123 | #ifdef CONFIG_NUMA | ||
124 | extern acpi_status acpi_map_iosapic(acpi_handle, u32, void *, void **); | ||
125 | static void acpi_map_iosapics(void) | ||
126 | { | ||
127 | acpi_get_devices(NULL, acpi_map_iosapic, NULL, NULL); | ||
128 | } | ||
129 | #else | ||
130 | static void acpi_map_iosapics(void) | ||
131 | { | ||
132 | return; | ||
133 | } | ||
134 | #endif /* CONFIG_NUMA */ | ||
135 | |||
136 | static int __init | ||
137 | pci_acpi_init (void) | ||
138 | { | ||
139 | acpi_map_iosapics(); | ||
140 | |||
141 | return 0; | ||
142 | } | ||
143 | |||
144 | subsys_initcall(pci_acpi_init); | ||
145 | |||
146 | /* Called by ACPI when it finds a new root bus. */ | 123 | /* Called by ACPI when it finds a new root bus. */ |
147 | 124 | ||
148 | static struct pci_controller * __devinit | 125 | static struct pci_controller * __devinit |
@@ -191,6 +168,29 @@ add_io_space (struct acpi_resource_address64 *addr) | |||
191 | return IO_SPACE_BASE(i); | 168 | return IO_SPACE_BASE(i); |
192 | } | 169 | } |
193 | 170 | ||
171 | static acpi_status __devinit resource_to_window(struct acpi_resource *resource, | ||
172 | struct acpi_resource_address64 *addr) | ||
173 | { | ||
174 | acpi_status status; | ||
175 | |||
176 | /* | ||
177 | * We're only interested in _CRS descriptors that are | ||
178 | * - address space descriptors for memory or I/O space | ||
179 | * - non-zero size | ||
180 | * - producers, i.e., the address space is routed downstream, | ||
181 | * not consumed by the bridge itself | ||
182 | */ | ||
183 | status = acpi_resource_to_address64(resource, addr); | ||
184 | if (ACPI_SUCCESS(status) && | ||
185 | (addr->resource_type == ACPI_MEMORY_RANGE || | ||
186 | addr->resource_type == ACPI_IO_RANGE) && | ||
187 | addr->address_length && | ||
188 | addr->producer_consumer == ACPI_PRODUCER) | ||
189 | return AE_OK; | ||
190 | |||
191 | return AE_ERROR; | ||
192 | } | ||
193 | |||
194 | static acpi_status __devinit | 194 | static acpi_status __devinit |
195 | count_window (struct acpi_resource *resource, void *data) | 195 | count_window (struct acpi_resource *resource, void *data) |
196 | { | 196 | { |
@@ -198,11 +198,9 @@ count_window (struct acpi_resource *resource, void *data) | |||
198 | struct acpi_resource_address64 addr; | 198 | struct acpi_resource_address64 addr; |
199 | acpi_status status; | 199 | acpi_status status; |
200 | 200 | ||
201 | status = acpi_resource_to_address64(resource, &addr); | 201 | status = resource_to_window(resource, &addr); |
202 | if (ACPI_SUCCESS(status)) | 202 | if (ACPI_SUCCESS(status)) |
203 | if (addr.resource_type == ACPI_MEMORY_RANGE || | 203 | (*windows)++; |
204 | addr.resource_type == ACPI_IO_RANGE) | ||
205 | (*windows)++; | ||
206 | 204 | ||
207 | return AE_OK; | 205 | return AE_OK; |
208 | } | 206 | } |
@@ -221,13 +219,11 @@ static __devinit acpi_status add_window(struct acpi_resource *res, void *data) | |||
221 | unsigned long flags, offset = 0; | 219 | unsigned long flags, offset = 0; |
222 | struct resource *root; | 220 | struct resource *root; |
223 | 221 | ||
224 | status = acpi_resource_to_address64(res, &addr); | 222 | /* Return AE_OK for non-window resources to keep scanning for more */ |
223 | status = resource_to_window(res, &addr); | ||
225 | if (!ACPI_SUCCESS(status)) | 224 | if (!ACPI_SUCCESS(status)) |
226 | return AE_OK; | 225 | return AE_OK; |
227 | 226 | ||
228 | if (!addr.address_length) | ||
229 | return AE_OK; | ||
230 | |||
231 | if (addr.resource_type == ACPI_MEMORY_RANGE) { | 227 | if (addr.resource_type == ACPI_MEMORY_RANGE) { |
232 | flags = IORESOURCE_MEM; | 228 | flags = IORESOURCE_MEM; |
233 | root = &iomem_resource; | 229 | root = &iomem_resource; |
@@ -498,13 +494,11 @@ pcibios_enable_device (struct pci_dev *dev, int mask) | |||
498 | return acpi_pci_irq_enable(dev); | 494 | return acpi_pci_irq_enable(dev); |
499 | } | 495 | } |
500 | 496 | ||
501 | #ifdef CONFIG_ACPI_DEALLOCATE_IRQ | ||
502 | void | 497 | void |
503 | pcibios_disable_device (struct pci_dev *dev) | 498 | pcibios_disable_device (struct pci_dev *dev) |
504 | { | 499 | { |
505 | acpi_pci_irq_disable(dev); | 500 | acpi_pci_irq_disable(dev); |
506 | } | 501 | } |
507 | #endif /* CONFIG_ACPI_DEALLOCATE_IRQ */ | ||
508 | 502 | ||
509 | void | 503 | void |
510 | pcibios_align_resource (void *data, struct resource *res, | 504 | pcibios_align_resource (void *data, struct resource *res, |
diff --git a/arch/ia64/sn/kernel/io_init.c b/arch/ia64/sn/kernel/io_init.c index 4564ed0b5ff3..b4f5053f5e1b 100644 --- a/arch/ia64/sn/kernel/io_init.c +++ b/arch/ia64/sn/kernel/io_init.c | |||
@@ -22,8 +22,6 @@ | |||
22 | #include "xtalk/hubdev.h" | 22 | #include "xtalk/hubdev.h" |
23 | #include "xtalk/xwidgetdev.h" | 23 | #include "xtalk/xwidgetdev.h" |
24 | 24 | ||
25 | nasid_t master_nasid = INVALID_NASID; /* Partition Master */ | ||
26 | |||
27 | static struct list_head sn_sysdata_list; | 25 | static struct list_head sn_sysdata_list; |
28 | 26 | ||
29 | /* sysdata list struct */ | 27 | /* sysdata list struct */ |
@@ -165,7 +163,7 @@ static void sn_fixup_ionodes(void) | |||
165 | * Get SGI Specific HUB chipset information. | 163 | * Get SGI Specific HUB chipset information. |
166 | * Inform Prom that this kernel can support domain bus numbering. | 164 | * Inform Prom that this kernel can support domain bus numbering. |
167 | */ | 165 | */ |
168 | for (i = 0; i < numionodes; i++) { | 166 | for (i = 0; i < num_cnodes; i++) { |
169 | hubdev = (struct hubdev_info *)(NODEPDA(i)->pdinfo); | 167 | hubdev = (struct hubdev_info *)(NODEPDA(i)->pdinfo); |
170 | nasid = cnodeid_to_nasid(i); | 168 | nasid = cnodeid_to_nasid(i); |
171 | hubdev->max_segment_number = 0xffffffff; | 169 | hubdev->max_segment_number = 0xffffffff; |
@@ -431,7 +429,7 @@ void sn_bus_store_sysdata(struct pci_dev *dev) | |||
431 | { | 429 | { |
432 | struct sysdata_el *element; | 430 | struct sysdata_el *element; |
433 | 431 | ||
434 | element = kcalloc(1, sizeof(struct sysdata_el), GFP_KERNEL); | 432 | element = kzalloc(sizeof(struct sysdata_el), GFP_KERNEL); |
435 | if (!element) { | 433 | if (!element) { |
436 | dev_dbg(dev, "%s: out of memory!\n", __FUNCTION__); | 434 | dev_dbg(dev, "%s: out of memory!\n", __FUNCTION__); |
437 | return; | 435 | return; |
diff --git a/arch/ia64/sn/kernel/irq.c b/arch/ia64/sn/kernel/irq.c index 9fc74631ba8a..01d18b7b5bb3 100644 --- a/arch/ia64/sn/kernel/irq.c +++ b/arch/ia64/sn/kernel/irq.c | |||
@@ -23,7 +23,7 @@ static void force_interrupt(int irq); | |||
23 | static void register_intr_pda(struct sn_irq_info *sn_irq_info); | 23 | static void register_intr_pda(struct sn_irq_info *sn_irq_info); |
24 | static void unregister_intr_pda(struct sn_irq_info *sn_irq_info); | 24 | static void unregister_intr_pda(struct sn_irq_info *sn_irq_info); |
25 | 25 | ||
26 | extern int sn_force_interrupt_flag; | 26 | int sn_force_interrupt_flag = 1; |
27 | extern int sn_ioif_inited; | 27 | extern int sn_ioif_inited; |
28 | static struct list_head **sn_irq_lh; | 28 | static struct list_head **sn_irq_lh; |
29 | static spinlock_t sn_irq_info_lock = SPIN_LOCK_UNLOCKED; /* non-IRQ lock */ | 29 | static spinlock_t sn_irq_info_lock = SPIN_LOCK_UNLOCKED; /* non-IRQ lock */ |
diff --git a/arch/ia64/sn/kernel/setup.c b/arch/ia64/sn/kernel/setup.c index a594aca959e6..0fb579ef18c2 100644 --- a/arch/ia64/sn/kernel/setup.c +++ b/arch/ia64/sn/kernel/setup.c | |||
@@ -49,6 +49,7 @@ | |||
49 | #include <asm/sn/clksupport.h> | 49 | #include <asm/sn/clksupport.h> |
50 | #include <asm/sn/sn_sal.h> | 50 | #include <asm/sn/sn_sal.h> |
51 | #include <asm/sn/geo.h> | 51 | #include <asm/sn/geo.h> |
52 | #include <asm/sn/sn_feature_sets.h> | ||
52 | #include "xtalk/xwidgetdev.h" | 53 | #include "xtalk/xwidgetdev.h" |
53 | #include "xtalk/hubdev.h" | 54 | #include "xtalk/hubdev.h" |
54 | #include <asm/sn/klconfig.h> | 55 | #include <asm/sn/klconfig.h> |
@@ -56,9 +57,7 @@ | |||
56 | 57 | ||
57 | DEFINE_PER_CPU(struct pda_s, pda_percpu); | 58 | DEFINE_PER_CPU(struct pda_s, pda_percpu); |
58 | 59 | ||
59 | #define MAX_PHYS_MEMORY (1UL << 49) /* 1 TB */ | 60 | #define MAX_PHYS_MEMORY (1UL << IA64_MAX_PHYS_BITS) /* Max physical address supported */ |
60 | |||
61 | lboard_t *root_lboard[MAX_COMPACT_NODES]; | ||
62 | 61 | ||
63 | extern void bte_init_node(nodepda_t *, cnodeid_t); | 62 | extern void bte_init_node(nodepda_t *, cnodeid_t); |
64 | 63 | ||
@@ -96,14 +95,15 @@ u8 sn_region_size; | |||
96 | EXPORT_SYMBOL(sn_region_size); | 95 | EXPORT_SYMBOL(sn_region_size); |
97 | int sn_prom_type; /* 0=hardware, 1=medusa/realprom, 2=medusa/fakeprom */ | 96 | int sn_prom_type; /* 0=hardware, 1=medusa/realprom, 2=medusa/fakeprom */ |
98 | 97 | ||
99 | short physical_node_map[MAX_PHYSNODE_ID]; | 98 | short physical_node_map[MAX_NUMALINK_NODES]; |
99 | static unsigned long sn_prom_features[MAX_PROM_FEATURE_SETS]; | ||
100 | 100 | ||
101 | EXPORT_SYMBOL(physical_node_map); | 101 | EXPORT_SYMBOL(physical_node_map); |
102 | 102 | ||
103 | int numionodes; | 103 | int num_cnodes; |
104 | 104 | ||
105 | static void sn_init_pdas(char **); | 105 | static void sn_init_pdas(char **); |
106 | static void scan_for_ionodes(void); | 106 | static void build_cnode_tables(void); |
107 | 107 | ||
108 | static nodepda_t *nodepdaindr[MAX_COMPACT_NODES]; | 108 | static nodepda_t *nodepdaindr[MAX_COMPACT_NODES]; |
109 | 109 | ||
@@ -138,19 +138,6 @@ char drive_info[4 * 16]; | |||
138 | #endif | 138 | #endif |
139 | 139 | ||
140 | /* | 140 | /* |
141 | * Get nasid of current cpu early in boot before nodepda is initialized | ||
142 | */ | ||
143 | static int | ||
144 | boot_get_nasid(void) | ||
145 | { | ||
146 | int nasid; | ||
147 | |||
148 | if (ia64_sn_get_sapic_info(get_sapicid(), &nasid, NULL, NULL)) | ||
149 | BUG(); | ||
150 | return nasid; | ||
151 | } | ||
152 | |||
153 | /* | ||
154 | * This routine can only be used during init, since | 141 | * This routine can only be used during init, since |
155 | * smp_boot_data is an init data structure. | 142 | * smp_boot_data is an init data structure. |
156 | * We have to use smp_boot_data.cpu_phys_id to find | 143 | * We have to use smp_boot_data.cpu_phys_id to find |
@@ -221,7 +208,6 @@ void __init early_sn_setup(void) | |||
221 | } | 208 | } |
222 | 209 | ||
223 | extern int platform_intr_list[]; | 210 | extern int platform_intr_list[]; |
224 | extern nasid_t master_nasid; | ||
225 | static int __initdata shub_1_1_found = 0; | 211 | static int __initdata shub_1_1_found = 0; |
226 | 212 | ||
227 | /* | 213 | /* |
@@ -267,11 +253,13 @@ static void __init sn_check_for_wars(void) | |||
267 | void __init sn_setup(char **cmdline_p) | 253 | void __init sn_setup(char **cmdline_p) |
268 | { | 254 | { |
269 | long status, ticks_per_sec, drift; | 255 | long status, ticks_per_sec, drift; |
270 | int pxm; | ||
271 | u32 version = sn_sal_rev(); | 256 | u32 version = sn_sal_rev(); |
272 | extern void sn_cpu_init(void); | 257 | extern void sn_cpu_init(void); |
273 | 258 | ||
274 | ia64_sn_plat_set_error_handling_features(); | 259 | ia64_sn_plat_set_error_handling_features(); // obsolete |
260 | ia64_sn_set_os_feature(OSF_MCA_SLV_TO_OS_INIT_SLV); | ||
261 | ia64_sn_set_os_feature(OSF_FEAT_LOG_SBES); | ||
262 | |||
275 | 263 | ||
276 | #if defined(CONFIG_VT) && defined(CONFIG_VGA_CONSOLE) | 264 | #if defined(CONFIG_VT) && defined(CONFIG_VGA_CONSOLE) |
277 | /* | 265 | /* |
@@ -295,11 +283,10 @@ void __init sn_setup(char **cmdline_p) | |||
295 | 283 | ||
296 | MAX_DMA_ADDRESS = PAGE_OFFSET + MAX_PHYS_MEMORY; | 284 | MAX_DMA_ADDRESS = PAGE_OFFSET + MAX_PHYS_MEMORY; |
297 | 285 | ||
298 | memset(physical_node_map, -1, sizeof(physical_node_map)); | 286 | /* |
299 | for (pxm = 0; pxm < MAX_PXM_DOMAINS; pxm++) | 287 | * Build the tables for managing cnodes. |
300 | if (pxm_to_nid_map[pxm] != -1) | 288 | */ |
301 | physical_node_map[pxm_to_nasid(pxm)] = | 289 | build_cnode_tables(); |
302 | pxm_to_nid_map[pxm]; | ||
303 | 290 | ||
304 | /* | 291 | /* |
305 | * Old PROMs do not provide an ACPI FADT. Disable legacy keyboard | 292 | * Old PROMs do not provide an ACPI FADT. Disable legacy keyboard |
@@ -314,18 +301,6 @@ void __init sn_setup(char **cmdline_p) | |||
314 | 301 | ||
315 | printk("SGI SAL version %x.%02x\n", version >> 8, version & 0x00FF); | 302 | printk("SGI SAL version %x.%02x\n", version >> 8, version & 0x00FF); |
316 | 303 | ||
317 | /* | ||
318 | * Confirm the SAL we're running on is recent enough... | ||
319 | */ | ||
320 | if (version < SN_SAL_MIN_VERSION) { | ||
321 | printk(KERN_ERR "This kernel needs SGI SAL version >= " | ||
322 | "%x.%02x\n", SN_SAL_MIN_VERSION >> 8, | ||
323 | SN_SAL_MIN_VERSION & 0x00FF); | ||
324 | panic("PROM version too old\n"); | ||
325 | } | ||
326 | |||
327 | master_nasid = boot_get_nasid(); | ||
328 | |||
329 | status = | 304 | status = |
330 | ia64_sal_freq_base(SAL_FREQ_BASE_REALTIME_CLOCK, &ticks_per_sec, | 305 | ia64_sal_freq_base(SAL_FREQ_BASE_REALTIME_CLOCK, &ticks_per_sec, |
331 | &drift); | 306 | &drift); |
@@ -383,15 +358,6 @@ static void __init sn_init_pdas(char **cmdline_p) | |||
383 | { | 358 | { |
384 | cnodeid_t cnode; | 359 | cnodeid_t cnode; |
385 | 360 | ||
386 | memset(sn_cnodeid_to_nasid, -1, | ||
387 | sizeof(__ia64_per_cpu_var(__sn_cnodeid_to_nasid))); | ||
388 | for_each_online_node(cnode) | ||
389 | sn_cnodeid_to_nasid[cnode] = | ||
390 | pxm_to_nasid(nid_to_pxm_map[cnode]); | ||
391 | |||
392 | numionodes = num_online_nodes(); | ||
393 | scan_for_ionodes(); | ||
394 | |||
395 | /* | 361 | /* |
396 | * Allocate & initalize the nodepda for each node. | 362 | * Allocate & initalize the nodepda for each node. |
397 | */ | 363 | */ |
@@ -407,7 +373,7 @@ static void __init sn_init_pdas(char **cmdline_p) | |||
407 | /* | 373 | /* |
408 | * Allocate & initialize nodepda for TIOs. For now, put them on node 0. | 374 | * Allocate & initialize nodepda for TIOs. For now, put them on node 0. |
409 | */ | 375 | */ |
410 | for (cnode = num_online_nodes(); cnode < numionodes; cnode++) { | 376 | for (cnode = num_online_nodes(); cnode < num_cnodes; cnode++) { |
411 | nodepdaindr[cnode] = | 377 | nodepdaindr[cnode] = |
412 | alloc_bootmem_node(NODE_DATA(0), sizeof(nodepda_t)); | 378 | alloc_bootmem_node(NODE_DATA(0), sizeof(nodepda_t)); |
413 | memset(nodepdaindr[cnode], 0, sizeof(nodepda_t)); | 379 | memset(nodepdaindr[cnode], 0, sizeof(nodepda_t)); |
@@ -416,7 +382,7 @@ static void __init sn_init_pdas(char **cmdline_p) | |||
416 | /* | 382 | /* |
417 | * Now copy the array of nodepda pointers to each nodepda. | 383 | * Now copy the array of nodepda pointers to each nodepda. |
418 | */ | 384 | */ |
419 | for (cnode = 0; cnode < numionodes; cnode++) | 385 | for (cnode = 0; cnode < num_cnodes; cnode++) |
420 | memcpy(nodepdaindr[cnode]->pernode_pdaindr, nodepdaindr, | 386 | memcpy(nodepdaindr[cnode]->pernode_pdaindr, nodepdaindr, |
421 | sizeof(nodepdaindr)); | 387 | sizeof(nodepdaindr)); |
422 | 388 | ||
@@ -433,7 +399,7 @@ static void __init sn_init_pdas(char **cmdline_p) | |||
433 | * Initialize the per node hubdev. This includes IO Nodes and | 399 | * Initialize the per node hubdev. This includes IO Nodes and |
434 | * headless/memless nodes. | 400 | * headless/memless nodes. |
435 | */ | 401 | */ |
436 | for (cnode = 0; cnode < numionodes; cnode++) { | 402 | for (cnode = 0; cnode < num_cnodes; cnode++) { |
437 | hubdev_init_node(nodepdaindr[cnode], cnode); | 403 | hubdev_init_node(nodepdaindr[cnode], cnode); |
438 | } | 404 | } |
439 | } | 405 | } |
@@ -480,6 +446,10 @@ void __init sn_cpu_init(void) | |||
480 | if (nodepdaindr[0] == NULL) | 446 | if (nodepdaindr[0] == NULL) |
481 | return; | 447 | return; |
482 | 448 | ||
449 | for (i = 0; i < MAX_PROM_FEATURE_SETS; i++) | ||
450 | if (ia64_sn_get_prom_feature_set(i, &sn_prom_features[i]) != 0) | ||
451 | break; | ||
452 | |||
483 | cpuid = smp_processor_id(); | 453 | cpuid = smp_processor_id(); |
484 | cpuphyid = get_sapicid(); | 454 | cpuphyid = get_sapicid(); |
485 | 455 | ||
@@ -554,87 +524,58 @@ void __init sn_cpu_init(void) | |||
554 | } | 524 | } |
555 | 525 | ||
556 | /* | 526 | /* |
557 | * Scan klconfig for ionodes. Add the nasids to the | 527 | * Build tables for converting between NASIDs and cnodes. |
558 | * physical_node_map and the pda and increment numionodes. | ||
559 | */ | 528 | */ |
529 | static inline int __init board_needs_cnode(int type) | ||
530 | { | ||
531 | return (type == KLTYPE_SNIA || type == KLTYPE_TIO); | ||
532 | } | ||
560 | 533 | ||
561 | static void __init scan_for_ionodes(void) | 534 | void __init build_cnode_tables(void) |
562 | { | 535 | { |
563 | int nasid = 0; | 536 | int nasid; |
537 | int node; | ||
564 | lboard_t *brd; | 538 | lboard_t *brd; |
565 | 539 | ||
566 | /* fakeprom does not support klgraph */ | 540 | memset(physical_node_map, -1, sizeof(physical_node_map)); |
567 | if (IS_RUNNING_ON_FAKE_PROM()) | 541 | memset(sn_cnodeid_to_nasid, -1, |
568 | return; | 542 | sizeof(__ia64_per_cpu_var(__sn_cnodeid_to_nasid))); |
569 | |||
570 | /* Setup ionodes with memory */ | ||
571 | for (nasid = 0; nasid < MAX_PHYSNODE_ID; nasid += 2) { | ||
572 | char *klgraph_header; | ||
573 | cnodeid_t cnodeid; | ||
574 | |||
575 | if (physical_node_map[nasid] == -1) | ||
576 | continue; | ||
577 | 543 | ||
578 | cnodeid = -1; | 544 | /* |
579 | klgraph_header = __va(ia64_sn_get_klconfig_addr(nasid)); | 545 | * First populate the tables with C/M bricks. This ensures that |
580 | if (!klgraph_header) { | 546 | * cnode == node for all C & M bricks. |
581 | BUG(); /* All nodes must have klconfig tables! */ | 547 | */ |
582 | } | 548 | for_each_online_node(node) { |
583 | cnodeid = nasid_to_cnodeid(nasid); | 549 | nasid = pxm_to_nasid(nid_to_pxm_map[node]); |
584 | root_lboard[cnodeid] = (lboard_t *) | 550 | sn_cnodeid_to_nasid[node] = nasid; |
585 | NODE_OFFSET_TO_LBOARD((nasid), | 551 | physical_node_map[nasid] = node; |
586 | ((kl_config_hdr_t | ||
587 | *) (klgraph_header))-> | ||
588 | ch_board_info); | ||
589 | } | 552 | } |
590 | 553 | ||
591 | /* Scan headless/memless IO Nodes. */ | 554 | /* |
592 | for (nasid = 0; nasid < MAX_PHYSNODE_ID; nasid += 2) { | 555 | * num_cnodes is total number of C/M/TIO bricks. Because of the 256 node |
593 | /* if there's no nasid, don't try to read the klconfig on the node */ | 556 | * limit on the number of nodes, we can't use the generic node numbers |
594 | if (physical_node_map[nasid] == -1) | 557 | * for this. Note that num_cnodes is incremented below as TIOs or |
595 | continue; | 558 | * headless/memoryless nodes are discovered. |
596 | brd = find_lboard_any((lboard_t *) | 559 | */ |
597 | root_lboard[nasid_to_cnodeid(nasid)], | 560 | num_cnodes = num_online_nodes(); |
598 | KLTYPE_SNIA); | ||
599 | if (brd) { | ||
600 | brd = KLCF_NEXT_ANY(brd); /* Skip this node's lboard */ | ||
601 | if (!brd) | ||
602 | continue; | ||
603 | } | ||
604 | |||
605 | brd = find_lboard_any(brd, KLTYPE_SNIA); | ||
606 | 561 | ||
607 | while (brd) { | 562 | /* fakeprom does not support klgraph */ |
608 | sn_cnodeid_to_nasid[numionodes] = brd->brd_nasid; | 563 | if (IS_RUNNING_ON_FAKE_PROM()) |
609 | physical_node_map[brd->brd_nasid] = numionodes; | 564 | return; |
610 | root_lboard[numionodes] = brd; | ||
611 | numionodes++; | ||
612 | brd = KLCF_NEXT_ANY(brd); | ||
613 | if (!brd) | ||
614 | break; | ||
615 | |||
616 | brd = find_lboard_any(brd, KLTYPE_SNIA); | ||
617 | } | ||
618 | } | ||
619 | 565 | ||
620 | /* Scan for TIO nodes. */ | 566 | /* Find TIOs & headless/memoryless nodes and add them to the tables */ |
621 | for (nasid = 0; nasid < MAX_PHYSNODE_ID; nasid += 2) { | 567 | for_each_online_node(node) { |
622 | /* if there's no nasid, don't try to read the klconfig on the node */ | 568 | kl_config_hdr_t *klgraph_header; |
623 | if (physical_node_map[nasid] == -1) | 569 | nasid = cnodeid_to_nasid(node); |
624 | continue; | 570 | if ((klgraph_header = ia64_sn_get_klconfig_addr(nasid)) == NULL) |
625 | brd = find_lboard_any((lboard_t *) | 571 | BUG(); |
626 | root_lboard[nasid_to_cnodeid(nasid)], | 572 | brd = NODE_OFFSET_TO_LBOARD(nasid, klgraph_header->ch_board_info); |
627 | KLTYPE_TIO); | ||
628 | while (brd) { | 573 | while (brd) { |
629 | sn_cnodeid_to_nasid[numionodes] = brd->brd_nasid; | 574 | if (board_needs_cnode(brd->brd_type) && physical_node_map[brd->brd_nasid] < 0) { |
630 | physical_node_map[brd->brd_nasid] = numionodes; | 575 | sn_cnodeid_to_nasid[num_cnodes] = brd->brd_nasid; |
631 | root_lboard[numionodes] = brd; | 576 | physical_node_map[brd->brd_nasid] = num_cnodes++; |
632 | numionodes++; | 577 | } |
633 | brd = KLCF_NEXT_ANY(brd); | 578 | brd = find_lboard_next(brd); |
634 | if (!brd) | ||
635 | break; | ||
636 | |||
637 | brd = find_lboard_any(brd, KLTYPE_TIO); | ||
638 | } | 579 | } |
639 | } | 580 | } |
640 | } | 581 | } |
@@ -651,3 +592,12 @@ nasid_slice_to_cpuid(int nasid, int slice) | |||
651 | 592 | ||
652 | return -1; | 593 | return -1; |
653 | } | 594 | } |
595 | |||
596 | int sn_prom_feature_available(int id) | ||
597 | { | ||
598 | if (id >= BITS_PER_LONG * MAX_PROM_FEATURE_SETS) | ||
599 | return 0; | ||
600 | return test_bit(id, sn_prom_features); | ||
601 | } | ||
602 | EXPORT_SYMBOL(sn_prom_feature_available); | ||
603 | |||
diff --git a/arch/ia64/sn/kernel/sn2/sn_hwperf.c b/arch/ia64/sn/kernel/sn2/sn_hwperf.c index 0513aacac8c1..6c6fbca3229c 100644 --- a/arch/ia64/sn/kernel/sn2/sn_hwperf.c +++ b/arch/ia64/sn/kernel/sn2/sn_hwperf.c | |||
@@ -476,8 +476,8 @@ static int sn_topology_show(struct seq_file *s, void *d) | |||
476 | for_each_online_cpu(j) { | 476 | for_each_online_cpu(j) { |
477 | seq_printf(s, j ? ":%d" : ", dist %d", | 477 | seq_printf(s, j ? ":%d" : ", dist %d", |
478 | node_distance( | 478 | node_distance( |
479 | cpuid_to_cnodeid(i), | 479 | cpu_to_node(i), |
480 | cpuid_to_cnodeid(j))); | 480 | cpu_to_node(j))); |
481 | } | 481 | } |
482 | seq_putc(s, '\n'); | 482 | seq_putc(s, '\n'); |
483 | } | 483 | } |
diff --git a/arch/ia64/sn/kernel/sn2/sn_proc_fs.c b/arch/ia64/sn/kernel/sn2/sn_proc_fs.c index 51bf82720d99..a06719d752a0 100644 --- a/arch/ia64/sn/kernel/sn2/sn_proc_fs.c +++ b/arch/ia64/sn/kernel/sn2/sn_proc_fs.c | |||
@@ -52,7 +52,7 @@ static int licenseID_open(struct inode *inode, struct file *file) | |||
52 | * the bridge chip. The hardware will then send an interrupt message if the | 52 | * the bridge chip. The hardware will then send an interrupt message if the |
53 | * interrupt line is active. This mimics a level sensitive interrupt. | 53 | * interrupt line is active. This mimics a level sensitive interrupt. |
54 | */ | 54 | */ |
55 | int sn_force_interrupt_flag = 1; | 55 | extern int sn_force_interrupt_flag; |
56 | 56 | ||
57 | static int sn_force_interrupt_show(struct seq_file *s, void *p) | 57 | static int sn_force_interrupt_show(struct seq_file *s, void *p) |
58 | { | 58 | { |
diff --git a/arch/ia64/sn/kernel/tiocx.c b/arch/ia64/sn/kernel/tiocx.c index 254fe15c064b..0d8592a745a7 100644 --- a/arch/ia64/sn/kernel/tiocx.c +++ b/arch/ia64/sn/kernel/tiocx.c | |||
@@ -183,15 +183,16 @@ int cx_driver_unregister(struct cx_drv *cx_driver) | |||
183 | * @part_num: device's part number | 183 | * @part_num: device's part number |
184 | * @mfg_num: device's manufacturer number | 184 | * @mfg_num: device's manufacturer number |
185 | * @hubdev: hub info associated with this device | 185 | * @hubdev: hub info associated with this device |
186 | * @bt: board type of the device | ||
186 | * | 187 | * |
187 | */ | 188 | */ |
188 | int | 189 | int |
189 | cx_device_register(nasid_t nasid, int part_num, int mfg_num, | 190 | cx_device_register(nasid_t nasid, int part_num, int mfg_num, |
190 | struct hubdev_info *hubdev) | 191 | struct hubdev_info *hubdev, int bt) |
191 | { | 192 | { |
192 | struct cx_dev *cx_dev; | 193 | struct cx_dev *cx_dev; |
193 | 194 | ||
194 | cx_dev = kcalloc(1, sizeof(struct cx_dev), GFP_KERNEL); | 195 | cx_dev = kzalloc(sizeof(struct cx_dev), GFP_KERNEL); |
195 | DBG("cx_dev= 0x%p\n", cx_dev); | 196 | DBG("cx_dev= 0x%p\n", cx_dev); |
196 | if (cx_dev == NULL) | 197 | if (cx_dev == NULL) |
197 | return -ENOMEM; | 198 | return -ENOMEM; |
@@ -200,6 +201,7 @@ cx_device_register(nasid_t nasid, int part_num, int mfg_num, | |||
200 | cx_dev->cx_id.mfg_num = mfg_num; | 201 | cx_dev->cx_id.mfg_num = mfg_num; |
201 | cx_dev->cx_id.nasid = nasid; | 202 | cx_dev->cx_id.nasid = nasid; |
202 | cx_dev->hubdev = hubdev; | 203 | cx_dev->hubdev = hubdev; |
204 | cx_dev->bt = bt; | ||
203 | 205 | ||
204 | cx_dev->dev.parent = NULL; | 206 | cx_dev->dev.parent = NULL; |
205 | cx_dev->dev.bus = &tiocx_bus_type; | 207 | cx_dev->dev.bus = &tiocx_bus_type; |
@@ -238,7 +240,8 @@ static int cx_device_reload(struct cx_dev *cx_dev) | |||
238 | { | 240 | { |
239 | cx_device_unregister(cx_dev); | 241 | cx_device_unregister(cx_dev); |
240 | return cx_device_register(cx_dev->cx_id.nasid, cx_dev->cx_id.part_num, | 242 | return cx_device_register(cx_dev->cx_id.nasid, cx_dev->cx_id.part_num, |
241 | cx_dev->cx_id.mfg_num, cx_dev->hubdev); | 243 | cx_dev->cx_id.mfg_num, cx_dev->hubdev, |
244 | cx_dev->bt); | ||
242 | } | 245 | } |
243 | 246 | ||
244 | static inline uint64_t tiocx_intr_alloc(nasid_t nasid, int widget, | 247 | static inline uint64_t tiocx_intr_alloc(nasid_t nasid, int widget, |
@@ -365,26 +368,20 @@ static void tio_corelet_reset(nasid_t nasid, int corelet) | |||
365 | udelay(2000); | 368 | udelay(2000); |
366 | } | 369 | } |
367 | 370 | ||
368 | static int tiocx_btchar_get(int nasid) | 371 | static int is_fpga_tio(int nasid, int *bt) |
369 | { | 372 | { |
370 | moduleid_t module_id; | 373 | int ioboard_type; |
371 | geoid_t geoid; | ||
372 | int cnodeid; | ||
373 | |||
374 | cnodeid = nasid_to_cnodeid(nasid); | ||
375 | geoid = cnodeid_get_geoid(cnodeid); | ||
376 | module_id = geo_module(geoid); | ||
377 | return MODULE_GET_BTCHAR(module_id); | ||
378 | } | ||
379 | 374 | ||
380 | static int is_fpga_brick(int nasid) | 375 | ioboard_type = ia64_sn_sysctl_ioboard_get(nasid); |
381 | { | 376 | |
382 | switch (tiocx_btchar_get(nasid)) { | 377 | switch (ioboard_type) { |
383 | case L1_BRICKTYPE_SA: | 378 | case L1_BRICKTYPE_SA: |
384 | case L1_BRICKTYPE_ATHENA: | 379 | case L1_BRICKTYPE_ATHENA: |
385 | case L1_BRICKTYPE_DAYTONA: | 380 | case L1_BOARDTYPE_DAYTONA: |
381 | *bt = ioboard_type; | ||
386 | return 1; | 382 | return 1; |
387 | } | 383 | } |
384 | |||
388 | return 0; | 385 | return 0; |
389 | } | 386 | } |
390 | 387 | ||
@@ -407,16 +404,22 @@ static int tiocx_reload(struct cx_dev *cx_dev) | |||
407 | 404 | ||
408 | if (bitstream_loaded(nasid)) { | 405 | if (bitstream_loaded(nasid)) { |
409 | uint64_t cx_id; | 406 | uint64_t cx_id; |
410 | 407 | int rv; | |
411 | cx_id = | 408 | |
412 | *(volatile uint64_t *)(TIO_SWIN_BASE(nasid, TIOCX_CORELET) + | 409 | rv = ia64_sn_sysctl_tio_clock_reset(nasid); |
410 | if (rv) { | ||
411 | printk(KERN_ALERT "CX port JTAG reset failed.\n"); | ||
412 | } else { | ||
413 | cx_id = *(volatile uint64_t *) | ||
414 | (TIO_SWIN_BASE(nasid, TIOCX_CORELET) + | ||
413 | WIDGET_ID); | 415 | WIDGET_ID); |
414 | part_num = XWIDGET_PART_NUM(cx_id); | 416 | part_num = XWIDGET_PART_NUM(cx_id); |
415 | mfg_num = XWIDGET_MFG_NUM(cx_id); | 417 | mfg_num = XWIDGET_MFG_NUM(cx_id); |
416 | DBG("part= 0x%x, mfg= 0x%x\n", part_num, mfg_num); | 418 | DBG("part= 0x%x, mfg= 0x%x\n", part_num, mfg_num); |
417 | /* just ignore it if it's a CE */ | 419 | /* just ignore it if it's a CE */ |
418 | if (part_num == TIO_CE_ASIC_PARTNUM) | 420 | if (part_num == TIO_CE_ASIC_PARTNUM) |
419 | return 0; | 421 | return 0; |
422 | } | ||
420 | } | 423 | } |
421 | 424 | ||
422 | cx_dev->cx_id.part_num = part_num; | 425 | cx_dev->cx_id.part_num = part_num; |
@@ -436,10 +439,10 @@ static ssize_t show_cxdev_control(struct device *dev, struct device_attribute *a | |||
436 | { | 439 | { |
437 | struct cx_dev *cx_dev = to_cx_dev(dev); | 440 | struct cx_dev *cx_dev = to_cx_dev(dev); |
438 | 441 | ||
439 | return sprintf(buf, "0x%x 0x%x 0x%x %d\n", | 442 | return sprintf(buf, "0x%x 0x%x 0x%x 0x%x\n", |
440 | cx_dev->cx_id.nasid, | 443 | cx_dev->cx_id.nasid, |
441 | cx_dev->cx_id.part_num, cx_dev->cx_id.mfg_num, | 444 | cx_dev->cx_id.part_num, cx_dev->cx_id.mfg_num, |
442 | tiocx_btchar_get(cx_dev->cx_id.nasid)); | 445 | cx_dev->bt); |
443 | } | 446 | } |
444 | 447 | ||
445 | static ssize_t store_cxdev_control(struct device *dev, struct device_attribute *attr, const char *buf, | 448 | static ssize_t store_cxdev_control(struct device *dev, struct device_attribute *attr, const char *buf, |
@@ -486,13 +489,13 @@ static int __init tiocx_init(void) | |||
486 | 489 | ||
487 | bus_register(&tiocx_bus_type); | 490 | bus_register(&tiocx_bus_type); |
488 | 491 | ||
489 | for (cnodeid = 0; cnodeid < MAX_COMPACT_NODES; cnodeid++) { | 492 | for (cnodeid = 0; cnodeid < num_cnodes; cnodeid++) { |
490 | nasid_t nasid; | 493 | nasid_t nasid; |
494 | int bt; | ||
491 | 495 | ||
492 | if ((nasid = cnodeid_to_nasid(cnodeid)) < 0) | 496 | nasid = cnodeid_to_nasid(cnodeid); |
493 | break; /* No more nasids .. bail out of loop */ | ||
494 | 497 | ||
495 | if ((nasid & 0x1) && is_fpga_brick(nasid)) { | 498 | if ((nasid & 0x1) && is_fpga_tio(nasid, &bt)) { |
496 | struct hubdev_info *hubdev; | 499 | struct hubdev_info *hubdev; |
497 | struct xwidget_info *widgetp; | 500 | struct xwidget_info *widgetp; |
498 | 501 | ||
@@ -512,7 +515,7 @@ static int __init tiocx_init(void) | |||
512 | 515 | ||
513 | if (cx_device_register | 516 | if (cx_device_register |
514 | (nasid, widgetp->xwi_hwid.part_num, | 517 | (nasid, widgetp->xwi_hwid.part_num, |
515 | widgetp->xwi_hwid.mfg_num, hubdev) < 0) | 518 | widgetp->xwi_hwid.mfg_num, hubdev, bt) < 0) |
516 | return -ENXIO; | 519 | return -ENXIO; |
517 | else | 520 | else |
518 | found_tiocx_device++; | 521 | found_tiocx_device++; |
diff --git a/arch/ia64/sn/kernel/xpc_main.c b/arch/ia64/sn/kernel/xpc_main.c index 38f2c699192c..cece3c7c69be 100644 --- a/arch/ia64/sn/kernel/xpc_main.c +++ b/arch/ia64/sn/kernel/xpc_main.c | |||
@@ -1047,6 +1047,10 @@ xpc_init(void) | |||
1047 | pid_t pid; | 1047 | pid_t pid; |
1048 | 1048 | ||
1049 | 1049 | ||
1050 | if (!ia64_platform_is("sn2")) { | ||
1051 | return -ENODEV; | ||
1052 | } | ||
1053 | |||
1050 | /* | 1054 | /* |
1051 | * xpc_remote_copy_buffer is used as a temporary buffer for bte_copy'ng | 1055 | * xpc_remote_copy_buffer is used as a temporary buffer for bte_copy'ng |
1052 | * various portions of a partition's reserved page. Its size is based | 1056 | * various portions of a partition's reserved page. Its size is based |
diff --git a/arch/ia64/sn/kernel/xpc_partition.c b/arch/ia64/sn/kernel/xpc_partition.c index ce5a37ff4388..581e113d2d37 100644 --- a/arch/ia64/sn/kernel/xpc_partition.c +++ b/arch/ia64/sn/kernel/xpc_partition.c | |||
@@ -44,7 +44,7 @@ static u64 xpc_sh2_IPI_access3; | |||
44 | 44 | ||
45 | 45 | ||
46 | /* original protection values for each node */ | 46 | /* original protection values for each node */ |
47 | u64 xpc_prot_vec[MAX_COMPACT_NODES]; | 47 | u64 xpc_prot_vec[MAX_NUMNODES]; |
48 | 48 | ||
49 | 49 | ||
50 | /* this partition's reserved page pointers */ | 50 | /* this partition's reserved page pointers */ |
diff --git a/arch/ia64/sn/kernel/xpnet.c b/arch/ia64/sn/kernel/xpnet.c index 78c13d676fa6..e5c6d3c0a8e9 100644 --- a/arch/ia64/sn/kernel/xpnet.c +++ b/arch/ia64/sn/kernel/xpnet.c | |||
@@ -130,7 +130,7 @@ struct net_device *xpnet_device; | |||
130 | */ | 130 | */ |
131 | static u64 xpnet_broadcast_partitions; | 131 | static u64 xpnet_broadcast_partitions; |
132 | /* protect above */ | 132 | /* protect above */ |
133 | static spinlock_t xpnet_broadcast_lock = SPIN_LOCK_UNLOCKED; | 133 | static DEFINE_SPINLOCK(xpnet_broadcast_lock); |
134 | 134 | ||
135 | /* | 135 | /* |
136 | * Since the Block Transfer Engine (BTE) is being used for the transfer | 136 | * Since the Block Transfer Engine (BTE) is being used for the transfer |
@@ -636,6 +636,10 @@ xpnet_init(void) | |||
636 | int result = -ENOMEM; | 636 | int result = -ENOMEM; |
637 | 637 | ||
638 | 638 | ||
639 | if (!ia64_platform_is("sn2")) { | ||
640 | return -ENODEV; | ||
641 | } | ||
642 | |||
639 | dev_info(xpnet, "registering network device %s\n", XPNET_DEVICE_NAME); | 643 | dev_info(xpnet, "registering network device %s\n", XPNET_DEVICE_NAME); |
640 | 644 | ||
641 | /* | 645 | /* |
diff --git a/arch/ia64/sn/pci/pci_dma.c b/arch/ia64/sn/pci/pci_dma.c index 0e4b9ad9ef02..abdf6eea6ac8 100644 --- a/arch/ia64/sn/pci/pci_dma.c +++ b/arch/ia64/sn/pci/pci_dma.c | |||
@@ -326,6 +326,29 @@ int sn_pci_legacy_read(struct pci_bus *bus, u16 port, u32 *val, u8 size) | |||
326 | { | 326 | { |
327 | unsigned long addr; | 327 | unsigned long addr; |
328 | int ret; | 328 | int ret; |
329 | struct ia64_sal_retval isrv; | ||
330 | |||
331 | /* | ||
332 | * First, try the SN_SAL_IOIF_PCI_SAFE SAL call which can work | ||
333 | * around hw issues at the pci bus level. SGI proms older than | ||
334 | * 4.10 don't implment this. | ||
335 | */ | ||
336 | |||
337 | SAL_CALL(isrv, SN_SAL_IOIF_PCI_SAFE, | ||
338 | pci_domain_nr(bus), bus->number, | ||
339 | 0, /* io */ | ||
340 | 0, /* read */ | ||
341 | port, size, __pa(val)); | ||
342 | |||
343 | if (isrv.status == 0) | ||
344 | return size; | ||
345 | |||
346 | /* | ||
347 | * If the above failed, retry using the SAL_PROBE call which should | ||
348 | * be present in all proms (but which cannot work round PCI chipset | ||
349 | * bugs). This code is retained for compatability with old | ||
350 | * pre-4.10 proms, and should be removed at some point in the future. | ||
351 | */ | ||
329 | 352 | ||
330 | if (!SN_PCIBUS_BUSSOFT(bus)) | 353 | if (!SN_PCIBUS_BUSSOFT(bus)) |
331 | return -ENODEV; | 354 | return -ENODEV; |
@@ -349,6 +372,29 @@ int sn_pci_legacy_write(struct pci_bus *bus, u16 port, u32 val, u8 size) | |||
349 | int ret = size; | 372 | int ret = size; |
350 | unsigned long paddr; | 373 | unsigned long paddr; |
351 | unsigned long *addr; | 374 | unsigned long *addr; |
375 | struct ia64_sal_retval isrv; | ||
376 | |||
377 | /* | ||
378 | * First, try the SN_SAL_IOIF_PCI_SAFE SAL call which can work | ||
379 | * around hw issues at the pci bus level. SGI proms older than | ||
380 | * 4.10 don't implment this. | ||
381 | */ | ||
382 | |||
383 | SAL_CALL(isrv, SN_SAL_IOIF_PCI_SAFE, | ||
384 | pci_domain_nr(bus), bus->number, | ||
385 | 0, /* io */ | ||
386 | 1, /* write */ | ||
387 | port, size, __pa(&val)); | ||
388 | |||
389 | if (isrv.status == 0) | ||
390 | return size; | ||
391 | |||
392 | /* | ||
393 | * If the above failed, retry using the SAL_PROBE call which should | ||
394 | * be present in all proms (but which cannot work round PCI chipset | ||
395 | * bugs). This code is retained for compatability with old | ||
396 | * pre-4.10 proms, and should be removed at some point in the future. | ||
397 | */ | ||
352 | 398 | ||
353 | if (!SN_PCIBUS_BUSSOFT(bus)) { | 399 | if (!SN_PCIBUS_BUSSOFT(bus)) { |
354 | ret = -ENODEV; | 400 | ret = -ENODEV; |
diff --git a/arch/ia64/sn/pci/pcibr/pcibr_reg.c b/arch/ia64/sn/pci/pcibr/pcibr_reg.c index 21426d02fbe6..4f718c3e93d3 100644 --- a/arch/ia64/sn/pci/pcibr/pcibr_reg.c +++ b/arch/ia64/sn/pci/pcibr/pcibr_reg.c | |||
@@ -8,6 +8,7 @@ | |||
8 | 8 | ||
9 | #include <linux/interrupt.h> | 9 | #include <linux/interrupt.h> |
10 | #include <linux/types.h> | 10 | #include <linux/types.h> |
11 | #include <asm/sn/io.h> | ||
11 | #include <asm/sn/pcibr_provider.h> | 12 | #include <asm/sn/pcibr_provider.h> |
12 | #include <asm/sn/pcibus_provider_defs.h> | 13 | #include <asm/sn/pcibus_provider_defs.h> |
13 | #include <asm/sn/pcidev.h> | 14 | #include <asm/sn/pcidev.h> |
@@ -29,10 +30,10 @@ void pcireg_control_bit_clr(struct pcibus_info *pcibus_info, uint64_t bits) | |||
29 | if (pcibus_info) { | 30 | if (pcibus_info) { |
30 | switch (pcibus_info->pbi_bridge_type) { | 31 | switch (pcibus_info->pbi_bridge_type) { |
31 | case PCIBR_BRIDGETYPE_TIOCP: | 32 | case PCIBR_BRIDGETYPE_TIOCP: |
32 | ptr->tio.cp_control &= ~bits; | 33 | __sn_clrq_relaxed(&ptr->tio.cp_control, bits); |
33 | break; | 34 | break; |
34 | case PCIBR_BRIDGETYPE_PIC: | 35 | case PCIBR_BRIDGETYPE_PIC: |
35 | ptr->pic.p_wid_control &= ~bits; | 36 | __sn_clrq_relaxed(&ptr->pic.p_wid_control, bits); |
36 | break; | 37 | break; |
37 | default: | 38 | default: |
38 | panic | 39 | panic |
@@ -49,10 +50,10 @@ void pcireg_control_bit_set(struct pcibus_info *pcibus_info, uint64_t bits) | |||
49 | if (pcibus_info) { | 50 | if (pcibus_info) { |
50 | switch (pcibus_info->pbi_bridge_type) { | 51 | switch (pcibus_info->pbi_bridge_type) { |
51 | case PCIBR_BRIDGETYPE_TIOCP: | 52 | case PCIBR_BRIDGETYPE_TIOCP: |
52 | ptr->tio.cp_control |= bits; | 53 | __sn_setq_relaxed(&ptr->tio.cp_control, bits); |
53 | break; | 54 | break; |
54 | case PCIBR_BRIDGETYPE_PIC: | 55 | case PCIBR_BRIDGETYPE_PIC: |
55 | ptr->pic.p_wid_control |= bits; | 56 | __sn_setq_relaxed(&ptr->pic.p_wid_control, bits); |
56 | break; | 57 | break; |
57 | default: | 58 | default: |
58 | panic | 59 | panic |
@@ -73,10 +74,10 @@ uint64_t pcireg_tflush_get(struct pcibus_info *pcibus_info) | |||
73 | if (pcibus_info) { | 74 | if (pcibus_info) { |
74 | switch (pcibus_info->pbi_bridge_type) { | 75 | switch (pcibus_info->pbi_bridge_type) { |
75 | case PCIBR_BRIDGETYPE_TIOCP: | 76 | case PCIBR_BRIDGETYPE_TIOCP: |
76 | ret = ptr->tio.cp_tflush; | 77 | ret = __sn_readq_relaxed(&ptr->tio.cp_tflush); |
77 | break; | 78 | break; |
78 | case PCIBR_BRIDGETYPE_PIC: | 79 | case PCIBR_BRIDGETYPE_PIC: |
79 | ret = ptr->pic.p_wid_tflush; | 80 | ret = __sn_readq_relaxed(&ptr->pic.p_wid_tflush); |
80 | break; | 81 | break; |
81 | default: | 82 | default: |
82 | panic | 83 | panic |
@@ -103,10 +104,10 @@ uint64_t pcireg_intr_status_get(struct pcibus_info * pcibus_info) | |||
103 | if (pcibus_info) { | 104 | if (pcibus_info) { |
104 | switch (pcibus_info->pbi_bridge_type) { | 105 | switch (pcibus_info->pbi_bridge_type) { |
105 | case PCIBR_BRIDGETYPE_TIOCP: | 106 | case PCIBR_BRIDGETYPE_TIOCP: |
106 | ret = ptr->tio.cp_int_status; | 107 | ret = __sn_readq_relaxed(&ptr->tio.cp_int_status); |
107 | break; | 108 | break; |
108 | case PCIBR_BRIDGETYPE_PIC: | 109 | case PCIBR_BRIDGETYPE_PIC: |
109 | ret = ptr->pic.p_int_status; | 110 | ret = __sn_readq_relaxed(&ptr->pic.p_int_status); |
110 | break; | 111 | break; |
111 | default: | 112 | default: |
112 | panic | 113 | panic |
@@ -127,10 +128,10 @@ void pcireg_intr_enable_bit_clr(struct pcibus_info *pcibus_info, uint64_t bits) | |||
127 | if (pcibus_info) { | 128 | if (pcibus_info) { |
128 | switch (pcibus_info->pbi_bridge_type) { | 129 | switch (pcibus_info->pbi_bridge_type) { |
129 | case PCIBR_BRIDGETYPE_TIOCP: | 130 | case PCIBR_BRIDGETYPE_TIOCP: |
130 | ptr->tio.cp_int_enable &= ~bits; | 131 | __sn_clrq_relaxed(&ptr->tio.cp_int_enable, bits); |
131 | break; | 132 | break; |
132 | case PCIBR_BRIDGETYPE_PIC: | 133 | case PCIBR_BRIDGETYPE_PIC: |
133 | ptr->pic.p_int_enable &= ~bits; | 134 | __sn_clrq_relaxed(&ptr->pic.p_int_enable, ~bits); |
134 | break; | 135 | break; |
135 | default: | 136 | default: |
136 | panic | 137 | panic |
@@ -147,10 +148,10 @@ void pcireg_intr_enable_bit_set(struct pcibus_info *pcibus_info, uint64_t bits) | |||
147 | if (pcibus_info) { | 148 | if (pcibus_info) { |
148 | switch (pcibus_info->pbi_bridge_type) { | 149 | switch (pcibus_info->pbi_bridge_type) { |
149 | case PCIBR_BRIDGETYPE_TIOCP: | 150 | case PCIBR_BRIDGETYPE_TIOCP: |
150 | ptr->tio.cp_int_enable |= bits; | 151 | __sn_setq_relaxed(&ptr->tio.cp_int_enable, bits); |
151 | break; | 152 | break; |
152 | case PCIBR_BRIDGETYPE_PIC: | 153 | case PCIBR_BRIDGETYPE_PIC: |
153 | ptr->pic.p_int_enable |= bits; | 154 | __sn_setq_relaxed(&ptr->pic.p_int_enable, bits); |
154 | break; | 155 | break; |
155 | default: | 156 | default: |
156 | panic | 157 | panic |
@@ -171,14 +172,16 @@ void pcireg_intr_addr_addr_set(struct pcibus_info *pcibus_info, int int_n, | |||
171 | if (pcibus_info) { | 172 | if (pcibus_info) { |
172 | switch (pcibus_info->pbi_bridge_type) { | 173 | switch (pcibus_info->pbi_bridge_type) { |
173 | case PCIBR_BRIDGETYPE_TIOCP: | 174 | case PCIBR_BRIDGETYPE_TIOCP: |
174 | ptr->tio.cp_int_addr[int_n] &= ~TIOCP_HOST_INTR_ADDR; | 175 | __sn_clrq_relaxed(&ptr->tio.cp_int_addr[int_n], |
175 | ptr->tio.cp_int_addr[int_n] |= | 176 | TIOCP_HOST_INTR_ADDR); |
176 | (addr & TIOCP_HOST_INTR_ADDR); | 177 | __sn_setq_relaxed(&ptr->tio.cp_int_addr[int_n], |
178 | (addr & TIOCP_HOST_INTR_ADDR)); | ||
177 | break; | 179 | break; |
178 | case PCIBR_BRIDGETYPE_PIC: | 180 | case PCIBR_BRIDGETYPE_PIC: |
179 | ptr->pic.p_int_addr[int_n] &= ~PIC_HOST_INTR_ADDR; | 181 | __sn_clrq_relaxed(&ptr->pic.p_int_addr[int_n], |
180 | ptr->pic.p_int_addr[int_n] |= | 182 | PIC_HOST_INTR_ADDR); |
181 | (addr & PIC_HOST_INTR_ADDR); | 183 | __sn_setq_relaxed(&ptr->pic.p_int_addr[int_n], |
184 | (addr & PIC_HOST_INTR_ADDR)); | ||
182 | break; | 185 | break; |
183 | default: | 186 | default: |
184 | panic | 187 | panic |
@@ -198,10 +201,10 @@ void pcireg_force_intr_set(struct pcibus_info *pcibus_info, int int_n) | |||
198 | if (pcibus_info) { | 201 | if (pcibus_info) { |
199 | switch (pcibus_info->pbi_bridge_type) { | 202 | switch (pcibus_info->pbi_bridge_type) { |
200 | case PCIBR_BRIDGETYPE_TIOCP: | 203 | case PCIBR_BRIDGETYPE_TIOCP: |
201 | ptr->tio.cp_force_pin[int_n] = 1; | 204 | writeq(1, &ptr->tio.cp_force_pin[int_n]); |
202 | break; | 205 | break; |
203 | case PCIBR_BRIDGETYPE_PIC: | 206 | case PCIBR_BRIDGETYPE_PIC: |
204 | ptr->pic.p_force_pin[int_n] = 1; | 207 | writeq(1, &ptr->pic.p_force_pin[int_n]); |
205 | break; | 208 | break; |
206 | default: | 209 | default: |
207 | panic | 210 | panic |
@@ -222,10 +225,12 @@ uint64_t pcireg_wrb_flush_get(struct pcibus_info *pcibus_info, int device) | |||
222 | if (pcibus_info) { | 225 | if (pcibus_info) { |
223 | switch (pcibus_info->pbi_bridge_type) { | 226 | switch (pcibus_info->pbi_bridge_type) { |
224 | case PCIBR_BRIDGETYPE_TIOCP: | 227 | case PCIBR_BRIDGETYPE_TIOCP: |
225 | ret = ptr->tio.cp_wr_req_buf[device]; | 228 | ret = |
229 | __sn_readq_relaxed(&ptr->tio.cp_wr_req_buf[device]); | ||
226 | break; | 230 | break; |
227 | case PCIBR_BRIDGETYPE_PIC: | 231 | case PCIBR_BRIDGETYPE_PIC: |
228 | ret = ptr->pic.p_wr_req_buf[device]; | 232 | ret = |
233 | __sn_readq_relaxed(&ptr->pic.p_wr_req_buf[device]); | ||
229 | break; | 234 | break; |
230 | default: | 235 | default: |
231 | panic("pcireg_wrb_flush_get: unknown bridgetype bridge 0x%p", (void *)ptr); | 236 | panic("pcireg_wrb_flush_get: unknown bridgetype bridge 0x%p", (void *)ptr); |
@@ -244,10 +249,10 @@ void pcireg_int_ate_set(struct pcibus_info *pcibus_info, int ate_index, | |||
244 | if (pcibus_info) { | 249 | if (pcibus_info) { |
245 | switch (pcibus_info->pbi_bridge_type) { | 250 | switch (pcibus_info->pbi_bridge_type) { |
246 | case PCIBR_BRIDGETYPE_TIOCP: | 251 | case PCIBR_BRIDGETYPE_TIOCP: |
247 | ptr->tio.cp_int_ate_ram[ate_index] = (uint64_t) val; | 252 | writeq(val, &ptr->tio.cp_int_ate_ram[ate_index]); |
248 | break; | 253 | break; |
249 | case PCIBR_BRIDGETYPE_PIC: | 254 | case PCIBR_BRIDGETYPE_PIC: |
250 | ptr->pic.p_int_ate_ram[ate_index] = (uint64_t) val; | 255 | writeq(val, &ptr->pic.p_int_ate_ram[ate_index]); |
251 | break; | 256 | break; |
252 | default: | 257 | default: |
253 | panic | 258 | panic |
@@ -265,12 +270,10 @@ uint64_t *pcireg_int_ate_addr(struct pcibus_info *pcibus_info, int ate_index) | |||
265 | if (pcibus_info) { | 270 | if (pcibus_info) { |
266 | switch (pcibus_info->pbi_bridge_type) { | 271 | switch (pcibus_info->pbi_bridge_type) { |
267 | case PCIBR_BRIDGETYPE_TIOCP: | 272 | case PCIBR_BRIDGETYPE_TIOCP: |
268 | ret = | 273 | ret = &ptr->tio.cp_int_ate_ram[ate_index]; |
269 | (uint64_t *) & (ptr->tio.cp_int_ate_ram[ate_index]); | ||
270 | break; | 274 | break; |
271 | case PCIBR_BRIDGETYPE_PIC: | 275 | case PCIBR_BRIDGETYPE_PIC: |
272 | ret = | 276 | ret = &ptr->pic.p_int_ate_ram[ate_index]; |
273 | (uint64_t *) & (ptr->pic.p_int_ate_ram[ate_index]); | ||
274 | break; | 277 | break; |
275 | default: | 278 | default: |
276 | panic | 279 | panic |
diff --git a/arch/ia64/sn/pci/tioca_provider.c b/arch/ia64/sn/pci/tioca_provider.c index ea09c12f0258..46b646a6d345 100644 --- a/arch/ia64/sn/pci/tioca_provider.c +++ b/arch/ia64/sn/pci/tioca_provider.c | |||
@@ -11,6 +11,7 @@ | |||
11 | #include <linux/pci.h> | 11 | #include <linux/pci.h> |
12 | #include <asm/sn/sn_sal.h> | 12 | #include <asm/sn/sn_sal.h> |
13 | #include <asm/sn/addrs.h> | 13 | #include <asm/sn/addrs.h> |
14 | #include <asm/sn/io.h> | ||
14 | #include <asm/sn/pcidev.h> | 15 | #include <asm/sn/pcidev.h> |
15 | #include <asm/sn/pcibus_provider_defs.h> | 16 | #include <asm/sn/pcibus_provider_defs.h> |
16 | #include <asm/sn/tioca_provider.h> | 17 | #include <asm/sn/tioca_provider.h> |
@@ -37,7 +38,7 @@ tioca_gart_init(struct tioca_kernel *tioca_kern) | |||
37 | uint64_t offset; | 38 | uint64_t offset; |
38 | struct page *tmp; | 39 | struct page *tmp; |
39 | struct tioca_common *tioca_common; | 40 | struct tioca_common *tioca_common; |
40 | volatile struct tioca *ca_base; | 41 | struct tioca *ca_base; |
41 | 42 | ||
42 | tioca_common = tioca_kern->ca_common; | 43 | tioca_common = tioca_kern->ca_common; |
43 | ca_base = (struct tioca *)tioca_common->ca_common.bs_base; | 44 | ca_base = (struct tioca *)tioca_common->ca_common.bs_base; |
@@ -148,7 +149,7 @@ tioca_gart_init(struct tioca_kernel *tioca_kern) | |||
148 | tioca_kern->ca_pcigart_entries = | 149 | tioca_kern->ca_pcigart_entries = |
149 | tioca_kern->ca_pciap_size / tioca_kern->ca_ap_pagesize; | 150 | tioca_kern->ca_pciap_size / tioca_kern->ca_ap_pagesize; |
150 | tioca_kern->ca_pcigart_pagemap = | 151 | tioca_kern->ca_pcigart_pagemap = |
151 | kcalloc(1, tioca_kern->ca_pcigart_entries / 8, GFP_KERNEL); | 152 | kzalloc(tioca_kern->ca_pcigart_entries / 8, GFP_KERNEL); |
152 | if (!tioca_kern->ca_pcigart_pagemap) { | 153 | if (!tioca_kern->ca_pcigart_pagemap) { |
153 | free_pages((unsigned long)tioca_kern->ca_gart, | 154 | free_pages((unsigned long)tioca_kern->ca_gart, |
154 | get_order(tioca_kern->ca_gart_size)); | 155 | get_order(tioca_kern->ca_gart_size)); |
@@ -174,27 +175,29 @@ tioca_gart_init(struct tioca_kernel *tioca_kern) | |||
174 | * DISABLE GART PREFETCHING due to hw bug tracked in SGI PV930029 | 175 | * DISABLE GART PREFETCHING due to hw bug tracked in SGI PV930029 |
175 | */ | 176 | */ |
176 | 177 | ||
177 | ca_base->ca_control1 |= CA_AGPDMA_OP_ENB_COMBDELAY; /* PV895469 ? */ | 178 | __sn_setq_relaxed(&ca_base->ca_control1, |
178 | ca_base->ca_control2 &= ~(CA_GART_MEM_PARAM); | 179 | CA_AGPDMA_OP_ENB_COMBDELAY); /* PV895469 ? */ |
179 | ca_base->ca_control2 |= (0x2ull << CA_GART_MEM_PARAM_SHFT); | 180 | __sn_clrq_relaxed(&ca_base->ca_control2, CA_GART_MEM_PARAM); |
181 | __sn_setq_relaxed(&ca_base->ca_control2, | ||
182 | (0x2ull << CA_GART_MEM_PARAM_SHFT)); | ||
180 | tioca_kern->ca_gart_iscoherent = 1; | 183 | tioca_kern->ca_gart_iscoherent = 1; |
181 | ca_base->ca_control2 &= | 184 | __sn_clrq_relaxed(&ca_base->ca_control2, |
182 | ~(CA_GART_WR_PREFETCH_ENB | CA_GART_RD_PREFETCH_ENB); | 185 | (CA_GART_WR_PREFETCH_ENB | CA_GART_RD_PREFETCH_ENB)); |
183 | 186 | ||
184 | /* | 187 | /* |
185 | * Unmask GART fetch error interrupts. Clear residual errors first. | 188 | * Unmask GART fetch error interrupts. Clear residual errors first. |
186 | */ | 189 | */ |
187 | 190 | ||
188 | ca_base->ca_int_status_alias = CA_GART_FETCH_ERR; | 191 | writeq(CA_GART_FETCH_ERR, &ca_base->ca_int_status_alias); |
189 | ca_base->ca_mult_error_alias = CA_GART_FETCH_ERR; | 192 | writeq(CA_GART_FETCH_ERR, &ca_base->ca_mult_error_alias); |
190 | ca_base->ca_int_mask &= ~CA_GART_FETCH_ERR; | 193 | __sn_clrq_relaxed(&ca_base->ca_int_mask, CA_GART_FETCH_ERR); |
191 | 194 | ||
192 | /* | 195 | /* |
193 | * Program the aperature and gart registers in TIOCA | 196 | * Program the aperature and gart registers in TIOCA |
194 | */ | 197 | */ |
195 | 198 | ||
196 | ca_base->ca_gart_aperature = ap_reg; | 199 | writeq(ap_reg, &ca_base->ca_gart_aperature); |
197 | ca_base->ca_gart_ptr_table = tioca_kern->ca_gart_coretalk_addr | 1; | 200 | writeq(tioca_kern->ca_gart_coretalk_addr|1, &ca_base->ca_gart_ptr_table); |
198 | 201 | ||
199 | return 0; | 202 | return 0; |
200 | } | 203 | } |
@@ -211,7 +214,6 @@ void | |||
211 | tioca_fastwrite_enable(struct tioca_kernel *tioca_kern) | 214 | tioca_fastwrite_enable(struct tioca_kernel *tioca_kern) |
212 | { | 215 | { |
213 | int cap_ptr; | 216 | int cap_ptr; |
214 | uint64_t ca_control1; | ||
215 | uint32_t reg; | 217 | uint32_t reg; |
216 | struct tioca *tioca_base; | 218 | struct tioca *tioca_base; |
217 | struct pci_dev *pdev; | 219 | struct pci_dev *pdev; |
@@ -256,9 +258,7 @@ tioca_fastwrite_enable(struct tioca_kernel *tioca_kern) | |||
256 | */ | 258 | */ |
257 | 259 | ||
258 | tioca_base = (struct tioca *)common->ca_common.bs_base; | 260 | tioca_base = (struct tioca *)common->ca_common.bs_base; |
259 | ca_control1 = tioca_base->ca_control1; | 261 | __sn_setq_relaxed(&tioca_base->ca_control1, CA_AGP_FW_ENABLE); |
260 | ca_control1 |= CA_AGP_FW_ENABLE; | ||
261 | tioca_base->ca_control1 = ca_control1; | ||
262 | } | 262 | } |
263 | 263 | ||
264 | EXPORT_SYMBOL(tioca_fastwrite_enable); /* used by agp-sgi */ | 264 | EXPORT_SYMBOL(tioca_fastwrite_enable); /* used by agp-sgi */ |
@@ -345,7 +345,7 @@ tioca_dma_d48(struct pci_dev *pdev, uint64_t paddr) | |||
345 | return 0; | 345 | return 0; |
346 | } | 346 | } |
347 | 347 | ||
348 | agp_dma_extn = ca_base->ca_agp_dma_addr_extn; | 348 | agp_dma_extn = __sn_readq_relaxed(&ca_base->ca_agp_dma_addr_extn); |
349 | if (node_upper != (agp_dma_extn >> CA_AGP_DMA_NODE_ID_SHFT)) { | 349 | if (node_upper != (agp_dma_extn >> CA_AGP_DMA_NODE_ID_SHFT)) { |
350 | printk(KERN_ERR "%s: coretalk upper node (%u) " | 350 | printk(KERN_ERR "%s: coretalk upper node (%u) " |
351 | "mismatch with ca_agp_dma_addr_extn (%lu)\n", | 351 | "mismatch with ca_agp_dma_addr_extn (%lu)\n", |
@@ -392,7 +392,7 @@ tioca_dma_mapped(struct pci_dev *pdev, uint64_t paddr, size_t req_size) | |||
392 | * allocate a map struct | 392 | * allocate a map struct |
393 | */ | 393 | */ |
394 | 394 | ||
395 | ca_dmamap = kcalloc(1, sizeof(struct tioca_dmamap), GFP_ATOMIC); | 395 | ca_dmamap = kzalloc(sizeof(struct tioca_dmamap), GFP_ATOMIC); |
396 | if (!ca_dmamap) | 396 | if (!ca_dmamap) |
397 | goto map_return; | 397 | goto map_return; |
398 | 398 | ||
@@ -600,7 +600,7 @@ tioca_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont | |||
600 | * Allocate kernel bus soft and copy from prom. | 600 | * Allocate kernel bus soft and copy from prom. |
601 | */ | 601 | */ |
602 | 602 | ||
603 | tioca_common = kcalloc(1, sizeof(struct tioca_common), GFP_KERNEL); | 603 | tioca_common = kzalloc(sizeof(struct tioca_common), GFP_KERNEL); |
604 | if (!tioca_common) | 604 | if (!tioca_common) |
605 | return NULL; | 605 | return NULL; |
606 | 606 | ||
@@ -609,7 +609,7 @@ tioca_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont | |||
609 | 609 | ||
610 | /* init kernel-private area */ | 610 | /* init kernel-private area */ |
611 | 611 | ||
612 | tioca_kern = kcalloc(1, sizeof(struct tioca_kernel), GFP_KERNEL); | 612 | tioca_kern = kzalloc(sizeof(struct tioca_kernel), GFP_KERNEL); |
613 | if (!tioca_kern) { | 613 | if (!tioca_kern) { |
614 | kfree(tioca_common); | 614 | kfree(tioca_common); |
615 | return NULL; | 615 | return NULL; |
diff --git a/arch/ia64/sn/pci/tioce_provider.c b/arch/ia64/sn/pci/tioce_provider.c index 8e75db2b825d..9f03d4e5121c 100644 --- a/arch/ia64/sn/pci/tioce_provider.c +++ b/arch/ia64/sn/pci/tioce_provider.c | |||
@@ -11,6 +11,7 @@ | |||
11 | #include <linux/pci.h> | 11 | #include <linux/pci.h> |
12 | #include <asm/sn/sn_sal.h> | 12 | #include <asm/sn/sn_sal.h> |
13 | #include <asm/sn/addrs.h> | 13 | #include <asm/sn/addrs.h> |
14 | #include <asm/sn/io.h> | ||
14 | #include <asm/sn/pcidev.h> | 15 | #include <asm/sn/pcidev.h> |
15 | #include <asm/sn/pcibus_provider_defs.h> | 16 | #include <asm/sn/pcibus_provider_defs.h> |
16 | #include <asm/sn/tioce_provider.h> | 17 | #include <asm/sn/tioce_provider.h> |
@@ -227,7 +228,7 @@ tioce_alloc_map(struct tioce_kernel *ce_kern, int type, int port, | |||
227 | 228 | ||
228 | ate = ATE_MAKE(addr, pagesize); | 229 | ate = ATE_MAKE(addr, pagesize); |
229 | ate_shadow[i + j] = ate; | 230 | ate_shadow[i + j] = ate; |
230 | ate_reg[i + j] = ate; | 231 | writeq(ate, &ate_reg[i + j]); |
231 | addr += pagesize; | 232 | addr += pagesize; |
232 | } | 233 | } |
233 | 234 | ||
@@ -268,10 +269,10 @@ tioce_dma_d32(struct pci_dev *pdev, uint64_t ct_addr) | |||
268 | pcidev_to_tioce(pdev, &ce_mmr, &ce_kern, &port); | 269 | pcidev_to_tioce(pdev, &ce_mmr, &ce_kern, &port); |
269 | 270 | ||
270 | if (ce_kern->ce_port[port].dirmap_refcnt == 0) { | 271 | if (ce_kern->ce_port[port].dirmap_refcnt == 0) { |
271 | volatile uint64_t tmp; | 272 | uint64_t tmp; |
272 | 273 | ||
273 | ce_kern->ce_port[port].dirmap_shadow = ct_upper; | 274 | ce_kern->ce_port[port].dirmap_shadow = ct_upper; |
274 | ce_mmr->ce_ure_dir_map[port] = ct_upper; | 275 | writeq(ct_upper, &ce_mmr->ce_ure_dir_map[port]); |
275 | tmp = ce_mmr->ce_ure_dir_map[port]; | 276 | tmp = ce_mmr->ce_ure_dir_map[port]; |
276 | dma_ok = 1; | 277 | dma_ok = 1; |
277 | } else | 278 | } else |
@@ -343,7 +344,7 @@ tioce_dma_unmap(struct pci_dev *pdev, dma_addr_t bus_addr, int dir) | |||
343 | if (TIOCE_D32_ADDR(bus_addr)) { | 344 | if (TIOCE_D32_ADDR(bus_addr)) { |
344 | if (--ce_kern->ce_port[port].dirmap_refcnt == 0) { | 345 | if (--ce_kern->ce_port[port].dirmap_refcnt == 0) { |
345 | ce_kern->ce_port[port].dirmap_shadow = 0; | 346 | ce_kern->ce_port[port].dirmap_shadow = 0; |
346 | ce_mmr->ce_ure_dir_map[port] = 0; | 347 | writeq(0, &ce_mmr->ce_ure_dir_map[port]); |
347 | } | 348 | } |
348 | } else { | 349 | } else { |
349 | struct tioce_dmamap *map; | 350 | struct tioce_dmamap *map; |
@@ -582,18 +583,18 @@ tioce_kern_init(struct tioce_common *tioce_common) | |||
582 | */ | 583 | */ |
583 | 584 | ||
584 | tioce_mmr = (struct tioce *)tioce_common->ce_pcibus.bs_base; | 585 | tioce_mmr = (struct tioce *)tioce_common->ce_pcibus.bs_base; |
585 | tioce_mmr->ce_ure_page_map &= ~CE_URE_PAGESIZE_MASK; | 586 | __sn_clrq_relaxed(&tioce_mmr->ce_ure_page_map, CE_URE_PAGESIZE_MASK); |
586 | tioce_mmr->ce_ure_page_map |= CE_URE_256K_PAGESIZE; | 587 | __sn_setq_relaxed(&tioce_mmr->ce_ure_page_map, CE_URE_256K_PAGESIZE); |
587 | tioce_kern->ce_ate3240_pagesize = KB(256); | 588 | tioce_kern->ce_ate3240_pagesize = KB(256); |
588 | 589 | ||
589 | for (i = 0; i < TIOCE_NUM_M40_ATES; i++) { | 590 | for (i = 0; i < TIOCE_NUM_M40_ATES; i++) { |
590 | tioce_kern->ce_ate40_shadow[i] = 0; | 591 | tioce_kern->ce_ate40_shadow[i] = 0; |
591 | tioce_mmr->ce_ure_ate40[i] = 0; | 592 | writeq(0, &tioce_mmr->ce_ure_ate40[i]); |
592 | } | 593 | } |
593 | 594 | ||
594 | for (i = 0; i < TIOCE_NUM_M3240_ATES; i++) { | 595 | for (i = 0; i < TIOCE_NUM_M3240_ATES; i++) { |
595 | tioce_kern->ce_ate3240_shadow[i] = 0; | 596 | tioce_kern->ce_ate3240_shadow[i] = 0; |
596 | tioce_mmr->ce_ure_ate3240[i] = 0; | 597 | writeq(0, &tioce_mmr->ce_ure_ate3240[i]); |
597 | } | 598 | } |
598 | 599 | ||
599 | return tioce_kern; | 600 | return tioce_kern; |
@@ -665,7 +666,7 @@ tioce_force_interrupt(struct sn_irq_info *sn_irq_info) | |||
665 | default: | 666 | default: |
666 | return; | 667 | return; |
667 | } | 668 | } |
668 | ce_mmr->ce_adm_force_int = force_int_val; | 669 | writeq(force_int_val, &ce_mmr->ce_adm_force_int); |
669 | } | 670 | } |
670 | 671 | ||
671 | /** | 672 | /** |
@@ -686,6 +687,7 @@ tioce_target_interrupt(struct sn_irq_info *sn_irq_info) | |||
686 | struct tioce_common *ce_common; | 687 | struct tioce_common *ce_common; |
687 | struct tioce *ce_mmr; | 688 | struct tioce *ce_mmr; |
688 | int bit; | 689 | int bit; |
690 | uint64_t vector; | ||
689 | 691 | ||
690 | pcidev_info = (struct pcidev_info *)sn_irq_info->irq_pciioinfo; | 692 | pcidev_info = (struct pcidev_info *)sn_irq_info->irq_pciioinfo; |
691 | if (!pcidev_info) | 693 | if (!pcidev_info) |
@@ -696,11 +698,11 @@ tioce_target_interrupt(struct sn_irq_info *sn_irq_info) | |||
696 | 698 | ||
697 | bit = sn_irq_info->irq_int_bit; | 699 | bit = sn_irq_info->irq_int_bit; |
698 | 700 | ||
699 | ce_mmr->ce_adm_int_mask |= (1UL << bit); | 701 | __sn_setq_relaxed(&ce_mmr->ce_adm_int_mask, (1UL << bit)); |
700 | ce_mmr->ce_adm_int_dest[bit] = | 702 | vector = (uint64_t)sn_irq_info->irq_irq << INTR_VECTOR_SHFT; |
701 | ((uint64_t)sn_irq_info->irq_irq << INTR_VECTOR_SHFT) | | 703 | vector |= sn_irq_info->irq_xtalkaddr; |
702 | sn_irq_info->irq_xtalkaddr; | 704 | writeq(vector, &ce_mmr->ce_adm_int_dest[bit]); |
703 | ce_mmr->ce_adm_int_mask &= ~(1UL << bit); | 705 | __sn_clrq_relaxed(&ce_mmr->ce_adm_int_mask, (1UL << bit)); |
704 | 706 | ||
705 | tioce_force_interrupt(sn_irq_info); | 707 | tioce_force_interrupt(sn_irq_info); |
706 | } | 708 | } |