aboutsummaryrefslogtreecommitdiffstats
path: root/arch/i386
diff options
context:
space:
mode:
Diffstat (limited to 'arch/i386')
-rw-r--r--arch/i386/Kconfig24
-rw-r--r--arch/i386/Kconfig.debug9
-rw-r--r--arch/i386/defconfig1172
-rw-r--r--arch/i386/kernel/Makefile2
-rw-r--r--arch/i386/kernel/alternative.c321
-rw-r--r--arch/i386/kernel/apic.c1
-rw-r--r--arch/i386/kernel/cpu/centaur.c1
-rw-r--r--arch/i386/kernel/cpu/common.c47
-rw-r--r--arch/i386/kernel/cpu/cpufreq/powernow-k8.c4
-rw-r--r--arch/i386/kernel/cpu/intel.c12
-rw-r--r--arch/i386/kernel/cpu/intel_cacheinfo.c4
-rw-r--r--arch/i386/kernel/cpu/proc.c2
-rw-r--r--arch/i386/kernel/crash.c2
-rw-r--r--arch/i386/kernel/efi.c4
-rw-r--r--arch/i386/kernel/entry.S4
-rw-r--r--arch/i386/kernel/head.S5
-rw-r--r--arch/i386/kernel/io_apic.c25
-rw-r--r--arch/i386/kernel/kprobes.c4
-rw-r--r--arch/i386/kernel/module.c32
-rw-r--r--arch/i386/kernel/mpparse.c7
-rw-r--r--arch/i386/kernel/nmi.c6
-rw-r--r--arch/i386/kernel/process.c2
-rw-r--r--arch/i386/kernel/ptrace.c4
-rw-r--r--arch/i386/kernel/semaphore.c8
-rw-r--r--arch/i386/kernel/setup.c140
-rw-r--r--arch/i386/kernel/signal.c7
-rw-r--r--arch/i386/kernel/smp.c28
-rw-r--r--arch/i386/kernel/smpboot.c3
-rw-r--r--arch/i386/kernel/sys_i386.c25
-rw-r--r--arch/i386/kernel/timers/timer_hpet.c2
-rw-r--r--arch/i386/kernel/timers/timer_tsc.c2
-rw-r--r--arch/i386/kernel/topology.c9
-rw-r--r--arch/i386/kernel/traps.c57
-rw-r--r--arch/i386/kernel/vmlinux.lds.S20
-rw-r--r--arch/i386/kernel/vsyscall-sysenter.S3
-rw-r--r--arch/i386/mach-es7000/es7000.h5
-rw-r--r--arch/i386/mach-es7000/es7000plat.c6
-rw-r--r--arch/i386/mm/fault.c210
-rw-r--r--arch/i386/mm/hugetlbpage.c12
-rw-r--r--arch/i386/mm/init.c47
-rw-r--r--arch/i386/mm/pageattr.c20
-rw-r--r--arch/i386/oprofile/nmi_int.c7
-rw-r--r--arch/i386/pci/Makefile2
-rw-r--r--arch/i386/pci/common.c32
-rw-r--r--arch/i386/pci/direct.c15
-rw-r--r--arch/i386/pci/init.c25
-rw-r--r--arch/i386/pci/mmconfig.c11
-rw-r--r--arch/i386/pci/pcbios.c4
-rw-r--r--arch/i386/pci/pci.h3
49 files changed, 1564 insertions, 833 deletions
diff --git a/arch/i386/Kconfig b/arch/i386/Kconfig
index 5b1a7d46d1d9..bfea1bedcbf2 100644
--- a/arch/i386/Kconfig
+++ b/arch/i386/Kconfig
@@ -80,6 +80,7 @@ config X86_VOYAGER
80 80
81config X86_NUMAQ 81config X86_NUMAQ
82 bool "NUMAQ (IBM/Sequent)" 82 bool "NUMAQ (IBM/Sequent)"
83 select SMP
83 select NUMA 84 select NUMA
84 help 85 help
85 This option is used for getting Linux to run on a (IBM/Sequent) NUMA 86 This option is used for getting Linux to run on a (IBM/Sequent) NUMA
@@ -400,6 +401,7 @@ choice
400 401
401config NOHIGHMEM 402config NOHIGHMEM
402 bool "off" 403 bool "off"
404 depends on !X86_NUMAQ
403 ---help--- 405 ---help---
404 Linux can use up to 64 Gigabytes of physical memory on x86 systems. 406 Linux can use up to 64 Gigabytes of physical memory on x86 systems.
405 However, the address space of 32-bit x86 processors is only 4 407 However, the address space of 32-bit x86 processors is only 4
@@ -436,6 +438,7 @@ config NOHIGHMEM
436 438
437config HIGHMEM4G 439config HIGHMEM4G
438 bool "4GB" 440 bool "4GB"
441 depends on !X86_NUMAQ
439 help 442 help
440 Select this if you have a 32-bit processor and between 1 and 4 443 Select this if you have a 32-bit processor and between 1 and 4
441 gigabytes of physical RAM. 444 gigabytes of physical RAM.
@@ -503,10 +506,6 @@ config NUMA
503 default n if X86_PC 506 default n if X86_PC
504 default y if (X86_NUMAQ || X86_SUMMIT) 507 default y if (X86_NUMAQ || X86_SUMMIT)
505 508
506# Need comments to help the hapless user trying to turn on NUMA support
507comment "NUMA (NUMA-Q) requires SMP, 64GB highmem support"
508 depends on X86_NUMAQ && (!HIGHMEM64G || !SMP)
509
510comment "NUMA (Summit) requires SMP, 64GB highmem support, ACPI" 509comment "NUMA (Summit) requires SMP, 64GB highmem support, ACPI"
511 depends on X86_SUMMIT && (!HIGHMEM64G || !ACPI) 510 depends on X86_SUMMIT && (!HIGHMEM64G || !ACPI)
512 511
@@ -660,13 +659,18 @@ config BOOT_IOREMAP
660 default y 659 default y
661 660
662config REGPARM 661config REGPARM
663 bool "Use register arguments (EXPERIMENTAL)" 662 bool "Use register arguments"
664 depends on EXPERIMENTAL 663 default y
665 default n
666 help 664 help
667 Compile the kernel with -mregparm=3. This uses a different ABI 665 Compile the kernel with -mregparm=3. This instructs gcc to use
668 and passes the first three arguments of a function call in registers. 666 a more efficient function call ABI which passes the first three
669 This will probably break binary only modules. 667 arguments of a function call via registers, which results in denser
668 and faster code.
669
670 If this option is disabled, then the default ABI of passing
671 arguments via the stack is used.
672
673 If unsure, say Y.
670 674
671config SECCOMP 675config SECCOMP
672 bool "Enable seccomp to safely compute untrusted bytecode" 676 bool "Enable seccomp to safely compute untrusted bytecode"
diff --git a/arch/i386/Kconfig.debug b/arch/i386/Kconfig.debug
index bf32ecc9ad04..00108ba9a78d 100644
--- a/arch/i386/Kconfig.debug
+++ b/arch/i386/Kconfig.debug
@@ -31,6 +31,15 @@ config DEBUG_STACK_USAGE
31 31
32 This option will slow down process creation somewhat. 32 This option will slow down process creation somewhat.
33 33
34config STACK_BACKTRACE_COLS
35 int "Stack backtraces per line" if DEBUG_KERNEL
36 range 1 3
37 default 2
38 help
39 Selects how many stack backtrace entries per line to display.
40
41 This can save screen space when displaying traces.
42
34comment "Page alloc debug is incompatible with Software Suspend on i386" 43comment "Page alloc debug is incompatible with Software Suspend on i386"
35 depends on DEBUG_KERNEL && SOFTWARE_SUSPEND 44 depends on DEBUG_KERNEL && SOFTWARE_SUSPEND
36 45
diff --git a/arch/i386/defconfig b/arch/i386/defconfig
index 3cbe6e9cb9fc..1629c3ac9bee 100644
--- a/arch/i386/defconfig
+++ b/arch/i386/defconfig
@@ -1,49 +1,87 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# 3#
4CONFIG_X86_32=y
5CONFIG_SEMAPHORE_SLEEPERS=y
4CONFIG_X86=y 6CONFIG_X86=y
5CONFIG_MMU=y 7CONFIG_MMU=y
6CONFIG_UID16=y
7CONFIG_GENERIC_ISA_DMA=y 8CONFIG_GENERIC_ISA_DMA=y
9CONFIG_GENERIC_IOMAP=y
10CONFIG_ARCH_MAY_HAVE_PC_FDC=y
11CONFIG_DMI=y
8 12
9# 13#
10# Code maturity level options 14# Code maturity level options
11# 15#
12CONFIG_EXPERIMENTAL=y 16CONFIG_EXPERIMENTAL=y
13CONFIG_CLEAN_COMPILE=y 17CONFIG_BROKEN_ON_SMP=y
14CONFIG_STANDALONE=y 18CONFIG_INIT_ENV_ARG_LIMIT=32
15 19
16# 20#
17# General setup 21# General setup
18# 22#
23CONFIG_LOCALVERSION=""
24# CONFIG_LOCALVERSION_AUTO is not set
19CONFIG_SWAP=y 25CONFIG_SWAP=y
20CONFIG_SYSVIPC=y 26CONFIG_SYSVIPC=y
21CONFIG_POSIX_MQUEUE=y 27# CONFIG_POSIX_MQUEUE is not set
22# CONFIG_BSD_PROCESS_ACCT is not set 28# CONFIG_BSD_PROCESS_ACCT is not set
23CONFIG_SYSCTL=y 29CONFIG_SYSCTL=y
24CONFIG_AUDIT=y 30# CONFIG_AUDIT is not set
25CONFIG_AUDITSYSCALL=y 31CONFIG_IKCONFIG=y
26CONFIG_LOG_BUF_SHIFT=15 32CONFIG_IKCONFIG_PROC=y
27CONFIG_HOTPLUG=y 33CONFIG_INITRAMFS_SOURCE=""
28# CONFIG_IKCONFIG is not set 34CONFIG_UID16=y
35CONFIG_VM86=y
36CONFIG_CC_OPTIMIZE_FOR_SIZE=y
29# CONFIG_EMBEDDED is not set 37# CONFIG_EMBEDDED is not set
30CONFIG_KALLSYMS=y 38CONFIG_KALLSYMS=y
39# CONFIG_KALLSYMS_EXTRA_PASS is not set
40CONFIG_HOTPLUG=y
41CONFIG_PRINTK=y
42CONFIG_BUG=y
43CONFIG_ELF_CORE=y
44CONFIG_BASE_FULL=y
31CONFIG_FUTEX=y 45CONFIG_FUTEX=y
32CONFIG_EPOLL=y 46CONFIG_EPOLL=y
33CONFIG_IOSCHED_NOOP=y 47CONFIG_SHMEM=y
34CONFIG_IOSCHED_AS=y 48CONFIG_CC_ALIGN_FUNCTIONS=0
35CONFIG_IOSCHED_DEADLINE=y 49CONFIG_CC_ALIGN_LABELS=0
36CONFIG_IOSCHED_CFQ=y 50CONFIG_CC_ALIGN_LOOPS=0
37# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set 51CONFIG_CC_ALIGN_JUMPS=0
52CONFIG_SLAB=y
53# CONFIG_TINY_SHMEM is not set
54CONFIG_BASE_SMALL=0
55# CONFIG_SLOB is not set
38 56
39# 57#
40# Loadable module support 58# Loadable module support
41# 59#
42CONFIG_MODULES=y 60CONFIG_MODULES=y
43# CONFIG_MODULE_UNLOAD is not set 61CONFIG_MODULE_UNLOAD=y
62CONFIG_MODULE_FORCE_UNLOAD=y
44CONFIG_OBSOLETE_MODPARM=y 63CONFIG_OBSOLETE_MODPARM=y
45# CONFIG_MODVERSIONS is not set 64# CONFIG_MODVERSIONS is not set
46CONFIG_KMOD=y 65# CONFIG_MODULE_SRCVERSION_ALL is not set
66# CONFIG_KMOD is not set
67
68#
69# Block layer
70#
71# CONFIG_LBD is not set
72
73#
74# IO Schedulers
75#
76CONFIG_IOSCHED_NOOP=y
77# CONFIG_IOSCHED_AS is not set
78# CONFIG_IOSCHED_DEADLINE is not set
79CONFIG_IOSCHED_CFQ=y
80# CONFIG_DEFAULT_AS is not set
81# CONFIG_DEFAULT_DEADLINE is not set
82CONFIG_DEFAULT_CFQ=y
83# CONFIG_DEFAULT_NOOP is not set
84CONFIG_DEFAULT_IOSCHED="cfq"
47 85
48# 86#
49# Processor type and features 87# Processor type and features
@@ -66,43 +104,50 @@ CONFIG_X86_PC=y
66# CONFIG_MPENTIUMII is not set 104# CONFIG_MPENTIUMII is not set
67# CONFIG_MPENTIUMIII is not set 105# CONFIG_MPENTIUMIII is not set
68# CONFIG_MPENTIUMM is not set 106# CONFIG_MPENTIUMM is not set
69CONFIG_MPENTIUM4=y 107# CONFIG_MPENTIUM4 is not set
70# CONFIG_MK6 is not set 108# CONFIG_MK6 is not set
71# CONFIG_MK7 is not set 109CONFIG_MK7=y
72# CONFIG_MK8 is not set 110# CONFIG_MK8 is not set
73# CONFIG_MCRUSOE is not set 111# CONFIG_MCRUSOE is not set
74# CONFIG_MEFFICEON is not set 112# CONFIG_MEFFICEON is not set
75# CONFIG_MWINCHIPC6 is not set 113# CONFIG_MWINCHIPC6 is not set
76# CONFIG_MWINCHIP2 is not set 114# CONFIG_MWINCHIP2 is not set
77# CONFIG_MWINCHIP3D is not set 115# CONFIG_MWINCHIP3D is not set
116# CONFIG_MGEODEGX1 is not set
117# CONFIG_MGEODE_LX is not set
78# CONFIG_MCYRIXIII is not set 118# CONFIG_MCYRIXIII is not set
79# CONFIG_MVIAC3_2 is not set 119# CONFIG_MVIAC3_2 is not set
80# CONFIG_X86_GENERIC is not set 120# CONFIG_X86_GENERIC is not set
81CONFIG_X86_CMPXCHG=y 121CONFIG_X86_CMPXCHG=y
82CONFIG_X86_XADD=y 122CONFIG_X86_XADD=y
83CONFIG_X86_L1_CACHE_SHIFT=7 123CONFIG_X86_L1_CACHE_SHIFT=6
84CONFIG_RWSEM_XCHGADD_ALGORITHM=y 124CONFIG_RWSEM_XCHGADD_ALGORITHM=y
125CONFIG_GENERIC_CALIBRATE_DELAY=y
85CONFIG_X86_WP_WORKS_OK=y 126CONFIG_X86_WP_WORKS_OK=y
86CONFIG_X86_INVLPG=y 127CONFIG_X86_INVLPG=y
87CONFIG_X86_BSWAP=y 128CONFIG_X86_BSWAP=y
88CONFIG_X86_POPAD_OK=y 129CONFIG_X86_POPAD_OK=y
130CONFIG_X86_CMPXCHG64=y
89CONFIG_X86_GOOD_APIC=y 131CONFIG_X86_GOOD_APIC=y
90CONFIG_X86_INTEL_USERCOPY=y 132CONFIG_X86_INTEL_USERCOPY=y
91CONFIG_X86_USE_PPRO_CHECKSUM=y 133CONFIG_X86_USE_PPRO_CHECKSUM=y
134CONFIG_X86_USE_3DNOW=y
135CONFIG_X86_TSC=y
92# CONFIG_HPET_TIMER is not set 136# CONFIG_HPET_TIMER is not set
93# CONFIG_HPET_EMULATE_RTC is not set 137# CONFIG_SMP is not set
94CONFIG_SMP=y 138CONFIG_PREEMPT_NONE=y
95CONFIG_NR_CPUS=8 139# CONFIG_PREEMPT_VOLUNTARY is not set
96CONFIG_SCHED_SMT=y 140# CONFIG_PREEMPT is not set
97CONFIG_PREEMPT=y 141CONFIG_X86_UP_APIC=y
142CONFIG_X86_UP_IOAPIC=y
98CONFIG_X86_LOCAL_APIC=y 143CONFIG_X86_LOCAL_APIC=y
99CONFIG_X86_IO_APIC=y 144CONFIG_X86_IO_APIC=y
100CONFIG_X86_TSC=y
101CONFIG_X86_MCE=y 145CONFIG_X86_MCE=y
102CONFIG_X86_MCE_NONFATAL=y 146CONFIG_X86_MCE_NONFATAL=y
103CONFIG_X86_MCE_P4THERMAL=y 147# CONFIG_X86_MCE_P4THERMAL is not set
104# CONFIG_TOSHIBA is not set 148# CONFIG_TOSHIBA is not set
105# CONFIG_I8K is not set 149# CONFIG_I8K is not set
150# CONFIG_X86_REBOOTFIXUPS is not set
106# CONFIG_MICROCODE is not set 151# CONFIG_MICROCODE is not set
107# CONFIG_X86_MSR is not set 152# CONFIG_X86_MSR is not set
108# CONFIG_X86_CPUID is not set 153# CONFIG_X86_CPUID is not set
@@ -111,41 +156,71 @@ CONFIG_X86_MCE_P4THERMAL=y
111# Firmware Drivers 156# Firmware Drivers
112# 157#
113# CONFIG_EDD is not set 158# CONFIG_EDD is not set
159# CONFIG_DELL_RBU is not set
160# CONFIG_DCDBAS is not set
114CONFIG_NOHIGHMEM=y 161CONFIG_NOHIGHMEM=y
115# CONFIG_HIGHMEM4G is not set 162# CONFIG_HIGHMEM4G is not set
116# CONFIG_HIGHMEM64G is not set 163# CONFIG_HIGHMEM64G is not set
164CONFIG_VMSPLIT_3G=y
165# CONFIG_VMSPLIT_3G_OPT is not set
166# CONFIG_VMSPLIT_2G is not set
167# CONFIG_VMSPLIT_1G is not set
168CONFIG_PAGE_OFFSET=0xC0000000
169CONFIG_ARCH_FLATMEM_ENABLE=y
170CONFIG_ARCH_SPARSEMEM_ENABLE=y
171CONFIG_ARCH_SELECT_MEMORY_MODEL=y
172CONFIG_SELECT_MEMORY_MODEL=y
173CONFIG_FLATMEM_MANUAL=y
174# CONFIG_DISCONTIGMEM_MANUAL is not set
175# CONFIG_SPARSEMEM_MANUAL is not set
176CONFIG_FLATMEM=y
177CONFIG_FLAT_NODE_MEM_MAP=y
178CONFIG_SPARSEMEM_STATIC=y
179CONFIG_SPLIT_PTLOCK_CPUS=4
117# CONFIG_MATH_EMULATION is not set 180# CONFIG_MATH_EMULATION is not set
118CONFIG_MTRR=y 181CONFIG_MTRR=y
119# CONFIG_EFI is not set 182# CONFIG_EFI is not set
120CONFIG_IRQBALANCE=y 183CONFIG_REGPARM=y
121CONFIG_HAVE_DEC_LOCK=y 184# CONFIG_SECCOMP is not set
122# CONFIG_REGPARM is not set 185CONFIG_HZ_100=y
186# CONFIG_HZ_250 is not set
187# CONFIG_HZ_1000 is not set
188CONFIG_HZ=100
189# CONFIG_KEXEC is not set
190CONFIG_PHYSICAL_START=0x100000
191CONFIG_DOUBLEFAULT=y
123 192
124# 193#
125# Power management options (ACPI, APM) 194# Power management options (ACPI, APM)
126# 195#
127CONFIG_PM=y 196CONFIG_PM=y
197# CONFIG_PM_LEGACY is not set
198# CONFIG_PM_DEBUG is not set
128CONFIG_SOFTWARE_SUSPEND=y 199CONFIG_SOFTWARE_SUSPEND=y
200CONFIG_PM_STD_PARTITION="/dev/hda2"
129 201
130# 202#
131# ACPI (Advanced Configuration and Power Interface) Support 203# ACPI (Advanced Configuration and Power Interface) Support
132# 204#
133CONFIG_ACPI=y 205CONFIG_ACPI=y
134CONFIG_ACPI_SLEEP=y 206# CONFIG_ACPI_SLEEP is not set
135CONFIG_ACPI_SLEEP_PROC_FS=y 207# CONFIG_ACPI_AC is not set
136CONFIG_ACPI_AC=y 208# CONFIG_ACPI_BATTERY is not set
137CONFIG_ACPI_BATTERY=y 209# CONFIG_ACPI_BUTTON is not set
138CONFIG_ACPI_BUTTON=y 210# CONFIG_ACPI_VIDEO is not set
139CONFIG_ACPI_FAN=y 211# CONFIG_ACPI_HOTKEY is not set
140CONFIG_ACPI_PROCESSOR=y 212# CONFIG_ACPI_FAN is not set
141CONFIG_ACPI_THERMAL=y 213# CONFIG_ACPI_PROCESSOR is not set
142# CONFIG_ACPI_ASUS is not set 214# CONFIG_ACPI_ASUS is not set
215# CONFIG_ACPI_IBM is not set
143# CONFIG_ACPI_TOSHIBA is not set 216# CONFIG_ACPI_TOSHIBA is not set
217CONFIG_ACPI_BLACKLIST_YEAR=0
144# CONFIG_ACPI_DEBUG is not set 218# CONFIG_ACPI_DEBUG is not set
145CONFIG_ACPI_EC=y 219CONFIG_ACPI_EC=y
146CONFIG_ACPI_POWER=y 220CONFIG_ACPI_POWER=y
147CONFIG_ACPI_SYSTEM=y 221CONFIG_ACPI_SYSTEM=y
148# CONFIG_X86_PM_TIMER is not set 222# CONFIG_X86_PM_TIMER is not set
223# CONFIG_ACPI_CONTAINER is not set
149 224
150# 225#
151# APM (Advanced Power Management) BIOS Support 226# APM (Advanced Power Management) BIOS Support
@@ -168,19 +243,18 @@ CONFIG_PCI_GOANY=y
168CONFIG_PCI_BIOS=y 243CONFIG_PCI_BIOS=y
169CONFIG_PCI_DIRECT=y 244CONFIG_PCI_DIRECT=y
170CONFIG_PCI_MMCONFIG=y 245CONFIG_PCI_MMCONFIG=y
171# CONFIG_PCI_USE_VECTOR is not set 246# CONFIG_PCIEPORTBUS is not set
172CONFIG_PCI_LEGACY_PROC=y 247# CONFIG_PCI_MSI is not set
173CONFIG_PCI_NAMES=y 248# CONFIG_PCI_LEGACY_PROC is not set
174CONFIG_ISA=y 249CONFIG_ISA_DMA_API=y
175# CONFIG_EISA is not set 250# CONFIG_ISA is not set
176# CONFIG_MCA is not set 251# CONFIG_MCA is not set
177# CONFIG_SCx200 is not set 252# CONFIG_SCx200 is not set
178 253
179# 254#
180# PCMCIA/CardBus support 255# PCCARD (PCMCIA/CardBus) support
181# 256#
182# CONFIG_PCMCIA is not set 257# CONFIG_PCCARD is not set
183CONFIG_PCMCIA_PROBE=y
184 258
185# 259#
186# PCI Hotplug Support 260# PCI Hotplug Support
@@ -191,8 +265,147 @@ CONFIG_PCMCIA_PROBE=y
191# Executable file formats 265# Executable file formats
192# 266#
193CONFIG_BINFMT_ELF=y 267CONFIG_BINFMT_ELF=y
194CONFIG_BINFMT_AOUT=y 268# CONFIG_BINFMT_AOUT is not set
195CONFIG_BINFMT_MISC=y 269# CONFIG_BINFMT_MISC is not set
270
271#
272# Networking
273#
274CONFIG_NET=y
275
276#
277# Networking options
278#
279# CONFIG_NETDEBUG is not set
280CONFIG_PACKET=y
281CONFIG_PACKET_MMAP=y
282CONFIG_UNIX=y
283# CONFIG_NET_KEY is not set
284CONFIG_INET=y
285# CONFIG_IP_MULTICAST is not set
286# CONFIG_IP_ADVANCED_ROUTER is not set
287CONFIG_IP_FIB_HASH=y
288# CONFIG_IP_PNP is not set
289# CONFIG_NET_IPIP is not set
290# CONFIG_NET_IPGRE is not set
291# CONFIG_ARPD is not set
292# CONFIG_SYN_COOKIES is not set
293# CONFIG_INET_AH is not set
294# CONFIG_INET_ESP is not set
295# CONFIG_INET_IPCOMP is not set
296# CONFIG_INET_TUNNEL is not set
297# CONFIG_INET_DIAG is not set
298# CONFIG_TCP_CONG_ADVANCED is not set
299CONFIG_TCP_CONG_BIC=y
300
301#
302# IP: Virtual Server Configuration
303#
304# CONFIG_IP_VS is not set
305# CONFIG_IPV6 is not set
306CONFIG_NETFILTER=y
307# CONFIG_NETFILTER_DEBUG is not set
308
309#
310# Core Netfilter Configuration
311#
312# CONFIG_NETFILTER_NETLINK is not set
313CONFIG_NETFILTER_XTABLES=y
314# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
315# CONFIG_NETFILTER_XT_TARGET_MARK is not set
316# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
317# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
318# CONFIG_NETFILTER_XT_MATCH_CONNTRACK is not set
319# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
320# CONFIG_NETFILTER_XT_MATCH_HELPER is not set
321# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set
322CONFIG_NETFILTER_XT_MATCH_LIMIT=y
323CONFIG_NETFILTER_XT_MATCH_MAC=y
324# CONFIG_NETFILTER_XT_MATCH_MARK is not set
325# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
326# CONFIG_NETFILTER_XT_MATCH_REALM is not set
327# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
328CONFIG_NETFILTER_XT_MATCH_STATE=y
329# CONFIG_NETFILTER_XT_MATCH_STRING is not set
330# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
331
332#
333# IP: Netfilter Configuration
334#
335CONFIG_IP_NF_CONNTRACK=y
336# CONFIG_IP_NF_CT_ACCT is not set
337# CONFIG_IP_NF_CONNTRACK_MARK is not set
338# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
339# CONFIG_IP_NF_CT_PROTO_SCTP is not set
340CONFIG_IP_NF_FTP=y
341# CONFIG_IP_NF_IRC is not set
342# CONFIG_IP_NF_NETBIOS_NS is not set
343# CONFIG_IP_NF_TFTP is not set
344# CONFIG_IP_NF_AMANDA is not set
345# CONFIG_IP_NF_PPTP is not set
346# CONFIG_IP_NF_QUEUE is not set
347CONFIG_IP_NF_IPTABLES=y
348# CONFIG_IP_NF_MATCH_IPRANGE is not set
349# CONFIG_IP_NF_MATCH_MULTIPORT is not set
350# CONFIG_IP_NF_MATCH_TOS is not set
351# CONFIG_IP_NF_MATCH_RECENT is not set
352# CONFIG_IP_NF_MATCH_ECN is not set
353# CONFIG_IP_NF_MATCH_DSCP is not set
354# CONFIG_IP_NF_MATCH_AH_ESP is not set
355# CONFIG_IP_NF_MATCH_TTL is not set
356# CONFIG_IP_NF_MATCH_OWNER is not set
357# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
358# CONFIG_IP_NF_MATCH_HASHLIMIT is not set
359CONFIG_IP_NF_FILTER=y
360# CONFIG_IP_NF_TARGET_REJECT is not set
361CONFIG_IP_NF_TARGET_LOG=y
362# CONFIG_IP_NF_TARGET_ULOG is not set
363# CONFIG_IP_NF_TARGET_TCPMSS is not set
364# CONFIG_IP_NF_NAT is not set
365# CONFIG_IP_NF_MANGLE is not set
366# CONFIG_IP_NF_RAW is not set
367# CONFIG_IP_NF_ARPTABLES is not set
368
369#
370# DCCP Configuration (EXPERIMENTAL)
371#
372# CONFIG_IP_DCCP is not set
373
374#
375# SCTP Configuration (EXPERIMENTAL)
376#
377# CONFIG_IP_SCTP is not set
378
379#
380# TIPC Configuration (EXPERIMENTAL)
381#
382# CONFIG_TIPC is not set
383# CONFIG_ATM is not set
384# CONFIG_BRIDGE is not set
385# CONFIG_VLAN_8021Q is not set
386# CONFIG_DECNET is not set
387# CONFIG_LLC2 is not set
388# CONFIG_IPX is not set
389# CONFIG_ATALK is not set
390# CONFIG_X25 is not set
391# CONFIG_LAPB is not set
392# CONFIG_NET_DIVERT is not set
393# CONFIG_ECONET is not set
394# CONFIG_WAN_ROUTER is not set
395
396#
397# QoS and/or fair queueing
398#
399# CONFIG_NET_SCHED is not set
400
401#
402# Network testing
403#
404# CONFIG_NET_PKTGEN is not set
405# CONFIG_HAMRADIO is not set
406# CONFIG_IRDA is not set
407# CONFIG_BT is not set
408# CONFIG_IEEE80211 is not set
196 409
197# 410#
198# Device Drivers 411# Device Drivers
@@ -201,7 +414,14 @@ CONFIG_BINFMT_MISC=y
201# 414#
202# Generic Driver Options 415# Generic Driver Options
203# 416#
204CONFIG_FW_LOADER=m 417CONFIG_STANDALONE=y
418CONFIG_PREVENT_FIRMWARE_BUILD=y
419# CONFIG_FW_LOADER is not set
420
421#
422# Connector - unified userspace <-> kernelspace linker
423#
424# CONFIG_CONNECTOR is not set
205 425
206# 426#
207# Memory Technology Devices (MTD) 427# Memory Technology Devices (MTD)
@@ -213,40 +433,36 @@ CONFIG_FW_LOADER=m
213# 433#
214CONFIG_PARPORT=y 434CONFIG_PARPORT=y
215CONFIG_PARPORT_PC=y 435CONFIG_PARPORT_PC=y
216CONFIG_PARPORT_PC_CML1=y
217# CONFIG_PARPORT_SERIAL is not set 436# CONFIG_PARPORT_SERIAL is not set
218# CONFIG_PARPORT_PC_FIFO is not set 437# CONFIG_PARPORT_PC_FIFO is not set
219# CONFIG_PARPORT_PC_SUPERIO is not set 438# CONFIG_PARPORT_PC_SUPERIO is not set
220# CONFIG_PARPORT_OTHER is not set 439# CONFIG_PARPORT_GSC is not set
221# CONFIG_PARPORT_1284 is not set 440CONFIG_PARPORT_1284=y
222 441
223# 442#
224# Plug and Play support 443# Plug and Play support
225# 444#
226CONFIG_PNP=y 445# CONFIG_PNP is not set
227# CONFIG_PNP_DEBUG is not set
228
229#
230# Protocols
231#
232# CONFIG_ISAPNP is not set
233# CONFIG_PNPBIOS is not set
234 446
235# 447#
236# Block devices 448# Block devices
237# 449#
238CONFIG_BLK_DEV_FD=y 450# CONFIG_BLK_DEV_FD is not set
239# CONFIG_BLK_DEV_XD is not set
240# CONFIG_PARIDE is not set 451# CONFIG_PARIDE is not set
241# CONFIG_BLK_CPQ_DA is not set 452# CONFIG_BLK_CPQ_DA is not set
242# CONFIG_BLK_CPQ_CISS_DA is not set 453# CONFIG_BLK_CPQ_CISS_DA is not set
243# CONFIG_BLK_DEV_DAC960 is not set 454# CONFIG_BLK_DEV_DAC960 is not set
244# CONFIG_BLK_DEV_UMEM is not set 455# CONFIG_BLK_DEV_UMEM is not set
245# CONFIG_BLK_DEV_LOOP is not set 456# CONFIG_BLK_DEV_COW_COMMON is not set
457CONFIG_BLK_DEV_LOOP=y
458# CONFIG_BLK_DEV_CRYPTOLOOP is not set
246# CONFIG_BLK_DEV_NBD is not set 459# CONFIG_BLK_DEV_NBD is not set
247# CONFIG_BLK_DEV_CARMEL is not set 460# CONFIG_BLK_DEV_SX8 is not set
461# CONFIG_BLK_DEV_UB is not set
248# CONFIG_BLK_DEV_RAM is not set 462# CONFIG_BLK_DEV_RAM is not set
249CONFIG_LBD=y 463CONFIG_BLK_DEV_RAM_COUNT=16
464# CONFIG_CDROM_PKTCDVD is not set
465# CONFIG_ATA_OVER_ETH is not set
250 466
251# 467#
252# ATA/ATAPI/MFM/RLL support 468# ATA/ATAPI/MFM/RLL support
@@ -257,34 +473,31 @@ CONFIG_BLK_DEV_IDE=y
257# 473#
258# Please see Documentation/ide.txt for help/info on IDE drives 474# Please see Documentation/ide.txt for help/info on IDE drives
259# 475#
476# CONFIG_BLK_DEV_IDE_SATA is not set
260# CONFIG_BLK_DEV_HD_IDE is not set 477# CONFIG_BLK_DEV_HD_IDE is not set
261CONFIG_BLK_DEV_IDEDISK=y 478CONFIG_BLK_DEV_IDEDISK=y
262CONFIG_IDEDISK_MULTI_MODE=y 479# CONFIG_IDEDISK_MULTI_MODE is not set
263CONFIG_BLK_DEV_IDECD=y 480CONFIG_BLK_DEV_IDECD=y
264# CONFIG_BLK_DEV_IDETAPE is not set 481# CONFIG_BLK_DEV_IDETAPE is not set
265# CONFIG_BLK_DEV_IDEFLOPPY is not set 482# CONFIG_BLK_DEV_IDEFLOPPY is not set
266# CONFIG_BLK_DEV_IDESCSI is not set 483# CONFIG_BLK_DEV_IDESCSI is not set
267# CONFIG_IDE_TASK_IOCTL is not set 484# CONFIG_IDE_TASK_IOCTL is not set
268CONFIG_IDE_TASKFILE_IO=y
269 485
270# 486#
271# IDE chipset support/bugfixes 487# IDE chipset support/bugfixes
272# 488#
273CONFIG_IDE_GENERIC=y 489# CONFIG_IDE_GENERIC is not set
274CONFIG_BLK_DEV_CMD640=y 490# CONFIG_BLK_DEV_CMD640 is not set
275# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
276# CONFIG_BLK_DEV_IDEPNP is not set
277CONFIG_BLK_DEV_IDEPCI=y 491CONFIG_BLK_DEV_IDEPCI=y
278CONFIG_IDEPCI_SHARE_IRQ=y 492CONFIG_IDEPCI_SHARE_IRQ=y
279# CONFIG_BLK_DEV_OFFBOARD is not set 493# CONFIG_BLK_DEV_OFFBOARD is not set
280CONFIG_BLK_DEV_GENERIC=y 494# CONFIG_BLK_DEV_GENERIC is not set
281# CONFIG_BLK_DEV_OPTI621 is not set 495# CONFIG_BLK_DEV_OPTI621 is not set
282CONFIG_BLK_DEV_RZ1000=y 496# CONFIG_BLK_DEV_RZ1000 is not set
283CONFIG_BLK_DEV_IDEDMA_PCI=y 497CONFIG_BLK_DEV_IDEDMA_PCI=y
284# CONFIG_BLK_DEV_IDEDMA_FORCED is not set 498# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
285CONFIG_IDEDMA_PCI_AUTO=y 499CONFIG_IDEDMA_PCI_AUTO=y
286# CONFIG_IDEDMA_ONLYDISK is not set 500# CONFIG_IDEDMA_ONLYDISK is not set
287CONFIG_BLK_DEV_ADMA=y
288# CONFIG_BLK_DEV_AEC62XX is not set 501# CONFIG_BLK_DEV_AEC62XX is not set
289# CONFIG_BLK_DEV_ALI15X3 is not set 502# CONFIG_BLK_DEV_ALI15X3 is not set
290# CONFIG_BLK_DEV_AMD74XX is not set 503# CONFIG_BLK_DEV_AMD74XX is not set
@@ -294,10 +507,12 @@ CONFIG_BLK_DEV_ADMA=y
294# CONFIG_BLK_DEV_CY82C693 is not set 507# CONFIG_BLK_DEV_CY82C693 is not set
295# CONFIG_BLK_DEV_CS5520 is not set 508# CONFIG_BLK_DEV_CS5520 is not set
296# CONFIG_BLK_DEV_CS5530 is not set 509# CONFIG_BLK_DEV_CS5530 is not set
510# CONFIG_BLK_DEV_CS5535 is not set
297# CONFIG_BLK_DEV_HPT34X is not set 511# CONFIG_BLK_DEV_HPT34X is not set
298# CONFIG_BLK_DEV_HPT366 is not set 512# CONFIG_BLK_DEV_HPT366 is not set
299# CONFIG_BLK_DEV_SC1200 is not set 513# CONFIG_BLK_DEV_SC1200 is not set
300CONFIG_BLK_DEV_PIIX=y 514# CONFIG_BLK_DEV_PIIX is not set
515# CONFIG_BLK_DEV_IT821X is not set
301# CONFIG_BLK_DEV_NS87415 is not set 516# CONFIG_BLK_DEV_NS87415 is not set
302# CONFIG_BLK_DEV_PDC202XX_OLD is not set 517# CONFIG_BLK_DEV_PDC202XX_OLD is not set
303# CONFIG_BLK_DEV_PDC202XX_NEW is not set 518# CONFIG_BLK_DEV_PDC202XX_NEW is not set
@@ -306,9 +521,8 @@ CONFIG_BLK_DEV_PIIX=y
306# CONFIG_BLK_DEV_SIS5513 is not set 521# CONFIG_BLK_DEV_SIS5513 is not set
307# CONFIG_BLK_DEV_SLC90E66 is not set 522# CONFIG_BLK_DEV_SLC90E66 is not set
308# CONFIG_BLK_DEV_TRM290 is not set 523# CONFIG_BLK_DEV_TRM290 is not set
309# CONFIG_BLK_DEV_VIA82CXXX is not set 524CONFIG_BLK_DEV_VIA82CXXX=y
310# CONFIG_IDE_ARM is not set 525# CONFIG_IDE_ARM is not set
311# CONFIG_IDE_CHIPSETS is not set
312CONFIG_BLK_DEV_IDEDMA=y 526CONFIG_BLK_DEV_IDEDMA=y
313# CONFIG_IDEDMA_IVB is not set 527# CONFIG_IDEDMA_IVB is not set
314CONFIG_IDEDMA_AUTO=y 528CONFIG_IDEDMA_AUTO=y
@@ -317,8 +531,9 @@ CONFIG_IDEDMA_AUTO=y
317# 531#
318# SCSI device support 532# SCSI device support
319# 533#
534# CONFIG_RAID_ATTRS is not set
320CONFIG_SCSI=y 535CONFIG_SCSI=y
321CONFIG_SCSI_PROC_FS=y 536# CONFIG_SCSI_PROC_FS is not set
322 537
323# 538#
324# SCSI support type (disk, tape, CD-ROM) 539# SCSI support type (disk, tape, CD-ROM)
@@ -327,7 +542,8 @@ CONFIG_BLK_DEV_SD=y
327# CONFIG_CHR_DEV_ST is not set 542# CONFIG_CHR_DEV_ST is not set
328# CONFIG_CHR_DEV_OSST is not set 543# CONFIG_CHR_DEV_OSST is not set
329# CONFIG_BLK_DEV_SR is not set 544# CONFIG_BLK_DEV_SR is not set
330CONFIG_CHR_DEV_SG=y 545# CONFIG_CHR_DEV_SG is not set
546# CONFIG_CHR_DEV_SCH is not set
331 547
332# 548#
333# Some SCSI devices (e.g. CD jukebox) support multiple LUNs 549# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
@@ -341,79 +557,47 @@ CONFIG_CHR_DEV_SG=y
341# 557#
342# CONFIG_SCSI_SPI_ATTRS is not set 558# CONFIG_SCSI_SPI_ATTRS is not set
343# CONFIG_SCSI_FC_ATTRS is not set 559# CONFIG_SCSI_FC_ATTRS is not set
560# CONFIG_SCSI_ISCSI_ATTRS is not set
561# CONFIG_SCSI_SAS_ATTRS is not set
344 562
345# 563#
346# SCSI low-level drivers 564# SCSI low-level drivers
347# 565#
566# CONFIG_ISCSI_TCP is not set
348# CONFIG_BLK_DEV_3W_XXXX_RAID is not set 567# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
349# CONFIG_SCSI_7000FASST is not set 568# CONFIG_SCSI_3W_9XXX is not set
350# CONFIG_SCSI_ACARD is not set 569# CONFIG_SCSI_ACARD is not set
351# CONFIG_SCSI_AHA152X is not set
352# CONFIG_SCSI_AHA1542 is not set
353# CONFIG_SCSI_AACRAID is not set 570# CONFIG_SCSI_AACRAID is not set
354# CONFIG_SCSI_AIC7XXX is not set 571# CONFIG_SCSI_AIC7XXX is not set
355# CONFIG_SCSI_AIC7XXX_OLD is not set 572# CONFIG_SCSI_AIC7XXX_OLD is not set
356# CONFIG_SCSI_AIC79XX is not set 573# CONFIG_SCSI_AIC79XX is not set
357CONFIG_SCSI_DPT_I2O=m 574# CONFIG_SCSI_DPT_I2O is not set
358# CONFIG_SCSI_ADVANSYS is not set 575# CONFIG_MEGARAID_NEWGEN is not set
359# CONFIG_SCSI_IN2000 is not set 576# CONFIG_MEGARAID_LEGACY is not set
360# CONFIG_SCSI_MEGARAID is not set 577# CONFIG_MEGARAID_SAS is not set
361CONFIG_SCSI_SATA=y 578# CONFIG_SCSI_SATA is not set
362# CONFIG_SCSI_SATA_SVW is not set
363CONFIG_SCSI_ATA_PIIX=y
364# CONFIG_SCSI_SATA_PROMISE is not set
365CONFIG_SCSI_SATA_SX4=m
366# CONFIG_SCSI_SATA_SIL is not set
367CONFIG_SCSI_SATA_SIS=m
368# CONFIG_SCSI_SATA_VIA is not set
369# CONFIG_SCSI_SATA_VITESSE is not set
370# CONFIG_SCSI_BUSLOGIC is not set 579# CONFIG_SCSI_BUSLOGIC is not set
371# CONFIG_SCSI_CPQFCTS is not set
372# CONFIG_SCSI_DMX3191D is not set 580# CONFIG_SCSI_DMX3191D is not set
373# CONFIG_SCSI_DTC3280 is not set
374# CONFIG_SCSI_EATA is not set 581# CONFIG_SCSI_EATA is not set
375# CONFIG_SCSI_EATA_PIO is not set
376# CONFIG_SCSI_FUTURE_DOMAIN is not set 582# CONFIG_SCSI_FUTURE_DOMAIN is not set
377# CONFIG_SCSI_GDTH is not set 583# CONFIG_SCSI_GDTH is not set
378# CONFIG_SCSI_GENERIC_NCR5380 is not set
379# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
380# CONFIG_SCSI_IPS is not set 584# CONFIG_SCSI_IPS is not set
585# CONFIG_SCSI_INITIO is not set
381# CONFIG_SCSI_INIA100 is not set 586# CONFIG_SCSI_INIA100 is not set
382# CONFIG_SCSI_PPA is not set 587# CONFIG_SCSI_PPA is not set
383# CONFIG_SCSI_IMM is not set 588# CONFIG_SCSI_IMM is not set
384# CONFIG_SCSI_NCR53C406A is not set
385# CONFIG_SCSI_SYM53C8XX_2 is not set 589# CONFIG_SCSI_SYM53C8XX_2 is not set
386CONFIG_SCSI_IPR=m 590# CONFIG_SCSI_IPR is not set
387# CONFIG_SCSI_IPR_TRACE is not set
388# CONFIG_SCSI_IPR_DUMP is not set
389# CONFIG_SCSI_PAS16 is not set
390# CONFIG_SCSI_PSI240I is not set
391# CONFIG_SCSI_QLOGIC_FAS is not set
392# CONFIG_SCSI_QLOGIC_ISP is not set
393# CONFIG_SCSI_QLOGIC_FC is not set 591# CONFIG_SCSI_QLOGIC_FC is not set
394# CONFIG_SCSI_QLOGIC_1280 is not set 592# CONFIG_SCSI_QLOGIC_1280 is not set
395CONFIG_SCSI_QLA2XXX=y 593# CONFIG_SCSI_QLA_FC is not set
396# CONFIG_SCSI_QLA21XX is not set 594# CONFIG_SCSI_LPFC is not set
397# CONFIG_SCSI_QLA22XX is not set
398# CONFIG_SCSI_QLA2300 is not set
399# CONFIG_SCSI_QLA2322 is not set
400# CONFIG_SCSI_QLA6312 is not set
401# CONFIG_SCSI_QLA6322 is not set
402# CONFIG_SCSI_SYM53C416 is not set
403# CONFIG_SCSI_DC395x is not set 595# CONFIG_SCSI_DC395x is not set
404# CONFIG_SCSI_DC390T is not set 596# CONFIG_SCSI_DC390T is not set
405# CONFIG_SCSI_T128 is not set
406# CONFIG_SCSI_U14_34F is not set
407# CONFIG_SCSI_ULTRASTOR is not set
408# CONFIG_SCSI_NSP32 is not set 597# CONFIG_SCSI_NSP32 is not set
409# CONFIG_SCSI_DEBUG is not set 598# CONFIG_SCSI_DEBUG is not set
410 599
411# 600#
412# Old CD-ROM drivers (not SCSI, not IDE)
413#
414# CONFIG_CD_NO_IDESCSI is not set
415
416#
417# Multi-device support (RAID and LVM) 601# Multi-device support (RAID and LVM)
418# 602#
419# CONFIG_MD is not set 603# CONFIG_MD is not set
@@ -422,37 +606,14 @@ CONFIG_SCSI_QLA2XXX=y
422# Fusion MPT device support 606# Fusion MPT device support
423# 607#
424# CONFIG_FUSION is not set 608# CONFIG_FUSION is not set
609# CONFIG_FUSION_SPI is not set
610# CONFIG_FUSION_FC is not set
611# CONFIG_FUSION_SAS is not set
425 612
426# 613#
427# IEEE 1394 (FireWire) support 614# IEEE 1394 (FireWire) support
428# 615#
429CONFIG_IEEE1394=y 616# CONFIG_IEEE1394 is not set
430
431#
432# Subsystem Options
433#
434# CONFIG_IEEE1394_VERBOSEDEBUG is not set
435# CONFIG_IEEE1394_OUI_DB is not set
436# CONFIG_IEEE1394_EXTRA_CONFIG_ROMS is not set
437
438#
439# Device Drivers
440#
441
442#
443# Texas Instruments PCILynx requires I2C
444#
445CONFIG_IEEE1394_OHCI1394=y
446
447#
448# Protocol Drivers
449#
450# CONFIG_IEEE1394_VIDEO1394 is not set
451# CONFIG_IEEE1394_SBP2 is not set
452# CONFIG_IEEE1394_ETH1394 is not set
453# CONFIG_IEEE1394_DV1394 is not set
454CONFIG_IEEE1394_RAWIO=y
455# CONFIG_IEEE1394_CMP is not set
456 617
457# 618#
458# I2O device support 619# I2O device support
@@ -460,130 +621,13 @@ CONFIG_IEEE1394_RAWIO=y
460# CONFIG_I2O is not set 621# CONFIG_I2O is not set
461 622
462# 623#
463# Networking support 624# Network device support
464#
465CONFIG_NET=y
466
467#
468# Networking options
469#
470CONFIG_PACKET=y
471# CONFIG_PACKET_MMAP is not set
472# CONFIG_NETLINK_DEV is not set
473CONFIG_UNIX=y
474# CONFIG_NET_KEY is not set
475CONFIG_INET=y
476CONFIG_IP_MULTICAST=y
477# CONFIG_IP_ADVANCED_ROUTER is not set
478# CONFIG_IP_PNP is not set
479# CONFIG_NET_IPIP is not set
480# CONFIG_NET_IPGRE is not set
481# CONFIG_IP_MROUTE is not set
482# CONFIG_ARPD is not set
483# CONFIG_SYN_COOKIES is not set
484# CONFIG_INET_AH is not set
485# CONFIG_INET_ESP is not set
486# CONFIG_INET_IPCOMP is not set
487
488#
489# IP: Virtual Server Configuration
490#
491# CONFIG_IP_VS is not set
492# CONFIG_IPV6 is not set
493CONFIG_NETFILTER=y
494# CONFIG_NETFILTER_DEBUG is not set
495
496#
497# IP: Netfilter Configuration
498# 625#
499CONFIG_IP_NF_CONNTRACK=y
500# CONFIG_IP_NF_FTP is not set
501# CONFIG_IP_NF_IRC is not set
502# CONFIG_IP_NF_TFTP is not set
503# CONFIG_IP_NF_AMANDA is not set
504CONFIG_IP_NF_QUEUE=y
505CONFIG_IP_NF_IPTABLES=y
506CONFIG_IP_NF_MATCH_LIMIT=y
507CONFIG_IP_NF_MATCH_IPRANGE=y
508CONFIG_IP_NF_MATCH_MAC=y
509CONFIG_IP_NF_MATCH_PKTTYPE=y
510CONFIG_IP_NF_MATCH_MARK=y
511CONFIG_IP_NF_MATCH_MULTIPORT=y
512CONFIG_IP_NF_MATCH_TOS=y
513CONFIG_IP_NF_MATCH_RECENT=y
514CONFIG_IP_NF_MATCH_ECN=y
515CONFIG_IP_NF_MATCH_DSCP=y
516CONFIG_IP_NF_MATCH_AH_ESP=y
517CONFIG_IP_NF_MATCH_LENGTH=y
518CONFIG_IP_NF_MATCH_TTL=y
519CONFIG_IP_NF_MATCH_TCPMSS=y
520CONFIG_IP_NF_MATCH_HELPER=y
521CONFIG_IP_NF_MATCH_STATE=y
522CONFIG_IP_NF_MATCH_CONNTRACK=y
523CONFIG_IP_NF_MATCH_OWNER=y
524CONFIG_IP_NF_FILTER=y
525CONFIG_IP_NF_TARGET_REJECT=y
526CONFIG_IP_NF_NAT=y
527CONFIG_IP_NF_NAT_NEEDED=y
528CONFIG_IP_NF_TARGET_MASQUERADE=y
529CONFIG_IP_NF_TARGET_REDIRECT=y
530CONFIG_IP_NF_TARGET_NETMAP=y
531CONFIG_IP_NF_TARGET_SAME=y
532# CONFIG_IP_NF_NAT_SNMP_BASIC is not set
533CONFIG_IP_NF_MANGLE=y
534CONFIG_IP_NF_TARGET_TOS=y
535CONFIG_IP_NF_TARGET_ECN=y
536CONFIG_IP_NF_TARGET_DSCP=y
537CONFIG_IP_NF_TARGET_MARK=y
538CONFIG_IP_NF_TARGET_CLASSIFY=y
539CONFIG_IP_NF_TARGET_LOG=y
540CONFIG_IP_NF_TARGET_ULOG=y
541CONFIG_IP_NF_TARGET_TCPMSS=y
542CONFIG_IP_NF_ARPTABLES=y
543CONFIG_IP_NF_ARPFILTER=y
544CONFIG_IP_NF_ARP_MANGLE=y
545CONFIG_IP_NF_TARGET_NOTRACK=m
546CONFIG_IP_NF_RAW=m
547
548#
549# SCTP Configuration (EXPERIMENTAL)
550#
551# CONFIG_IP_SCTP is not set
552# CONFIG_ATM is not set
553# CONFIG_BRIDGE is not set
554# CONFIG_VLAN_8021Q is not set
555# CONFIG_DECNET is not set
556# CONFIG_LLC2 is not set
557# CONFIG_IPX is not set
558# CONFIG_ATALK is not set
559# CONFIG_X25 is not set
560# CONFIG_LAPB is not set
561# CONFIG_NET_DIVERT is not set
562# CONFIG_ECONET is not set
563# CONFIG_WAN_ROUTER is not set
564# CONFIG_NET_FASTROUTE is not set
565# CONFIG_NET_HW_FLOWCONTROL is not set
566
567#
568# QoS and/or fair queueing
569#
570# CONFIG_NET_SCHED is not set
571
572#
573# Network testing
574#
575# CONFIG_NET_PKTGEN is not set
576# CONFIG_NETPOLL is not set
577# CONFIG_NET_POLL_CONTROLLER is not set
578# CONFIG_HAMRADIO is not set
579# CONFIG_IRDA is not set
580# CONFIG_BT is not set
581CONFIG_NETDEVICES=y 626CONFIG_NETDEVICES=y
582CONFIG_DUMMY=m 627# CONFIG_DUMMY is not set
583# CONFIG_BONDING is not set 628# CONFIG_BONDING is not set
584# CONFIG_EQUALIZER is not set 629# CONFIG_EQUALIZER is not set
585# CONFIG_TUN is not set 630# CONFIG_TUN is not set
586# CONFIG_NET_SB1000 is not set
587 631
588# 632#
589# ARCnet devices 633# ARCnet devices
@@ -591,46 +635,39 @@ CONFIG_DUMMY=m
591# CONFIG_ARCNET is not set 635# CONFIG_ARCNET is not set
592 636
593# 637#
638# PHY device support
639#
640# CONFIG_PHYLIB is not set
641
642#
594# Ethernet (10 or 100Mbit) 643# Ethernet (10 or 100Mbit)
595# 644#
596CONFIG_NET_ETHERNET=y 645CONFIG_NET_ETHERNET=y
597CONFIG_MII=y 646CONFIG_MII=y
598# CONFIG_HAPPYMEAL is not set 647# CONFIG_HAPPYMEAL is not set
599# CONFIG_SUNGEM is not set 648# CONFIG_SUNGEM is not set
649# CONFIG_CASSINI is not set
600# CONFIG_NET_VENDOR_3COM is not set 650# CONFIG_NET_VENDOR_3COM is not set
601# CONFIG_LANCE is not set
602# CONFIG_NET_VENDOR_SMC is not set
603# CONFIG_NET_VENDOR_RACAL is not set
604 651
605# 652#
606# Tulip family network device support 653# Tulip family network device support
607# 654#
608# CONFIG_NET_TULIP is not set 655# CONFIG_NET_TULIP is not set
609# CONFIG_AT1700 is not set
610# CONFIG_DEPCA is not set
611# CONFIG_HP100 is not set 656# CONFIG_HP100 is not set
612# CONFIG_NET_ISA is not set
613CONFIG_NET_PCI=y 657CONFIG_NET_PCI=y
614# CONFIG_PCNET32 is not set 658# CONFIG_PCNET32 is not set
615# CONFIG_AMD8111_ETH is not set 659# CONFIG_AMD8111_ETH is not set
616# CONFIG_ADAPTEC_STARFIRE is not set 660# CONFIG_ADAPTEC_STARFIRE is not set
617# CONFIG_AC3200 is not set
618# CONFIG_APRICOT is not set
619# CONFIG_B44 is not set 661# CONFIG_B44 is not set
620# CONFIG_FORCEDETH is not set 662# CONFIG_FORCEDETH is not set
621# CONFIG_CS89x0 is not set
622# CONFIG_DGRS is not set 663# CONFIG_DGRS is not set
623# CONFIG_EEPRO100 is not set 664# CONFIG_EEPRO100 is not set
624# CONFIG_E100 is not set 665CONFIG_E100=y
625# CONFIG_FEALNX is not set 666# CONFIG_FEALNX is not set
626# CONFIG_NATSEMI is not set 667# CONFIG_NATSEMI is not set
627# CONFIG_NE2K_PCI is not set 668# CONFIG_NE2K_PCI is not set
628# CONFIG_8139CP is not set 669# CONFIG_8139CP is not set
629CONFIG_8139TOO=y 670# CONFIG_8139TOO is not set
630CONFIG_8139TOO_PIO=y
631# CONFIG_8139TOO_TUNE_TWISTER is not set
632# CONFIG_8139TOO_8129 is not set
633# CONFIG_8139_OLD_RX_RESET is not set
634# CONFIG_SIS900 is not set 671# CONFIG_SIS900 is not set
635# CONFIG_EPIC100 is not set 672# CONFIG_EPIC100 is not set
636# CONFIG_SUNDANCE is not set 673# CONFIG_SUNDANCE is not set
@@ -644,21 +681,24 @@ CONFIG_8139TOO_PIO=y
644# CONFIG_ACENIC is not set 681# CONFIG_ACENIC is not set
645# CONFIG_DL2K is not set 682# CONFIG_DL2K is not set
646# CONFIG_E1000 is not set 683# CONFIG_E1000 is not set
647# CONFIG_E1000_NAPI is not set
648# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
649# CONFIG_NS83820 is not set 684# CONFIG_NS83820 is not set
650# CONFIG_HAMACHI is not set 685# CONFIG_HAMACHI is not set
651# CONFIG_YELLOWFIN is not set 686# CONFIG_YELLOWFIN is not set
652# CONFIG_R8169 is not set 687# CONFIG_R8169 is not set
688# CONFIG_SIS190 is not set
689# CONFIG_SKGE is not set
690# CONFIG_SKY2 is not set
653# CONFIG_SK98LIN is not set 691# CONFIG_SK98LIN is not set
692# CONFIG_VIA_VELOCITY is not set
654# CONFIG_TIGON3 is not set 693# CONFIG_TIGON3 is not set
694# CONFIG_BNX2 is not set
655 695
656# 696#
657# Ethernet (10000 Mbit) 697# Ethernet (10000 Mbit)
658# 698#
699# CONFIG_CHELSIO_T1 is not set
659# CONFIG_IXGB is not set 700# CONFIG_IXGB is not set
660CONFIG_S2IO=m 701# CONFIG_S2IO is not set
661# CONFIG_S2IO_NAPI is not set
662 702
663# 703#
664# Token Ring devices 704# Token Ring devices
@@ -682,6 +722,8 @@ CONFIG_S2IO=m
682# CONFIG_NET_FC is not set 722# CONFIG_NET_FC is not set
683# CONFIG_SHAPER is not set 723# CONFIG_SHAPER is not set
684# CONFIG_NETCONSOLE is not set 724# CONFIG_NETCONSOLE is not set
725# CONFIG_NETPOLL is not set
726# CONFIG_NET_POLL_CONTROLLER is not set
685 727
686# 728#
687# ISDN subsystem 729# ISDN subsystem
@@ -703,26 +745,14 @@ CONFIG_INPUT=y
703# 745#
704CONFIG_INPUT_MOUSEDEV=y 746CONFIG_INPUT_MOUSEDEV=y
705CONFIG_INPUT_MOUSEDEV_PSAUX=y 747CONFIG_INPUT_MOUSEDEV_PSAUX=y
706CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 748CONFIG_INPUT_MOUSEDEV_SCREEN_X=1280
707CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 749CONFIG_INPUT_MOUSEDEV_SCREEN_Y=1024
708# CONFIG_INPUT_JOYDEV is not set 750# CONFIG_INPUT_JOYDEV is not set
709# CONFIG_INPUT_TSDEV is not set 751# CONFIG_INPUT_TSDEV is not set
710# CONFIG_INPUT_EVDEV is not set 752CONFIG_INPUT_EVDEV=y
711# CONFIG_INPUT_EVBUG is not set 753# CONFIG_INPUT_EVBUG is not set
712 754
713# 755#
714# Input I/O drivers
715#
716# CONFIG_GAMEPORT is not set
717CONFIG_SOUND_GAMEPORT=y
718CONFIG_SERIO=y
719CONFIG_SERIO_I8042=y
720# CONFIG_SERIO_SERPORT is not set
721# CONFIG_SERIO_CT82C710 is not set
722# CONFIG_SERIO_PARKBD is not set
723# CONFIG_SERIO_PCIPS2 is not set
724
725#
726# Input Device Drivers 756# Input Device Drivers
727# 757#
728CONFIG_INPUT_KEYBOARD=y 758CONFIG_INPUT_KEYBOARD=y
@@ -734,15 +764,25 @@ CONFIG_KEYBOARD_ATKBD=y
734CONFIG_INPUT_MOUSE=y 764CONFIG_INPUT_MOUSE=y
735CONFIG_MOUSE_PS2=y 765CONFIG_MOUSE_PS2=y
736# CONFIG_MOUSE_SERIAL is not set 766# CONFIG_MOUSE_SERIAL is not set
737# CONFIG_MOUSE_INPORT is not set
738# CONFIG_MOUSE_LOGIBM is not set
739# CONFIG_MOUSE_PC110PAD is not set
740# CONFIG_MOUSE_VSXXXAA is not set 767# CONFIG_MOUSE_VSXXXAA is not set
741# CONFIG_INPUT_JOYSTICK is not set 768# CONFIG_INPUT_JOYSTICK is not set
742# CONFIG_INPUT_TOUCHSCREEN is not set 769# CONFIG_INPUT_TOUCHSCREEN is not set
743# CONFIG_INPUT_MISC is not set 770# CONFIG_INPUT_MISC is not set
744 771
745# 772#
773# Hardware I/O ports
774#
775CONFIG_SERIO=y
776CONFIG_SERIO_I8042=y
777# CONFIG_SERIO_SERPORT is not set
778# CONFIG_SERIO_CT82C710 is not set
779# CONFIG_SERIO_PARKBD is not set
780# CONFIG_SERIO_PCIPS2 is not set
781CONFIG_SERIO_LIBPS2=y
782# CONFIG_SERIO_RAW is not set
783# CONFIG_GAMEPORT is not set
784
785#
746# Character devices 786# Character devices
747# 787#
748CONFIG_VT=y 788CONFIG_VT=y
@@ -757,12 +797,14 @@ CONFIG_SERIAL_8250=y
757# CONFIG_SERIAL_8250_CONSOLE is not set 797# CONFIG_SERIAL_8250_CONSOLE is not set
758# CONFIG_SERIAL_8250_ACPI is not set 798# CONFIG_SERIAL_8250_ACPI is not set
759CONFIG_SERIAL_8250_NR_UARTS=4 799CONFIG_SERIAL_8250_NR_UARTS=4
800CONFIG_SERIAL_8250_RUNTIME_UARTS=4
760# CONFIG_SERIAL_8250_EXTENDED is not set 801# CONFIG_SERIAL_8250_EXTENDED is not set
761 802
762# 803#
763# Non-8250 serial port support 804# Non-8250 serial port support
764# 805#
765CONFIG_SERIAL_CORE=y 806CONFIG_SERIAL_CORE=y
807# CONFIG_SERIAL_JSM is not set
766CONFIG_UNIX98_PTYS=y 808CONFIG_UNIX98_PTYS=y
767CONFIG_LEGACY_PTYS=y 809CONFIG_LEGACY_PTYS=y
768CONFIG_LEGACY_PTY_COUNT=256 810CONFIG_LEGACY_PTY_COUNT=256
@@ -770,7 +812,6 @@ CONFIG_PRINTER=y
770# CONFIG_LP_CONSOLE is not set 812# CONFIG_LP_CONSOLE is not set
771# CONFIG_PPDEV is not set 813# CONFIG_PPDEV is not set
772# CONFIG_TIPAR is not set 814# CONFIG_TIPAR is not set
773# CONFIG_QIC02_TAPE is not set
774 815
775# 816#
776# IPMI 817# IPMI
@@ -782,9 +823,8 @@ CONFIG_PRINTER=y
782# 823#
783# CONFIG_WATCHDOG is not set 824# CONFIG_WATCHDOG is not set
784# CONFIG_HW_RANDOM is not set 825# CONFIG_HW_RANDOM is not set
785# CONFIG_NVRAM is not set 826CONFIG_NVRAM=y
786# CONFIG_RTC is not set 827CONFIG_RTC=y
787# CONFIG_GEN_RTC is not set
788# CONFIG_DTLK is not set 828# CONFIG_DTLK is not set
789# CONFIG_R3964 is not set 829# CONFIG_R3964 is not set
790# CONFIG_APPLICOM is not set 830# CONFIG_APPLICOM is not set
@@ -793,34 +833,149 @@ CONFIG_PRINTER=y
793# 833#
794# Ftape, the floppy tape device driver 834# Ftape, the floppy tape device driver
795# 835#
836# CONFIG_FTAPE is not set
796CONFIG_AGP=y 837CONFIG_AGP=y
797# CONFIG_AGP_ALI is not set 838# CONFIG_AGP_ALI is not set
798# CONFIG_AGP_ATI is not set 839# CONFIG_AGP_ATI is not set
799# CONFIG_AGP_AMD is not set 840# CONFIG_AGP_AMD is not set
800# CONFIG_AGP_AMD64 is not set 841# CONFIG_AGP_AMD64 is not set
801CONFIG_AGP_INTEL=y 842# CONFIG_AGP_INTEL is not set
802# CONFIG_AGP_NVIDIA is not set 843# CONFIG_AGP_NVIDIA is not set
803# CONFIG_AGP_SIS is not set 844# CONFIG_AGP_SIS is not set
804# CONFIG_AGP_SWORKS is not set 845# CONFIG_AGP_SWORKS is not set
805# CONFIG_AGP_VIA is not set 846CONFIG_AGP_VIA=y
806# CONFIG_AGP_EFFICEON is not set 847# CONFIG_AGP_EFFICEON is not set
807CONFIG_DRM=y 848CONFIG_DRM=y
808# CONFIG_DRM_TDFX is not set 849# CONFIG_DRM_TDFX is not set
809# CONFIG_DRM_GAMMA is not set
810# CONFIG_DRM_R128 is not set 850# CONFIG_DRM_R128 is not set
811# CONFIG_DRM_RADEON is not set 851CONFIG_DRM_RADEON=y
812# CONFIG_DRM_I810 is not set
813CONFIG_DRM_I830=y
814# CONFIG_DRM_MGA is not set 852# CONFIG_DRM_MGA is not set
815# CONFIG_DRM_SIS is not set 853# CONFIG_DRM_SIS is not set
854# CONFIG_DRM_VIA is not set
855# CONFIG_DRM_SAVAGE is not set
816# CONFIG_MWAVE is not set 856# CONFIG_MWAVE is not set
857# CONFIG_CS5535_GPIO is not set
817# CONFIG_RAW_DRIVER is not set 858# CONFIG_RAW_DRIVER is not set
859# CONFIG_HPET is not set
818# CONFIG_HANGCHECK_TIMER is not set 860# CONFIG_HANGCHECK_TIMER is not set
819 861
820# 862#
863# TPM devices
864#
865# CONFIG_TCG_TPM is not set
866# CONFIG_TELCLOCK is not set
867
868#
821# I2C support 869# I2C support
822# 870#
823# CONFIG_I2C is not set 871CONFIG_I2C=y
872CONFIG_I2C_CHARDEV=y
873
874#
875# I2C Algorithms
876#
877CONFIG_I2C_ALGOBIT=y
878# CONFIG_I2C_ALGOPCF is not set
879# CONFIG_I2C_ALGOPCA is not set
880
881#
882# I2C Hardware Bus support
883#
884# CONFIG_I2C_ALI1535 is not set
885# CONFIG_I2C_ALI1563 is not set
886# CONFIG_I2C_ALI15X3 is not set
887# CONFIG_I2C_AMD756 is not set
888# CONFIG_I2C_AMD8111 is not set
889# CONFIG_I2C_I801 is not set
890# CONFIG_I2C_I810 is not set
891# CONFIG_I2C_PIIX4 is not set
892CONFIG_I2C_ISA=y
893# CONFIG_I2C_NFORCE2 is not set
894# CONFIG_I2C_PARPORT is not set
895# CONFIG_I2C_PARPORT_LIGHT is not set
896# CONFIG_I2C_PROSAVAGE is not set
897# CONFIG_I2C_SAVAGE4 is not set
898# CONFIG_SCx200_ACB is not set
899# CONFIG_I2C_SIS5595 is not set
900# CONFIG_I2C_SIS630 is not set
901# CONFIG_I2C_SIS96X is not set
902# CONFIG_I2C_STUB is not set
903# CONFIG_I2C_VIA is not set
904CONFIG_I2C_VIAPRO=y
905# CONFIG_I2C_VOODOO3 is not set
906# CONFIG_I2C_PCA_ISA is not set
907
908#
909# Miscellaneous I2C Chip support
910#
911# CONFIG_SENSORS_DS1337 is not set
912# CONFIG_SENSORS_DS1374 is not set
913# CONFIG_SENSORS_EEPROM is not set
914# CONFIG_SENSORS_PCF8574 is not set
915# CONFIG_SENSORS_PCA9539 is not set
916# CONFIG_SENSORS_PCF8591 is not set
917# CONFIG_SENSORS_RTC8564 is not set
918# CONFIG_SENSORS_MAX6875 is not set
919# CONFIG_RTC_X1205_I2C is not set
920# CONFIG_I2C_DEBUG_CORE is not set
921# CONFIG_I2C_DEBUG_ALGO is not set
922# CONFIG_I2C_DEBUG_BUS is not set
923# CONFIG_I2C_DEBUG_CHIP is not set
924
925#
926# SPI support
927#
928# CONFIG_SPI is not set
929# CONFIG_SPI_MASTER is not set
930
931#
932# Dallas's 1-wire bus
933#
934# CONFIG_W1 is not set
935
936#
937# Hardware Monitoring support
938#
939CONFIG_HWMON=y
940CONFIG_HWMON_VID=y
941# CONFIG_SENSORS_ADM1021 is not set
942# CONFIG_SENSORS_ADM1025 is not set
943# CONFIG_SENSORS_ADM1026 is not set
944# CONFIG_SENSORS_ADM1031 is not set
945# CONFIG_SENSORS_ADM9240 is not set
946# CONFIG_SENSORS_ASB100 is not set
947# CONFIG_SENSORS_ATXP1 is not set
948# CONFIG_SENSORS_DS1621 is not set
949# CONFIG_SENSORS_F71805F is not set
950# CONFIG_SENSORS_FSCHER is not set
951# CONFIG_SENSORS_FSCPOS is not set
952# CONFIG_SENSORS_GL518SM is not set
953# CONFIG_SENSORS_GL520SM is not set
954CONFIG_SENSORS_IT87=y
955# CONFIG_SENSORS_LM63 is not set
956# CONFIG_SENSORS_LM75 is not set
957# CONFIG_SENSORS_LM77 is not set
958# CONFIG_SENSORS_LM78 is not set
959# CONFIG_SENSORS_LM80 is not set
960# CONFIG_SENSORS_LM83 is not set
961# CONFIG_SENSORS_LM85 is not set
962# CONFIG_SENSORS_LM87 is not set
963# CONFIG_SENSORS_LM90 is not set
964# CONFIG_SENSORS_LM92 is not set
965# CONFIG_SENSORS_MAX1619 is not set
966# CONFIG_SENSORS_PC87360 is not set
967# CONFIG_SENSORS_SIS5595 is not set
968# CONFIG_SENSORS_SMSC47M1 is not set
969# CONFIG_SENSORS_SMSC47B397 is not set
970# CONFIG_SENSORS_VIA686A is not set
971# CONFIG_SENSORS_VT8231 is not set
972# CONFIG_SENSORS_W83781D is not set
973# CONFIG_SENSORS_W83792D is not set
974# CONFIG_SENSORS_W83L785TS is not set
975# CONFIG_SENSORS_W83627HF is not set
976# CONFIG_SENSORS_W83627EHF is not set
977# CONFIG_SENSORS_HDAPS is not set
978# CONFIG_HWMON_DEBUG_CHIP is not set
824 979
825# 980#
826# Misc devices 981# Misc devices
@@ -828,27 +983,118 @@ CONFIG_DRM_I830=y
828# CONFIG_IBM_ASM is not set 983# CONFIG_IBM_ASM is not set
829 984
830# 985#
986# Multimedia Capabilities Port drivers
987#
988
989#
831# Multimedia devices 990# Multimedia devices
832# 991#
833# CONFIG_VIDEO_DEV is not set 992CONFIG_VIDEO_DEV=y
993
994#
995# Video For Linux
996#
997
998#
999# Video Adapters
1000#
1001# CONFIG_VIDEO_ADV_DEBUG is not set
1002# CONFIG_VIDEO_BT848 is not set
1003# CONFIG_VIDEO_BWQCAM is not set
1004# CONFIG_VIDEO_CQCAM is not set
1005# CONFIG_VIDEO_W9966 is not set
1006# CONFIG_VIDEO_CPIA is not set
1007# CONFIG_VIDEO_SAA5246A is not set
1008# CONFIG_VIDEO_SAA5249 is not set
1009# CONFIG_TUNER_3036 is not set
1010# CONFIG_VIDEO_STRADIS is not set
1011# CONFIG_VIDEO_ZORAN is not set
1012CONFIG_VIDEO_SAA7134=y
1013# CONFIG_VIDEO_SAA7134_ALSA is not set
1014# CONFIG_VIDEO_MXB is not set
1015# CONFIG_VIDEO_DPC is not set
1016# CONFIG_VIDEO_HEXIUM_ORION is not set
1017# CONFIG_VIDEO_HEXIUM_GEMINI is not set
1018# CONFIG_VIDEO_CX88 is not set
1019# CONFIG_VIDEO_EM28XX is not set
1020# CONFIG_VIDEO_OVCAMCHIP is not set
1021# CONFIG_VIDEO_AUDIO_DECODER is not set
1022# CONFIG_VIDEO_DECODER is not set
1023
1024#
1025# Radio Adapters
1026#
1027# CONFIG_RADIO_GEMTEK_PCI is not set
1028# CONFIG_RADIO_MAXIRADIO is not set
1029# CONFIG_RADIO_MAESTRO is not set
834 1030
835# 1031#
836# Digital Video Broadcasting Devices 1032# Digital Video Broadcasting Devices
837# 1033#
838# CONFIG_DVB is not set 1034# CONFIG_DVB is not set
1035CONFIG_VIDEO_TUNER=y
1036CONFIG_VIDEO_BUF=y
1037CONFIG_VIDEO_IR=y
839 1038
840# 1039#
841# Graphics support 1040# Graphics support
842# 1041#
843# CONFIG_FB is not set 1042CONFIG_FB=y
844# CONFIG_VIDEO_SELECT is not set 1043CONFIG_FB_CFB_FILLRECT=y
1044CONFIG_FB_CFB_COPYAREA=y
1045CONFIG_FB_CFB_IMAGEBLIT=y
1046# CONFIG_FB_MACMODES is not set
1047CONFIG_FB_MODE_HELPERS=y
1048# CONFIG_FB_TILEBLITTING is not set
1049# CONFIG_FB_CIRRUS is not set
1050# CONFIG_FB_PM2 is not set
1051# CONFIG_FB_CYBER2000 is not set
1052# CONFIG_FB_ARC is not set
1053# CONFIG_FB_ASILIANT is not set
1054# CONFIG_FB_IMSTT is not set
1055# CONFIG_FB_VGA16 is not set
1056# CONFIG_FB_VESA is not set
1057CONFIG_VIDEO_SELECT=y
1058# CONFIG_FB_HGA is not set
1059# CONFIG_FB_S1D13XXX is not set
1060# CONFIG_FB_NVIDIA is not set
1061# CONFIG_FB_RIVA is not set
1062# CONFIG_FB_I810 is not set
1063# CONFIG_FB_INTEL is not set
1064# CONFIG_FB_MATROX is not set
1065# CONFIG_FB_RADEON_OLD is not set
1066CONFIG_FB_RADEON=y
1067CONFIG_FB_RADEON_I2C=y
1068# CONFIG_FB_RADEON_DEBUG is not set
1069# CONFIG_FB_ATY128 is not set
1070# CONFIG_FB_ATY is not set
1071# CONFIG_FB_SAVAGE is not set
1072# CONFIG_FB_SIS is not set
1073# CONFIG_FB_NEOMAGIC is not set
1074# CONFIG_FB_KYRO is not set
1075# CONFIG_FB_3DFX is not set
1076# CONFIG_FB_VOODOO1 is not set
1077# CONFIG_FB_CYBLA is not set
1078# CONFIG_FB_TRIDENT is not set
1079# CONFIG_FB_GEODE is not set
1080# CONFIG_FB_VIRTUAL is not set
845 1081
846# 1082#
847# Console display driver support 1083# Console display driver support
848# 1084#
849CONFIG_VGA_CONSOLE=y 1085CONFIG_VGA_CONSOLE=y
850# CONFIG_MDA_CONSOLE is not set
851CONFIG_DUMMY_CONSOLE=y 1086CONFIG_DUMMY_CONSOLE=y
1087CONFIG_FRAMEBUFFER_CONSOLE=y
1088# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
1089# CONFIG_FONTS is not set
1090CONFIG_FONT_8x8=y
1091CONFIG_FONT_8x16=y
1092
1093#
1094# Logo configuration
1095#
1096# CONFIG_LOGO is not set
1097# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
852 1098
853# 1099#
854# Sound 1100# Sound
@@ -864,10 +1110,13 @@ CONFIG_SND_PCM=y
864CONFIG_SND_RAWMIDI=y 1110CONFIG_SND_RAWMIDI=y
865CONFIG_SND_SEQUENCER=y 1111CONFIG_SND_SEQUENCER=y
866# CONFIG_SND_SEQ_DUMMY is not set 1112# CONFIG_SND_SEQ_DUMMY is not set
867CONFIG_SND_OSSEMUL=y 1113# CONFIG_SND_MIXER_OSS is not set
868CONFIG_SND_MIXER_OSS=y 1114# CONFIG_SND_PCM_OSS is not set
869CONFIG_SND_PCM_OSS=y 1115# CONFIG_SND_SEQUENCER_OSS is not set
870CONFIG_SND_SEQUENCER_OSS=y 1116CONFIG_SND_RTCTIMER=y
1117CONFIG_SND_SEQ_RTCTIMER_DEFAULT=y
1118# CONFIG_SND_DYNAMIC_MINORS is not set
1119# CONFIG_SND_SUPPORT_OLD_API is not set
871# CONFIG_SND_VERBOSE_PRINTK is not set 1120# CONFIG_SND_VERBOSE_PRINTK is not set
872# CONFIG_SND_DEBUG is not set 1121# CONFIG_SND_DEBUG is not set
873 1122
@@ -875,6 +1124,8 @@ CONFIG_SND_SEQUENCER_OSS=y
875# Generic devices 1124# Generic devices
876# 1125#
877CONFIG_SND_MPU401_UART=y 1126CONFIG_SND_MPU401_UART=y
1127CONFIG_SND_AC97_CODEC=y
1128CONFIG_SND_AC97_BUS=y
878# CONFIG_SND_DUMMY is not set 1129# CONFIG_SND_DUMMY is not set
879# CONFIG_SND_VIRMIDI is not set 1130# CONFIG_SND_VIRMIDI is not set
880# CONFIG_SND_MTPAV is not set 1131# CONFIG_SND_MTPAV is not set
@@ -882,74 +1133,57 @@ CONFIG_SND_MPU401_UART=y
882# CONFIG_SND_MPU401 is not set 1133# CONFIG_SND_MPU401 is not set
883 1134
884# 1135#
885# ISA devices
886#
887# CONFIG_SND_AD1848 is not set
888# CONFIG_SND_CS4231 is not set
889# CONFIG_SND_CS4232 is not set
890# CONFIG_SND_CS4236 is not set
891# CONFIG_SND_ES1688 is not set
892# CONFIG_SND_ES18XX is not set
893# CONFIG_SND_GUSCLASSIC is not set
894# CONFIG_SND_GUSEXTREME is not set
895# CONFIG_SND_GUSMAX is not set
896# CONFIG_SND_INTERWAVE is not set
897# CONFIG_SND_INTERWAVE_STB is not set
898# CONFIG_SND_OPTI92X_AD1848 is not set
899# CONFIG_SND_OPTI92X_CS4231 is not set
900# CONFIG_SND_OPTI93X is not set
901# CONFIG_SND_SB8 is not set
902# CONFIG_SND_SB16 is not set
903# CONFIG_SND_SBAWE is not set
904# CONFIG_SND_WAVEFRONT is not set
905# CONFIG_SND_CMI8330 is not set
906# CONFIG_SND_OPL3SA2 is not set
907# CONFIG_SND_SGALAXY is not set
908# CONFIG_SND_SSCAPE is not set
909
910#
911# PCI devices 1136# PCI devices
912# 1137#
913CONFIG_SND_AC97_CODEC=y 1138# CONFIG_SND_AD1889 is not set
1139# CONFIG_SND_ALS4000 is not set
914# CONFIG_SND_ALI5451 is not set 1140# CONFIG_SND_ALI5451 is not set
915# CONFIG_SND_ATIIXP is not set 1141# CONFIG_SND_ATIIXP is not set
1142# CONFIG_SND_ATIIXP_MODEM is not set
916# CONFIG_SND_AU8810 is not set 1143# CONFIG_SND_AU8810 is not set
917# CONFIG_SND_AU8820 is not set 1144# CONFIG_SND_AU8820 is not set
918# CONFIG_SND_AU8830 is not set 1145# CONFIG_SND_AU8830 is not set
919# CONFIG_SND_AZT3328 is not set 1146# CONFIG_SND_AZT3328 is not set
920# CONFIG_SND_BT87X is not set 1147# CONFIG_SND_BT87X is not set
921# CONFIG_SND_CS46XX is not set 1148# CONFIG_SND_CA0106 is not set
1149# CONFIG_SND_CMIPCI is not set
922# CONFIG_SND_CS4281 is not set 1150# CONFIG_SND_CS4281 is not set
1151# CONFIG_SND_CS46XX is not set
1152# CONFIG_SND_CS5535AUDIO is not set
923# CONFIG_SND_EMU10K1 is not set 1153# CONFIG_SND_EMU10K1 is not set
924# CONFIG_SND_KORG1212 is not set 1154# CONFIG_SND_EMU10K1X is not set
925# CONFIG_SND_MIXART is not set
926# CONFIG_SND_NM256 is not set
927# CONFIG_SND_RME32 is not set
928# CONFIG_SND_RME96 is not set
929# CONFIG_SND_RME9652 is not set
930# CONFIG_SND_HDSP is not set
931# CONFIG_SND_TRIDENT is not set
932# CONFIG_SND_YMFPCI is not set
933# CONFIG_SND_ALS4000 is not set
934# CONFIG_SND_CMIPCI is not set
935# CONFIG_SND_ENS1370 is not set 1155# CONFIG_SND_ENS1370 is not set
936# CONFIG_SND_ENS1371 is not set 1156# CONFIG_SND_ENS1371 is not set
937# CONFIG_SND_ES1938 is not set 1157# CONFIG_SND_ES1938 is not set
938# CONFIG_SND_ES1968 is not set 1158# CONFIG_SND_ES1968 is not set
939# CONFIG_SND_MAESTRO3 is not set
940# CONFIG_SND_FM801 is not set 1159# CONFIG_SND_FM801 is not set
1160# CONFIG_SND_HDA_INTEL is not set
1161# CONFIG_SND_HDSP is not set
1162# CONFIG_SND_HDSPM is not set
941# CONFIG_SND_ICE1712 is not set 1163# CONFIG_SND_ICE1712 is not set
942# CONFIG_SND_ICE1724 is not set 1164# CONFIG_SND_ICE1724 is not set
943CONFIG_SND_INTEL8X0=y 1165# CONFIG_SND_INTEL8X0 is not set
944# CONFIG_SND_INTEL8X0M is not set 1166# CONFIG_SND_INTEL8X0M is not set
1167# CONFIG_SND_KORG1212 is not set
1168# CONFIG_SND_MAESTRO3 is not set
1169# CONFIG_SND_MIXART is not set
1170# CONFIG_SND_NM256 is not set
1171# CONFIG_SND_PCXHR is not set
1172# CONFIG_SND_RME32 is not set
1173# CONFIG_SND_RME96 is not set
1174# CONFIG_SND_RME9652 is not set
945# CONFIG_SND_SONICVIBES is not set 1175# CONFIG_SND_SONICVIBES is not set
946# CONFIG_SND_VIA82XX is not set 1176# CONFIG_SND_TRIDENT is not set
1177CONFIG_SND_VIA82XX=y
1178# CONFIG_SND_VIA82XX_MODEM is not set
947# CONFIG_SND_VX222 is not set 1179# CONFIG_SND_VX222 is not set
1180# CONFIG_SND_YMFPCI is not set
948 1181
949# 1182#
950# ALSA USB devices 1183# USB devices
951# 1184#
952# CONFIG_SND_USB_AUDIO is not set 1185# CONFIG_SND_USB_AUDIO is not set
1186# CONFIG_SND_USB_USX2Y is not set
953 1187
954# 1188#
955# Open Sound System 1189# Open Sound System
@@ -959,6 +1193,8 @@ CONFIG_SND_INTEL8X0=y
959# 1193#
960# USB support 1194# USB support
961# 1195#
1196CONFIG_USB_ARCH_HAS_HCD=y
1197CONFIG_USB_ARCH_HAS_OHCI=y
962CONFIG_USB=y 1198CONFIG_USB=y
963# CONFIG_USB_DEBUG is not set 1199# CONFIG_USB_DEBUG is not set
964 1200
@@ -968,6 +1204,8 @@ CONFIG_USB=y
968CONFIG_USB_DEVICEFS=y 1204CONFIG_USB_DEVICEFS=y
969# CONFIG_USB_BANDWIDTH is not set 1205# CONFIG_USB_BANDWIDTH is not set
970# CONFIG_USB_DYNAMIC_MINORS is not set 1206# CONFIG_USB_DYNAMIC_MINORS is not set
1207# CONFIG_USB_SUSPEND is not set
1208# CONFIG_USB_OTG is not set
971 1209
972# 1210#
973# USB Host Controller Drivers 1211# USB Host Controller Drivers
@@ -975,68 +1213,93 @@ CONFIG_USB_DEVICEFS=y
975CONFIG_USB_EHCI_HCD=y 1213CONFIG_USB_EHCI_HCD=y
976# CONFIG_USB_EHCI_SPLIT_ISO is not set 1214# CONFIG_USB_EHCI_SPLIT_ISO is not set
977# CONFIG_USB_EHCI_ROOT_HUB_TT is not set 1215# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
1216# CONFIG_USB_ISP116X_HCD is not set
978# CONFIG_USB_OHCI_HCD is not set 1217# CONFIG_USB_OHCI_HCD is not set
979CONFIG_USB_UHCI_HCD=y 1218CONFIG_USB_UHCI_HCD=y
1219# CONFIG_USB_SL811_HCD is not set
980 1220
981# 1221#
982# USB Device Class drivers 1222# USB Device Class drivers
983# 1223#
984# CONFIG_USB_AUDIO is not set 1224# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
985# CONFIG_USB_BLUETOOTH_TTY is not set
986# CONFIG_USB_MIDI is not set
987# CONFIG_USB_ACM is not set 1225# CONFIG_USB_ACM is not set
988CONFIG_USB_PRINTER=y 1226# CONFIG_USB_PRINTER is not set
1227
1228#
1229# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
1230#
1231
1232#
1233# may also be needed; see USB_STORAGE Help for more information
1234#
989CONFIG_USB_STORAGE=y 1235CONFIG_USB_STORAGE=y
990# CONFIG_USB_STORAGE_DEBUG is not set 1236# CONFIG_USB_STORAGE_DEBUG is not set
991# CONFIG_USB_STORAGE_DATAFAB is not set 1237# CONFIG_USB_STORAGE_DATAFAB is not set
992# CONFIG_USB_STORAGE_FREECOM is not set 1238# CONFIG_USB_STORAGE_FREECOM is not set
993# CONFIG_USB_STORAGE_ISD200 is not set 1239# CONFIG_USB_STORAGE_ISD200 is not set
994# CONFIG_USB_STORAGE_DPCM is not set 1240# CONFIG_USB_STORAGE_DPCM is not set
995# CONFIG_USB_STORAGE_HP8200e is not set 1241# CONFIG_USB_STORAGE_USBAT is not set
996# CONFIG_USB_STORAGE_SDDR09 is not set 1242# CONFIG_USB_STORAGE_SDDR09 is not set
997# CONFIG_USB_STORAGE_SDDR55 is not set 1243# CONFIG_USB_STORAGE_SDDR55 is not set
998# CONFIG_USB_STORAGE_JUMPSHOT is not set 1244# CONFIG_USB_STORAGE_JUMPSHOT is not set
1245# CONFIG_USB_STORAGE_ALAUDA is not set
1246# CONFIG_USB_LIBUSUAL is not set
999 1247
1000# 1248#
1001# USB Human Interface Devices (HID) 1249# USB Input Devices
1250#
1251# CONFIG_USB_HID is not set
1252
1002# 1253#
1003CONFIG_USB_HID=y 1254# USB HID Boot Protocol drivers
1004CONFIG_USB_HIDINPUT=y 1255#
1005# CONFIG_HID_FF is not set 1256# CONFIG_USB_KBD is not set
1006# CONFIG_USB_HIDDEV is not set 1257# CONFIG_USB_MOUSE is not set
1007# CONFIG_USB_AIPTEK is not set 1258# CONFIG_USB_AIPTEK is not set
1008# CONFIG_USB_WACOM is not set 1259# CONFIG_USB_WACOM is not set
1260# CONFIG_USB_ACECAD is not set
1009# CONFIG_USB_KBTAB is not set 1261# CONFIG_USB_KBTAB is not set
1010# CONFIG_USB_POWERMATE is not set 1262# CONFIG_USB_POWERMATE is not set
1011# CONFIG_USB_MTOUCH is not set 1263# CONFIG_USB_MTOUCH is not set
1012CONFIG_USB_EGALAX=m 1264# CONFIG_USB_ITMTOUCH is not set
1265# CONFIG_USB_EGALAX is not set
1266# CONFIG_USB_YEALINK is not set
1013# CONFIG_USB_XPAD is not set 1267# CONFIG_USB_XPAD is not set
1014# CONFIG_USB_ATI_REMOTE is not set 1268# CONFIG_USB_ATI_REMOTE is not set
1269# CONFIG_USB_ATI_REMOTE2 is not set
1270# CONFIG_USB_KEYSPAN_REMOTE is not set
1271# CONFIG_USB_APPLETOUCH is not set
1015 1272
1016# 1273#
1017# USB Imaging devices 1274# USB Imaging devices
1018# 1275#
1019# CONFIG_USB_MDC800 is not set 1276# CONFIG_USB_MDC800 is not set
1020# CONFIG_USB_MICROTEK is not set 1277# CONFIG_USB_MICROTEK is not set
1021# CONFIG_USB_HPUSBSCSI is not set
1022 1278
1023# 1279#
1024# USB Multimedia devices 1280# USB Multimedia devices
1025# 1281#
1026# CONFIG_USB_DABUSB is not set 1282# CONFIG_USB_DABUSB is not set
1283# CONFIG_USB_VICAM is not set
1284# CONFIG_USB_DSBR is not set
1285# CONFIG_USB_ET61X251 is not set
1286# CONFIG_USB_IBMCAM is not set
1287# CONFIG_USB_KONICAWC is not set
1288# CONFIG_USB_OV511 is not set
1289# CONFIG_USB_SE401 is not set
1290# CONFIG_USB_SN9C102 is not set
1291# CONFIG_USB_STV680 is not set
1292# CONFIG_USB_PWC is not set
1027 1293
1028# 1294#
1029# Video4Linux support is needed for USB Multimedia device support 1295# USB Network Adapters
1030#
1031
1032#
1033# USB Network adaptors
1034# 1296#
1035# CONFIG_USB_CATC is not set 1297# CONFIG_USB_CATC is not set
1036# CONFIG_USB_KAWETH is not set 1298# CONFIG_USB_KAWETH is not set
1037# CONFIG_USB_PEGASUS is not set 1299# CONFIG_USB_PEGASUS is not set
1038# CONFIG_USB_RTL8150 is not set 1300# CONFIG_USB_RTL8150 is not set
1039# CONFIG_USB_USBNET is not set 1301# CONFIG_USB_USBNET is not set
1302# CONFIG_USB_MON is not set
1040 1303
1041# 1304#
1042# USB port drivers 1305# USB port drivers
@@ -1053,56 +1316,85 @@ CONFIG_USB_EGALAX=m
1053# 1316#
1054# CONFIG_USB_EMI62 is not set 1317# CONFIG_USB_EMI62 is not set
1055# CONFIG_USB_EMI26 is not set 1318# CONFIG_USB_EMI26 is not set
1056# CONFIG_USB_TIGL is not set
1057# CONFIG_USB_AUERSWALD is not set 1319# CONFIG_USB_AUERSWALD is not set
1058# CONFIG_USB_RIO500 is not set 1320# CONFIG_USB_RIO500 is not set
1059# CONFIG_USB_LEGOTOWER is not set 1321# CONFIG_USB_LEGOTOWER is not set
1060# CONFIG_USB_LCD is not set 1322# CONFIG_USB_LCD is not set
1061# CONFIG_USB_LED is not set 1323# CONFIG_USB_LED is not set
1062CONFIG_USB_CYTHERM=m 1324# CONFIG_USB_CYTHERM is not set
1063CONFIG_USB_PHIDGETSERVO=m 1325# CONFIG_USB_PHIDGETKIT is not set
1326# CONFIG_USB_PHIDGETSERVO is not set
1327# CONFIG_USB_IDMOUSE is not set
1328# CONFIG_USB_SISUSBVGA is not set
1329# CONFIG_USB_LD is not set
1064# CONFIG_USB_TEST is not set 1330# CONFIG_USB_TEST is not set
1065 1331
1066# 1332#
1333# USB DSL modem support
1334#
1335
1336#
1067# USB Gadget Support 1337# USB Gadget Support
1068# 1338#
1069# CONFIG_USB_GADGET is not set 1339# CONFIG_USB_GADGET is not set
1070 1340
1071# 1341#
1342# MMC/SD Card support
1343#
1344# CONFIG_MMC is not set
1345
1346#
1347# InfiniBand support
1348#
1349# CONFIG_INFINIBAND is not set
1350
1351#
1352# SN Devices
1353#
1354
1355#
1356# EDAC - error detection and reporting (RAS)
1357#
1358# CONFIG_EDAC is not set
1359
1360#
1072# File systems 1361# File systems
1073# 1362#
1074CONFIG_EXT2_FS=y 1363CONFIG_EXT2_FS=y
1075# CONFIG_EXT2_FS_XATTR is not set 1364# CONFIG_EXT2_FS_XATTR is not set
1076CONFIG_EXT3_FS=y 1365# CONFIG_EXT2_FS_XIP is not set
1077CONFIG_EXT3_FS_XATTR=y 1366# CONFIG_EXT3_FS is not set
1078# CONFIG_EXT3_FS_POSIX_ACL is not set
1079# CONFIG_EXT3_FS_SECURITY is not set
1080CONFIG_JBD=y
1081# CONFIG_JBD_DEBUG is not set
1082CONFIG_FS_MBCACHE=y
1083# CONFIG_REISERFS_FS is not set 1367# CONFIG_REISERFS_FS is not set
1084# CONFIG_JFS_FS is not set 1368# CONFIG_JFS_FS is not set
1369# CONFIG_FS_POSIX_ACL is not set
1085# CONFIG_XFS_FS is not set 1370# CONFIG_XFS_FS is not set
1371# CONFIG_OCFS2_FS is not set
1086# CONFIG_MINIX_FS is not set 1372# CONFIG_MINIX_FS is not set
1087# CONFIG_ROMFS_FS is not set 1373# CONFIG_ROMFS_FS is not set
1374# CONFIG_INOTIFY is not set
1088# CONFIG_QUOTA is not set 1375# CONFIG_QUOTA is not set
1376CONFIG_DNOTIFY=y
1089# CONFIG_AUTOFS_FS is not set 1377# CONFIG_AUTOFS_FS is not set
1090CONFIG_AUTOFS4_FS=y 1378# CONFIG_AUTOFS4_FS is not set
1379# CONFIG_FUSE_FS is not set
1091 1380
1092# 1381#
1093# CD-ROM/DVD Filesystems 1382# CD-ROM/DVD Filesystems
1094# 1383#
1095CONFIG_ISO9660_FS=y 1384CONFIG_ISO9660_FS=y
1096CONFIG_JOLIET=y 1385CONFIG_JOLIET=y
1097# CONFIG_ZISOFS is not set 1386CONFIG_ZISOFS=y
1098CONFIG_UDF_FS=y 1387CONFIG_ZISOFS_FS=y
1388# CONFIG_UDF_FS is not set
1099 1389
1100# 1390#
1101# DOS/FAT/NT Filesystems 1391# DOS/FAT/NT Filesystems
1102# 1392#
1103CONFIG_FAT_FS=y 1393CONFIG_FAT_FS=y
1104CONFIG_MSDOS_FS=y 1394# CONFIG_MSDOS_FS is not set
1105CONFIG_VFAT_FS=y 1395CONFIG_VFAT_FS=y
1396CONFIG_FAT_DEFAULT_CODEPAGE=850
1397CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
1106# CONFIG_NTFS_FS is not set 1398# CONFIG_NTFS_FS is not set
1107 1399
1108# 1400#
@@ -1111,12 +1403,12 @@ CONFIG_VFAT_FS=y
1111CONFIG_PROC_FS=y 1403CONFIG_PROC_FS=y
1112CONFIG_PROC_KCORE=y 1404CONFIG_PROC_KCORE=y
1113CONFIG_SYSFS=y 1405CONFIG_SYSFS=y
1114# CONFIG_DEVFS_FS is not set
1115# CONFIG_DEVPTS_FS_XATTR is not set
1116CONFIG_TMPFS=y 1406CONFIG_TMPFS=y
1117# CONFIG_HUGETLBFS is not set 1407# CONFIG_HUGETLBFS is not set
1118# CONFIG_HUGETLB_PAGE is not set 1408# CONFIG_HUGETLB_PAGE is not set
1119CONFIG_RAMFS=y 1409CONFIG_RAMFS=y
1410# CONFIG_RELAYFS_FS is not set
1411# CONFIG_CONFIGFS_FS is not set
1120 1412
1121# 1413#
1122# Miscellaneous filesystems 1414# Miscellaneous filesystems
@@ -1138,38 +1430,48 @@ CONFIG_RAMFS=y
1138# 1430#
1139# Network File Systems 1431# Network File Systems
1140# 1432#
1141CONFIG_NFS_FS=y 1433# CONFIG_NFS_FS is not set
1142# CONFIG_NFS_V3 is not set 1434# CONFIG_NFSD is not set
1143# CONFIG_NFS_V4 is not set
1144# CONFIG_NFS_DIRECTIO is not set
1145CONFIG_NFSD=y
1146# CONFIG_NFSD_V3 is not set
1147CONFIG_NFSD_TCP=y
1148CONFIG_LOCKD=y
1149CONFIG_EXPORTFS=y
1150CONFIG_SUNRPC=y
1151# CONFIG_RPCSEC_GSS_KRB5 is not set
1152# CONFIG_SMB_FS is not set 1435# CONFIG_SMB_FS is not set
1153# CONFIG_CIFS is not set 1436CONFIG_CIFS=y
1437# CONFIG_CIFS_STATS is not set
1438# CONFIG_CIFS_XATTR is not set
1439# CONFIG_CIFS_EXPERIMENTAL is not set
1154# CONFIG_NCP_FS is not set 1440# CONFIG_NCP_FS is not set
1155# CONFIG_CODA_FS is not set 1441# CONFIG_CODA_FS is not set
1156# CONFIG_AFS_FS is not set 1442# CONFIG_AFS_FS is not set
1443# CONFIG_9P_FS is not set
1157 1444
1158# 1445#
1159# Partition Types 1446# Partition Types
1160# 1447#
1161# CONFIG_PARTITION_ADVANCED is not set 1448CONFIG_PARTITION_ADVANCED=y
1449# CONFIG_ACORN_PARTITION is not set
1450# CONFIG_OSF_PARTITION is not set
1451# CONFIG_AMIGA_PARTITION is not set
1452# CONFIG_ATARI_PARTITION is not set
1453# CONFIG_MAC_PARTITION is not set
1162CONFIG_MSDOS_PARTITION=y 1454CONFIG_MSDOS_PARTITION=y
1455# CONFIG_BSD_DISKLABEL is not set
1456# CONFIG_MINIX_SUBPARTITION is not set
1457# CONFIG_SOLARIS_X86_PARTITION is not set
1458# CONFIG_UNIXWARE_DISKLABEL is not set
1459# CONFIG_LDM_PARTITION is not set
1460# CONFIG_SGI_PARTITION is not set
1461# CONFIG_ULTRIX_PARTITION is not set
1462# CONFIG_SUN_PARTITION is not set
1463# CONFIG_KARMA_PARTITION is not set
1464# CONFIG_EFI_PARTITION is not set
1163 1465
1164# 1466#
1165# Native Language Support 1467# Native Language Support
1166# 1468#
1167CONFIG_NLS=y 1469CONFIG_NLS=y
1168CONFIG_NLS_DEFAULT="iso8859-1" 1470CONFIG_NLS_DEFAULT="iso8859-15"
1169CONFIG_NLS_CODEPAGE_437=y 1471# CONFIG_NLS_CODEPAGE_437 is not set
1170# CONFIG_NLS_CODEPAGE_737 is not set 1472# CONFIG_NLS_CODEPAGE_737 is not set
1171# CONFIG_NLS_CODEPAGE_775 is not set 1473# CONFIG_NLS_CODEPAGE_775 is not set
1172# CONFIG_NLS_CODEPAGE_850 is not set 1474CONFIG_NLS_CODEPAGE_850=y
1173# CONFIG_NLS_CODEPAGE_852 is not set 1475# CONFIG_NLS_CODEPAGE_852 is not set
1174# CONFIG_NLS_CODEPAGE_855 is not set 1476# CONFIG_NLS_CODEPAGE_855 is not set
1175# CONFIG_NLS_CODEPAGE_857 is not set 1477# CONFIG_NLS_CODEPAGE_857 is not set
@@ -1189,6 +1491,7 @@ CONFIG_NLS_CODEPAGE_437=y
1189# CONFIG_NLS_ISO8859_8 is not set 1491# CONFIG_NLS_ISO8859_8 is not set
1190# CONFIG_NLS_CODEPAGE_1250 is not set 1492# CONFIG_NLS_CODEPAGE_1250 is not set
1191# CONFIG_NLS_CODEPAGE_1251 is not set 1493# CONFIG_NLS_CODEPAGE_1251 is not set
1494# CONFIG_NLS_ASCII is not set
1192CONFIG_NLS_ISO8859_1=y 1495CONFIG_NLS_ISO8859_1=y
1193# CONFIG_NLS_ISO8859_2 is not set 1496# CONFIG_NLS_ISO8859_2 is not set
1194# CONFIG_NLS_ISO8859_3 is not set 1497# CONFIG_NLS_ISO8859_3 is not set
@@ -1199,31 +1502,33 @@ CONFIG_NLS_ISO8859_1=y
1199# CONFIG_NLS_ISO8859_9 is not set 1502# CONFIG_NLS_ISO8859_9 is not set
1200# CONFIG_NLS_ISO8859_13 is not set 1503# CONFIG_NLS_ISO8859_13 is not set
1201# CONFIG_NLS_ISO8859_14 is not set 1504# CONFIG_NLS_ISO8859_14 is not set
1202# CONFIG_NLS_ISO8859_15 is not set 1505CONFIG_NLS_ISO8859_15=y
1203# CONFIG_NLS_KOI8_R is not set 1506# CONFIG_NLS_KOI8_R is not set
1204# CONFIG_NLS_KOI8_U is not set 1507# CONFIG_NLS_KOI8_U is not set
1205# CONFIG_NLS_UTF8 is not set 1508CONFIG_NLS_UTF8=y
1206 1509
1207# 1510#
1208# Profiling support 1511# Instrumentation Support
1209# 1512#
1210CONFIG_PROFILING=y 1513# CONFIG_PROFILING is not set
1211CONFIG_OPROFILE=y 1514# CONFIG_KPROBES is not set
1212 1515
1213# 1516#
1214# Kernel hacking 1517# Kernel hacking
1215# 1518#
1519# CONFIG_PRINTK_TIME is not set
1520CONFIG_MAGIC_SYSRQ=y
1216# CONFIG_DEBUG_KERNEL is not set 1521# CONFIG_DEBUG_KERNEL is not set
1522CONFIG_LOG_BUF_SHIFT=14
1523CONFIG_DEBUG_BUGVERBOSE=y
1217CONFIG_EARLY_PRINTK=y 1524CONFIG_EARLY_PRINTK=y
1218CONFIG_DEBUG_SPINLOCK_SLEEP=y
1219# CONFIG_FRAME_POINTER is not set
1220CONFIG_4KSTACKS=y
1221CONFIG_X86_FIND_SMP_CONFIG=y 1525CONFIG_X86_FIND_SMP_CONFIG=y
1222CONFIG_X86_MPPARSE=y 1526CONFIG_X86_MPPARSE=y
1223 1527
1224# 1528#
1225# Security options 1529# Security options
1226# 1530#
1531# CONFIG_KEYS is not set
1227# CONFIG_SECURITY is not set 1532# CONFIG_SECURITY is not set
1228 1533
1229# 1534#
@@ -1232,13 +1537,18 @@ CONFIG_X86_MPPARSE=y
1232# CONFIG_CRYPTO is not set 1537# CONFIG_CRYPTO is not set
1233 1538
1234# 1539#
1540# Hardware crypto devices
1541#
1542
1543#
1235# Library routines 1544# Library routines
1236# 1545#
1546# CONFIG_CRC_CCITT is not set
1547# CONFIG_CRC16 is not set
1237CONFIG_CRC32=y 1548CONFIG_CRC32=y
1238CONFIG_LIBCRC32C=m 1549# CONFIG_LIBCRC32C is not set
1239CONFIG_X86_SMP=y 1550CONFIG_ZLIB_INFLATE=y
1240CONFIG_X86_HT=y 1551CONFIG_GENERIC_HARDIRQS=y
1552CONFIG_GENERIC_IRQ_PROBE=y
1241CONFIG_X86_BIOS_REBOOT=y 1553CONFIG_X86_BIOS_REBOOT=y
1242CONFIG_X86_TRAMPOLINE=y 1554CONFIG_KTIME_SCALAR=y
1243CONFIG_X86_STD_RESOURCES=y
1244CONFIG_PC=y
diff --git a/arch/i386/kernel/Makefile b/arch/i386/kernel/Makefile
index 65656c033d70..5b9ed21216cf 100644
--- a/arch/i386/kernel/Makefile
+++ b/arch/i386/kernel/Makefile
@@ -7,7 +7,7 @@ extra-y := head.o init_task.o vmlinux.lds
7obj-y := process.o semaphore.o signal.o entry.o traps.o irq.o \ 7obj-y := process.o semaphore.o signal.o entry.o traps.o irq.o \
8 ptrace.o time.o ioport.o ldt.o setup.o i8259.o sys_i386.o \ 8 ptrace.o time.o ioport.o ldt.o setup.o i8259.o sys_i386.o \
9 pci-dma.o i386_ksyms.o i387.o dmi_scan.o bootflag.o \ 9 pci-dma.o i386_ksyms.o i387.o dmi_scan.o bootflag.o \
10 quirks.o i8237.o topology.o 10 quirks.o i8237.o topology.o alternative.o
11 11
12obj-y += cpu/ 12obj-y += cpu/
13obj-y += timers/ 13obj-y += timers/
diff --git a/arch/i386/kernel/alternative.c b/arch/i386/kernel/alternative.c
new file mode 100644
index 000000000000..5cbd6f99fb2a
--- /dev/null
+++ b/arch/i386/kernel/alternative.c
@@ -0,0 +1,321 @@
1#include <linux/module.h>
2#include <linux/spinlock.h>
3#include <linux/list.h>
4#include <asm/alternative.h>
5#include <asm/sections.h>
6
7#define DEBUG 0
8#if DEBUG
9# define DPRINTK(fmt, args...) printk(fmt, args)
10#else
11# define DPRINTK(fmt, args...)
12#endif
13
14/* Use inline assembly to define this because the nops are defined
15 as inline assembly strings in the include files and we cannot
16 get them easily into strings. */
17asm("\t.data\nintelnops: "
18 GENERIC_NOP1 GENERIC_NOP2 GENERIC_NOP3 GENERIC_NOP4 GENERIC_NOP5 GENERIC_NOP6
19 GENERIC_NOP7 GENERIC_NOP8);
20asm("\t.data\nk8nops: "
21 K8_NOP1 K8_NOP2 K8_NOP3 K8_NOP4 K8_NOP5 K8_NOP6
22 K8_NOP7 K8_NOP8);
23asm("\t.data\nk7nops: "
24 K7_NOP1 K7_NOP2 K7_NOP3 K7_NOP4 K7_NOP5 K7_NOP6
25 K7_NOP7 K7_NOP8);
26
27extern unsigned char intelnops[], k8nops[], k7nops[];
28static unsigned char *intel_nops[ASM_NOP_MAX+1] = {
29 NULL,
30 intelnops,
31 intelnops + 1,
32 intelnops + 1 + 2,
33 intelnops + 1 + 2 + 3,
34 intelnops + 1 + 2 + 3 + 4,
35 intelnops + 1 + 2 + 3 + 4 + 5,
36 intelnops + 1 + 2 + 3 + 4 + 5 + 6,
37 intelnops + 1 + 2 + 3 + 4 + 5 + 6 + 7,
38};
39static unsigned char *k8_nops[ASM_NOP_MAX+1] = {
40 NULL,
41 k8nops,
42 k8nops + 1,
43 k8nops + 1 + 2,
44 k8nops + 1 + 2 + 3,
45 k8nops + 1 + 2 + 3 + 4,
46 k8nops + 1 + 2 + 3 + 4 + 5,
47 k8nops + 1 + 2 + 3 + 4 + 5 + 6,
48 k8nops + 1 + 2 + 3 + 4 + 5 + 6 + 7,
49};
50static unsigned char *k7_nops[ASM_NOP_MAX+1] = {
51 NULL,
52 k7nops,
53 k7nops + 1,
54 k7nops + 1 + 2,
55 k7nops + 1 + 2 + 3,
56 k7nops + 1 + 2 + 3 + 4,
57 k7nops + 1 + 2 + 3 + 4 + 5,
58 k7nops + 1 + 2 + 3 + 4 + 5 + 6,
59 k7nops + 1 + 2 + 3 + 4 + 5 + 6 + 7,
60};
61static struct nop {
62 int cpuid;
63 unsigned char **noptable;
64} noptypes[] = {
65 { X86_FEATURE_K8, k8_nops },
66 { X86_FEATURE_K7, k7_nops },
67 { -1, NULL }
68};
69
70
71extern struct alt_instr __alt_instructions[], __alt_instructions_end[];
72extern struct alt_instr __smp_alt_instructions[], __smp_alt_instructions_end[];
73extern u8 *__smp_locks[], *__smp_locks_end[];
74
75extern u8 __smp_alt_begin[], __smp_alt_end[];
76
77
78static unsigned char** find_nop_table(void)
79{
80 unsigned char **noptable = intel_nops;
81 int i;
82
83 for (i = 0; noptypes[i].cpuid >= 0; i++) {
84 if (boot_cpu_has(noptypes[i].cpuid)) {
85 noptable = noptypes[i].noptable;
86 break;
87 }
88 }
89 return noptable;
90}
91
92/* Replace instructions with better alternatives for this CPU type.
93 This runs before SMP is initialized to avoid SMP problems with
94 self modifying code. This implies that assymetric systems where
95 APs have less capabilities than the boot processor are not handled.
96 Tough. Make sure you disable such features by hand. */
97
98void apply_alternatives(struct alt_instr *start, struct alt_instr *end)
99{
100 unsigned char **noptable = find_nop_table();
101 struct alt_instr *a;
102 int diff, i, k;
103
104 DPRINTK("%s: alt table %p -> %p\n", __FUNCTION__, start, end);
105 for (a = start; a < end; a++) {
106 BUG_ON(a->replacementlen > a->instrlen);
107 if (!boot_cpu_has(a->cpuid))
108 continue;
109 memcpy(a->instr, a->replacement, a->replacementlen);
110 diff = a->instrlen - a->replacementlen;
111 /* Pad the rest with nops */
112 for (i = a->replacementlen; diff > 0; diff -= k, i += k) {
113 k = diff;
114 if (k > ASM_NOP_MAX)
115 k = ASM_NOP_MAX;
116 memcpy(a->instr + i, noptable[k], k);
117 }
118 }
119}
120
121static void alternatives_smp_save(struct alt_instr *start, struct alt_instr *end)
122{
123 struct alt_instr *a;
124
125 DPRINTK("%s: alt table %p-%p\n", __FUNCTION__, start, end);
126 for (a = start; a < end; a++) {
127 memcpy(a->replacement + a->replacementlen,
128 a->instr,
129 a->instrlen);
130 }
131}
132
133static void alternatives_smp_apply(struct alt_instr *start, struct alt_instr *end)
134{
135 struct alt_instr *a;
136
137 for (a = start; a < end; a++) {
138 memcpy(a->instr,
139 a->replacement + a->replacementlen,
140 a->instrlen);
141 }
142}
143
144static void alternatives_smp_lock(u8 **start, u8 **end, u8 *text, u8 *text_end)
145{
146 u8 **ptr;
147
148 for (ptr = start; ptr < end; ptr++) {
149 if (*ptr < text)
150 continue;
151 if (*ptr > text_end)
152 continue;
153 **ptr = 0xf0; /* lock prefix */
154 };
155}
156
157static void alternatives_smp_unlock(u8 **start, u8 **end, u8 *text, u8 *text_end)
158{
159 unsigned char **noptable = find_nop_table();
160 u8 **ptr;
161
162 for (ptr = start; ptr < end; ptr++) {
163 if (*ptr < text)
164 continue;
165 if (*ptr > text_end)
166 continue;
167 **ptr = noptable[1][0];
168 };
169}
170
171struct smp_alt_module {
172 /* what is this ??? */
173 struct module *mod;
174 char *name;
175
176 /* ptrs to lock prefixes */
177 u8 **locks;
178 u8 **locks_end;
179
180 /* .text segment, needed to avoid patching init code ;) */
181 u8 *text;
182 u8 *text_end;
183
184 struct list_head next;
185};
186static LIST_HEAD(smp_alt_modules);
187static DEFINE_SPINLOCK(smp_alt);
188
189static int smp_alt_once = 0;
190static int __init bootonly(char *str)
191{
192 smp_alt_once = 1;
193 return 1;
194}
195__setup("smp-alt-boot", bootonly);
196
197void alternatives_smp_module_add(struct module *mod, char *name,
198 void *locks, void *locks_end,
199 void *text, void *text_end)
200{
201 struct smp_alt_module *smp;
202 unsigned long flags;
203
204 if (smp_alt_once) {
205 if (boot_cpu_has(X86_FEATURE_UP))
206 alternatives_smp_unlock(locks, locks_end,
207 text, text_end);
208 return;
209 }
210
211 smp = kzalloc(sizeof(*smp), GFP_KERNEL);
212 if (NULL == smp)
213 return; /* we'll run the (safe but slow) SMP code then ... */
214
215 smp->mod = mod;
216 smp->name = name;
217 smp->locks = locks;
218 smp->locks_end = locks_end;
219 smp->text = text;
220 smp->text_end = text_end;
221 DPRINTK("%s: locks %p -> %p, text %p -> %p, name %s\n",
222 __FUNCTION__, smp->locks, smp->locks_end,
223 smp->text, smp->text_end, smp->name);
224
225 spin_lock_irqsave(&smp_alt, flags);
226 list_add_tail(&smp->next, &smp_alt_modules);
227 if (boot_cpu_has(X86_FEATURE_UP))
228 alternatives_smp_unlock(smp->locks, smp->locks_end,
229 smp->text, smp->text_end);
230 spin_unlock_irqrestore(&smp_alt, flags);
231}
232
233void alternatives_smp_module_del(struct module *mod)
234{
235 struct smp_alt_module *item;
236 unsigned long flags;
237
238 if (smp_alt_once)
239 return;
240
241 spin_lock_irqsave(&smp_alt, flags);
242 list_for_each_entry(item, &smp_alt_modules, next) {
243 if (mod != item->mod)
244 continue;
245 list_del(&item->next);
246 spin_unlock_irqrestore(&smp_alt, flags);
247 DPRINTK("%s: %s\n", __FUNCTION__, item->name);
248 kfree(item);
249 return;
250 }
251 spin_unlock_irqrestore(&smp_alt, flags);
252}
253
254void alternatives_smp_switch(int smp)
255{
256 struct smp_alt_module *mod;
257 unsigned long flags;
258
259 if (smp_alt_once)
260 return;
261 BUG_ON(!smp && (num_online_cpus() > 1));
262
263 spin_lock_irqsave(&smp_alt, flags);
264 if (smp) {
265 printk(KERN_INFO "SMP alternatives: switching to SMP code\n");
266 clear_bit(X86_FEATURE_UP, boot_cpu_data.x86_capability);
267 clear_bit(X86_FEATURE_UP, cpu_data[0].x86_capability);
268 alternatives_smp_apply(__smp_alt_instructions,
269 __smp_alt_instructions_end);
270 list_for_each_entry(mod, &smp_alt_modules, next)
271 alternatives_smp_lock(mod->locks, mod->locks_end,
272 mod->text, mod->text_end);
273 } else {
274 printk(KERN_INFO "SMP alternatives: switching to UP code\n");
275 set_bit(X86_FEATURE_UP, boot_cpu_data.x86_capability);
276 set_bit(X86_FEATURE_UP, cpu_data[0].x86_capability);
277 apply_alternatives(__smp_alt_instructions,
278 __smp_alt_instructions_end);
279 list_for_each_entry(mod, &smp_alt_modules, next)
280 alternatives_smp_unlock(mod->locks, mod->locks_end,
281 mod->text, mod->text_end);
282 }
283 spin_unlock_irqrestore(&smp_alt, flags);
284}
285
286void __init alternative_instructions(void)
287{
288 apply_alternatives(__alt_instructions, __alt_instructions_end);
289
290 /* switch to patch-once-at-boottime-only mode and free the
291 * tables in case we know the number of CPUs will never ever
292 * change */
293#ifdef CONFIG_HOTPLUG_CPU
294 if (num_possible_cpus() < 2)
295 smp_alt_once = 1;
296#else
297 smp_alt_once = 1;
298#endif
299
300 if (smp_alt_once) {
301 if (1 == num_possible_cpus()) {
302 printk(KERN_INFO "SMP alternatives: switching to UP code\n");
303 set_bit(X86_FEATURE_UP, boot_cpu_data.x86_capability);
304 set_bit(X86_FEATURE_UP, cpu_data[0].x86_capability);
305 apply_alternatives(__smp_alt_instructions,
306 __smp_alt_instructions_end);
307 alternatives_smp_unlock(__smp_locks, __smp_locks_end,
308 _text, _etext);
309 }
310 free_init_pages("SMP alternatives",
311 (unsigned long)__smp_alt_begin,
312 (unsigned long)__smp_alt_end);
313 } else {
314 alternatives_smp_save(__smp_alt_instructions,
315 __smp_alt_instructions_end);
316 alternatives_smp_module_add(NULL, "core kernel",
317 __smp_locks, __smp_locks_end,
318 _text, _etext);
319 alternatives_smp_switch(0);
320 }
321}
diff --git a/arch/i386/kernel/apic.c b/arch/i386/kernel/apic.c
index 776c90989e06..eb5279d23b7f 100644
--- a/arch/i386/kernel/apic.c
+++ b/arch/i386/kernel/apic.c
@@ -38,6 +38,7 @@
38#include <asm/i8253.h> 38#include <asm/i8253.h>
39 39
40#include <mach_apic.h> 40#include <mach_apic.h>
41#include <mach_apicdef.h>
41#include <mach_ipi.h> 42#include <mach_ipi.h>
42 43
43#include "io_ports.h" 44#include "io_ports.h"
diff --git a/arch/i386/kernel/cpu/centaur.c b/arch/i386/kernel/cpu/centaur.c
index f52669ecb93f..bd75629dd262 100644
--- a/arch/i386/kernel/cpu/centaur.c
+++ b/arch/i386/kernel/cpu/centaur.c
@@ -4,6 +4,7 @@
4#include <asm/processor.h> 4#include <asm/processor.h>
5#include <asm/msr.h> 5#include <asm/msr.h>
6#include <asm/e820.h> 6#include <asm/e820.h>
7#include <asm/mtrr.h>
7#include "cpu.h" 8#include "cpu.h"
8 9
9#ifdef CONFIG_X86_OOSTORE 10#ifdef CONFIG_X86_OOSTORE
diff --git a/arch/i386/kernel/cpu/common.c b/arch/i386/kernel/cpu/common.c
index e6bd095ae108..7e3d6b6a4e96 100644
--- a/arch/i386/kernel/cpu/common.c
+++ b/arch/i386/kernel/cpu/common.c
@@ -25,9 +25,10 @@ EXPORT_PER_CPU_SYMBOL(cpu_gdt_descr);
25DEFINE_PER_CPU(unsigned char, cpu_16bit_stack[CPU_16BIT_STACK_SIZE]); 25DEFINE_PER_CPU(unsigned char, cpu_16bit_stack[CPU_16BIT_STACK_SIZE]);
26EXPORT_PER_CPU_SYMBOL(cpu_16bit_stack); 26EXPORT_PER_CPU_SYMBOL(cpu_16bit_stack);
27 27
28static int cachesize_override __devinitdata = -1; 28static int cachesize_override __cpuinitdata = -1;
29static int disable_x86_fxsr __devinitdata = 0; 29static int disable_x86_fxsr __cpuinitdata;
30static int disable_x86_serial_nr __devinitdata = 1; 30static int disable_x86_serial_nr __cpuinitdata = 1;
31static int disable_x86_sep __cpuinitdata;
31 32
32struct cpu_dev * cpu_devs[X86_VENDOR_NUM] = {}; 33struct cpu_dev * cpu_devs[X86_VENDOR_NUM] = {};
33 34
@@ -59,7 +60,7 @@ static int __init cachesize_setup(char *str)
59} 60}
60__setup("cachesize=", cachesize_setup); 61__setup("cachesize=", cachesize_setup);
61 62
62int __devinit get_model_name(struct cpuinfo_x86 *c) 63int __cpuinit get_model_name(struct cpuinfo_x86 *c)
63{ 64{
64 unsigned int *v; 65 unsigned int *v;
65 char *p, *q; 66 char *p, *q;
@@ -89,7 +90,7 @@ int __devinit get_model_name(struct cpuinfo_x86 *c)
89} 90}
90 91
91 92
92void __devinit display_cacheinfo(struct cpuinfo_x86 *c) 93void __cpuinit display_cacheinfo(struct cpuinfo_x86 *c)
93{ 94{
94 unsigned int n, dummy, ecx, edx, l2size; 95 unsigned int n, dummy, ecx, edx, l2size;
95 96
@@ -130,7 +131,7 @@ void __devinit display_cacheinfo(struct cpuinfo_x86 *c)
130/* in particular, if CPUID levels 0x80000002..4 are supported, this isn't used */ 131/* in particular, if CPUID levels 0x80000002..4 are supported, this isn't used */
131 132
132/* Look up CPU names by table lookup. */ 133/* Look up CPU names by table lookup. */
133static char __devinit *table_lookup_model(struct cpuinfo_x86 *c) 134static char __cpuinit *table_lookup_model(struct cpuinfo_x86 *c)
134{ 135{
135 struct cpu_model_info *info; 136 struct cpu_model_info *info;
136 137
@@ -151,7 +152,7 @@ static char __devinit *table_lookup_model(struct cpuinfo_x86 *c)
151} 152}
152 153
153 154
154static void __devinit get_cpu_vendor(struct cpuinfo_x86 *c, int early) 155static void __cpuinit get_cpu_vendor(struct cpuinfo_x86 *c, int early)
155{ 156{
156 char *v = c->x86_vendor_id; 157 char *v = c->x86_vendor_id;
157 int i; 158 int i;
@@ -187,6 +188,14 @@ static int __init x86_fxsr_setup(char * s)
187__setup("nofxsr", x86_fxsr_setup); 188__setup("nofxsr", x86_fxsr_setup);
188 189
189 190
191static int __init x86_sep_setup(char * s)
192{
193 disable_x86_sep = 1;
194 return 1;
195}
196__setup("nosep", x86_sep_setup);
197
198
190/* Standard macro to see if a specific flag is changeable */ 199/* Standard macro to see if a specific flag is changeable */
191static inline int flag_is_changeable_p(u32 flag) 200static inline int flag_is_changeable_p(u32 flag)
192{ 201{
@@ -210,7 +219,7 @@ static inline int flag_is_changeable_p(u32 flag)
210 219
211 220
212/* Probe for the CPUID instruction */ 221/* Probe for the CPUID instruction */
213static int __devinit have_cpuid_p(void) 222static int __cpuinit have_cpuid_p(void)
214{ 223{
215 return flag_is_changeable_p(X86_EFLAGS_ID); 224 return flag_is_changeable_p(X86_EFLAGS_ID);
216} 225}
@@ -254,7 +263,7 @@ static void __init early_cpu_detect(void)
254 } 263 }
255} 264}
256 265
257void __devinit generic_identify(struct cpuinfo_x86 * c) 266void __cpuinit generic_identify(struct cpuinfo_x86 * c)
258{ 267{
259 u32 tfms, xlvl; 268 u32 tfms, xlvl;
260 int junk; 269 int junk;
@@ -307,7 +316,7 @@ void __devinit generic_identify(struct cpuinfo_x86 * c)
307#endif 316#endif
308} 317}
309 318
310static void __devinit squash_the_stupid_serial_number(struct cpuinfo_x86 *c) 319static void __cpuinit squash_the_stupid_serial_number(struct cpuinfo_x86 *c)
311{ 320{
312 if (cpu_has(c, X86_FEATURE_PN) && disable_x86_serial_nr ) { 321 if (cpu_has(c, X86_FEATURE_PN) && disable_x86_serial_nr ) {
313 /* Disable processor serial number */ 322 /* Disable processor serial number */
@@ -335,7 +344,7 @@ __setup("serialnumber", x86_serial_nr_setup);
335/* 344/*
336 * This does the hard work of actually picking apart the CPU stuff... 345 * This does the hard work of actually picking apart the CPU stuff...
337 */ 346 */
338void __devinit identify_cpu(struct cpuinfo_x86 *c) 347void __cpuinit identify_cpu(struct cpuinfo_x86 *c)
339{ 348{
340 int i; 349 int i;
341 350
@@ -405,6 +414,10 @@ void __devinit identify_cpu(struct cpuinfo_x86 *c)
405 clear_bit(X86_FEATURE_XMM, c->x86_capability); 414 clear_bit(X86_FEATURE_XMM, c->x86_capability);
406 } 415 }
407 416
417 /* SEP disabled? */
418 if (disable_x86_sep)
419 clear_bit(X86_FEATURE_SEP, c->x86_capability);
420
408 if (disable_pse) 421 if (disable_pse)
409 clear_bit(X86_FEATURE_PSE, c->x86_capability); 422 clear_bit(X86_FEATURE_PSE, c->x86_capability);
410 423
@@ -417,7 +430,7 @@ void __devinit identify_cpu(struct cpuinfo_x86 *c)
417 else 430 else
418 /* Last resort... */ 431 /* Last resort... */
419 sprintf(c->x86_model_id, "%02x/%02x", 432 sprintf(c->x86_model_id, "%02x/%02x",
420 c->x86_vendor, c->x86_model); 433 c->x86, c->x86_model);
421 } 434 }
422 435
423 /* Now the feature flags better reflect actual CPU features! */ 436 /* Now the feature flags better reflect actual CPU features! */
@@ -453,7 +466,7 @@ void __devinit identify_cpu(struct cpuinfo_x86 *c)
453} 466}
454 467
455#ifdef CONFIG_X86_HT 468#ifdef CONFIG_X86_HT
456void __devinit detect_ht(struct cpuinfo_x86 *c) 469void __cpuinit detect_ht(struct cpuinfo_x86 *c)
457{ 470{
458 u32 eax, ebx, ecx, edx; 471 u32 eax, ebx, ecx, edx;
459 int index_msb, core_bits; 472 int index_msb, core_bits;
@@ -500,7 +513,7 @@ void __devinit detect_ht(struct cpuinfo_x86 *c)
500} 513}
501#endif 514#endif
502 515
503void __devinit print_cpu_info(struct cpuinfo_x86 *c) 516void __cpuinit print_cpu_info(struct cpuinfo_x86 *c)
504{ 517{
505 char *vendor = NULL; 518 char *vendor = NULL;
506 519
@@ -523,7 +536,7 @@ void __devinit print_cpu_info(struct cpuinfo_x86 *c)
523 printk("\n"); 536 printk("\n");
524} 537}
525 538
526cpumask_t cpu_initialized __devinitdata = CPU_MASK_NONE; 539cpumask_t cpu_initialized __cpuinitdata = CPU_MASK_NONE;
527 540
528/* This is hacky. :) 541/* This is hacky. :)
529 * We're emulating future behavior. 542 * We're emulating future behavior.
@@ -570,7 +583,7 @@ void __init early_cpu_init(void)
570 * and IDT. We reload them nevertheless, this function acts as a 583 * and IDT. We reload them nevertheless, this function acts as a
571 * 'CPU state barrier', nothing should get across. 584 * 'CPU state barrier', nothing should get across.
572 */ 585 */
573void __devinit cpu_init(void) 586void __cpuinit cpu_init(void)
574{ 587{
575 int cpu = smp_processor_id(); 588 int cpu = smp_processor_id();
576 struct tss_struct * t = &per_cpu(init_tss, cpu); 589 struct tss_struct * t = &per_cpu(init_tss, cpu);
@@ -670,7 +683,7 @@ void __devinit cpu_init(void)
670} 683}
671 684
672#ifdef CONFIG_HOTPLUG_CPU 685#ifdef CONFIG_HOTPLUG_CPU
673void __devinit cpu_uninit(void) 686void __cpuinit cpu_uninit(void)
674{ 687{
675 int cpu = raw_smp_processor_id(); 688 int cpu = raw_smp_processor_id();
676 cpu_clear(cpu, cpu_initialized); 689 cpu_clear(cpu, cpu_initialized);
diff --git a/arch/i386/kernel/cpu/cpufreq/powernow-k8.c b/arch/i386/kernel/cpu/cpufreq/powernow-k8.c
index e11a09207ec8..3d5110b65cc3 100644
--- a/arch/i386/kernel/cpu/cpufreq/powernow-k8.c
+++ b/arch/i386/kernel/cpu/cpufreq/powernow-k8.c
@@ -1145,9 +1145,7 @@ static int __cpuinit powernowk8_init(void)
1145{ 1145{
1146 unsigned int i, supported_cpus = 0; 1146 unsigned int i, supported_cpus = 0;
1147 1147
1148 for (i=0; i<NR_CPUS; i++) { 1148 for_each_cpu(i) {
1149 if (!cpu_online(i))
1150 continue;
1151 if (check_supported_cpu(i)) 1149 if (check_supported_cpu(i))
1152 supported_cpus++; 1150 supported_cpus++;
1153 } 1151 }
diff --git a/arch/i386/kernel/cpu/intel.c b/arch/i386/kernel/cpu/intel.c
index 8c0120186b9f..5386b29bb5a5 100644
--- a/arch/i386/kernel/cpu/intel.c
+++ b/arch/i386/kernel/cpu/intel.c
@@ -29,7 +29,7 @@ extern int trap_init_f00f_bug(void);
29struct movsl_mask movsl_mask __read_mostly; 29struct movsl_mask movsl_mask __read_mostly;
30#endif 30#endif
31 31
32void __devinit early_intel_workaround(struct cpuinfo_x86 *c) 32void __cpuinit early_intel_workaround(struct cpuinfo_x86 *c)
33{ 33{
34 if (c->x86_vendor != X86_VENDOR_INTEL) 34 if (c->x86_vendor != X86_VENDOR_INTEL)
35 return; 35 return;
@@ -44,7 +44,7 @@ void __devinit early_intel_workaround(struct cpuinfo_x86 *c)
44 * This is called before we do cpu ident work 44 * This is called before we do cpu ident work
45 */ 45 */
46 46
47int __devinit ppro_with_ram_bug(void) 47int __cpuinit ppro_with_ram_bug(void)
48{ 48{
49 /* Uses data from early_cpu_detect now */ 49 /* Uses data from early_cpu_detect now */
50 if (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL && 50 if (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL &&
@@ -62,7 +62,7 @@ int __devinit ppro_with_ram_bug(void)
62 * P4 Xeon errata 037 workaround. 62 * P4 Xeon errata 037 workaround.
63 * Hardware prefetcher may cause stale data to be loaded into the cache. 63 * Hardware prefetcher may cause stale data to be loaded into the cache.
64 */ 64 */
65static void __devinit Intel_errata_workarounds(struct cpuinfo_x86 *c) 65static void __cpuinit Intel_errata_workarounds(struct cpuinfo_x86 *c)
66{ 66{
67 unsigned long lo, hi; 67 unsigned long lo, hi;
68 68
@@ -81,7 +81,7 @@ static void __devinit Intel_errata_workarounds(struct cpuinfo_x86 *c)
81/* 81/*
82 * find out the number of processor cores on the die 82 * find out the number of processor cores on the die
83 */ 83 */
84static int __devinit num_cpu_cores(struct cpuinfo_x86 *c) 84static int __cpuinit num_cpu_cores(struct cpuinfo_x86 *c)
85{ 85{
86 unsigned int eax, ebx, ecx, edx; 86 unsigned int eax, ebx, ecx, edx;
87 87
@@ -96,7 +96,7 @@ static int __devinit num_cpu_cores(struct cpuinfo_x86 *c)
96 return 1; 96 return 1;
97} 97}
98 98
99static void __devinit init_intel(struct cpuinfo_x86 *c) 99static void __cpuinit init_intel(struct cpuinfo_x86 *c)
100{ 100{
101 unsigned int l2 = 0; 101 unsigned int l2 = 0;
102 char *p = NULL; 102 char *p = NULL;
@@ -205,7 +205,7 @@ static unsigned int intel_size_cache(struct cpuinfo_x86 * c, unsigned int size)
205 return size; 205 return size;
206} 206}
207 207
208static struct cpu_dev intel_cpu_dev __devinitdata = { 208static struct cpu_dev intel_cpu_dev __cpuinitdata = {
209 .c_vendor = "Intel", 209 .c_vendor = "Intel",
210 .c_ident = { "GenuineIntel" }, 210 .c_ident = { "GenuineIntel" },
211 .c_models = { 211 .c_models = {
diff --git a/arch/i386/kernel/cpu/intel_cacheinfo.c b/arch/i386/kernel/cpu/intel_cacheinfo.c
index ffe58cee0c48..ce61921369e5 100644
--- a/arch/i386/kernel/cpu/intel_cacheinfo.c
+++ b/arch/i386/kernel/cpu/intel_cacheinfo.c
@@ -174,7 +174,7 @@ unsigned int __cpuinit init_intel_cacheinfo(struct cpuinfo_x86 *c)
174 unsigned int new_l1d = 0, new_l1i = 0; /* Cache sizes from cpuid(4) */ 174 unsigned int new_l1d = 0, new_l1i = 0; /* Cache sizes from cpuid(4) */
175 unsigned int new_l2 = 0, new_l3 = 0, i; /* Cache sizes from cpuid(4) */ 175 unsigned int new_l2 = 0, new_l3 = 0, i; /* Cache sizes from cpuid(4) */
176 176
177 if (c->cpuid_level > 4) { 177 if (c->cpuid_level > 3) {
178 static int is_initialized; 178 static int is_initialized;
179 179
180 if (is_initialized == 0) { 180 if (is_initialized == 0) {
@@ -330,7 +330,7 @@ static void __cpuinit cache_shared_cpu_map_setup(unsigned int cpu, int index)
330 } 330 }
331 } 331 }
332} 332}
333static void __devinit cache_remove_shared_cpu_map(unsigned int cpu, int index) 333static void __cpuinit cache_remove_shared_cpu_map(unsigned int cpu, int index)
334{ 334{
335 struct _cpuid4_info *this_leaf, *sibling_leaf; 335 struct _cpuid4_info *this_leaf, *sibling_leaf;
336 int sibling; 336 int sibling;
diff --git a/arch/i386/kernel/cpu/proc.c b/arch/i386/kernel/cpu/proc.c
index 89a85af33d28..5cfbd8011698 100644
--- a/arch/i386/kernel/cpu/proc.c
+++ b/arch/i386/kernel/cpu/proc.c
@@ -40,7 +40,7 @@ static int show_cpuinfo(struct seq_file *m, void *v)
40 /* Other (Linux-defined) */ 40 /* Other (Linux-defined) */
41 "cxmmx", "k6_mtrr", "cyrix_arr", "centaur_mcr", 41 "cxmmx", "k6_mtrr", "cyrix_arr", "centaur_mcr",
42 NULL, NULL, NULL, NULL, 42 NULL, NULL, NULL, NULL,
43 "constant_tsc", NULL, NULL, NULL, NULL, NULL, NULL, NULL, 43 "constant_tsc", "up", NULL, NULL, NULL, NULL, NULL, NULL,
44 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 44 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
45 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 45 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
46 46
diff --git a/arch/i386/kernel/crash.c b/arch/i386/kernel/crash.c
index d49dbe8dc96b..e3c5fca0aa8a 100644
--- a/arch/i386/kernel/crash.c
+++ b/arch/i386/kernel/crash.c
@@ -105,7 +105,7 @@ static int crash_nmi_callback(struct pt_regs *regs, int cpu)
105 return 1; 105 return 1;
106 local_irq_disable(); 106 local_irq_disable();
107 107
108 if (!user_mode(regs)) { 108 if (!user_mode_vm(regs)) {
109 crash_fixup_ss_esp(&fixed_regs, regs); 109 crash_fixup_ss_esp(&fixed_regs, regs);
110 regs = &fixed_regs; 110 regs = &fixed_regs;
111 } 111 }
diff --git a/arch/i386/kernel/efi.c b/arch/i386/kernel/efi.c
index c9cad7ba0d2d..7ec6cfa01fb3 100644
--- a/arch/i386/kernel/efi.c
+++ b/arch/i386/kernel/efi.c
@@ -115,7 +115,7 @@ static void efi_call_phys_epilog(void)
115 unsigned long cr4; 115 unsigned long cr4;
116 struct Xgt_desc_struct *cpu_gdt_descr = &per_cpu(cpu_gdt_descr, 0); 116 struct Xgt_desc_struct *cpu_gdt_descr = &per_cpu(cpu_gdt_descr, 0);
117 117
118 cpu_gdt_descr->address = __va(cpu_gdt_descr->address); 118 cpu_gdt_descr->address = (unsigned long)__va(cpu_gdt_descr->address);
119 load_gdt(cpu_gdt_descr); 119 load_gdt(cpu_gdt_descr);
120 120
121 cr4 = read_cr4(); 121 cr4 = read_cr4();
@@ -543,7 +543,7 @@ efi_initialize_iomem_resources(struct resource *code_resource,
543 if ((md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT)) > 543 if ((md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT)) >
544 0x100000000ULL) 544 0x100000000ULL)
545 continue; 545 continue;
546 res = alloc_bootmem_low(sizeof(struct resource)); 546 res = kzalloc(sizeof(struct resource), GFP_ATOMIC);
547 switch (md->type) { 547 switch (md->type) {
548 case EFI_RESERVED_TYPE: 548 case EFI_RESERVED_TYPE:
549 res->name = "Reserved Memory"; 549 res->name = "Reserved Memory";
diff --git a/arch/i386/kernel/entry.S b/arch/i386/kernel/entry.S
index 4d704724b2f5..cfc683f153b9 100644
--- a/arch/i386/kernel/entry.S
+++ b/arch/i386/kernel/entry.S
@@ -226,6 +226,10 @@ ENTRY(system_call)
226 pushl %eax # save orig_eax 226 pushl %eax # save orig_eax
227 SAVE_ALL 227 SAVE_ALL
228 GET_THREAD_INFO(%ebp) 228 GET_THREAD_INFO(%ebp)
229 testl $TF_MASK,EFLAGS(%esp)
230 jz no_singlestep
231 orl $_TIF_SINGLESTEP,TI_flags(%ebp)
232no_singlestep:
229 # system call tracing in operation / emulation 233 # system call tracing in operation / emulation
230 /* Note, _TIF_SECCOMP is bit number 8, and so it needs testw and not testb */ 234 /* Note, _TIF_SECCOMP is bit number 8, and so it needs testw and not testb */
231 testw $(_TIF_SYSCALL_EMU|_TIF_SYSCALL_TRACE|_TIF_SECCOMP|_TIF_SYSCALL_AUDIT),TI_flags(%ebp) 235 testw $(_TIF_SYSCALL_EMU|_TIF_SYSCALL_TRACE|_TIF_SECCOMP|_TIF_SYSCALL_AUDIT),TI_flags(%ebp)
diff --git a/arch/i386/kernel/head.S b/arch/i386/kernel/head.S
index e0b7c632efbc..3debc2e26542 100644
--- a/arch/i386/kernel/head.S
+++ b/arch/i386/kernel/head.S
@@ -450,7 +450,6 @@ int_msg:
450 450
451.globl boot_gdt_descr 451.globl boot_gdt_descr
452.globl idt_descr 452.globl idt_descr
453.globl cpu_gdt_descr
454 453
455 ALIGN 454 ALIGN
456# early boot GDT descriptor (must use 1:1 address mapping) 455# early boot GDT descriptor (must use 1:1 address mapping)
@@ -470,8 +469,6 @@ cpu_gdt_descr:
470 .word GDT_ENTRIES*8-1 469 .word GDT_ENTRIES*8-1
471 .long cpu_gdt_table 470 .long cpu_gdt_table
472 471
473 .fill NR_CPUS-1,8,0 # space for the other GDT descriptors
474
475/* 472/*
476 * The boot_gdt_table must mirror the equivalent in setup.S and is 473 * The boot_gdt_table must mirror the equivalent in setup.S and is
477 * used only for booting. 474 * used only for booting.
@@ -485,7 +482,7 @@ ENTRY(boot_gdt_table)
485/* 482/*
486 * The Global Descriptor Table contains 28 quadwords, per-CPU. 483 * The Global Descriptor Table contains 28 quadwords, per-CPU.
487 */ 484 */
488 .align PAGE_SIZE_asm 485 .align L1_CACHE_BYTES
489ENTRY(cpu_gdt_table) 486ENTRY(cpu_gdt_table)
490 .quad 0x0000000000000000 /* NULL descriptor */ 487 .quad 0x0000000000000000 /* NULL descriptor */
491 .quad 0x0000000000000000 /* 0x0b reserved */ 488 .quad 0x0000000000000000 /* 0x0b reserved */
diff --git a/arch/i386/kernel/io_apic.c b/arch/i386/kernel/io_apic.c
index 39d9a5fa907e..311b4e7266f1 100644
--- a/arch/i386/kernel/io_apic.c
+++ b/arch/i386/kernel/io_apic.c
@@ -351,8 +351,8 @@ static inline void rotate_irqs_among_cpus(unsigned long useful_load_threshold)
351{ 351{
352 int i, j; 352 int i, j;
353 Dprintk("Rotating IRQs among CPUs.\n"); 353 Dprintk("Rotating IRQs among CPUs.\n");
354 for (i = 0; i < NR_CPUS; i++) { 354 for_each_online_cpu(i) {
355 for (j = 0; cpu_online(i) && (j < NR_IRQS); j++) { 355 for (j = 0; j < NR_IRQS; j++) {
356 if (!irq_desc[j].action) 356 if (!irq_desc[j].action)
357 continue; 357 continue;
358 /* Is it a significant load ? */ 358 /* Is it a significant load ? */
@@ -381,7 +381,7 @@ static void do_irq_balance(void)
381 unsigned long imbalance = 0; 381 unsigned long imbalance = 0;
382 cpumask_t allowed_mask, target_cpu_mask, tmp; 382 cpumask_t allowed_mask, target_cpu_mask, tmp;
383 383
384 for (i = 0; i < NR_CPUS; i++) { 384 for_each_cpu(i) {
385 int package_index; 385 int package_index;
386 CPU_IRQ(i) = 0; 386 CPU_IRQ(i) = 0;
387 if (!cpu_online(i)) 387 if (!cpu_online(i))
@@ -422,9 +422,7 @@ static void do_irq_balance(void)
422 } 422 }
423 } 423 }
424 /* Find the least loaded processor package */ 424 /* Find the least loaded processor package */
425 for (i = 0; i < NR_CPUS; i++) { 425 for_each_online_cpu(i) {
426 if (!cpu_online(i))
427 continue;
428 if (i != CPU_TO_PACKAGEINDEX(i)) 426 if (i != CPU_TO_PACKAGEINDEX(i))
429 continue; 427 continue;
430 if (min_cpu_irq > CPU_IRQ(i)) { 428 if (min_cpu_irq > CPU_IRQ(i)) {
@@ -441,9 +439,7 @@ tryanothercpu:
441 */ 439 */
442 tmp_cpu_irq = 0; 440 tmp_cpu_irq = 0;
443 tmp_loaded = -1; 441 tmp_loaded = -1;
444 for (i = 0; i < NR_CPUS; i++) { 442 for_each_online_cpu(i) {
445 if (!cpu_online(i))
446 continue;
447 if (i != CPU_TO_PACKAGEINDEX(i)) 443 if (i != CPU_TO_PACKAGEINDEX(i))
448 continue; 444 continue;
449 if (max_cpu_irq <= CPU_IRQ(i)) 445 if (max_cpu_irq <= CPU_IRQ(i))
@@ -619,9 +615,7 @@ static int __init balanced_irq_init(void)
619 if (smp_num_siblings > 1 && !cpus_empty(tmp)) 615 if (smp_num_siblings > 1 && !cpus_empty(tmp))
620 physical_balance = 1; 616 physical_balance = 1;
621 617
622 for (i = 0; i < NR_CPUS; i++) { 618 for_each_online_cpu(i) {
623 if (!cpu_online(i))
624 continue;
625 irq_cpu_data[i].irq_delta = kmalloc(sizeof(unsigned long) * NR_IRQS, GFP_KERNEL); 619 irq_cpu_data[i].irq_delta = kmalloc(sizeof(unsigned long) * NR_IRQS, GFP_KERNEL);
626 irq_cpu_data[i].last_irq = kmalloc(sizeof(unsigned long) * NR_IRQS, GFP_KERNEL); 620 irq_cpu_data[i].last_irq = kmalloc(sizeof(unsigned long) * NR_IRQS, GFP_KERNEL);
627 if (irq_cpu_data[i].irq_delta == NULL || irq_cpu_data[i].last_irq == NULL) { 621 if (irq_cpu_data[i].irq_delta == NULL || irq_cpu_data[i].last_irq == NULL) {
@@ -638,9 +632,11 @@ static int __init balanced_irq_init(void)
638 else 632 else
639 printk(KERN_ERR "balanced_irq_init: failed to spawn balanced_irq"); 633 printk(KERN_ERR "balanced_irq_init: failed to spawn balanced_irq");
640failed: 634failed:
641 for (i = 0; i < NR_CPUS; i++) { 635 for_each_cpu(i) {
642 kfree(irq_cpu_data[i].irq_delta); 636 kfree(irq_cpu_data[i].irq_delta);
637 irq_cpu_data[i].irq_delta = NULL;
643 kfree(irq_cpu_data[i].last_irq); 638 kfree(irq_cpu_data[i].last_irq);
639 irq_cpu_data[i].last_irq = NULL;
644 } 640 }
645 return 0; 641 return 0;
646} 642}
@@ -1761,7 +1757,8 @@ static void __init setup_ioapic_ids_from_mpc(void)
1761 * Don't check I/O APIC IDs for xAPIC systems. They have 1757 * Don't check I/O APIC IDs for xAPIC systems. They have
1762 * no meaning without the serial APIC bus. 1758 * no meaning without the serial APIC bus.
1763 */ 1759 */
1764 if (!(boot_cpu_data.x86_vendor == X86_VENDOR_INTEL && boot_cpu_data.x86 < 15)) 1760 if (!(boot_cpu_data.x86_vendor == X86_VENDOR_INTEL)
1761 || APIC_XAPIC(apic_version[boot_cpu_physical_apicid]))
1765 return; 1762 return;
1766 /* 1763 /*
1767 * This is broken; anything with a real cpu count has to 1764 * This is broken; anything with a real cpu count has to
diff --git a/arch/i386/kernel/kprobes.c b/arch/i386/kernel/kprobes.c
index 694a13997637..7a59050242a7 100644
--- a/arch/i386/kernel/kprobes.c
+++ b/arch/i386/kernel/kprobes.c
@@ -84,9 +84,9 @@ void __kprobes arch_disarm_kprobe(struct kprobe *p)
84 84
85void __kprobes arch_remove_kprobe(struct kprobe *p) 85void __kprobes arch_remove_kprobe(struct kprobe *p)
86{ 86{
87 down(&kprobe_mutex); 87 mutex_lock(&kprobe_mutex);
88 free_insn_slot(p->ainsn.insn); 88 free_insn_slot(p->ainsn.insn);
89 up(&kprobe_mutex); 89 mutex_unlock(&kprobe_mutex);
90} 90}
91 91
92static inline void save_previous_kprobe(struct kprobe_ctlblk *kcb) 92static inline void save_previous_kprobe(struct kprobe_ctlblk *kcb)
diff --git a/arch/i386/kernel/module.c b/arch/i386/kernel/module.c
index 5149c8a621f0..470cf97e7cd3 100644
--- a/arch/i386/kernel/module.c
+++ b/arch/i386/kernel/module.c
@@ -104,26 +104,38 @@ int apply_relocate_add(Elf32_Shdr *sechdrs,
104 return -ENOEXEC; 104 return -ENOEXEC;
105} 105}
106 106
107extern void apply_alternatives(void *start, void *end);
108
109int module_finalize(const Elf_Ehdr *hdr, 107int module_finalize(const Elf_Ehdr *hdr,
110 const Elf_Shdr *sechdrs, 108 const Elf_Shdr *sechdrs,
111 struct module *me) 109 struct module *me)
112{ 110{
113 const Elf_Shdr *s; 111 const Elf_Shdr *s, *text = NULL, *alt = NULL, *locks = NULL;
114 char *secstrings = (void *)hdr + sechdrs[hdr->e_shstrndx].sh_offset; 112 char *secstrings = (void *)hdr + sechdrs[hdr->e_shstrndx].sh_offset;
115 113
116 /* look for .altinstructions to patch */
117 for (s = sechdrs; s < sechdrs + hdr->e_shnum; s++) { 114 for (s = sechdrs; s < sechdrs + hdr->e_shnum; s++) {
118 void *seg; 115 if (!strcmp(".text", secstrings + s->sh_name))
119 if (strcmp(".altinstructions", secstrings + s->sh_name)) 116 text = s;
120 continue; 117 if (!strcmp(".altinstructions", secstrings + s->sh_name))
121 seg = (void *)s->sh_addr; 118 alt = s;
122 apply_alternatives(seg, seg + s->sh_size); 119 if (!strcmp(".smp_locks", secstrings + s->sh_name))
123 } 120 locks= s;
121 }
122
123 if (alt) {
124 /* patch .altinstructions */
125 void *aseg = (void *)alt->sh_addr;
126 apply_alternatives(aseg, aseg + alt->sh_size);
127 }
128 if (locks && text) {
129 void *lseg = (void *)locks->sh_addr;
130 void *tseg = (void *)text->sh_addr;
131 alternatives_smp_module_add(me, me->name,
132 lseg, lseg + locks->sh_size,
133 tseg, tseg + text->sh_size);
134 }
124 return 0; 135 return 0;
125} 136}
126 137
127void module_arch_cleanup(struct module *mod) 138void module_arch_cleanup(struct module *mod)
128{ 139{
140 alternatives_smp_module_del(mod);
129} 141}
diff --git a/arch/i386/kernel/mpparse.c b/arch/i386/kernel/mpparse.c
index e6e2f43db85e..8d8aa9d1796d 100644
--- a/arch/i386/kernel/mpparse.c
+++ b/arch/i386/kernel/mpparse.c
@@ -828,6 +828,8 @@ void __init find_smp_config (void)
828 smp_scan_config(address, 0x400); 828 smp_scan_config(address, 0x400);
829} 829}
830 830
831int es7000_plat;
832
831/* -------------------------------------------------------------------------- 833/* --------------------------------------------------------------------------
832 ACPI-based MP Configuration 834 ACPI-based MP Configuration
833 -------------------------------------------------------------------------- */ 835 -------------------------------------------------------------------------- */
@@ -935,7 +937,8 @@ void __init mp_register_ioapic (
935 mp_ioapics[idx].mpc_apicaddr = address; 937 mp_ioapics[idx].mpc_apicaddr = address;
936 938
937 set_fixmap_nocache(FIX_IO_APIC_BASE_0 + idx, address); 939 set_fixmap_nocache(FIX_IO_APIC_BASE_0 + idx, address);
938 if ((boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) && (boot_cpu_data.x86 < 15)) 940 if ((boot_cpu_data.x86_vendor == X86_VENDOR_INTEL)
941 && !APIC_XAPIC(apic_version[boot_cpu_physical_apicid]))
939 tmpid = io_apic_get_unique_id(idx, id); 942 tmpid = io_apic_get_unique_id(idx, id);
940 else 943 else
941 tmpid = id; 944 tmpid = id;
@@ -1011,8 +1014,6 @@ void __init mp_override_legacy_irq (
1011 return; 1014 return;
1012} 1015}
1013 1016
1014int es7000_plat;
1015
1016void __init mp_config_acpi_legacy_irqs (void) 1017void __init mp_config_acpi_legacy_irqs (void)
1017{ 1018{
1018 struct mpc_config_intsrc intsrc; 1019 struct mpc_config_intsrc intsrc;
diff --git a/arch/i386/kernel/nmi.c b/arch/i386/kernel/nmi.c
index be87c5e2ee95..9074818b9473 100644
--- a/arch/i386/kernel/nmi.c
+++ b/arch/i386/kernel/nmi.c
@@ -143,7 +143,7 @@ static int __init check_nmi_watchdog(void)
143 local_irq_enable(); 143 local_irq_enable();
144 mdelay((10*1000)/nmi_hz); // wait 10 ticks 144 mdelay((10*1000)/nmi_hz); // wait 10 ticks
145 145
146 for (cpu = 0; cpu < NR_CPUS; cpu++) { 146 for_each_cpu(cpu) {
147#ifdef CONFIG_SMP 147#ifdef CONFIG_SMP
148 /* Check cpu_callin_map here because that is set 148 /* Check cpu_callin_map here because that is set
149 after the timer is started. */ 149 after the timer is started. */
@@ -510,7 +510,7 @@ void touch_nmi_watchdog (void)
510 * Just reset the alert counters, (other CPUs might be 510 * Just reset the alert counters, (other CPUs might be
511 * spinning on locks we hold): 511 * spinning on locks we hold):
512 */ 512 */
513 for (i = 0; i < NR_CPUS; i++) 513 for_each_cpu(i)
514 alert_counter[i] = 0; 514 alert_counter[i] = 0;
515 515
516 /* 516 /*
@@ -543,7 +543,7 @@ void nmi_watchdog_tick (struct pt_regs * regs)
543 /* 543 /*
544 * die_nmi will return ONLY if NOTIFY_STOP happens.. 544 * die_nmi will return ONLY if NOTIFY_STOP happens..
545 */ 545 */
546 die_nmi(regs, "NMI Watchdog detected LOCKUP"); 546 die_nmi(regs, "BUG: NMI Watchdog detected LOCKUP");
547 } else { 547 } else {
548 last_irq_sums[cpu] = sum; 548 last_irq_sums[cpu] = sum;
549 alert_counter[cpu] = 0; 549 alert_counter[cpu] = 0;
diff --git a/arch/i386/kernel/process.c b/arch/i386/kernel/process.c
index 0480454ebffa..299e61674084 100644
--- a/arch/i386/kernel/process.c
+++ b/arch/i386/kernel/process.c
@@ -295,7 +295,7 @@ void show_regs(struct pt_regs * regs)
295 printk("EIP: %04x:[<%08lx>] CPU: %d\n",0xffff & regs->xcs,regs->eip, smp_processor_id()); 295 printk("EIP: %04x:[<%08lx>] CPU: %d\n",0xffff & regs->xcs,regs->eip, smp_processor_id());
296 print_symbol("EIP is at %s\n", regs->eip); 296 print_symbol("EIP is at %s\n", regs->eip);
297 297
298 if (user_mode(regs)) 298 if (user_mode_vm(regs))
299 printk(" ESP: %04x:%08lx",0xffff & regs->xss,regs->esp); 299 printk(" ESP: %04x:%08lx",0xffff & regs->xss,regs->esp);
300 printk(" EFLAGS: %08lx %s (%s %.*s)\n", 300 printk(" EFLAGS: %08lx %s (%s %.*s)\n",
301 regs->eflags, print_tainted(), system_utsname.release, 301 regs->eflags, print_tainted(), system_utsname.release,
diff --git a/arch/i386/kernel/ptrace.c b/arch/i386/kernel/ptrace.c
index 5c1fb6aada5b..506462ef36a0 100644
--- a/arch/i386/kernel/ptrace.c
+++ b/arch/i386/kernel/ptrace.c
@@ -34,10 +34,10 @@
34 34
35/* 35/*
36 * Determines which flags the user has access to [1 = access, 0 = no access]. 36 * Determines which flags the user has access to [1 = access, 0 = no access].
37 * Prohibits changing ID(21), VIP(20), VIF(19), VM(17), IOPL(12-13), IF(9). 37 * Prohibits changing ID(21), VIP(20), VIF(19), VM(17), NT(14), IOPL(12-13), IF(9).
38 * Also masks reserved bits (31-22, 15, 5, 3, 1). 38 * Also masks reserved bits (31-22, 15, 5, 3, 1).
39 */ 39 */
40#define FLAG_MASK 0x00054dd5 40#define FLAG_MASK 0x00050dd5
41 41
42/* set's the trap flag. */ 42/* set's the trap flag. */
43#define TRAP_FLAG 0x100 43#define TRAP_FLAG 0x100
diff --git a/arch/i386/kernel/semaphore.c b/arch/i386/kernel/semaphore.c
index 7455ab643943..967dc74df9ee 100644
--- a/arch/i386/kernel/semaphore.c
+++ b/arch/i386/kernel/semaphore.c
@@ -110,11 +110,11 @@ asm(
110".align 4\n" 110".align 4\n"
111".globl __write_lock_failed\n" 111".globl __write_lock_failed\n"
112"__write_lock_failed:\n\t" 112"__write_lock_failed:\n\t"
113 LOCK "addl $" RW_LOCK_BIAS_STR ",(%eax)\n" 113 LOCK_PREFIX "addl $" RW_LOCK_BIAS_STR ",(%eax)\n"
114"1: rep; nop\n\t" 114"1: rep; nop\n\t"
115 "cmpl $" RW_LOCK_BIAS_STR ",(%eax)\n\t" 115 "cmpl $" RW_LOCK_BIAS_STR ",(%eax)\n\t"
116 "jne 1b\n\t" 116 "jne 1b\n\t"
117 LOCK "subl $" RW_LOCK_BIAS_STR ",(%eax)\n\t" 117 LOCK_PREFIX "subl $" RW_LOCK_BIAS_STR ",(%eax)\n\t"
118 "jnz __write_lock_failed\n\t" 118 "jnz __write_lock_failed\n\t"
119 "ret" 119 "ret"
120); 120);
@@ -124,11 +124,11 @@ asm(
124".align 4\n" 124".align 4\n"
125".globl __read_lock_failed\n" 125".globl __read_lock_failed\n"
126"__read_lock_failed:\n\t" 126"__read_lock_failed:\n\t"
127 LOCK "incl (%eax)\n" 127 LOCK_PREFIX "incl (%eax)\n"
128"1: rep; nop\n\t" 128"1: rep; nop\n\t"
129 "cmpl $1,(%eax)\n\t" 129 "cmpl $1,(%eax)\n\t"
130 "js 1b\n\t" 130 "js 1b\n\t"
131 LOCK "decl (%eax)\n\t" 131 LOCK_PREFIX "decl (%eax)\n\t"
132 "js __read_lock_failed\n\t" 132 "js __read_lock_failed\n\t"
133 "ret" 133 "ret"
134); 134);
diff --git a/arch/i386/kernel/setup.c b/arch/i386/kernel/setup.c
index ab62a9f4701e..d313a11acafa 100644
--- a/arch/i386/kernel/setup.c
+++ b/arch/i386/kernel/setup.c
@@ -1288,7 +1288,7 @@ legacy_init_iomem_resources(struct resource *code_resource, struct resource *dat
1288 struct resource *res; 1288 struct resource *res;
1289 if (e820.map[i].addr + e820.map[i].size > 0x100000000ULL) 1289 if (e820.map[i].addr + e820.map[i].size > 0x100000000ULL)
1290 continue; 1290 continue;
1291 res = alloc_bootmem_low(sizeof(struct resource)); 1291 res = kzalloc(sizeof(struct resource), GFP_ATOMIC);
1292 switch (e820.map[i].type) { 1292 switch (e820.map[i].type) {
1293 case E820_RAM: res->name = "System RAM"; break; 1293 case E820_RAM: res->name = "System RAM"; break;
1294 case E820_ACPI: res->name = "ACPI Tables"; break; 1294 case E820_ACPI: res->name = "ACPI Tables"; break;
@@ -1316,13 +1316,15 @@ legacy_init_iomem_resources(struct resource *code_resource, struct resource *dat
1316 1316
1317/* 1317/*
1318 * Request address space for all standard resources 1318 * Request address space for all standard resources
1319 *
1320 * This is called just before pcibios_assign_resources(), which is also
1321 * an fs_initcall, but is linked in later (in arch/i386/pci/i386.c).
1319 */ 1322 */
1320static void __init register_memory(void) 1323static int __init request_standard_resources(void)
1321{ 1324{
1322 unsigned long gapstart, gapsize, round; 1325 int i;
1323 unsigned long long last;
1324 int i;
1325 1326
1327 printk("Setting up standard PCI resources\n");
1326 if (efi_enabled) 1328 if (efi_enabled)
1327 efi_initialize_iomem_resources(&code_resource, &data_resource); 1329 efi_initialize_iomem_resources(&code_resource, &data_resource);
1328 else 1330 else
@@ -1334,6 +1336,16 @@ static void __init register_memory(void)
1334 /* request I/O space for devices used on all i[345]86 PCs */ 1336 /* request I/O space for devices used on all i[345]86 PCs */
1335 for (i = 0; i < STANDARD_IO_RESOURCES; i++) 1337 for (i = 0; i < STANDARD_IO_RESOURCES; i++)
1336 request_resource(&ioport_resource, &standard_io_resources[i]); 1338 request_resource(&ioport_resource, &standard_io_resources[i]);
1339 return 0;
1340}
1341
1342fs_initcall(request_standard_resources);
1343
1344static void __init register_memory(void)
1345{
1346 unsigned long gapstart, gapsize, round;
1347 unsigned long long last;
1348 int i;
1337 1349
1338 /* 1350 /*
1339 * Search for the bigest gap in the low 32 bits of the e820 1351 * Search for the bigest gap in the low 32 bits of the e820
@@ -1377,101 +1389,6 @@ static void __init register_memory(void)
1377 pci_mem_start, gapstart, gapsize); 1389 pci_mem_start, gapstart, gapsize);
1378} 1390}
1379 1391
1380/* Use inline assembly to define this because the nops are defined
1381 as inline assembly strings in the include files and we cannot
1382 get them easily into strings. */
1383asm("\t.data\nintelnops: "
1384 GENERIC_NOP1 GENERIC_NOP2 GENERIC_NOP3 GENERIC_NOP4 GENERIC_NOP5 GENERIC_NOP6
1385 GENERIC_NOP7 GENERIC_NOP8);
1386asm("\t.data\nk8nops: "
1387 K8_NOP1 K8_NOP2 K8_NOP3 K8_NOP4 K8_NOP5 K8_NOP6
1388 K8_NOP7 K8_NOP8);
1389asm("\t.data\nk7nops: "
1390 K7_NOP1 K7_NOP2 K7_NOP3 K7_NOP4 K7_NOP5 K7_NOP6
1391 K7_NOP7 K7_NOP8);
1392
1393extern unsigned char intelnops[], k8nops[], k7nops[];
1394static unsigned char *intel_nops[ASM_NOP_MAX+1] = {
1395 NULL,
1396 intelnops,
1397 intelnops + 1,
1398 intelnops + 1 + 2,
1399 intelnops + 1 + 2 + 3,
1400 intelnops + 1 + 2 + 3 + 4,
1401 intelnops + 1 + 2 + 3 + 4 + 5,
1402 intelnops + 1 + 2 + 3 + 4 + 5 + 6,
1403 intelnops + 1 + 2 + 3 + 4 + 5 + 6 + 7,
1404};
1405static unsigned char *k8_nops[ASM_NOP_MAX+1] = {
1406 NULL,
1407 k8nops,
1408 k8nops + 1,
1409 k8nops + 1 + 2,
1410 k8nops + 1 + 2 + 3,
1411 k8nops + 1 + 2 + 3 + 4,
1412 k8nops + 1 + 2 + 3 + 4 + 5,
1413 k8nops + 1 + 2 + 3 + 4 + 5 + 6,
1414 k8nops + 1 + 2 + 3 + 4 + 5 + 6 + 7,
1415};
1416static unsigned char *k7_nops[ASM_NOP_MAX+1] = {
1417 NULL,
1418 k7nops,
1419 k7nops + 1,
1420 k7nops + 1 + 2,
1421 k7nops + 1 + 2 + 3,
1422 k7nops + 1 + 2 + 3 + 4,
1423 k7nops + 1 + 2 + 3 + 4 + 5,
1424 k7nops + 1 + 2 + 3 + 4 + 5 + 6,
1425 k7nops + 1 + 2 + 3 + 4 + 5 + 6 + 7,
1426};
1427static struct nop {
1428 int cpuid;
1429 unsigned char **noptable;
1430} noptypes[] = {
1431 { X86_FEATURE_K8, k8_nops },
1432 { X86_FEATURE_K7, k7_nops },
1433 { -1, NULL }
1434};
1435
1436/* Replace instructions with better alternatives for this CPU type.
1437
1438 This runs before SMP is initialized to avoid SMP problems with
1439 self modifying code. This implies that assymetric systems where
1440 APs have less capabilities than the boot processor are not handled.
1441 Tough. Make sure you disable such features by hand. */
1442void apply_alternatives(void *start, void *end)
1443{
1444 struct alt_instr *a;
1445 int diff, i, k;
1446 unsigned char **noptable = intel_nops;
1447 for (i = 0; noptypes[i].cpuid >= 0; i++) {
1448 if (boot_cpu_has(noptypes[i].cpuid)) {
1449 noptable = noptypes[i].noptable;
1450 break;
1451 }
1452 }
1453 for (a = start; (void *)a < end; a++) {
1454 if (!boot_cpu_has(a->cpuid))
1455 continue;
1456 BUG_ON(a->replacementlen > a->instrlen);
1457 memcpy(a->instr, a->replacement, a->replacementlen);
1458 diff = a->instrlen - a->replacementlen;
1459 /* Pad the rest with nops */
1460 for (i = a->replacementlen; diff > 0; diff -= k, i += k) {
1461 k = diff;
1462 if (k > ASM_NOP_MAX)
1463 k = ASM_NOP_MAX;
1464 memcpy(a->instr + i, noptable[k], k);
1465 }
1466 }
1467}
1468
1469void __init alternative_instructions(void)
1470{
1471 extern struct alt_instr __alt_instructions[], __alt_instructions_end[];
1472 apply_alternatives(__alt_instructions, __alt_instructions_end);
1473}
1474
1475static char * __init machine_specific_memory_setup(void); 1392static char * __init machine_specific_memory_setup(void);
1476 1393
1477#ifdef CONFIG_MCA 1394#ifdef CONFIG_MCA
@@ -1554,6 +1471,16 @@ void __init setup_arch(char **cmdline_p)
1554 1471
1555 parse_cmdline_early(cmdline_p); 1472 parse_cmdline_early(cmdline_p);
1556 1473
1474#ifdef CONFIG_EARLY_PRINTK
1475 {
1476 char *s = strstr(*cmdline_p, "earlyprintk=");
1477 if (s) {
1478 setup_early_printk(strchr(s, '=') + 1);
1479 printk("early console enabled\n");
1480 }
1481 }
1482#endif
1483
1557 max_low_pfn = setup_memory(); 1484 max_low_pfn = setup_memory();
1558 1485
1559 /* 1486 /*
@@ -1578,19 +1505,6 @@ void __init setup_arch(char **cmdline_p)
1578 * NOTE: at this point the bootmem allocator is fully available. 1505 * NOTE: at this point the bootmem allocator is fully available.
1579 */ 1506 */
1580 1507
1581#ifdef CONFIG_EARLY_PRINTK
1582 {
1583 char *s = strstr(*cmdline_p, "earlyprintk=");
1584 if (s) {
1585 extern void setup_early_printk(char *);
1586
1587 setup_early_printk(strchr(s, '=') + 1);
1588 printk("early console enabled\n");
1589 }
1590 }
1591#endif
1592
1593
1594 dmi_scan_machine(); 1508 dmi_scan_machine();
1595 1509
1596#ifdef CONFIG_X86_GENERICARCH 1510#ifdef CONFIG_X86_GENERICARCH
diff --git a/arch/i386/kernel/signal.c b/arch/i386/kernel/signal.c
index 963616d364ec..5c352c3a9e7f 100644
--- a/arch/i386/kernel/signal.c
+++ b/arch/i386/kernel/signal.c
@@ -123,7 +123,8 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc, int *peax
123 err |= __get_user(tmp, &sc->seg); \ 123 err |= __get_user(tmp, &sc->seg); \
124 loadsegment(seg,tmp); } 124 loadsegment(seg,tmp); }
125 125
126#define FIX_EFLAGS (X86_EFLAGS_AC | X86_EFLAGS_OF | X86_EFLAGS_DF | \ 126#define FIX_EFLAGS (X86_EFLAGS_AC | X86_EFLAGS_RF | \
127 X86_EFLAGS_OF | X86_EFLAGS_DF | \
127 X86_EFLAGS_TF | X86_EFLAGS_SF | X86_EFLAGS_ZF | \ 128 X86_EFLAGS_TF | X86_EFLAGS_SF | X86_EFLAGS_ZF | \
128 X86_EFLAGS_AF | X86_EFLAGS_PF | X86_EFLAGS_CF) 129 X86_EFLAGS_AF | X86_EFLAGS_PF | X86_EFLAGS_CF)
129 130
@@ -582,9 +583,6 @@ static void fastcall do_signal(struct pt_regs *regs)
582 if (!user_mode(regs)) 583 if (!user_mode(regs))
583 return; 584 return;
584 585
585 if (try_to_freeze())
586 goto no_signal;
587
588 if (test_thread_flag(TIF_RESTORE_SIGMASK)) 586 if (test_thread_flag(TIF_RESTORE_SIGMASK))
589 oldset = &current->saved_sigmask; 587 oldset = &current->saved_sigmask;
590 else 588 else
@@ -613,7 +611,6 @@ static void fastcall do_signal(struct pt_regs *regs)
613 return; 611 return;
614 } 612 }
615 613
616no_signal:
617 /* Did we come from a system call? */ 614 /* Did we come from a system call? */
618 if (regs->orig_eax >= 0) { 615 if (regs->orig_eax >= 0) {
619 /* Restart the system call - no handlers present */ 616 /* Restart the system call - no handlers present */
diff --git a/arch/i386/kernel/smp.c b/arch/i386/kernel/smp.c
index 218d725a5a1e..d134e9643a58 100644
--- a/arch/i386/kernel/smp.c
+++ b/arch/i386/kernel/smp.c
@@ -504,27 +504,23 @@ void unlock_ipi_call_lock(void)
504 spin_unlock_irq(&call_lock); 504 spin_unlock_irq(&call_lock);
505} 505}
506 506
507static struct call_data_struct * call_data; 507static struct call_data_struct *call_data;
508 508
509/* 509/**
510 * this function sends a 'generic call function' IPI to all other CPUs 510 * smp_call_function(): Run a function on all other CPUs.
511 * in the system. 511 * @func: The function to run. This must be fast and non-blocking.
512 */ 512 * @info: An arbitrary pointer to pass to the function.
513 513 * @nonatomic: currently unused.
514int smp_call_function (void (*func) (void *info), void *info, int nonatomic, 514 * @wait: If true, wait (atomically) until function has completed on other CPUs.
515 int wait) 515 *
516/* 516 * Returns 0 on success, else a negative status code. Does not return until
517 * [SUMMARY] Run a function on all other CPUs.
518 * <func> The function to run. This must be fast and non-blocking.
519 * <info> An arbitrary pointer to pass to the function.
520 * <nonatomic> currently unused.
521 * <wait> If true, wait (atomically) until function has completed on other CPUs.
522 * [RETURNS] 0 on success, else a negative status code. Does not return until
523 * remote CPUs are nearly ready to execute <<func>> or are or have executed. 517 * remote CPUs are nearly ready to execute <<func>> or are or have executed.
524 * 518 *
525 * You must not call this function with disabled interrupts or from a 519 * You must not call this function with disabled interrupts or from a
526 * hardware interrupt handler or from a bottom half handler. 520 * hardware interrupt handler or from a bottom half handler.
527 */ 521 */
522int smp_call_function (void (*func) (void *info), void *info, int nonatomic,
523 int wait)
528{ 524{
529 struct call_data_struct data; 525 struct call_data_struct data;
530 int cpus; 526 int cpus;
diff --git a/arch/i386/kernel/smpboot.c b/arch/i386/kernel/smpboot.c
index 7007e1783797..4c470e99a742 100644
--- a/arch/i386/kernel/smpboot.c
+++ b/arch/i386/kernel/smpboot.c
@@ -899,6 +899,7 @@ static int __devinit do_boot_cpu(int apicid, int cpu)
899 unsigned short nmi_high = 0, nmi_low = 0; 899 unsigned short nmi_high = 0, nmi_low = 0;
900 900
901 ++cpucount; 901 ++cpucount;
902 alternatives_smp_switch(1);
902 903
903 /* 904 /*
904 * We can't use kernel_thread since we must avoid to 905 * We can't use kernel_thread since we must avoid to
@@ -1368,6 +1369,8 @@ void __cpu_die(unsigned int cpu)
1368 /* They ack this in play_dead by setting CPU_DEAD */ 1369 /* They ack this in play_dead by setting CPU_DEAD */
1369 if (per_cpu(cpu_state, cpu) == CPU_DEAD) { 1370 if (per_cpu(cpu_state, cpu) == CPU_DEAD) {
1370 printk ("CPU %d is now offline\n", cpu); 1371 printk ("CPU %d is now offline\n", cpu);
1372 if (1 == num_online_cpus())
1373 alternatives_smp_switch(0);
1371 return; 1374 return;
1372 } 1375 }
1373 msleep(100); 1376 msleep(100);
diff --git a/arch/i386/kernel/sys_i386.c b/arch/i386/kernel/sys_i386.c
index a4a61976ecb9..8fdb1fb17a5f 100644
--- a/arch/i386/kernel/sys_i386.c
+++ b/arch/i386/kernel/sys_i386.c
@@ -40,14 +40,13 @@ asmlinkage int sys_pipe(unsigned long __user * fildes)
40 return error; 40 return error;
41} 41}
42 42
43/* common code for old and new mmaps */ 43asmlinkage long sys_mmap2(unsigned long addr, unsigned long len,
44static inline long do_mmap2( 44 unsigned long prot, unsigned long flags,
45 unsigned long addr, unsigned long len, 45 unsigned long fd, unsigned long pgoff)
46 unsigned long prot, unsigned long flags,
47 unsigned long fd, unsigned long pgoff)
48{ 46{
49 int error = -EBADF; 47 int error = -EBADF;
50 struct file * file = NULL; 48 struct file *file = NULL;
49 struct mm_struct *mm = current->mm;
51 50
52 flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); 51 flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE);
53 if (!(flags & MAP_ANONYMOUS)) { 52 if (!(flags & MAP_ANONYMOUS)) {
@@ -56,9 +55,9 @@ static inline long do_mmap2(
56 goto out; 55 goto out;
57 } 56 }
58 57
59 down_write(&current->mm->mmap_sem); 58 down_write(&mm->mmap_sem);
60 error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); 59 error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff);
61 up_write(&current->mm->mmap_sem); 60 up_write(&mm->mmap_sem);
62 61
63 if (file) 62 if (file)
64 fput(file); 63 fput(file);
@@ -66,13 +65,6 @@ out:
66 return error; 65 return error;
67} 66}
68 67
69asmlinkage long sys_mmap2(unsigned long addr, unsigned long len,
70 unsigned long prot, unsigned long flags,
71 unsigned long fd, unsigned long pgoff)
72{
73 return do_mmap2(addr, len, prot, flags, fd, pgoff);
74}
75
76/* 68/*
77 * Perform the select(nd, in, out, ex, tv) and mmap() system 69 * Perform the select(nd, in, out, ex, tv) and mmap() system
78 * calls. Linux/i386 didn't use to be able to handle more than 70 * calls. Linux/i386 didn't use to be able to handle more than
@@ -101,7 +93,8 @@ asmlinkage int old_mmap(struct mmap_arg_struct __user *arg)
101 if (a.offset & ~PAGE_MASK) 93 if (a.offset & ~PAGE_MASK)
102 goto out; 94 goto out;
103 95
104 err = do_mmap2(a.addr, a.len, a.prot, a.flags, a.fd, a.offset >> PAGE_SHIFT); 96 err = sys_mmap2(a.addr, a.len, a.prot, a.flags,
97 a.fd, a.offset >> PAGE_SHIFT);
105out: 98out:
106 return err; 99 return err;
107} 100}
diff --git a/arch/i386/kernel/timers/timer_hpet.c b/arch/i386/kernel/timers/timer_hpet.c
index be242723c339..17a6fe7166e7 100644
--- a/arch/i386/kernel/timers/timer_hpet.c
+++ b/arch/i386/kernel/timers/timer_hpet.c
@@ -46,7 +46,7 @@ static seqlock_t monotonic_lock = SEQLOCK_UNLOCKED;
46 * 46 *
47 * -johnstul@us.ibm.com "math is hard, lets go shopping!" 47 * -johnstul@us.ibm.com "math is hard, lets go shopping!"
48 */ 48 */
49static unsigned long cyc2ns_scale; 49static unsigned long cyc2ns_scale __read_mostly;
50#define CYC2NS_SCALE_FACTOR 10 /* 2^10, carefully chosen */ 50#define CYC2NS_SCALE_FACTOR 10 /* 2^10, carefully chosen */
51 51
52static inline void set_cyc2ns_scale(unsigned long cpu_khz) 52static inline void set_cyc2ns_scale(unsigned long cpu_khz)
diff --git a/arch/i386/kernel/timers/timer_tsc.c b/arch/i386/kernel/timers/timer_tsc.c
index a7f5a2aceba2..5e41ee29c8cf 100644
--- a/arch/i386/kernel/timers/timer_tsc.c
+++ b/arch/i386/kernel/timers/timer_tsc.c
@@ -74,7 +74,7 @@ late_initcall(start_lost_tick_compensation);
74 * 74 *
75 * -johnstul@us.ibm.com "math is hard, lets go shopping!" 75 * -johnstul@us.ibm.com "math is hard, lets go shopping!"
76 */ 76 */
77static unsigned long cyc2ns_scale; 77static unsigned long cyc2ns_scale __read_mostly;
78#define CYC2NS_SCALE_FACTOR 10 /* 2^10, carefully chosen */ 78#define CYC2NS_SCALE_FACTOR 10 /* 2^10, carefully chosen */
79 79
80static inline void set_cyc2ns_scale(unsigned long cpu_khz) 80static inline void set_cyc2ns_scale(unsigned long cpu_khz)
diff --git a/arch/i386/kernel/topology.c b/arch/i386/kernel/topology.c
index 67a0e1baa28b..296355292c7c 100644
--- a/arch/i386/kernel/topology.c
+++ b/arch/i386/kernel/topology.c
@@ -41,6 +41,15 @@ int arch_register_cpu(int num){
41 parent = &node_devices[node].node; 41 parent = &node_devices[node].node;
42#endif /* CONFIG_NUMA */ 42#endif /* CONFIG_NUMA */
43 43
44 /*
45 * CPU0 cannot be offlined due to several
46 * restrictions and assumptions in kernel. This basically
47 * doesnt add a control file, one cannot attempt to offline
48 * BSP.
49 */
50 if (!num)
51 cpu_devices[num].cpu.no_control = 1;
52
44 return register_cpu(&cpu_devices[num].cpu, num, parent); 53 return register_cpu(&cpu_devices[num].cpu, num, parent);
45} 54}
46 55
diff --git a/arch/i386/kernel/traps.c b/arch/i386/kernel/traps.c
index b814dbdcc91e..de5386b01d38 100644
--- a/arch/i386/kernel/traps.c
+++ b/arch/i386/kernel/traps.c
@@ -99,6 +99,8 @@ int register_die_notifier(struct notifier_block *nb)
99{ 99{
100 int err = 0; 100 int err = 0;
101 unsigned long flags; 101 unsigned long flags;
102
103 vmalloc_sync_all();
102 spin_lock_irqsave(&die_notifier_lock, flags); 104 spin_lock_irqsave(&die_notifier_lock, flags);
103 err = notifier_chain_register(&i386die_chain, nb); 105 err = notifier_chain_register(&i386die_chain, nb);
104 spin_unlock_irqrestore(&die_notifier_lock, flags); 106 spin_unlock_irqrestore(&die_notifier_lock, flags);
@@ -112,12 +114,30 @@ static inline int valid_stack_ptr(struct thread_info *tinfo, void *p)
112 p < (void *)tinfo + THREAD_SIZE - 3; 114 p < (void *)tinfo + THREAD_SIZE - 3;
113} 115}
114 116
115static void print_addr_and_symbol(unsigned long addr, char *log_lvl) 117/*
118 * Print CONFIG_STACK_BACKTRACE_COLS address/symbol entries per line.
119 */
120static inline int print_addr_and_symbol(unsigned long addr, char *log_lvl,
121 int printed)
116{ 122{
117 printk(log_lvl); 123 if (!printed)
124 printk(log_lvl);
125
126#if CONFIG_STACK_BACKTRACE_COLS == 1
118 printk(" [<%08lx>] ", addr); 127 printk(" [<%08lx>] ", addr);
128#else
129 printk(" <%08lx> ", addr);
130#endif
119 print_symbol("%s", addr); 131 print_symbol("%s", addr);
120 printk("\n"); 132
133 printed = (printed + 1) % CONFIG_STACK_BACKTRACE_COLS;
134
135 if (printed)
136 printk(" ");
137 else
138 printk("\n");
139
140 return printed;
121} 141}
122 142
123static inline unsigned long print_context_stack(struct thread_info *tinfo, 143static inline unsigned long print_context_stack(struct thread_info *tinfo,
@@ -125,20 +145,24 @@ static inline unsigned long print_context_stack(struct thread_info *tinfo,
125 char *log_lvl) 145 char *log_lvl)
126{ 146{
127 unsigned long addr; 147 unsigned long addr;
148 int printed = 0; /* nr of entries already printed on current line */
128 149
129#ifdef CONFIG_FRAME_POINTER 150#ifdef CONFIG_FRAME_POINTER
130 while (valid_stack_ptr(tinfo, (void *)ebp)) { 151 while (valid_stack_ptr(tinfo, (void *)ebp)) {
131 addr = *(unsigned long *)(ebp + 4); 152 addr = *(unsigned long *)(ebp + 4);
132 print_addr_and_symbol(addr, log_lvl); 153 printed = print_addr_and_symbol(addr, log_lvl, printed);
133 ebp = *(unsigned long *)ebp; 154 ebp = *(unsigned long *)ebp;
134 } 155 }
135#else 156#else
136 while (valid_stack_ptr(tinfo, stack)) { 157 while (valid_stack_ptr(tinfo, stack)) {
137 addr = *stack++; 158 addr = *stack++;
138 if (__kernel_text_address(addr)) 159 if (__kernel_text_address(addr))
139 print_addr_and_symbol(addr, log_lvl); 160 printed = print_addr_and_symbol(addr, log_lvl, printed);
140 } 161 }
141#endif 162#endif
163 if (printed)
164 printk("\n");
165
142 return ebp; 166 return ebp;
143} 167}
144 168
@@ -166,8 +190,7 @@ static void show_trace_log_lvl(struct task_struct *task,
166 stack = (unsigned long*)context->previous_esp; 190 stack = (unsigned long*)context->previous_esp;
167 if (!stack) 191 if (!stack)
168 break; 192 break;
169 printk(log_lvl); 193 printk("%s =======================\n", log_lvl);
170 printk(" =======================\n");
171 } 194 }
172} 195}
173 196
@@ -194,21 +217,17 @@ static void show_stack_log_lvl(struct task_struct *task, unsigned long *esp,
194 for(i = 0; i < kstack_depth_to_print; i++) { 217 for(i = 0; i < kstack_depth_to_print; i++) {
195 if (kstack_end(stack)) 218 if (kstack_end(stack))
196 break; 219 break;
197 if (i && ((i % 8) == 0)) { 220 if (i && ((i % 8) == 0))
198 printk("\n"); 221 printk("\n%s ", log_lvl);
199 printk(log_lvl);
200 printk(" ");
201 }
202 printk("%08lx ", *stack++); 222 printk("%08lx ", *stack++);
203 } 223 }
204 printk("\n"); 224 printk("\n%sCall Trace:\n", log_lvl);
205 printk(log_lvl);
206 printk("Call Trace:\n");
207 show_trace_log_lvl(task, esp, log_lvl); 225 show_trace_log_lvl(task, esp, log_lvl);
208} 226}
209 227
210void show_stack(struct task_struct *task, unsigned long *esp) 228void show_stack(struct task_struct *task, unsigned long *esp)
211{ 229{
230 printk(" ");
212 show_stack_log_lvl(task, esp, ""); 231 show_stack_log_lvl(task, esp, "");
213} 232}
214 233
@@ -233,7 +252,7 @@ void show_registers(struct pt_regs *regs)
233 252
234 esp = (unsigned long) (&regs->esp); 253 esp = (unsigned long) (&regs->esp);
235 savesegment(ss, ss); 254 savesegment(ss, ss);
236 if (user_mode(regs)) { 255 if (user_mode_vm(regs)) {
237 in_kernel = 0; 256 in_kernel = 0;
238 esp = regs->esp; 257 esp = regs->esp;
239 ss = regs->xss & 0xffff; 258 ss = regs->xss & 0xffff;
@@ -333,6 +352,8 @@ void die(const char * str, struct pt_regs * regs, long err)
333 static int die_counter; 352 static int die_counter;
334 unsigned long flags; 353 unsigned long flags;
335 354
355 oops_enter();
356
336 if (die.lock_owner != raw_smp_processor_id()) { 357 if (die.lock_owner != raw_smp_processor_id()) {
337 console_verbose(); 358 console_verbose();
338 spin_lock_irqsave(&die.lock, flags); 359 spin_lock_irqsave(&die.lock, flags);
@@ -385,6 +406,7 @@ void die(const char * str, struct pt_regs * regs, long err)
385 ssleep(5); 406 ssleep(5);
386 panic("Fatal exception"); 407 panic("Fatal exception");
387 } 408 }
409 oops_exit();
388 do_exit(SIGSEGV); 410 do_exit(SIGSEGV);
389} 411}
390 412
@@ -623,7 +645,7 @@ void die_nmi (struct pt_regs *regs, const char *msg)
623 /* If we are in kernel we are probably nested up pretty bad 645 /* If we are in kernel we are probably nested up pretty bad
624 * and might aswell get out now while we still can. 646 * and might aswell get out now while we still can.
625 */ 647 */
626 if (!user_mode(regs)) { 648 if (!user_mode_vm(regs)) {
627 current->thread.trap_no = 2; 649 current->thread.trap_no = 2;
628 crash_kexec(regs); 650 crash_kexec(regs);
629 } 651 }
@@ -694,6 +716,7 @@ fastcall void do_nmi(struct pt_regs * regs, long error_code)
694 716
695void set_nmi_callback(nmi_callback_t callback) 717void set_nmi_callback(nmi_callback_t callback)
696{ 718{
719 vmalloc_sync_all();
697 rcu_assign_pointer(nmi_callback, callback); 720 rcu_assign_pointer(nmi_callback, callback);
698} 721}
699EXPORT_SYMBOL_GPL(set_nmi_callback); 722EXPORT_SYMBOL_GPL(set_nmi_callback);
diff --git a/arch/i386/kernel/vmlinux.lds.S b/arch/i386/kernel/vmlinux.lds.S
index 4710195b6b74..3f21c6f6466d 100644
--- a/arch/i386/kernel/vmlinux.lds.S
+++ b/arch/i386/kernel/vmlinux.lds.S
@@ -68,6 +68,26 @@ SECTIONS
68 *(.data.init_task) 68 *(.data.init_task)
69 } 69 }
70 70
71 /* might get freed after init */
72 . = ALIGN(4096);
73 __smp_alt_begin = .;
74 __smp_alt_instructions = .;
75 .smp_altinstructions : AT(ADDR(.smp_altinstructions) - LOAD_OFFSET) {
76 *(.smp_altinstructions)
77 }
78 __smp_alt_instructions_end = .;
79 . = ALIGN(4);
80 __smp_locks = .;
81 .smp_locks : AT(ADDR(.smp_locks) - LOAD_OFFSET) {
82 *(.smp_locks)
83 }
84 __smp_locks_end = .;
85 .smp_altinstr_replacement : AT(ADDR(.smp_altinstr_replacement) - LOAD_OFFSET) {
86 *(.smp_altinstr_replacement)
87 }
88 . = ALIGN(4096);
89 __smp_alt_end = .;
90
71 /* will be freed after init */ 91 /* will be freed after init */
72 . = ALIGN(4096); /* Init code and data */ 92 . = ALIGN(4096); /* Init code and data */
73 __init_begin = .; 93 __init_begin = .;
diff --git a/arch/i386/kernel/vsyscall-sysenter.S b/arch/i386/kernel/vsyscall-sysenter.S
index 76b728159403..3b62baa6a371 100644
--- a/arch/i386/kernel/vsyscall-sysenter.S
+++ b/arch/i386/kernel/vsyscall-sysenter.S
@@ -21,6 +21,9 @@
21 * instruction clobbers %esp, the user's %esp won't even survive entry 21 * instruction clobbers %esp, the user's %esp won't even survive entry
22 * into the kernel. We store %esp in %ebp. Code in entry.S must fetch 22 * into the kernel. We store %esp in %ebp. Code in entry.S must fetch
23 * arg6 from the stack. 23 * arg6 from the stack.
24 *
25 * You can not use this vsyscall for the clone() syscall because the
26 * three dwords on the parent stack do not get copied to the child.
24 */ 27 */
25 .text 28 .text
26 .globl __kernel_vsyscall 29 .globl __kernel_vsyscall
diff --git a/arch/i386/mach-es7000/es7000.h b/arch/i386/mach-es7000/es7000.h
index f1e3204f5dec..80566ca4a80a 100644
--- a/arch/i386/mach-es7000/es7000.h
+++ b/arch/i386/mach-es7000/es7000.h
@@ -83,6 +83,7 @@ struct es7000_oem_table {
83 struct psai psai; 83 struct psai psai;
84}; 84};
85 85
86#ifdef CONFIG_ACPI
86struct acpi_table_sdt { 87struct acpi_table_sdt {
87 unsigned long pa; 88 unsigned long pa;
88 unsigned long count; 89 unsigned long count;
@@ -99,6 +100,9 @@ struct oem_table {
99 u32 OEMTableSize; 100 u32 OEMTableSize;
100}; 101};
101 102
103extern int find_unisys_acpi_oem_table(unsigned long *oem_addr);
104#endif
105
102struct mip_reg { 106struct mip_reg {
103 unsigned long long off_0; 107 unsigned long long off_0;
104 unsigned long long off_8; 108 unsigned long long off_8;
@@ -114,7 +118,6 @@ struct mip_reg {
114#define MIP_FUNC(VALUE) (VALUE & 0xff) 118#define MIP_FUNC(VALUE) (VALUE & 0xff)
115 119
116extern int parse_unisys_oem (char *oemptr); 120extern int parse_unisys_oem (char *oemptr);
117extern int find_unisys_acpi_oem_table(unsigned long *oem_addr);
118extern void setup_unisys(void); 121extern void setup_unisys(void);
119extern int es7000_start_cpu(int cpu, unsigned long eip); 122extern int es7000_start_cpu(int cpu, unsigned long eip);
120extern void es7000_sw_apic(void); 123extern void es7000_sw_apic(void);
diff --git a/arch/i386/mach-es7000/es7000plat.c b/arch/i386/mach-es7000/es7000plat.c
index a9ab0644f403..3d0fc853516d 100644
--- a/arch/i386/mach-es7000/es7000plat.c
+++ b/arch/i386/mach-es7000/es7000plat.c
@@ -51,8 +51,6 @@ struct mip_reg *host_reg;
51int mip_port; 51int mip_port;
52unsigned long mip_addr, host_addr; 52unsigned long mip_addr, host_addr;
53 53
54#if defined(CONFIG_X86_IO_APIC) && defined(CONFIG_ACPI)
55
56/* 54/*
57 * GSI override for ES7000 platforms. 55 * GSI override for ES7000 platforms.
58 */ 56 */
@@ -76,8 +74,6 @@ es7000_rename_gsi(int ioapic, int gsi)
76 return gsi; 74 return gsi;
77} 75}
78 76
79#endif /* (CONFIG_X86_IO_APIC) && (CONFIG_ACPI) */
80
81void __init 77void __init
82setup_unisys(void) 78setup_unisys(void)
83{ 79{
@@ -160,6 +156,7 @@ parse_unisys_oem (char *oemptr)
160 return es7000_plat; 156 return es7000_plat;
161} 157}
162 158
159#ifdef CONFIG_ACPI
163int __init 160int __init
164find_unisys_acpi_oem_table(unsigned long *oem_addr) 161find_unisys_acpi_oem_table(unsigned long *oem_addr)
165{ 162{
@@ -212,6 +209,7 @@ find_unisys_acpi_oem_table(unsigned long *oem_addr)
212 } 209 }
213 return -1; 210 return -1;
214} 211}
212#endif
215 213
216static void 214static void
217es7000_spin(int n) 215es7000_spin(int n)
diff --git a/arch/i386/mm/fault.c b/arch/i386/mm/fault.c
index cf572d9a3b6e..7f0fcf219a26 100644
--- a/arch/i386/mm/fault.c
+++ b/arch/i386/mm/fault.c
@@ -214,6 +214,68 @@ static noinline void force_sig_info_fault(int si_signo, int si_code,
214 214
215fastcall void do_invalid_op(struct pt_regs *, unsigned long); 215fastcall void do_invalid_op(struct pt_regs *, unsigned long);
216 216
217static inline pmd_t *vmalloc_sync_one(pgd_t *pgd, unsigned long address)
218{
219 unsigned index = pgd_index(address);
220 pgd_t *pgd_k;
221 pud_t *pud, *pud_k;
222 pmd_t *pmd, *pmd_k;
223
224 pgd += index;
225 pgd_k = init_mm.pgd + index;
226
227 if (!pgd_present(*pgd_k))
228 return NULL;
229
230 /*
231 * set_pgd(pgd, *pgd_k); here would be useless on PAE
232 * and redundant with the set_pmd() on non-PAE. As would
233 * set_pud.
234 */
235
236 pud = pud_offset(pgd, address);
237 pud_k = pud_offset(pgd_k, address);
238 if (!pud_present(*pud_k))
239 return NULL;
240
241 pmd = pmd_offset(pud, address);
242 pmd_k = pmd_offset(pud_k, address);
243 if (!pmd_present(*pmd_k))
244 return NULL;
245 if (!pmd_present(*pmd))
246 set_pmd(pmd, *pmd_k);
247 else
248 BUG_ON(pmd_page(*pmd) != pmd_page(*pmd_k));
249 return pmd_k;
250}
251
252/*
253 * Handle a fault on the vmalloc or module mapping area
254 *
255 * This assumes no large pages in there.
256 */
257static inline int vmalloc_fault(unsigned long address)
258{
259 unsigned long pgd_paddr;
260 pmd_t *pmd_k;
261 pte_t *pte_k;
262 /*
263 * Synchronize this task's top level page-table
264 * with the 'reference' page table.
265 *
266 * Do _not_ use "current" here. We might be inside
267 * an interrupt in the middle of a task switch..
268 */
269 pgd_paddr = read_cr3();
270 pmd_k = vmalloc_sync_one(__va(pgd_paddr), address);
271 if (!pmd_k)
272 return -1;
273 pte_k = pte_offset_kernel(pmd_k, address);
274 if (!pte_present(*pte_k))
275 return -1;
276 return 0;
277}
278
217/* 279/*
218 * This routine handles page faults. It determines the address, 280 * This routine handles page faults. It determines the address,
219 * and the problem, and then passes it off to one of the appropriate 281 * and the problem, and then passes it off to one of the appropriate
@@ -223,6 +285,8 @@ fastcall void do_invalid_op(struct pt_regs *, unsigned long);
223 * bit 0 == 0 means no page found, 1 means protection fault 285 * bit 0 == 0 means no page found, 1 means protection fault
224 * bit 1 == 0 means read, 1 means write 286 * bit 1 == 0 means read, 1 means write
225 * bit 2 == 0 means kernel, 1 means user-mode 287 * bit 2 == 0 means kernel, 1 means user-mode
288 * bit 3 == 1 means use of reserved bit detected
289 * bit 4 == 1 means fault was an instruction fetch
226 */ 290 */
227fastcall void __kprobes do_page_fault(struct pt_regs *regs, 291fastcall void __kprobes do_page_fault(struct pt_regs *regs,
228 unsigned long error_code) 292 unsigned long error_code)
@@ -237,13 +301,6 @@ fastcall void __kprobes do_page_fault(struct pt_regs *regs,
237 /* get the address */ 301 /* get the address */
238 address = read_cr2(); 302 address = read_cr2();
239 303
240 if (notify_die(DIE_PAGE_FAULT, "page fault", regs, error_code, 14,
241 SIGSEGV) == NOTIFY_STOP)
242 return;
243 /* It's safe to allow irq's after cr2 has been saved */
244 if (regs->eflags & (X86_EFLAGS_IF|VM_MASK))
245 local_irq_enable();
246
247 tsk = current; 304 tsk = current;
248 305
249 si_code = SEGV_MAPERR; 306 si_code = SEGV_MAPERR;
@@ -259,17 +316,29 @@ fastcall void __kprobes do_page_fault(struct pt_regs *regs,
259 * 316 *
260 * This verifies that the fault happens in kernel space 317 * This verifies that the fault happens in kernel space
261 * (error_code & 4) == 0, and that the fault was not a 318 * (error_code & 4) == 0, and that the fault was not a
262 * protection error (error_code & 1) == 0. 319 * protection error (error_code & 9) == 0.
263 */ 320 */
264 if (unlikely(address >= TASK_SIZE)) { 321 if (unlikely(address >= TASK_SIZE)) {
265 if (!(error_code & 5)) 322 if (!(error_code & 0x0000000d) && vmalloc_fault(address) >= 0)
266 goto vmalloc_fault; 323 return;
267 /* 324 if (notify_die(DIE_PAGE_FAULT, "page fault", regs, error_code, 14,
325 SIGSEGV) == NOTIFY_STOP)
326 return;
327 /*
268 * Don't take the mm semaphore here. If we fixup a prefetch 328 * Don't take the mm semaphore here. If we fixup a prefetch
269 * fault we could otherwise deadlock. 329 * fault we could otherwise deadlock.
270 */ 330 */
271 goto bad_area_nosemaphore; 331 goto bad_area_nosemaphore;
272 } 332 }
333
334 if (notify_die(DIE_PAGE_FAULT, "page fault", regs, error_code, 14,
335 SIGSEGV) == NOTIFY_STOP)
336 return;
337
338 /* It's safe to allow irq's after cr2 has been saved and the vmalloc
339 fault has been handled. */
340 if (regs->eflags & (X86_EFLAGS_IF|VM_MASK))
341 local_irq_enable();
273 342
274 mm = tsk->mm; 343 mm = tsk->mm;
275 344
@@ -440,24 +509,31 @@ no_context:
440 509
441 bust_spinlocks(1); 510 bust_spinlocks(1);
442 511
443#ifdef CONFIG_X86_PAE 512 if (oops_may_print()) {
444 if (error_code & 16) { 513 #ifdef CONFIG_X86_PAE
445 pte_t *pte = lookup_address(address); 514 if (error_code & 16) {
515 pte_t *pte = lookup_address(address);
446 516
447 if (pte && pte_present(*pte) && !pte_exec_kernel(*pte)) 517 if (pte && pte_present(*pte) && !pte_exec_kernel(*pte))
448 printk(KERN_CRIT "kernel tried to execute NX-protected page - exploit attempt? (uid: %d)\n", current->uid); 518 printk(KERN_CRIT "kernel tried to execute "
519 "NX-protected page - exploit attempt? "
520 "(uid: %d)\n", current->uid);
521 }
522 #endif
523 if (address < PAGE_SIZE)
524 printk(KERN_ALERT "BUG: unable to handle kernel NULL "
525 "pointer dereference");
526 else
527 printk(KERN_ALERT "BUG: unable to handle kernel paging"
528 " request");
529 printk(" at virtual address %08lx\n",address);
530 printk(KERN_ALERT " printing eip:\n");
531 printk("%08lx\n", regs->eip);
449 } 532 }
450#endif
451 if (address < PAGE_SIZE)
452 printk(KERN_ALERT "Unable to handle kernel NULL pointer dereference");
453 else
454 printk(KERN_ALERT "Unable to handle kernel paging request");
455 printk(" at virtual address %08lx\n",address);
456 printk(KERN_ALERT " printing eip:\n");
457 printk("%08lx\n", regs->eip);
458 page = read_cr3(); 533 page = read_cr3();
459 page = ((unsigned long *) __va(page))[address >> 22]; 534 page = ((unsigned long *) __va(page))[address >> 22];
460 printk(KERN_ALERT "*pde = %08lx\n", page); 535 if (oops_may_print())
536 printk(KERN_ALERT "*pde = %08lx\n", page);
461 /* 537 /*
462 * We must not directly access the pte in the highpte 538 * We must not directly access the pte in the highpte
463 * case, the page table might be allocated in highmem. 539 * case, the page table might be allocated in highmem.
@@ -465,7 +541,7 @@ no_context:
465 * it's allocated already. 541 * it's allocated already.
466 */ 542 */
467#ifndef CONFIG_HIGHPTE 543#ifndef CONFIG_HIGHPTE
468 if (page & 1) { 544 if ((page & 1) && oops_may_print()) {
469 page &= PAGE_MASK; 545 page &= PAGE_MASK;
470 address &= 0x003ff000; 546 address &= 0x003ff000;
471 page = ((unsigned long *) __va(page))[address >> PAGE_SHIFT]; 547 page = ((unsigned long *) __va(page))[address >> PAGE_SHIFT];
@@ -510,51 +586,41 @@ do_sigbus:
510 tsk->thread.error_code = error_code; 586 tsk->thread.error_code = error_code;
511 tsk->thread.trap_no = 14; 587 tsk->thread.trap_no = 14;
512 force_sig_info_fault(SIGBUS, BUS_ADRERR, address, tsk); 588 force_sig_info_fault(SIGBUS, BUS_ADRERR, address, tsk);
513 return; 589}
514
515vmalloc_fault:
516 {
517 /*
518 * Synchronize this task's top level page-table
519 * with the 'reference' page table.
520 *
521 * Do _not_ use "tsk" here. We might be inside
522 * an interrupt in the middle of a task switch..
523 */
524 int index = pgd_index(address);
525 unsigned long pgd_paddr;
526 pgd_t *pgd, *pgd_k;
527 pud_t *pud, *pud_k;
528 pmd_t *pmd, *pmd_k;
529 pte_t *pte_k;
530
531 pgd_paddr = read_cr3();
532 pgd = index + (pgd_t *)__va(pgd_paddr);
533 pgd_k = init_mm.pgd + index;
534
535 if (!pgd_present(*pgd_k))
536 goto no_context;
537
538 /*
539 * set_pgd(pgd, *pgd_k); here would be useless on PAE
540 * and redundant with the set_pmd() on non-PAE. As would
541 * set_pud.
542 */
543 590
544 pud = pud_offset(pgd, address); 591#ifndef CONFIG_X86_PAE
545 pud_k = pud_offset(pgd_k, address); 592void vmalloc_sync_all(void)
546 if (!pud_present(*pud_k)) 593{
547 goto no_context; 594 /*
548 595 * Note that races in the updates of insync and start aren't
549 pmd = pmd_offset(pud, address); 596 * problematic: insync can only get set bits added, and updates to
550 pmd_k = pmd_offset(pud_k, address); 597 * start are only improving performance (without affecting correctness
551 if (!pmd_present(*pmd_k)) 598 * if undone).
552 goto no_context; 599 */
553 set_pmd(pmd, *pmd_k); 600 static DECLARE_BITMAP(insync, PTRS_PER_PGD);
601 static unsigned long start = TASK_SIZE;
602 unsigned long address;
554 603
555 pte_k = pte_offset_kernel(pmd_k, address); 604 BUILD_BUG_ON(TASK_SIZE & ~PGDIR_MASK);
556 if (!pte_present(*pte_k)) 605 for (address = start; address >= TASK_SIZE; address += PGDIR_SIZE) {
557 goto no_context; 606 if (!test_bit(pgd_index(address), insync)) {
558 return; 607 unsigned long flags;
608 struct page *page;
609
610 spin_lock_irqsave(&pgd_lock, flags);
611 for (page = pgd_list; page; page =
612 (struct page *)page->index)
613 if (!vmalloc_sync_one(page_address(page),
614 address)) {
615 BUG_ON(page != pgd_list);
616 break;
617 }
618 spin_unlock_irqrestore(&pgd_lock, flags);
619 if (!page)
620 set_bit(pgd_index(address), insync);
621 }
622 if (address == start && test_bit(pgd_index(address), insync))
623 start = address + PGDIR_SIZE;
559 } 624 }
560} 625}
626#endif
diff --git a/arch/i386/mm/hugetlbpage.c b/arch/i386/mm/hugetlbpage.c
index d524127c9afc..a7d891585411 100644
--- a/arch/i386/mm/hugetlbpage.c
+++ b/arch/i386/mm/hugetlbpage.c
@@ -48,18 +48,6 @@ pte_t *huge_pte_offset(struct mm_struct *mm, unsigned long addr)
48 return (pte_t *) pmd; 48 return (pte_t *) pmd;
49} 49}
50 50
51/*
52 * This function checks for proper alignment of input addr and len parameters.
53 */
54int is_aligned_hugepage_range(unsigned long addr, unsigned long len)
55{
56 if (len & ~HPAGE_MASK)
57 return -EINVAL;
58 if (addr & ~HPAGE_MASK)
59 return -EINVAL;
60 return 0;
61}
62
63#if 0 /* This is just for testing */ 51#if 0 /* This is just for testing */
64struct page * 52struct page *
65follow_huge_addr(struct mm_struct *mm, unsigned long address, int write) 53follow_huge_addr(struct mm_struct *mm, unsigned long address, int write)
diff --git a/arch/i386/mm/init.c b/arch/i386/mm/init.c
index 2700f01994ba..9f66ac582a8b 100644
--- a/arch/i386/mm/init.c
+++ b/arch/i386/mm/init.c
@@ -270,7 +270,7 @@ static void __init permanent_kmaps_init(pgd_t *pgd_base)
270 270
271static void __meminit free_new_highpage(struct page *page) 271static void __meminit free_new_highpage(struct page *page)
272{ 272{
273 set_page_count(page, 1); 273 init_page_count(page);
274 __free_page(page); 274 __free_page(page);
275 totalhigh_pages++; 275 totalhigh_pages++;
276} 276}
@@ -720,21 +720,6 @@ static int noinline do_test_wp_bit(void)
720 return flag; 720 return flag;
721} 721}
722 722
723void free_initmem(void)
724{
725 unsigned long addr;
726
727 addr = (unsigned long)(&__init_begin);
728 for (; addr < (unsigned long)(&__init_end); addr += PAGE_SIZE) {
729 ClearPageReserved(virt_to_page(addr));
730 set_page_count(virt_to_page(addr), 1);
731 memset((void *)addr, 0xcc, PAGE_SIZE);
732 free_page(addr);
733 totalram_pages++;
734 }
735 printk (KERN_INFO "Freeing unused kernel memory: %dk freed\n", (__init_end - __init_begin) >> 10);
736}
737
738#ifdef CONFIG_DEBUG_RODATA 723#ifdef CONFIG_DEBUG_RODATA
739 724
740extern char __start_rodata, __end_rodata; 725extern char __start_rodata, __end_rodata;
@@ -758,17 +743,31 @@ void mark_rodata_ro(void)
758} 743}
759#endif 744#endif
760 745
746void free_init_pages(char *what, unsigned long begin, unsigned long end)
747{
748 unsigned long addr;
749
750 for (addr = begin; addr < end; addr += PAGE_SIZE) {
751 ClearPageReserved(virt_to_page(addr));
752 init_page_count(virt_to_page(addr));
753 memset((void *)addr, 0xcc, PAGE_SIZE);
754 free_page(addr);
755 totalram_pages++;
756 }
757 printk(KERN_INFO "Freeing %s: %ldk freed\n", what, (end - begin) >> 10);
758}
759
760void free_initmem(void)
761{
762 free_init_pages("unused kernel memory",
763 (unsigned long)(&__init_begin),
764 (unsigned long)(&__init_end));
765}
761 766
762#ifdef CONFIG_BLK_DEV_INITRD 767#ifdef CONFIG_BLK_DEV_INITRD
763void free_initrd_mem(unsigned long start, unsigned long end) 768void free_initrd_mem(unsigned long start, unsigned long end)
764{ 769{
765 if (start < end) 770 free_init_pages("initrd memory", start, end);
766 printk (KERN_INFO "Freeing initrd memory: %ldk freed\n", (end - start) >> 10);
767 for (; start < end; start += PAGE_SIZE) {
768 ClearPageReserved(virt_to_page(start));
769 set_page_count(virt_to_page(start), 1);
770 free_page(start);
771 totalram_pages++;
772 }
773} 771}
774#endif 772#endif
773
diff --git a/arch/i386/mm/pageattr.c b/arch/i386/mm/pageattr.c
index d0cadb33b54c..92c3d9f0e731 100644
--- a/arch/i386/mm/pageattr.c
+++ b/arch/i386/mm/pageattr.c
@@ -51,6 +51,13 @@ static struct page *split_large_page(unsigned long address, pgprot_t prot,
51 if (!base) 51 if (!base)
52 return NULL; 52 return NULL;
53 53
54 /*
55 * page_private is used to track the number of entries in
56 * the page table page that have non standard attributes.
57 */
58 SetPagePrivate(base);
59 page_private(base) = 0;
60
54 address = __pa(address); 61 address = __pa(address);
55 addr = address & LARGE_PAGE_MASK; 62 addr = address & LARGE_PAGE_MASK;
56 pbase = (pte_t *)page_address(base); 63 pbase = (pte_t *)page_address(base);
@@ -143,11 +150,12 @@ __change_page_attr(struct page *page, pgprot_t prot)
143 return -ENOMEM; 150 return -ENOMEM;
144 set_pmd_pte(kpte,address,mk_pte(split, ref_prot)); 151 set_pmd_pte(kpte,address,mk_pte(split, ref_prot));
145 kpte_page = split; 152 kpte_page = split;
146 } 153 }
147 get_page(kpte_page); 154 page_private(kpte_page)++;
148 } else if ((pte_val(*kpte) & _PAGE_PSE) == 0) { 155 } else if ((pte_val(*kpte) & _PAGE_PSE) == 0) {
149 set_pte_atomic(kpte, mk_pte(page, PAGE_KERNEL)); 156 set_pte_atomic(kpte, mk_pte(page, PAGE_KERNEL));
150 __put_page(kpte_page); 157 BUG_ON(page_private(kpte_page) == 0);
158 page_private(kpte_page)--;
151 } else 159 } else
152 BUG(); 160 BUG();
153 161
@@ -157,10 +165,8 @@ __change_page_attr(struct page *page, pgprot_t prot)
157 * replace it with a largepage. 165 * replace it with a largepage.
158 */ 166 */
159 if (!PageReserved(kpte_page)) { 167 if (!PageReserved(kpte_page)) {
160 /* memleak and potential failed 2M page regeneration */ 168 if (cpu_has_pse && (page_private(kpte_page) == 0)) {
161 BUG_ON(!page_count(kpte_page)); 169 ClearPagePrivate(kpte_page);
162
163 if (cpu_has_pse && (page_count(kpte_page) == 1)) {
164 list_add(&kpte_page->lru, &df_list); 170 list_add(&kpte_page->lru, &df_list);
165 revert_page(kpte_page, address); 171 revert_page(kpte_page, address);
166 } 172 }
diff --git a/arch/i386/oprofile/nmi_int.c b/arch/i386/oprofile/nmi_int.c
index 0493e8b8ec49..1accce50c2c7 100644
--- a/arch/i386/oprofile/nmi_int.c
+++ b/arch/i386/oprofile/nmi_int.c
@@ -122,7 +122,7 @@ static void nmi_save_registers(void * dummy)
122static void free_msrs(void) 122static void free_msrs(void)
123{ 123{
124 int i; 124 int i;
125 for (i = 0; i < NR_CPUS; ++i) { 125 for_each_cpu(i) {
126 kfree(cpu_msrs[i].counters); 126 kfree(cpu_msrs[i].counters);
127 cpu_msrs[i].counters = NULL; 127 cpu_msrs[i].counters = NULL;
128 kfree(cpu_msrs[i].controls); 128 kfree(cpu_msrs[i].controls);
@@ -138,10 +138,7 @@ static int allocate_msrs(void)
138 size_t counters_size = sizeof(struct op_msr) * model->num_counters; 138 size_t counters_size = sizeof(struct op_msr) * model->num_counters;
139 139
140 int i; 140 int i;
141 for (i = 0; i < NR_CPUS; ++i) { 141 for_each_online_cpu(i) {
142 if (!cpu_online(i))
143 continue;
144
145 cpu_msrs[i].counters = kmalloc(counters_size, GFP_KERNEL); 142 cpu_msrs[i].counters = kmalloc(counters_size, GFP_KERNEL);
146 if (!cpu_msrs[i].counters) { 143 if (!cpu_msrs[i].counters) {
147 success = 0; 144 success = 0;
diff --git a/arch/i386/pci/Makefile b/arch/i386/pci/Makefile
index 5461d4d5ea1e..62ad75c57e6a 100644
--- a/arch/i386/pci/Makefile
+++ b/arch/i386/pci/Makefile
@@ -1,4 +1,4 @@
1obj-y := i386.o 1obj-y := i386.o init.o
2 2
3obj-$(CONFIG_PCI_BIOS) += pcbios.o 3obj-$(CONFIG_PCI_BIOS) += pcbios.o
4obj-$(CONFIG_PCI_MMCONFIG) += mmconfig.o direct.o 4obj-$(CONFIG_PCI_MMCONFIG) += mmconfig.o direct.o
diff --git a/arch/i386/pci/common.c b/arch/i386/pci/common.c
index f6bc48da4d2a..dbece776c5b2 100644
--- a/arch/i386/pci/common.c
+++ b/arch/i386/pci/common.c
@@ -8,6 +8,7 @@
8#include <linux/pci.h> 8#include <linux/pci.h>
9#include <linux/ioport.h> 9#include <linux/ioport.h>
10#include <linux/init.h> 10#include <linux/init.h>
11#include <linux/dmi.h>
11 12
12#include <asm/acpi.h> 13#include <asm/acpi.h>
13#include <asm/segment.h> 14#include <asm/segment.h>
@@ -120,11 +121,42 @@ void __devinit pcibios_fixup_bus(struct pci_bus *b)
120 pci_read_bridge_bases(b); 121 pci_read_bridge_bases(b);
121} 122}
122 123
124/*
125 * Enable renumbering of PCI bus# ranges to reach all PCI busses (Cardbus)
126 */
127#ifdef __i386__
128static int __devinit assign_all_busses(struct dmi_system_id *d)
129{
130 pci_probe |= PCI_ASSIGN_ALL_BUSSES;
131 printk(KERN_INFO "%s detected: enabling PCI bus# renumbering"
132 " (pci=assign-busses)\n", d->ident);
133 return 0;
134}
135#endif
136
137/*
138 * Laptops which need pci=assign-busses to see Cardbus cards
139 */
140static struct dmi_system_id __devinitdata pciprobe_dmi_table[] = {
141#ifdef __i386__
142 {
143 .callback = assign_all_busses,
144 .ident = "Samsung X20 Laptop",
145 .matches = {
146 DMI_MATCH(DMI_SYS_VENDOR, "Samsung Electronics"),
147 DMI_MATCH(DMI_PRODUCT_NAME, "SX20S"),
148 },
149 },
150#endif /* __i386__ */
151 {}
152};
123 153
124struct pci_bus * __devinit pcibios_scan_root(int busnum) 154struct pci_bus * __devinit pcibios_scan_root(int busnum)
125{ 155{
126 struct pci_bus *bus = NULL; 156 struct pci_bus *bus = NULL;
127 157
158 dmi_check_system(pciprobe_dmi_table);
159
128 while ((bus = pci_find_next_bus(bus)) != NULL) { 160 while ((bus = pci_find_next_bus(bus)) != NULL) {
129 if (bus->number == busnum) { 161 if (bus->number == busnum) {
130 /* Already scanned */ 162 /* Already scanned */
diff --git a/arch/i386/pci/direct.c b/arch/i386/pci/direct.c
index e3ac502bf2fb..99012b93bd12 100644
--- a/arch/i386/pci/direct.c
+++ b/arch/i386/pci/direct.c
@@ -245,7 +245,7 @@ static int __init pci_check_type2(void)
245 return works; 245 return works;
246} 246}
247 247
248static int __init pci_direct_init(void) 248void __init pci_direct_init(void)
249{ 249{
250 struct resource *region, *region2; 250 struct resource *region, *region2;
251 251
@@ -258,16 +258,16 @@ static int __init pci_direct_init(void)
258 if (pci_check_type1()) { 258 if (pci_check_type1()) {
259 printk(KERN_INFO "PCI: Using configuration type 1\n"); 259 printk(KERN_INFO "PCI: Using configuration type 1\n");
260 raw_pci_ops = &pci_direct_conf1; 260 raw_pci_ops = &pci_direct_conf1;
261 return 0; 261 return;
262 } 262 }
263 release_resource(region); 263 release_resource(region);
264 264
265 type2: 265 type2:
266 if ((pci_probe & PCI_PROBE_CONF2) == 0) 266 if ((pci_probe & PCI_PROBE_CONF2) == 0)
267 goto out; 267 return;
268 region = request_region(0xCF8, 4, "PCI conf2"); 268 region = request_region(0xCF8, 4, "PCI conf2");
269 if (!region) 269 if (!region)
270 goto out; 270 return;
271 region2 = request_region(0xC000, 0x1000, "PCI conf2"); 271 region2 = request_region(0xC000, 0x1000, "PCI conf2");
272 if (!region2) 272 if (!region2)
273 goto fail2; 273 goto fail2;
@@ -275,15 +275,10 @@ static int __init pci_direct_init(void)
275 if (pci_check_type2()) { 275 if (pci_check_type2()) {
276 printk(KERN_INFO "PCI: Using configuration type 2\n"); 276 printk(KERN_INFO "PCI: Using configuration type 2\n");
277 raw_pci_ops = &pci_direct_conf2; 277 raw_pci_ops = &pci_direct_conf2;
278 return 0; 278 return;
279 } 279 }
280 280
281 release_resource(region2); 281 release_resource(region2);
282 fail2: 282 fail2:
283 release_resource(region); 283 release_resource(region);
284
285 out:
286 return 0;
287} 284}
288
289arch_initcall(pci_direct_init);
diff --git a/arch/i386/pci/init.c b/arch/i386/pci/init.c
new file mode 100644
index 000000000000..f9156d3ac723
--- /dev/null
+++ b/arch/i386/pci/init.c
@@ -0,0 +1,25 @@
1#include <linux/config.h>
2#include <linux/pci.h>
3#include <linux/init.h>
4#include "pci.h"
5
6/* arch_initcall has too random ordering, so call the initializers
7 in the right sequence from here. */
8static __init int pci_access_init(void)
9{
10#ifdef CONFIG_PCI_MMCONFIG
11 pci_mmcfg_init();
12#endif
13 if (raw_pci_ops)
14 return 0;
15#ifdef CONFIG_PCI_BIOS
16 pci_pcbios_init();
17#endif
18 if (raw_pci_ops)
19 return 0;
20#ifdef CONFIG_PCI_DIRECT
21 pci_direct_init();
22#endif
23 return 0;
24}
25arch_initcall(pci_access_init);
diff --git a/arch/i386/pci/mmconfig.c b/arch/i386/pci/mmconfig.c
index 0ee8a983708c..613789071f30 100644
--- a/arch/i386/pci/mmconfig.c
+++ b/arch/i386/pci/mmconfig.c
@@ -172,25 +172,20 @@ static __init void unreachable_devices(void)
172 } 172 }
173} 173}
174 174
175static int __init pci_mmcfg_init(void) 175void __init pci_mmcfg_init(void)
176{ 176{
177 if ((pci_probe & PCI_PROBE_MMCONF) == 0) 177 if ((pci_probe & PCI_PROBE_MMCONF) == 0)
178 goto out; 178 return;
179 179
180 acpi_table_parse(ACPI_MCFG, acpi_parse_mcfg); 180 acpi_table_parse(ACPI_MCFG, acpi_parse_mcfg);
181 if ((pci_mmcfg_config_num == 0) || 181 if ((pci_mmcfg_config_num == 0) ||
182 (pci_mmcfg_config == NULL) || 182 (pci_mmcfg_config == NULL) ||
183 (pci_mmcfg_config[0].base_address == 0)) 183 (pci_mmcfg_config[0].base_address == 0))
184 goto out; 184 return;
185 185
186 printk(KERN_INFO "PCI: Using MMCONFIG\n"); 186 printk(KERN_INFO "PCI: Using MMCONFIG\n");
187 raw_pci_ops = &pci_mmcfg; 187 raw_pci_ops = &pci_mmcfg;
188 pci_probe = (pci_probe & ~PCI_PROBE_MASK) | PCI_PROBE_MMCONF; 188 pci_probe = (pci_probe & ~PCI_PROBE_MASK) | PCI_PROBE_MMCONF;
189 189
190 unreachable_devices(); 190 unreachable_devices();
191
192 out:
193 return 0;
194} 191}
195
196arch_initcall(pci_mmcfg_init);
diff --git a/arch/i386/pci/pcbios.c b/arch/i386/pci/pcbios.c
index b9d65f0bc2d1..1eec0868f4b3 100644
--- a/arch/i386/pci/pcbios.c
+++ b/arch/i386/pci/pcbios.c
@@ -476,14 +476,12 @@ int pcibios_set_irq_routing(struct pci_dev *dev, int pin, int irq)
476} 476}
477EXPORT_SYMBOL(pcibios_set_irq_routing); 477EXPORT_SYMBOL(pcibios_set_irq_routing);
478 478
479static int __init pci_pcbios_init(void) 479void __init pci_pcbios_init(void)
480{ 480{
481 if ((pci_probe & PCI_PROBE_BIOS) 481 if ((pci_probe & PCI_PROBE_BIOS)
482 && ((raw_pci_ops = pci_find_bios()))) { 482 && ((raw_pci_ops = pci_find_bios()))) {
483 pci_probe |= PCI_BIOS_SORT; 483 pci_probe |= PCI_BIOS_SORT;
484 pci_bios_present = 1; 484 pci_bios_present = 1;
485 } 485 }
486 return 0;
487} 486}
488 487
489arch_initcall(pci_pcbios_init);
diff --git a/arch/i386/pci/pci.h b/arch/i386/pci/pci.h
index f550781ec310..12035e29108b 100644
--- a/arch/i386/pci/pci.h
+++ b/arch/i386/pci/pci.h
@@ -80,4 +80,7 @@ extern int pci_conf1_write(unsigned int seg, unsigned int bus,
80extern int pci_conf1_read(unsigned int seg, unsigned int bus, 80extern int pci_conf1_read(unsigned int seg, unsigned int bus,
81 unsigned int devfn, int reg, int len, u32 *value); 81 unsigned int devfn, int reg, int len, u32 *value);
82 82
83extern void pci_direct_init(void);
84extern void pci_pcbios_init(void);
85extern void pci_mmcfg_init(void);
83 86