aboutsummaryrefslogtreecommitdiffstats
path: root/arch/i386
diff options
context:
space:
mode:
authorDmitry Torokhov <dtor_core@ameritech.net>2006-04-02 00:08:05 -0500
committerDmitry Torokhov <dtor_core@ameritech.net>2006-04-02 00:08:05 -0500
commit95d465fd750897ab32462a6702fbfe1b122cbbc0 (patch)
tree65c38b2f11c51bb6932e44dd6c92f15b0091abfe /arch/i386
parent642fde17dceceb56c7ba2762733ac688666ae657 (diff)
parent683aa4012f53b2ada0f430487e05d37b0d94e90a (diff)
Manual merge with Linus.
Conflicts: arch/powerpc/kernel/setup-common.c drivers/input/keyboard/hil_kbd.c drivers/input/mouse/hil_ptr.c
Diffstat (limited to 'arch/i386')
-rw-r--r--arch/i386/Kconfig39
-rw-r--r--arch/i386/Kconfig.debug13
-rw-r--r--arch/i386/Makefile14
-rw-r--r--arch/i386/Makefile.cpu4
-rw-r--r--arch/i386/boot/Makefile36
-rw-r--r--arch/i386/boot/edd.S2
-rw-r--r--arch/i386/boot/video.S2
-rw-r--r--arch/i386/defconfig1172
-rw-r--r--arch/i386/kernel/Makefile2
-rw-r--r--arch/i386/kernel/acpi/boot.c8
-rw-r--r--arch/i386/kernel/alternative.c321
-rw-r--r--arch/i386/kernel/apic.c29
-rw-r--r--arch/i386/kernel/apm.c2
-rw-r--r--arch/i386/kernel/cpu/centaur.c1
-rw-r--r--arch/i386/kernel/cpu/common.c57
-rw-r--r--arch/i386/kernel/cpu/cpufreq/Kconfig24
-rw-r--r--arch/i386/kernel/cpu/cpufreq/cpufreq-nforce2.c64
-rw-r--r--arch/i386/kernel/cpu/cpufreq/elanfreq.c109
-rw-r--r--arch/i386/kernel/cpu/cpufreq/gx-suspmod.c183
-rw-r--r--arch/i386/kernel/cpu/cpufreq/longhaul.h4
-rw-r--r--arch/i386/kernel/cpu/cpufreq/p4-clockmod.c26
-rw-r--r--arch/i386/kernel/cpu/cpufreq/powernow-k6.c16
-rw-r--r--arch/i386/kernel/cpu/cpufreq/powernow-k7.c10
-rw-r--r--arch/i386/kernel/cpu/cpufreq/powernow-k8.c57
-rw-r--r--arch/i386/kernel/cpu/cpufreq/powernow-k8.h8
-rw-r--r--arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c4
-rw-r--r--arch/i386/kernel/cpu/cpufreq/speedstep-lib.c42
-rw-r--r--arch/i386/kernel/cpu/cpufreq/speedstep-lib.h20
-rw-r--r--arch/i386/kernel/cpu/cpufreq/speedstep-smi.c53
-rw-r--r--arch/i386/kernel/cpu/intel.c12
-rw-r--r--arch/i386/kernel/cpu/intel_cacheinfo.c81
-rw-r--r--arch/i386/kernel/cpu/mcheck/mce.c4
-rw-r--r--arch/i386/kernel/cpu/mtrr/main.c13
-rw-r--r--arch/i386/kernel/cpu/proc.c4
-rw-r--r--arch/i386/kernel/crash.c2
-rw-r--r--arch/i386/kernel/dmi_scan.c123
-rw-r--r--arch/i386/kernel/efi.c27
-rw-r--r--arch/i386/kernel/entry.S4
-rw-r--r--arch/i386/kernel/head.S5
-rw-r--r--arch/i386/kernel/io_apic.c27
-rw-r--r--arch/i386/kernel/kprobes.c257
-rw-r--r--arch/i386/kernel/microcode.c28
-rw-r--r--arch/i386/kernel/module.c32
-rw-r--r--arch/i386/kernel/mpparse.c7
-rw-r--r--arch/i386/kernel/nmi.c11
-rw-r--r--arch/i386/kernel/process.c11
-rw-r--r--arch/i386/kernel/ptrace.c4
-rw-r--r--arch/i386/kernel/semaphore.c8
-rw-r--r--arch/i386/kernel/setup.c149
-rw-r--r--arch/i386/kernel/signal.c7
-rw-r--r--arch/i386/kernel/smp.c28
-rw-r--r--arch/i386/kernel/smpboot.c50
-rw-r--r--arch/i386/kernel/sys_i386.c25
-rw-r--r--arch/i386/kernel/syscall_table.S4
-rw-r--r--arch/i386/kernel/timers/timer_hpet.c2
-rw-r--r--arch/i386/kernel/timers/timer_pm.c104
-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.c91
-rw-r--r--arch/i386/kernel/vm86.c12
-rw-r--r--arch/i386/kernel/vmlinux.lds.S23
-rw-r--r--arch/i386/kernel/vsyscall-sigreturn.S2
-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/mach-visws/reboot.c1
-rw-r--r--arch/i386/mach-voyager/voyager_smp.c2
-rw-r--r--arch/i386/mm/discontig.c12
-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/mm/pgtable.c2
-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
81 files changed, 2506 insertions, 1403 deletions
diff --git a/arch/i386/Kconfig b/arch/i386/Kconfig
index 5b1a7d46d1d9..f17bd1d2707e 100644
--- a/arch/i386/Kconfig
+++ b/arch/i386/Kconfig
@@ -37,6 +37,10 @@ config GENERIC_IOMAP
37 bool 37 bool
38 default y 38 default y
39 39
40config GENERIC_HWEIGHT
41 bool
42 default y
43
40config ARCH_MAY_HAVE_PC_FDC 44config ARCH_MAY_HAVE_PC_FDC
41 bool 45 bool
42 default y 46 default y
@@ -80,6 +84,7 @@ config X86_VOYAGER
80 84
81config X86_NUMAQ 85config X86_NUMAQ
82 bool "NUMAQ (IBM/Sequent)" 86 bool "NUMAQ (IBM/Sequent)"
87 select SMP
83 select NUMA 88 select NUMA
84 help 89 help
85 This option is used for getting Linux to run on a (IBM/Sequent) NUMA 90 This option is used for getting Linux to run on a (IBM/Sequent) NUMA
@@ -226,6 +231,15 @@ config SCHED_SMT
226 cost of slightly increased overhead in some places. If unsure say 231 cost of slightly increased overhead in some places. If unsure say
227 N here. 232 N here.
228 233
234config SCHED_MC
235 bool "Multi-core scheduler support"
236 depends on SMP
237 default y
238 help
239 Multi-core scheduler support improves the CPU scheduler's decision
240 making when dealing with multi-core CPU chips at a cost of slightly
241 increased overhead in some places. If unsure say N here.
242
229source "kernel/Kconfig.preempt" 243source "kernel/Kconfig.preempt"
230 244
231config X86_UP_APIC 245config X86_UP_APIC
@@ -400,6 +414,7 @@ choice
400 414
401config NOHIGHMEM 415config NOHIGHMEM
402 bool "off" 416 bool "off"
417 depends on !X86_NUMAQ
403 ---help--- 418 ---help---
404 Linux can use up to 64 Gigabytes of physical memory on x86 systems. 419 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 420 However, the address space of 32-bit x86 processors is only 4
@@ -436,6 +451,7 @@ config NOHIGHMEM
436 451
437config HIGHMEM4G 452config HIGHMEM4G
438 bool "4GB" 453 bool "4GB"
454 depends on !X86_NUMAQ
439 help 455 help
440 Select this if you have a 32-bit processor and between 1 and 4 456 Select this if you have a 32-bit processor and between 1 and 4
441 gigabytes of physical RAM. 457 gigabytes of physical RAM.
@@ -503,10 +519,6 @@ config NUMA
503 default n if X86_PC 519 default n if X86_PC
504 default y if (X86_NUMAQ || X86_SUMMIT) 520 default y if (X86_NUMAQ || X86_SUMMIT)
505 521
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" 522comment "NUMA (Summit) requires SMP, 64GB highmem support, ACPI"
511 depends on X86_SUMMIT && (!HIGHMEM64G || !ACPI) 523 depends on X86_SUMMIT && (!HIGHMEM64G || !ACPI)
512 524
@@ -660,13 +672,18 @@ config BOOT_IOREMAP
660 default y 672 default y
661 673
662config REGPARM 674config REGPARM
663 bool "Use register arguments (EXPERIMENTAL)" 675 bool "Use register arguments"
664 depends on EXPERIMENTAL 676 default y
665 default n
666 help 677 help
667 Compile the kernel with -mregparm=3. This uses a different ABI 678 Compile the kernel with -mregparm=3. This instructs gcc to use
668 and passes the first three arguments of a function call in registers. 679 a more efficient function call ABI which passes the first three
669 This will probably break binary only modules. 680 arguments of a function call via registers, which results in denser
681 and faster code.
682
683 If this option is disabled, then the default ABI of passing
684 arguments via the stack is used.
685
686 If unsure, say Y.
670 687
671config SECCOMP 688config SECCOMP
672 bool "Enable seccomp to safely compute untrusted bytecode" 689 bool "Enable seccomp to safely compute untrusted bytecode"
@@ -733,7 +750,7 @@ config PHYSICAL_START
733 750
734config HOTPLUG_CPU 751config HOTPLUG_CPU
735 bool "Support for hot-pluggable CPUs (EXPERIMENTAL)" 752 bool "Support for hot-pluggable CPUs (EXPERIMENTAL)"
736 depends on SMP && HOTPLUG && EXPERIMENTAL && !X86_VOYAGER 753 depends on SMP && HOTPLUG && EXPERIMENTAL && !X86_VOYAGER && !X86_PC
737 ---help--- 754 ---help---
738 Say Y here to experiment with turning CPUs off and on. CPUs 755 Say Y here to experiment with turning CPUs off and on. CPUs
739 can be controlled through /sys/devices/system/cpu. 756 can be controlled through /sys/devices/system/cpu.
diff --git a/arch/i386/Kconfig.debug b/arch/i386/Kconfig.debug
index bf32ecc9ad04..6e97df6979e8 100644
--- a/arch/i386/Kconfig.debug
+++ b/arch/i386/Kconfig.debug
@@ -31,12 +31,21 @@ 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
37config DEBUG_PAGEALLOC 46config DEBUG_PAGEALLOC
38 bool "Page alloc debugging" 47 bool "Debug page memory allocations"
39 depends on DEBUG_KERNEL && !SOFTWARE_SUSPEND 48 depends on DEBUG_KERNEL && !SOFTWARE_SUSPEND && !HUGETLBFS
40 help 49 help
41 Unmap pages from the kernel linear mapping after free_pages(). 50 Unmap pages from the kernel linear mapping after free_pages().
42 This results in a large slowdown, but helps to find certain types 51 This results in a large slowdown, but helps to find certain types
diff --git a/arch/i386/Makefile b/arch/i386/Makefile
index 36bef6543ac1..3e4adb1e2244 100644
--- a/arch/i386/Makefile
+++ b/arch/i386/Makefile
@@ -39,6 +39,9 @@ include $(srctree)/arch/i386/Makefile.cpu
39 39
40cflags-$(CONFIG_REGPARM) += -mregparm=3 40cflags-$(CONFIG_REGPARM) += -mregparm=3
41 41
42# temporary until string.h is fixed
43cflags-y += -ffreestanding
44
42# Disable unit-at-a-time mode on pre-gcc-4.0 compilers, it makes gcc use 45# Disable unit-at-a-time mode on pre-gcc-4.0 compilers, it makes gcc use
43# a lot more stack due to the lack of sharing of stacklots: 46# a lot more stack due to the lack of sharing of stacklots:
44CFLAGS += $(shell if [ $(call cc-version) -lt 0400 ] ; then echo $(call cc-option,-fno-unit-at-a-time); fi ;) 47CFLAGS += $(shell if [ $(call cc-version) -lt 0400 ] ; then echo $(call cc-option,-fno-unit-at-a-time); fi ;)
@@ -99,8 +102,8 @@ AFLAGS += $(mflags-y)
99 102
100boot := arch/i386/boot 103boot := arch/i386/boot
101 104
102.PHONY: zImage bzImage compressed zlilo bzlilo \ 105PHONY += zImage bzImage compressed zlilo bzlilo \
103 zdisk bzdisk fdimage fdimage144 fdimage288 install 106 zdisk bzdisk fdimage fdimage144 fdimage288 isoimage install
104 107
105all: bzImage 108all: bzImage
106 109
@@ -119,7 +122,7 @@ zlilo bzlilo: vmlinux
119zdisk bzdisk: vmlinux 122zdisk bzdisk: vmlinux
120 $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) zdisk 123 $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) zdisk
121 124
122fdimage fdimage144 fdimage288: vmlinux 125fdimage fdimage144 fdimage288 isoimage: vmlinux
123 $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) $@ 126 $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) $@
124 127
125install: 128install:
@@ -136,6 +139,9 @@ define archhelp
136 echo ' install to $$(INSTALL_PATH) and run lilo' 139 echo ' install to $$(INSTALL_PATH) and run lilo'
137 echo ' bzdisk - Create a boot floppy in /dev/fd0' 140 echo ' bzdisk - Create a boot floppy in /dev/fd0'
138 echo ' fdimage - Create a boot floppy image' 141 echo ' fdimage - Create a boot floppy image'
142 echo ' isoimage - Create a boot CD-ROM image'
139endef 143endef
140 144
141CLEAN_FILES += arch/$(ARCH)/boot/fdimage arch/$(ARCH)/boot/mtools.conf 145CLEAN_FILES += arch/$(ARCH)/boot/fdimage \
146 arch/$(ARCH)/boot/image.iso \
147 arch/$(ARCH)/boot/mtools.conf
diff --git a/arch/i386/Makefile.cpu b/arch/i386/Makefile.cpu
index dcd936ef45db..a11befba26d5 100644
--- a/arch/i386/Makefile.cpu
+++ b/arch/i386/Makefile.cpu
@@ -39,3 +39,7 @@ cflags-$(CONFIG_X86_ELAN) += -march=i486
39# Geode GX1 support 39# Geode GX1 support
40cflags-$(CONFIG_MGEODEGX1) += -march=pentium-mmx 40cflags-$(CONFIG_MGEODEGX1) += -march=pentium-mmx
41 41
42# add at the end to overwrite eventual tuning options from earlier
43# cpu entries
44cflags-$(CONFIG_X86_GENERIC) += $(call tune,generic)
45
diff --git a/arch/i386/boot/Makefile b/arch/i386/boot/Makefile
index f136752563b1..33e55476381b 100644
--- a/arch/i386/boot/Makefile
+++ b/arch/i386/boot/Makefile
@@ -62,8 +62,12 @@ $(obj)/setup $(obj)/bootsect: %: %.o FORCE
62$(obj)/compressed/vmlinux: FORCE 62$(obj)/compressed/vmlinux: FORCE
63 $(Q)$(MAKE) $(build)=$(obj)/compressed IMAGE_OFFSET=$(IMAGE_OFFSET) $@ 63 $(Q)$(MAKE) $(build)=$(obj)/compressed IMAGE_OFFSET=$(IMAGE_OFFSET) $@
64 64
65# Set this if you want to pass append arguments to the zdisk/fdimage kernel 65# Set this if you want to pass append arguments to the zdisk/fdimage/isoimage kernel
66FDARGS = 66FDARGS =
67# Set this if you want an initrd included with the zdisk/fdimage/isoimage kernel
68FDINITRD =
69
70image_cmdline = default linux $(FDARGS) $(if $(FDINITRD),initrd=initrd.img,)
67 71
68$(obj)/mtools.conf: $(src)/mtools.conf.in 72$(obj)/mtools.conf: $(src)/mtools.conf.in
69 sed -e 's|@OBJ@|$(obj)|g' < $< > $@ 73 sed -e 's|@OBJ@|$(obj)|g' < $< > $@
@@ -72,8 +76,11 @@ $(obj)/mtools.conf: $(src)/mtools.conf.in
72zdisk: $(BOOTIMAGE) $(obj)/mtools.conf 76zdisk: $(BOOTIMAGE) $(obj)/mtools.conf
73 MTOOLSRC=$(obj)/mtools.conf mformat a: ; sync 77 MTOOLSRC=$(obj)/mtools.conf mformat a: ; sync
74 syslinux /dev/fd0 ; sync 78 syslinux /dev/fd0 ; sync
75 echo 'default linux $(FDARGS)' | \ 79 echo '$(image_cmdline)' | \
76 MTOOLSRC=$(src)/mtools.conf mcopy - a:syslinux.cfg 80 MTOOLSRC=$(src)/mtools.conf mcopy - a:syslinux.cfg
81 if [ -f '$(FDINITRD)' ] ; then \
82 MTOOLSRC=$(obj)/mtools.conf mcopy '$(FDINITRD)' a:initrd.img ; \
83 fi
77 MTOOLSRC=$(obj)/mtools.conf mcopy $(BOOTIMAGE) a:linux ; sync 84 MTOOLSRC=$(obj)/mtools.conf mcopy $(BOOTIMAGE) a:linux ; sync
78 85
79# These require being root or having syslinux 2.02 or higher installed 86# These require being root or having syslinux 2.02 or higher installed
@@ -81,18 +88,39 @@ fdimage fdimage144: $(BOOTIMAGE) $(obj)/mtools.conf
81 dd if=/dev/zero of=$(obj)/fdimage bs=1024 count=1440 88 dd if=/dev/zero of=$(obj)/fdimage bs=1024 count=1440
82 MTOOLSRC=$(obj)/mtools.conf mformat v: ; sync 89 MTOOLSRC=$(obj)/mtools.conf mformat v: ; sync
83 syslinux $(obj)/fdimage ; sync 90 syslinux $(obj)/fdimage ; sync
84 echo 'default linux $(FDARGS)' | \ 91 echo '$(image_cmdline)' | \
85 MTOOLSRC=$(obj)/mtools.conf mcopy - v:syslinux.cfg 92 MTOOLSRC=$(obj)/mtools.conf mcopy - v:syslinux.cfg
93 if [ -f '$(FDINITRD)' ] ; then \
94 MTOOLSRC=$(obj)/mtools.conf mcopy '$(FDINITRD)' v:initrd.img ; \
95 fi
86 MTOOLSRC=$(obj)/mtools.conf mcopy $(BOOTIMAGE) v:linux ; sync 96 MTOOLSRC=$(obj)/mtools.conf mcopy $(BOOTIMAGE) v:linux ; sync
87 97
88fdimage288: $(BOOTIMAGE) $(obj)/mtools.conf 98fdimage288: $(BOOTIMAGE) $(obj)/mtools.conf
89 dd if=/dev/zero of=$(obj)/fdimage bs=1024 count=2880 99 dd if=/dev/zero of=$(obj)/fdimage bs=1024 count=2880
90 MTOOLSRC=$(obj)/mtools.conf mformat w: ; sync 100 MTOOLSRC=$(obj)/mtools.conf mformat w: ; sync
91 syslinux $(obj)/fdimage ; sync 101 syslinux $(obj)/fdimage ; sync
92 echo 'default linux $(FDARGS)' | \ 102 echo '$(image_cmdline)' | \
93 MTOOLSRC=$(obj)/mtools.conf mcopy - w:syslinux.cfg 103 MTOOLSRC=$(obj)/mtools.conf mcopy - w:syslinux.cfg
104 if [ -f '$(FDINITRD)' ] ; then \
105 MTOOLSRC=$(obj)/mtools.conf mcopy '$(FDINITRD)' w:initrd.img ; \
106 fi
94 MTOOLSRC=$(obj)/mtools.conf mcopy $(BOOTIMAGE) w:linux ; sync 107 MTOOLSRC=$(obj)/mtools.conf mcopy $(BOOTIMAGE) w:linux ; sync
95 108
109isoimage: $(BOOTIMAGE)
110 -rm -rf $(obj)/isoimage
111 mkdir $(obj)/isoimage
112 cp `echo /usr/lib*/syslinux/isolinux.bin | awk '{ print $1; }'` \
113 $(obj)/isoimage
114 cp $(BOOTIMAGE) $(obj)/isoimage/linux
115 echo '$(image_cmdline)' > $(obj)/isoimage/isolinux.cfg
116 if [ -f '$(FDINITRD)' ] ; then \
117 cp '$(FDINITRD)' $(obj)/isoimage/initrd.img ; \
118 fi
119 mkisofs -J -r -o $(obj)/image.iso -b isolinux.bin -c boot.cat \
120 -no-emul-boot -boot-load-size 4 -boot-info-table \
121 $(obj)/isoimage
122 rm -rf $(obj)/isoimage
123
96zlilo: $(BOOTIMAGE) 124zlilo: $(BOOTIMAGE)
97 if [ -f $(INSTALL_PATH)/vmlinuz ]; then mv $(INSTALL_PATH)/vmlinuz $(INSTALL_PATH)/vmlinuz.old; fi 125 if [ -f $(INSTALL_PATH)/vmlinuz ]; then mv $(INSTALL_PATH)/vmlinuz $(INSTALL_PATH)/vmlinuz.old; fi
98 if [ -f $(INSTALL_PATH)/System.map ]; then mv $(INSTALL_PATH)/System.map $(INSTALL_PATH)/System.old; fi 126 if [ -f $(INSTALL_PATH)/System.map ]; then mv $(INSTALL_PATH)/System.map $(INSTALL_PATH)/System.old; fi
diff --git a/arch/i386/boot/edd.S b/arch/i386/boot/edd.S
index d8d69f2b911d..4b84ea216f2b 100644
--- a/arch/i386/boot/edd.S
+++ b/arch/i386/boot/edd.S
@@ -76,6 +76,8 @@ edd_mbr_sig_read:
76 popw %es 76 popw %es
77 popw %bx 77 popw %bx
78 jc edd_mbr_sig_done # on failure, we're done. 78 jc edd_mbr_sig_done # on failure, we're done.
79 cmpb $0, %ah # some BIOSes do not set CF
80 jne edd_mbr_sig_done # on failure, we're done.
79 movl (EDDBUF+EDD_MBR_SIG_OFFSET), %eax # read sig out of the MBR 81 movl (EDDBUF+EDD_MBR_SIG_OFFSET), %eax # read sig out of the MBR
80 movl %eax, (%bx) # store success 82 movl %eax, (%bx) # store success
81 incb (EDD_MBR_SIG_NR_BUF) # note that we stored something 83 incb (EDD_MBR_SIG_NR_BUF) # note that we stored something
diff --git a/arch/i386/boot/video.S b/arch/i386/boot/video.S
index 2ac40c8244c4..0000a2674537 100644
--- a/arch/i386/boot/video.S
+++ b/arch/i386/boot/video.S
@@ -1924,6 +1924,7 @@ skip10: movb %ah, %al
1924 ret 1924 ret
1925 1925
1926store_edid: 1926store_edid:
1927#ifdef CONFIG_FB_FIRMWARE_EDID
1927 pushw %es # just save all registers 1928 pushw %es # just save all registers
1928 pushw %ax 1929 pushw %ax
1929 pushw %bx 1930 pushw %bx
@@ -1954,6 +1955,7 @@ store_edid:
1954 popw %bx 1955 popw %bx
1955 popw %ax 1956 popw %ax
1956 popw %es 1957 popw %es
1958#endif
1957 ret 1959 ret
1958 1960
1959# VIDEO_SELECT-only variables 1961# VIDEO_SELECT-only variables
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/acpi/boot.c b/arch/i386/kernel/acpi/boot.c
index f1a21945963d..033066176b3e 100644
--- a/arch/i386/kernel/acpi/boot.c
+++ b/arch/i386/kernel/acpi/boot.c
@@ -668,10 +668,10 @@ unsigned long __init acpi_find_rsdp(void)
668 unsigned long rsdp_phys = 0; 668 unsigned long rsdp_phys = 0;
669 669
670 if (efi_enabled) { 670 if (efi_enabled) {
671 if (efi.acpi20) 671 if (efi.acpi20 != EFI_INVALID_TABLE_ADDR)
672 return __pa(efi.acpi20); 672 return efi.acpi20;
673 else if (efi.acpi) 673 else if (efi.acpi != EFI_INVALID_TABLE_ADDR)
674 return __pa(efi.acpi); 674 return efi.acpi;
675 } 675 }
676 /* 676 /*
677 * Scan memory looking for the RSDP signature. First search EBDA (low 677 * Scan memory looking for the RSDP signature. First search EBDA (low
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 f39e09ef64ec..6273bf74c203 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"
@@ -414,6 +415,7 @@ void __init init_bsp_APIC(void)
414void __devinit setup_local_APIC(void) 415void __devinit setup_local_APIC(void)
415{ 416{
416 unsigned long oldvalue, value, ver, maxlvt; 417 unsigned long oldvalue, value, ver, maxlvt;
418 int i, j;
417 419
418 /* Pound the ESR really hard over the head with a big hammer - mbligh */ 420 /* Pound the ESR really hard over the head with a big hammer - mbligh */
419 if (esr_disable) { 421 if (esr_disable) {
@@ -451,6 +453,25 @@ void __devinit setup_local_APIC(void)
451 apic_write_around(APIC_TASKPRI, value); 453 apic_write_around(APIC_TASKPRI, value);
452 454
453 /* 455 /*
456 * After a crash, we no longer service the interrupts and a pending
457 * interrupt from previous kernel might still have ISR bit set.
458 *
459 * Most probably by now CPU has serviced that pending interrupt and
460 * it might not have done the ack_APIC_irq() because it thought,
461 * interrupt came from i8259 as ExtInt. LAPIC did not get EOI so it
462 * does not clear the ISR bit and cpu thinks it has already serivced
463 * the interrupt. Hence a vector might get locked. It was noticed
464 * for timer irq (vector 0x31). Issue an extra EOI to clear ISR.
465 */
466 for (i = APIC_ISR_NR - 1; i >= 0; i--) {
467 value = apic_read(APIC_ISR + i*0x10);
468 for (j = 31; j >= 0; j--) {
469 if (value & (1<<j))
470 ack_APIC_irq();
471 }
472 }
473
474 /*
454 * Now that we are all set up, enable the APIC 475 * Now that we are all set up, enable the APIC
455 */ 476 */
456 value = apic_read(APIC_SPIV); 477 value = apic_read(APIC_SPIV);
@@ -570,16 +591,18 @@ void __devinit setup_local_APIC(void)
570 */ 591 */
571void lapic_shutdown(void) 592void lapic_shutdown(void)
572{ 593{
594 unsigned long flags;
595
573 if (!cpu_has_apic) 596 if (!cpu_has_apic)
574 return; 597 return;
575 598
576 local_irq_disable(); 599 local_irq_save(flags);
577 clear_local_APIC(); 600 clear_local_APIC();
578 601
579 if (enabled_via_apicbase) 602 if (enabled_via_apicbase)
580 disable_local_APIC(); 603 disable_local_APIC();
581 604
582 local_irq_enable(); 605 local_irq_restore(flags);
583} 606}
584 607
585#ifdef CONFIG_PM 608#ifdef CONFIG_PM
@@ -729,7 +752,7 @@ static int __init apic_set_verbosity(char *str)
729 printk(KERN_WARNING "APIC Verbosity level %s not recognised" 752 printk(KERN_WARNING "APIC Verbosity level %s not recognised"
730 " use apic=verbose or apic=debug\n", str); 753 " use apic=verbose or apic=debug\n", str);
731 754
732 return 0; 755 return 1;
733} 756}
734 757
735__setup("apic=", apic_set_verbosity); 758__setup("apic=", apic_set_verbosity);
diff --git a/arch/i386/kernel/apm.c b/arch/i386/kernel/apm.c
index 05312a8abb8b..da30a374dd4e 100644
--- a/arch/i386/kernel/apm.c
+++ b/arch/i386/kernel/apm.c
@@ -824,8 +824,6 @@ static void apm_do_busy(void)
824 824
825static void (*original_pm_idle)(void); 825static void (*original_pm_idle)(void);
826 826
827extern void default_idle(void);
828
829/** 827/**
830 * apm_cpu_idle - cpu idling for APM capable Linux 828 * apm_cpu_idle - cpu idling for APM capable Linux
831 * 829 *
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..a06a49075f10 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,10 +263,10 @@ 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 ebx;
261 270
262 if (have_cpuid_p()) { 271 if (have_cpuid_p()) {
263 /* Get vendor name */ 272 /* Get vendor name */
@@ -273,7 +282,7 @@ void __devinit generic_identify(struct cpuinfo_x86 * c)
273 /* Intel-defined flags: level 0x00000001 */ 282 /* Intel-defined flags: level 0x00000001 */
274 if ( c->cpuid_level >= 0x00000001 ) { 283 if ( c->cpuid_level >= 0x00000001 ) {
275 u32 capability, excap; 284 u32 capability, excap;
276 cpuid(0x00000001, &tfms, &junk, &excap, &capability); 285 cpuid(0x00000001, &tfms, &ebx, &excap, &capability);
277 c->x86_capability[0] = capability; 286 c->x86_capability[0] = capability;
278 c->x86_capability[4] = excap; 287 c->x86_capability[4] = excap;
279 c->x86 = (tfms >> 8) & 15; 288 c->x86 = (tfms >> 8) & 15;
@@ -283,6 +292,11 @@ void __devinit generic_identify(struct cpuinfo_x86 * c)
283 if (c->x86 >= 0x6) 292 if (c->x86 >= 0x6)
284 c->x86_model += ((tfms >> 16) & 0xF) << 4; 293 c->x86_model += ((tfms >> 16) & 0xF) << 4;
285 c->x86_mask = tfms & 15; 294 c->x86_mask = tfms & 15;
295#ifdef CONFIG_SMP
296 c->apicid = phys_pkg_id((ebx >> 24) & 0xFF, 0);
297#else
298 c->apicid = (ebx >> 24) & 0xFF;
299#endif
286 } else { 300 } else {
287 /* Have CPUID level 0 only - unheard of */ 301 /* Have CPUID level 0 only - unheard of */
288 c->x86 = 4; 302 c->x86 = 4;
@@ -307,7 +321,7 @@ void __devinit generic_identify(struct cpuinfo_x86 * c)
307#endif 321#endif
308} 322}
309 323
310static void __devinit squash_the_stupid_serial_number(struct cpuinfo_x86 *c) 324static void __cpuinit squash_the_stupid_serial_number(struct cpuinfo_x86 *c)
311{ 325{
312 if (cpu_has(c, X86_FEATURE_PN) && disable_x86_serial_nr ) { 326 if (cpu_has(c, X86_FEATURE_PN) && disable_x86_serial_nr ) {
313 /* Disable processor serial number */ 327 /* Disable processor serial number */
@@ -335,7 +349,7 @@ __setup("serialnumber", x86_serial_nr_setup);
335/* 349/*
336 * This does the hard work of actually picking apart the CPU stuff... 350 * This does the hard work of actually picking apart the CPU stuff...
337 */ 351 */
338void __devinit identify_cpu(struct cpuinfo_x86 *c) 352void __cpuinit identify_cpu(struct cpuinfo_x86 *c)
339{ 353{
340 int i; 354 int i;
341 355
@@ -405,6 +419,10 @@ void __devinit identify_cpu(struct cpuinfo_x86 *c)
405 clear_bit(X86_FEATURE_XMM, c->x86_capability); 419 clear_bit(X86_FEATURE_XMM, c->x86_capability);
406 } 420 }
407 421
422 /* SEP disabled? */
423 if (disable_x86_sep)
424 clear_bit(X86_FEATURE_SEP, c->x86_capability);
425
408 if (disable_pse) 426 if (disable_pse)
409 clear_bit(X86_FEATURE_PSE, c->x86_capability); 427 clear_bit(X86_FEATURE_PSE, c->x86_capability);
410 428
@@ -417,7 +435,7 @@ void __devinit identify_cpu(struct cpuinfo_x86 *c)
417 else 435 else
418 /* Last resort... */ 436 /* Last resort... */
419 sprintf(c->x86_model_id, "%02x/%02x", 437 sprintf(c->x86_model_id, "%02x/%02x",
420 c->x86_vendor, c->x86_model); 438 c->x86, c->x86_model);
421 } 439 }
422 440
423 /* Now the feature flags better reflect actual CPU features! */ 441 /* Now the feature flags better reflect actual CPU features! */
@@ -453,7 +471,7 @@ void __devinit identify_cpu(struct cpuinfo_x86 *c)
453} 471}
454 472
455#ifdef CONFIG_X86_HT 473#ifdef CONFIG_X86_HT
456void __devinit detect_ht(struct cpuinfo_x86 *c) 474void __cpuinit detect_ht(struct cpuinfo_x86 *c)
457{ 475{
458 u32 eax, ebx, ecx, edx; 476 u32 eax, ebx, ecx, edx;
459 int index_msb, core_bits; 477 int index_msb, core_bits;
@@ -461,7 +479,6 @@ void __devinit detect_ht(struct cpuinfo_x86 *c)
461 479
462 cpuid(1, &eax, &ebx, &ecx, &edx); 480 cpuid(1, &eax, &ebx, &ecx, &edx);
463 481
464 c->apicid = phys_pkg_id((ebx >> 24) & 0xFF, 0);
465 482
466 if (!cpu_has(c, X86_FEATURE_HT) || cpu_has(c, X86_FEATURE_CMP_LEGACY)) 483 if (!cpu_has(c, X86_FEATURE_HT) || cpu_has(c, X86_FEATURE_CMP_LEGACY))
467 return; 484 return;
@@ -500,7 +517,7 @@ void __devinit detect_ht(struct cpuinfo_x86 *c)
500} 517}
501#endif 518#endif
502 519
503void __devinit print_cpu_info(struct cpuinfo_x86 *c) 520void __cpuinit print_cpu_info(struct cpuinfo_x86 *c)
504{ 521{
505 char *vendor = NULL; 522 char *vendor = NULL;
506 523
@@ -523,7 +540,7 @@ void __devinit print_cpu_info(struct cpuinfo_x86 *c)
523 printk("\n"); 540 printk("\n");
524} 541}
525 542
526cpumask_t cpu_initialized __devinitdata = CPU_MASK_NONE; 543cpumask_t cpu_initialized __cpuinitdata = CPU_MASK_NONE;
527 544
528/* This is hacky. :) 545/* This is hacky. :)
529 * We're emulating future behavior. 546 * We're emulating future behavior.
@@ -570,7 +587,7 @@ void __init early_cpu_init(void)
570 * and IDT. We reload them nevertheless, this function acts as a 587 * and IDT. We reload them nevertheless, this function acts as a
571 * 'CPU state barrier', nothing should get across. 588 * 'CPU state barrier', nothing should get across.
572 */ 589 */
573void __devinit cpu_init(void) 590void __cpuinit cpu_init(void)
574{ 591{
575 int cpu = smp_processor_id(); 592 int cpu = smp_processor_id();
576 struct tss_struct * t = &per_cpu(init_tss, cpu); 593 struct tss_struct * t = &per_cpu(init_tss, cpu);
@@ -670,7 +687,7 @@ void __devinit cpu_init(void)
670} 687}
671 688
672#ifdef CONFIG_HOTPLUG_CPU 689#ifdef CONFIG_HOTPLUG_CPU
673void __devinit cpu_uninit(void) 690void __cpuinit cpu_uninit(void)
674{ 691{
675 int cpu = raw_smp_processor_id(); 692 int cpu = raw_smp_processor_id();
676 cpu_clear(cpu, cpu_initialized); 693 cpu_clear(cpu, cpu_initialized);
diff --git a/arch/i386/kernel/cpu/cpufreq/Kconfig b/arch/i386/kernel/cpu/cpufreq/Kconfig
index 26892d2099b0..e44a4c6a4fe5 100644
--- a/arch/i386/kernel/cpu/cpufreq/Kconfig
+++ b/arch/i386/kernel/cpu/cpufreq/Kconfig
@@ -96,7 +96,6 @@ config X86_POWERNOW_K8_ACPI
96 96
97config X86_GX_SUSPMOD 97config X86_GX_SUSPMOD
98 tristate "Cyrix MediaGX/NatSemi Geode Suspend Modulation" 98 tristate "Cyrix MediaGX/NatSemi Geode Suspend Modulation"
99 depends on PCI
100 help 99 help
101 This add the CPUFreq driver for NatSemi Geode processors which 100 This add the CPUFreq driver for NatSemi Geode processors which
102 support suspend modulation. 101 support suspend modulation.
@@ -115,9 +114,9 @@ config X86_SPEEDSTEP_CENTRINO
115 you also need to say Y to "Use ACPI tables to decode..." below 114 you also need to say Y to "Use ACPI tables to decode..." below
116 [which might imply enabling ACPI] if you want to use this driver 115 [which might imply enabling ACPI] if you want to use this driver
117 on non-Banias CPUs. 116 on non-Banias CPUs.
118 117
119 For details, take a look at <file:Documentation/cpu-freq/>. 118 For details, take a look at <file:Documentation/cpu-freq/>.
120 119
121 If in doubt, say N. 120 If in doubt, say N.
122 121
123config X86_SPEEDSTEP_CENTRINO_ACPI 122config X86_SPEEDSTEP_CENTRINO_ACPI
@@ -148,7 +147,7 @@ config X86_SPEEDSTEP_ICH
148 help 147 help
149 This adds the CPUFreq driver for certain mobile Intel Pentium III 148 This adds the CPUFreq driver for certain mobile Intel Pentium III
150 (Coppermine), all mobile Intel Pentium III-M (Tualatin) and all 149 (Coppermine), all mobile Intel Pentium III-M (Tualatin) and all
151 mobile Intel Pentium 4 P4-M on systems which have an Intel ICH2, 150 mobile Intel Pentium 4 P4-M on systems which have an Intel ICH2,
152 ICH3 or ICH4 southbridge. 151 ICH3 or ICH4 southbridge.
153 152
154 For details, take a look at <file:Documentation/cpu-freq/>. 153 For details, take a look at <file:Documentation/cpu-freq/>.
@@ -161,7 +160,7 @@ config X86_SPEEDSTEP_SMI
161 depends on EXPERIMENTAL 160 depends on EXPERIMENTAL
162 help 161 help
163 This adds the CPUFreq driver for certain mobile Intel Pentium III 162 This adds the CPUFreq driver for certain mobile Intel Pentium III
164 (Coppermine), all mobile Intel Pentium III-M (Tualatin) 163 (Coppermine), all mobile Intel Pentium III-M (Tualatin)
165 on systems which have an Intel 440BX/ZX/MX southbridge. 164 on systems which have an Intel 440BX/ZX/MX southbridge.
166 165
167 For details, take a look at <file:Documentation/cpu-freq/>. 166 For details, take a look at <file:Documentation/cpu-freq/>.
@@ -203,9 +202,10 @@ config X86_LONGRUN
203config X86_LONGHAUL 202config X86_LONGHAUL
204 tristate "VIA Cyrix III Longhaul" 203 tristate "VIA Cyrix III Longhaul"
205 select CPU_FREQ_TABLE 204 select CPU_FREQ_TABLE
205 depends on BROKEN
206 help 206 help
207 This adds the CPUFreq driver for VIA Samuel/CyrixIII, 207 This adds the CPUFreq driver for VIA Samuel/CyrixIII,
208 VIA Cyrix Samuel/C3, VIA Cyrix Ezra and VIA Cyrix Ezra-T 208 VIA Cyrix Samuel/C3, VIA Cyrix Ezra and VIA Cyrix Ezra-T
209 processors. 209 processors.
210 210
211 For details, take a look at <file:Documentation/cpu-freq/>. 211 For details, take a look at <file:Documentation/cpu-freq/>.
@@ -215,11 +215,11 @@ config X86_LONGHAUL
215comment "shared options" 215comment "shared options"
216 216
217config X86_ACPI_CPUFREQ_PROC_INTF 217config X86_ACPI_CPUFREQ_PROC_INTF
218 bool "/proc/acpi/processor/../performance interface (deprecated)" 218 bool "/proc/acpi/processor/../performance interface (deprecated)"
219 depends on PROC_FS 219 depends on PROC_FS
220 depends on X86_ACPI_CPUFREQ || X86_SPEEDSTEP_CENTRINO_ACPI || X86_POWERNOW_K7_ACPI || X86_POWERNOW_K8_ACPI 220 depends on X86_ACPI_CPUFREQ || X86_SPEEDSTEP_CENTRINO_ACPI || X86_POWERNOW_K7_ACPI || X86_POWERNOW_K8_ACPI
221 help 221 help
222 This enables the deprecated /proc/acpi/processor/../performance 222 This enables the deprecated /proc/acpi/processor/../performance
223 interface. While it is helpful for debugging, the generic, 223 interface. While it is helpful for debugging, the generic,
224 cross-architecture cpufreq interfaces should be used. 224 cross-architecture cpufreq interfaces should be used.
225 225
@@ -233,9 +233,9 @@ config X86_SPEEDSTEP_RELAXED_CAP_CHECK
233 bool "Relaxed speedstep capability checks" 233 bool "Relaxed speedstep capability checks"
234 depends on (X86_SPEEDSTEP_SMI || X86_SPEEDSTEP_ICH) 234 depends on (X86_SPEEDSTEP_SMI || X86_SPEEDSTEP_ICH)
235 help 235 help
236 Don't perform all checks for a speedstep capable system which would 236 Don't perform all checks for a speedstep capable system which would
237 normally be done. Some ancient or strange systems, though speedstep 237 normally be done. Some ancient or strange systems, though speedstep
238 capable, don't always indicate that they are speedstep capable. This 238 capable, don't always indicate that they are speedstep capable. This
239 option lets the probing code bypass some of those checks if the 239 option lets the probing code bypass some of those checks if the
240 parameter "relaxed_check=1" is passed to the module. 240 parameter "relaxed_check=1" is passed to the module.
241 241
diff --git a/arch/i386/kernel/cpu/cpufreq/cpufreq-nforce2.c b/arch/i386/kernel/cpu/cpufreq/cpufreq-nforce2.c
index 2b62dee35c6c..f275e0d4aee5 100644
--- a/arch/i386/kernel/cpu/cpufreq/cpufreq-nforce2.c
+++ b/arch/i386/kernel/cpu/cpufreq/cpufreq-nforce2.c
@@ -39,7 +39,7 @@ static struct pci_dev *nforce2_chipset_dev;
39static int fid = 0; 39static int fid = 0;
40 40
41/* min_fsb, max_fsb: 41/* min_fsb, max_fsb:
42 * minimum and maximum FSB (= FSB at boot time) 42 * minimum and maximum FSB (= FSB at boot time)
43 */ 43 */
44static int min_fsb = 0; 44static int min_fsb = 0;
45static int max_fsb = 0; 45static int max_fsb = 0;
@@ -57,10 +57,10 @@ MODULE_PARM_DESC(min_fsb,
57 57
58#define dprintk(msg...) cpufreq_debug_printk(CPUFREQ_DEBUG_DRIVER, "cpufreq-nforce2", msg) 58#define dprintk(msg...) cpufreq_debug_printk(CPUFREQ_DEBUG_DRIVER, "cpufreq-nforce2", msg)
59 59
60/* 60/**
61 * nforce2_calc_fsb - calculate FSB 61 * nforce2_calc_fsb - calculate FSB
62 * @pll: PLL value 62 * @pll: PLL value
63 * 63 *
64 * Calculates FSB from PLL value 64 * Calculates FSB from PLL value
65 */ 65 */
66static int nforce2_calc_fsb(int pll) 66static int nforce2_calc_fsb(int pll)
@@ -76,10 +76,10 @@ static int nforce2_calc_fsb(int pll)
76 return 0; 76 return 0;
77} 77}
78 78
79/* 79/**
80 * nforce2_calc_pll - calculate PLL value 80 * nforce2_calc_pll - calculate PLL value
81 * @fsb: FSB 81 * @fsb: FSB
82 * 82 *
83 * Calculate PLL value for given FSB 83 * Calculate PLL value for given FSB
84 */ 84 */
85static int nforce2_calc_pll(unsigned int fsb) 85static int nforce2_calc_pll(unsigned int fsb)
@@ -106,10 +106,10 @@ static int nforce2_calc_pll(unsigned int fsb)
106 return NFORCE2_PLL(mul, div); 106 return NFORCE2_PLL(mul, div);
107} 107}
108 108
109/* 109/**
110 * nforce2_write_pll - write PLL value to chipset 110 * nforce2_write_pll - write PLL value to chipset
111 * @pll: PLL value 111 * @pll: PLL value
112 * 112 *
113 * Writes new FSB PLL value to chipset 113 * Writes new FSB PLL value to chipset
114 */ 114 */
115static void nforce2_write_pll(int pll) 115static void nforce2_write_pll(int pll)
@@ -121,15 +121,13 @@ static void nforce2_write_pll(int pll)
121 pci_write_config_dword(nforce2_chipset_dev, NFORCE2_PLLADR, temp); 121 pci_write_config_dword(nforce2_chipset_dev, NFORCE2_PLLADR, temp);
122 122
123 /* Now write the value in all 64 registers */ 123 /* Now write the value in all 64 registers */
124 for (temp = 0; temp <= 0x3f; temp++) { 124 for (temp = 0; temp <= 0x3f; temp++)
125 pci_write_config_dword(nforce2_chipset_dev, 125 pci_write_config_dword(nforce2_chipset_dev, NFORCE2_PLLREG, pll);
126 NFORCE2_PLLREG, pll);
127 }
128 126
129 return; 127 return;
130} 128}
131 129
132/* 130/**
133 * nforce2_fsb_read - Read FSB 131 * nforce2_fsb_read - Read FSB
134 * 132 *
135 * Read FSB from chipset 133 * Read FSB from chipset
@@ -140,39 +138,32 @@ static unsigned int nforce2_fsb_read(int bootfsb)
140 struct pci_dev *nforce2_sub5; 138 struct pci_dev *nforce2_sub5;
141 u32 fsb, temp = 0; 139 u32 fsb, temp = 0;
142 140
143
144 /* Get chipset boot FSB from subdevice 5 (FSB at boot-time) */ 141 /* Get chipset boot FSB from subdevice 5 (FSB at boot-time) */
145 nforce2_sub5 = pci_get_subsys(PCI_VENDOR_ID_NVIDIA, 142 nforce2_sub5 = pci_get_subsys(PCI_VENDOR_ID_NVIDIA,
146 0x01EF, 143 0x01EF,PCI_ANY_ID,PCI_ANY_ID,NULL);
147 PCI_ANY_ID,
148 PCI_ANY_ID,
149 NULL);
150
151 if (!nforce2_sub5) 144 if (!nforce2_sub5)
152 return 0; 145 return 0;
153 146
154 pci_read_config_dword(nforce2_sub5, NFORCE2_BOOTFSB, &fsb); 147 pci_read_config_dword(nforce2_sub5, NFORCE2_BOOTFSB, &fsb);
155 fsb /= 1000000; 148 fsb /= 1000000;
156 149
157 /* Check if PLL register is already set */ 150 /* Check if PLL register is already set */
158 pci_read_config_byte(nforce2_chipset_dev, 151 pci_read_config_byte(nforce2_chipset_dev,NFORCE2_PLLENABLE, (u8 *)&temp);
159 NFORCE2_PLLENABLE, (u8 *)&temp); 152
160
161 if(bootfsb || !temp) 153 if(bootfsb || !temp)
162 return fsb; 154 return fsb;
163 155
164 /* Use PLL register FSB value */ 156 /* Use PLL register FSB value */
165 pci_read_config_dword(nforce2_chipset_dev, 157 pci_read_config_dword(nforce2_chipset_dev,NFORCE2_PLLREG, &temp);
166 NFORCE2_PLLREG, &temp);
167 fsb = nforce2_calc_fsb(temp); 158 fsb = nforce2_calc_fsb(temp);
168 159
169 return fsb; 160 return fsb;
170} 161}
171 162
172/* 163/**
173 * nforce2_set_fsb - set new FSB 164 * nforce2_set_fsb - set new FSB
174 * @fsb: New FSB 165 * @fsb: New FSB
175 * 166 *
176 * Sets new FSB 167 * Sets new FSB
177 */ 168 */
178static int nforce2_set_fsb(unsigned int fsb) 169static int nforce2_set_fsb(unsigned int fsb)
@@ -186,7 +177,7 @@ static int nforce2_set_fsb(unsigned int fsb)
186 printk(KERN_ERR "cpufreq: FSB %d is out of range!\n", fsb); 177 printk(KERN_ERR "cpufreq: FSB %d is out of range!\n", fsb);
187 return -EINVAL; 178 return -EINVAL;
188 } 179 }
189 180
190 tfsb = nforce2_fsb_read(0); 181 tfsb = nforce2_fsb_read(0);
191 if (!tfsb) { 182 if (!tfsb) {
192 printk(KERN_ERR "cpufreq: Error while reading the FSB\n"); 183 printk(KERN_ERR "cpufreq: Error while reading the FSB\n");
@@ -194,8 +185,7 @@ static int nforce2_set_fsb(unsigned int fsb)
194 } 185 }
195 186
196 /* First write? Then set actual value */ 187 /* First write? Then set actual value */
197 pci_read_config_byte(nforce2_chipset_dev, 188 pci_read_config_byte(nforce2_chipset_dev,NFORCE2_PLLENABLE, (u8 *)&temp);
198 NFORCE2_PLLENABLE, (u8 *)&temp);
199 if (!temp) { 189 if (!temp) {
200 pll = nforce2_calc_pll(tfsb); 190 pll = nforce2_calc_pll(tfsb);
201 191
@@ -223,7 +213,7 @@ static int nforce2_set_fsb(unsigned int fsb)
223 /* Calculate the PLL reg. value */ 213 /* Calculate the PLL reg. value */
224 if ((pll = nforce2_calc_pll(tfsb)) == -1) 214 if ((pll = nforce2_calc_pll(tfsb)) == -1)
225 return -EINVAL; 215 return -EINVAL;
226 216
227 nforce2_write_pll(pll); 217 nforce2_write_pll(pll);
228#ifdef NFORCE2_DELAY 218#ifdef NFORCE2_DELAY
229 mdelay(NFORCE2_DELAY); 219 mdelay(NFORCE2_DELAY);
@@ -239,7 +229,7 @@ static int nforce2_set_fsb(unsigned int fsb)
239/** 229/**
240 * nforce2_get - get the CPU frequency 230 * nforce2_get - get the CPU frequency
241 * @cpu: CPU number 231 * @cpu: CPU number
242 * 232 *
243 * Returns the CPU frequency 233 * Returns the CPU frequency
244 */ 234 */
245static unsigned int nforce2_get(unsigned int cpu) 235static unsigned int nforce2_get(unsigned int cpu)
@@ -354,10 +344,10 @@ static int nforce2_cpu_init(struct cpufreq_policy *policy)
354 344
355 printk(KERN_INFO "cpufreq: FSB currently at %i MHz, FID %d.%d\n", fsb, 345 printk(KERN_INFO "cpufreq: FSB currently at %i MHz, FID %d.%d\n", fsb,
356 fid / 10, fid % 10); 346 fid / 10, fid % 10);
357 347
358 /* Set maximum FSB to FSB at boot time */ 348 /* Set maximum FSB to FSB at boot time */
359 max_fsb = nforce2_fsb_read(1); 349 max_fsb = nforce2_fsb_read(1);
360 350
361 if(!max_fsb) 351 if(!max_fsb)
362 return -EIO; 352 return -EIO;
363 353
@@ -398,17 +388,15 @@ static struct cpufreq_driver nforce2_driver = {
398 * nforce2_detect_chipset - detect the Southbridge which contains FSB PLL logic 388 * nforce2_detect_chipset - detect the Southbridge which contains FSB PLL logic
399 * 389 *
400 * Detects nForce2 A2 and C1 stepping 390 * Detects nForce2 A2 and C1 stepping
401 * 391 *
402 */ 392 */
403static unsigned int nforce2_detect_chipset(void) 393static unsigned int nforce2_detect_chipset(void)
404{ 394{
405 u8 revision; 395 u8 revision;
406 396
407 nforce2_chipset_dev = pci_get_subsys(PCI_VENDOR_ID_NVIDIA, 397 nforce2_chipset_dev = pci_get_subsys(PCI_VENDOR_ID_NVIDIA,
408 PCI_DEVICE_ID_NVIDIA_NFORCE2, 398 PCI_DEVICE_ID_NVIDIA_NFORCE2,
409 PCI_ANY_ID, 399 PCI_ANY_ID, PCI_ANY_ID, NULL);
410 PCI_ANY_ID,
411 NULL);
412 400
413 if (nforce2_chipset_dev == NULL) 401 if (nforce2_chipset_dev == NULL)
414 return -ENODEV; 402 return -ENODEV;
diff --git a/arch/i386/kernel/cpu/cpufreq/elanfreq.c b/arch/i386/kernel/cpu/cpufreq/elanfreq.c
index 3f7caa4ae6d6..f317276afa7a 100644
--- a/arch/i386/kernel/cpu/cpufreq/elanfreq.c
+++ b/arch/i386/kernel/cpu/cpufreq/elanfreq.c
@@ -1,16 +1,16 @@
1/* 1/*
2 * elanfreq: cpufreq driver for the AMD ELAN family 2 * elanfreq: cpufreq driver for the AMD ELAN family
3 * 3 *
4 * (c) Copyright 2002 Robert Schwebel <r.schwebel@pengutronix.de> 4 * (c) Copyright 2002 Robert Schwebel <r.schwebel@pengutronix.de>
5 * 5 *
6 * Parts of this code are (c) Sven Geggus <sven@geggus.net> 6 * Parts of this code are (c) Sven Geggus <sven@geggus.net>
7 * 7 *
8 * All Rights Reserved. 8 * All Rights Reserved.
9 * 9 *
10 * This program is free software; you can redistribute it and/or 10 * This program is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU General Public License 11 * modify it under the terms of the GNU General Public License
12 * as published by the Free Software Foundation; either version 12 * as published by the Free Software Foundation; either version
13 * 2 of the License, or (at your option) any later version. 13 * 2 of the License, or (at your option) any later version.
14 * 14 *
15 * 2002-02-13: - initial revision for 2.4.18-pre9 by Robert Schwebel 15 * 2002-02-13: - initial revision for 2.4.18-pre9 by Robert Schwebel
16 * 16 *
@@ -28,7 +28,7 @@
28#include <asm/timex.h> 28#include <asm/timex.h>
29#include <asm/io.h> 29#include <asm/io.h>
30 30
31#define REG_CSCIR 0x22 /* Chip Setup and Control Index Register */ 31#define REG_CSCIR 0x22 /* Chip Setup and Control Index Register */
32#define REG_CSCDR 0x23 /* Chip Setup and Control Data Register */ 32#define REG_CSCDR 0x23 /* Chip Setup and Control Data Register */
33 33
34/* Module parameter */ 34/* Module parameter */
@@ -41,7 +41,7 @@ struct s_elan_multiplier {
41}; 41};
42 42
43/* 43/*
44 * It is important that the frequencies 44 * It is important that the frequencies
45 * are listed in ascending order here! 45 * are listed in ascending order here!
46 */ 46 */
47struct s_elan_multiplier elan_multiplier[] = { 47struct s_elan_multiplier elan_multiplier[] = {
@@ -72,78 +72,79 @@ static struct cpufreq_frequency_table elanfreq_table[] = {
72 * elanfreq_get_cpu_frequency: determine current cpu speed 72 * elanfreq_get_cpu_frequency: determine current cpu speed
73 * 73 *
74 * Finds out at which frequency the CPU of the Elan SOC runs 74 * Finds out at which frequency the CPU of the Elan SOC runs
75 * at the moment. Frequencies from 1 to 33 MHz are generated 75 * at the moment. Frequencies from 1 to 33 MHz are generated
76 * the normal way, 66 and 99 MHz are called "Hyperspeed Mode" 76 * the normal way, 66 and 99 MHz are called "Hyperspeed Mode"
77 * and have the rest of the chip running with 33 MHz. 77 * and have the rest of the chip running with 33 MHz.
78 */ 78 */
79 79
80static unsigned int elanfreq_get_cpu_frequency(unsigned int cpu) 80static unsigned int elanfreq_get_cpu_frequency(unsigned int cpu)
81{ 81{
82 u8 clockspeed_reg; /* Clock Speed Register */ 82 u8 clockspeed_reg; /* Clock Speed Register */
83 83
84 local_irq_disable(); 84 local_irq_disable();
85 outb_p(0x80,REG_CSCIR); 85 outb_p(0x80,REG_CSCIR);
86 clockspeed_reg = inb_p(REG_CSCDR); 86 clockspeed_reg = inb_p(REG_CSCDR);
87 local_irq_enable(); 87 local_irq_enable();
88 88
89 if ((clockspeed_reg & 0xE0) == 0xE0) { return 0; } 89 if ((clockspeed_reg & 0xE0) == 0xE0)
90 return 0;
90 91
91 /* Are we in CPU clock multiplied mode (66/99 MHz)? */ 92 /* Are we in CPU clock multiplied mode (66/99 MHz)? */
92 if ((clockspeed_reg & 0xE0) == 0xC0) { 93 if ((clockspeed_reg & 0xE0) == 0xC0) {
93 if ((clockspeed_reg & 0x01) == 0) { 94 if ((clockspeed_reg & 0x01) == 0)
94 return 66000; 95 return 66000;
95 } else { 96 else
96 return 99000; 97 return 99000;
97 } 98 }
98 }
99 99
100 /* 33 MHz is not 32 MHz... */ 100 /* 33 MHz is not 32 MHz... */
101 if ((clockspeed_reg & 0xE0)==0xA0) 101 if ((clockspeed_reg & 0xE0)==0xA0)
102 return 33000; 102 return 33000;
103 103
104 return ((1<<((clockspeed_reg & 0xE0) >> 5)) * 1000); 104 return ((1<<((clockspeed_reg & 0xE0) >> 5)) * 1000);
105} 105}
106 106
107 107
108/** 108/**
109 * elanfreq_set_cpu_frequency: Change the CPU core frequency 109 * elanfreq_set_cpu_frequency: Change the CPU core frequency
110 * @cpu: cpu number 110 * @cpu: cpu number
111 * @freq: frequency in kHz 111 * @freq: frequency in kHz
112 * 112 *
113 * This function takes a frequency value and changes the CPU frequency 113 * This function takes a frequency value and changes the CPU frequency
114 * according to this. Note that the frequency has to be checked by 114 * according to this. Note that the frequency has to be checked by
115 * elanfreq_validatespeed() for correctness! 115 * elanfreq_validatespeed() for correctness!
116 * 116 *
117 * There is no return value. 117 * There is no return value.
118 */ 118 */
119 119
120static void elanfreq_set_cpu_state (unsigned int state) { 120static void elanfreq_set_cpu_state (unsigned int state)
121 121{
122 struct cpufreq_freqs freqs; 122 struct cpufreq_freqs freqs;
123 123
124 freqs.old = elanfreq_get_cpu_frequency(0); 124 freqs.old = elanfreq_get_cpu_frequency(0);
125 freqs.new = elan_multiplier[state].clock; 125 freqs.new = elan_multiplier[state].clock;
126 freqs.cpu = 0; /* elanfreq.c is UP only driver */ 126 freqs.cpu = 0; /* elanfreq.c is UP only driver */
127 127
128 cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); 128 cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
129 129
130 printk(KERN_INFO "elanfreq: attempting to set frequency to %i kHz\n",elan_multiplier[state].clock); 130 printk(KERN_INFO "elanfreq: attempting to set frequency to %i kHz\n",
131 elan_multiplier[state].clock);
131 132
132 133
133 /* 134 /*
134 * Access to the Elan's internal registers is indexed via 135 * Access to the Elan's internal registers is indexed via
135 * 0x22: Chip Setup & Control Register Index Register (CSCI) 136 * 0x22: Chip Setup & Control Register Index Register (CSCI)
136 * 0x23: Chip Setup & Control Register Data Register (CSCD) 137 * 0x23: Chip Setup & Control Register Data Register (CSCD)
137 * 138 *
138 */ 139 */
139 140
140 /* 141 /*
141 * 0x40 is the Power Management Unit's Force Mode Register. 142 * 0x40 is the Power Management Unit's Force Mode Register.
142 * Bit 6 enables Hyperspeed Mode (66/100 MHz core frequency) 143 * Bit 6 enables Hyperspeed Mode (66/100 MHz core frequency)
143 */ 144 */
144 145
145 local_irq_disable(); 146 local_irq_disable();
146 outb_p(0x40,REG_CSCIR); /* Disable hyperspeed mode */ 147 outb_p(0x40,REG_CSCIR); /* Disable hyperspeed mode */
147 outb_p(0x00,REG_CSCDR); 148 outb_p(0x00,REG_CSCDR);
148 local_irq_enable(); /* wait till internal pipelines and */ 149 local_irq_enable(); /* wait till internal pipelines and */
149 udelay(1000); /* buffers have cleaned up */ 150 udelay(1000); /* buffers have cleaned up */
@@ -166,10 +167,10 @@ static void elanfreq_set_cpu_state (unsigned int state) {
166 167
167/** 168/**
168 * elanfreq_validatespeed: test if frequency range is valid 169 * elanfreq_validatespeed: test if frequency range is valid
169 * @policy: the policy to validate 170 * @policy: the policy to validate
170 * 171 *
171 * This function checks if a given frequency range in kHz is valid 172 * This function checks if a given frequency range in kHz is valid
172 * for the hardware supported by the driver. 173 * for the hardware supported by the driver.
173 */ 174 */
174 175
175static int elanfreq_verify (struct cpufreq_policy *policy) 176static int elanfreq_verify (struct cpufreq_policy *policy)
@@ -177,11 +178,11 @@ static int elanfreq_verify (struct cpufreq_policy *policy)
177 return cpufreq_frequency_table_verify(policy, &elanfreq_table[0]); 178 return cpufreq_frequency_table_verify(policy, &elanfreq_table[0]);
178} 179}
179 180
180static int elanfreq_target (struct cpufreq_policy *policy, 181static int elanfreq_target (struct cpufreq_policy *policy,
181 unsigned int target_freq, 182 unsigned int target_freq,
182 unsigned int relation) 183 unsigned int relation)
183{ 184{
184 unsigned int newstate = 0; 185 unsigned int newstate = 0;
185 186
186 if (cpufreq_frequency_table_target(policy, &elanfreq_table[0], target_freq, relation, &newstate)) 187 if (cpufreq_frequency_table_target(policy, &elanfreq_table[0], target_freq, relation, &newstate))
187 return -EINVAL; 188 return -EINVAL;
@@ -212,7 +213,7 @@ static int elanfreq_cpu_init(struct cpufreq_policy *policy)
212 max_freq = elanfreq_get_cpu_frequency(0); 213 max_freq = elanfreq_get_cpu_frequency(0);
213 214
214 /* table init */ 215 /* table init */
215 for (i=0; (elanfreq_table[i].frequency != CPUFREQ_TABLE_END); i++) { 216 for (i=0; (elanfreq_table[i].frequency != CPUFREQ_TABLE_END); i++) {
216 if (elanfreq_table[i].frequency > max_freq) 217 if (elanfreq_table[i].frequency > max_freq)
217 elanfreq_table[i].frequency = CPUFREQ_ENTRY_INVALID; 218 elanfreq_table[i].frequency = CPUFREQ_ENTRY_INVALID;
218 } 219 }
@@ -226,8 +227,7 @@ static int elanfreq_cpu_init(struct cpufreq_policy *policy)
226 if (result) 227 if (result)
227 return (result); 228 return (result);
228 229
229 cpufreq_frequency_table_get_attr(elanfreq_table, policy->cpu); 230 cpufreq_frequency_table_get_attr(elanfreq_table, policy->cpu);
230
231 return 0; 231 return 0;
232} 232}
233 233
@@ -268,9 +268,9 @@ static struct freq_attr* elanfreq_attr[] = {
268 268
269 269
270static struct cpufreq_driver elanfreq_driver = { 270static struct cpufreq_driver elanfreq_driver = {
271 .get = elanfreq_get_cpu_frequency, 271 .get = elanfreq_get_cpu_frequency,
272 .verify = elanfreq_verify, 272 .verify = elanfreq_verify,
273 .target = elanfreq_target, 273 .target = elanfreq_target,
274 .init = elanfreq_cpu_init, 274 .init = elanfreq_cpu_init,
275 .exit = elanfreq_cpu_exit, 275 .exit = elanfreq_cpu_exit,
276 .name = "elanfreq", 276 .name = "elanfreq",
@@ -279,23 +279,21 @@ static struct cpufreq_driver elanfreq_driver = {
279}; 279};
280 280
281 281
282static int __init elanfreq_init(void) 282static int __init elanfreq_init(void)
283{ 283{
284 struct cpuinfo_x86 *c = cpu_data; 284 struct cpuinfo_x86 *c = cpu_data;
285 285
286 /* Test if we have the right hardware */ 286 /* Test if we have the right hardware */
287 if ((c->x86_vendor != X86_VENDOR_AMD) || 287 if ((c->x86_vendor != X86_VENDOR_AMD) ||
288 (c->x86 != 4) || (c->x86_model!=10)) 288 (c->x86 != 4) || (c->x86_model!=10)) {
289 {
290 printk(KERN_INFO "elanfreq: error: no Elan processor found!\n"); 289 printk(KERN_INFO "elanfreq: error: no Elan processor found!\n");
291 return -ENODEV; 290 return -ENODEV;
292 } 291 }
293
294 return cpufreq_register_driver(&elanfreq_driver); 292 return cpufreq_register_driver(&elanfreq_driver);
295} 293}
296 294
297 295
298static void __exit elanfreq_exit(void) 296static void __exit elanfreq_exit(void)
299{ 297{
300 cpufreq_unregister_driver(&elanfreq_driver); 298 cpufreq_unregister_driver(&elanfreq_driver);
301} 299}
@@ -309,4 +307,3 @@ MODULE_DESCRIPTION("cpufreq driver for AMD's Elan CPUs");
309 307
310module_init(elanfreq_init); 308module_init(elanfreq_init);
311module_exit(elanfreq_exit); 309module_exit(elanfreq_exit);
312
diff --git a/arch/i386/kernel/cpu/cpufreq/gx-suspmod.c b/arch/i386/kernel/cpu/cpufreq/gx-suspmod.c
index e86ea486c311..92afa3bc84f1 100644
--- a/arch/i386/kernel/cpu/cpufreq/gx-suspmod.c
+++ b/arch/i386/kernel/cpu/cpufreq/gx-suspmod.c
@@ -6,12 +6,12 @@
6 * 6 *
7 * This program is free software; you can redistribute it and/or 7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License 8 * modify it under the terms of the GNU General Public License
9 * version 2 as published by the Free Software Foundation 9 * version 2 as published by the Free Software Foundation
10 * 10 *
11 * The author(s) of this software shall not be held liable for damages 11 * The author(s) of this software shall not be held liable for damages
12 * of any nature resulting due to the use of this software. This 12 * of any nature resulting due to the use of this software. This
13 * software is provided AS-IS with no warranties. 13 * software is provided AS-IS with no warranties.
14 * 14 *
15 * Theoritical note: 15 * Theoritical note:
16 * 16 *
17 * (see Geode(tm) CS5530 manual (rev.4.1) page.56) 17 * (see Geode(tm) CS5530 manual (rev.4.1) page.56)
@@ -21,18 +21,18 @@
21 * 21 *
22 * Suspend Modulation works by asserting and de-asserting the SUSP# pin 22 * Suspend Modulation works by asserting and de-asserting the SUSP# pin
23 * to CPU(GX1/GXLV) for configurable durations. When asserting SUSP# 23 * to CPU(GX1/GXLV) for configurable durations. When asserting SUSP#
24 * the CPU enters an idle state. GX1 stops its core clock when SUSP# is 24 * the CPU enters an idle state. GX1 stops its core clock when SUSP# is
25 * asserted then power consumption is reduced. 25 * asserted then power consumption is reduced.
26 * 26 *
27 * Suspend Modulation's OFF/ON duration are configurable 27 * Suspend Modulation's OFF/ON duration are configurable
28 * with 'Suspend Modulation OFF Count Register' 28 * with 'Suspend Modulation OFF Count Register'
29 * and 'Suspend Modulation ON Count Register'. 29 * and 'Suspend Modulation ON Count Register'.
30 * These registers are 8bit counters that represent the number of 30 * These registers are 8bit counters that represent the number of
31 * 32us intervals which the SUSP# pin is asserted(ON)/de-asserted(OFF) 31 * 32us intervals which the SUSP# pin is asserted(ON)/de-asserted(OFF)
32 * to the processor. 32 * to the processor.
33 * 33 *
34 * These counters define a ratio which is the effective frequency 34 * These counters define a ratio which is the effective frequency
35 * of operation of the system. 35 * of operation of the system.
36 * 36 *
37 * OFF Count 37 * OFF Count
38 * F_eff = Fgx * ---------------------- 38 * F_eff = Fgx * ----------------------
@@ -40,24 +40,24 @@
40 * 40 *
41 * 0 <= On Count, Off Count <= 255 41 * 0 <= On Count, Off Count <= 255
42 * 42 *
43 * From these limits, we can get register values 43 * From these limits, we can get register values
44 * 44 *
45 * off_duration + on_duration <= MAX_DURATION 45 * off_duration + on_duration <= MAX_DURATION
46 * on_duration = off_duration * (stock_freq - freq) / freq 46 * on_duration = off_duration * (stock_freq - freq) / freq
47 * 47 *
48 * off_duration = (freq * DURATION) / stock_freq 48 * off_duration = (freq * DURATION) / stock_freq
49 * on_duration = DURATION - off_duration 49 * on_duration = DURATION - off_duration
50 * 50 *
51 * 51 *
52 *--------------------------------------------------------------------------- 52 *---------------------------------------------------------------------------
53 * 53 *
54 * ChangeLog: 54 * ChangeLog:
55 * Dec. 12, 2003 Hiroshi Miura <miura@da-cha.org> 55 * Dec. 12, 2003 Hiroshi Miura <miura@da-cha.org>
56 * - fix on/off register mistake 56 * - fix on/off register mistake
57 * - fix cpu_khz calc when it stops cpu modulation. 57 * - fix cpu_khz calc when it stops cpu modulation.
58 * 58 *
59 * Dec. 11, 2002 Hiroshi Miura <miura@da-cha.org> 59 * Dec. 11, 2002 Hiroshi Miura <miura@da-cha.org>
60 * - rewrite for Cyrix MediaGX Cx5510/5520 and 60 * - rewrite for Cyrix MediaGX Cx5510/5520 and
61 * NatSemi Geode Cs5530(A). 61 * NatSemi Geode Cs5530(A).
62 * 62 *
63 * Jul. ??, 2002 Zwane Mwaikambo <zwane@commfireservices.com> 63 * Jul. ??, 2002 Zwane Mwaikambo <zwane@commfireservices.com>
@@ -74,40 +74,40 @@
74 ************************************************************************/ 74 ************************************************************************/
75 75
76#include <linux/kernel.h> 76#include <linux/kernel.h>
77#include <linux/module.h> 77#include <linux/module.h>
78#include <linux/init.h> 78#include <linux/init.h>
79#include <linux/smp.h> 79#include <linux/smp.h>
80#include <linux/cpufreq.h> 80#include <linux/cpufreq.h>
81#include <linux/pci.h> 81#include <linux/pci.h>
82#include <asm/processor.h> 82#include <asm/processor.h>
83#include <asm/errno.h> 83#include <asm/errno.h>
84 84
85/* PCI config registers, all at F0 */ 85/* PCI config registers, all at F0 */
86#define PCI_PMER1 0x80 /* power management enable register 1 */ 86#define PCI_PMER1 0x80 /* power management enable register 1 */
87#define PCI_PMER2 0x81 /* power management enable register 2 */ 87#define PCI_PMER2 0x81 /* power management enable register 2 */
88#define PCI_PMER3 0x82 /* power management enable register 3 */ 88#define PCI_PMER3 0x82 /* power management enable register 3 */
89#define PCI_IRQTC 0x8c /* irq speedup timer counter register:typical 2 to 4ms */ 89#define PCI_IRQTC 0x8c /* irq speedup timer counter register:typical 2 to 4ms */
90#define PCI_VIDTC 0x8d /* video speedup timer counter register: typical 50 to 100ms */ 90#define PCI_VIDTC 0x8d /* video speedup timer counter register: typical 50 to 100ms */
91#define PCI_MODOFF 0x94 /* suspend modulation OFF counter register, 1 = 32us */ 91#define PCI_MODOFF 0x94 /* suspend modulation OFF counter register, 1 = 32us */
92#define PCI_MODON 0x95 /* suspend modulation ON counter register */ 92#define PCI_MODON 0x95 /* suspend modulation ON counter register */
93#define PCI_SUSCFG 0x96 /* suspend configuration register */ 93#define PCI_SUSCFG 0x96 /* suspend configuration register */
94 94
95/* PMER1 bits */ 95/* PMER1 bits */
96#define GPM (1<<0) /* global power management */ 96#define GPM (1<<0) /* global power management */
97#define GIT (1<<1) /* globally enable PM device idle timers */ 97#define GIT (1<<1) /* globally enable PM device idle timers */
98#define GTR (1<<2) /* globally enable IO traps */ 98#define GTR (1<<2) /* globally enable IO traps */
99#define IRQ_SPDUP (1<<3) /* disable clock throttle during interrupt handling */ 99#define IRQ_SPDUP (1<<3) /* disable clock throttle during interrupt handling */
100#define VID_SPDUP (1<<4) /* disable clock throttle during vga video handling */ 100#define VID_SPDUP (1<<4) /* disable clock throttle during vga video handling */
101 101
102/* SUSCFG bits */ 102/* SUSCFG bits */
103#define SUSMOD (1<<0) /* enable/disable suspend modulation */ 103#define SUSMOD (1<<0) /* enable/disable suspend modulation */
104/* the belows support only with cs5530 (after rev.1.2)/cs5530A */ 104/* the belows support only with cs5530 (after rev.1.2)/cs5530A */
105#define SMISPDUP (1<<1) /* select how SMI re-enable suspend modulation: */ 105#define SMISPDUP (1<<1) /* select how SMI re-enable suspend modulation: */
106 /* IRQTC timer or read SMI speedup disable reg.(F1BAR[08-09h]) */ 106 /* IRQTC timer or read SMI speedup disable reg.(F1BAR[08-09h]) */
107#define SUSCFG (1<<2) /* enable powering down a GXLV processor. "Special 3Volt Suspend" mode */ 107#define SUSCFG (1<<2) /* enable powering down a GXLV processor. "Special 3Volt Suspend" mode */
108/* the belows support only with cs5530A */ 108/* the belows support only with cs5530A */
109#define PWRSVE_ISA (1<<3) /* stop ISA clock */ 109#define PWRSVE_ISA (1<<3) /* stop ISA clock */
110#define PWRSVE (1<<4) /* active idle */ 110#define PWRSVE (1<<4) /* active idle */
111 111
112struct gxfreq_params { 112struct gxfreq_params {
113 u8 on_duration; 113 u8 on_duration;
@@ -128,7 +128,7 @@ module_param (pci_busclk, int, 0444);
128 128
129/* maximum duration for which the cpu may be suspended 129/* maximum duration for which the cpu may be suspended
130 * (32us * MAX_DURATION). If no parameter is given, this defaults 130 * (32us * MAX_DURATION). If no parameter is given, this defaults
131 * to 255. 131 * to 255.
132 * Note that this leads to a maximum of 8 ms(!) where the CPU clock 132 * Note that this leads to a maximum of 8 ms(!) where the CPU clock
133 * is suspended -- processing power is just 0.39% of what it used to be, 133 * is suspended -- processing power is just 0.39% of what it used to be,
134 * though. 781.25 kHz(!) for a 200 MHz processor -- wow. */ 134 * though. 781.25 kHz(!) for a 200 MHz processor -- wow. */
@@ -144,17 +144,17 @@ module_param (max_duration, int, 0444);
144#define dprintk(msg...) cpufreq_debug_printk(CPUFREQ_DEBUG_DRIVER, "gx-suspmod", msg) 144#define dprintk(msg...) cpufreq_debug_printk(CPUFREQ_DEBUG_DRIVER, "gx-suspmod", msg)
145 145
146/** 146/**
147 * we can detect a core multipiler from dir0_lsb 147 * we can detect a core multipiler from dir0_lsb
148 * from GX1 datasheet p.56, 148 * from GX1 datasheet p.56,
149 * MULT[3:0]: 149 * MULT[3:0]:
150 * 0000 = SYSCLK multiplied by 4 (test only) 150 * 0000 = SYSCLK multiplied by 4 (test only)
151 * 0001 = SYSCLK multiplied by 10 151 * 0001 = SYSCLK multiplied by 10
152 * 0010 = SYSCLK multiplied by 4 152 * 0010 = SYSCLK multiplied by 4
153 * 0011 = SYSCLK multiplied by 6 153 * 0011 = SYSCLK multiplied by 6
154 * 0100 = SYSCLK multiplied by 9 154 * 0100 = SYSCLK multiplied by 9
155 * 0101 = SYSCLK multiplied by 5 155 * 0101 = SYSCLK multiplied by 5
156 * 0110 = SYSCLK multiplied by 7 156 * 0110 = SYSCLK multiplied by 7
157 * 0111 = SYSCLK multiplied by 8 157 * 0111 = SYSCLK multiplied by 8
158 * of 33.3MHz 158 * of 33.3MHz
159 **/ 159 **/
160static int gx_freq_mult[16] = { 160static int gx_freq_mult[16] = {
@@ -164,17 +164,17 @@ static int gx_freq_mult[16] = {
164 164
165 165
166/**************************************************************** 166/****************************************************************
167 * Low Level chipset interface * 167 * Low Level chipset interface *
168 ****************************************************************/ 168 ****************************************************************/
169static struct pci_device_id gx_chipset_tbl[] __initdata = { 169static struct pci_device_id gx_chipset_tbl[] __initdata = {
170 { PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5530_LEGACY, PCI_ANY_ID, PCI_ANY_ID }, 170 { PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5530_LEGACY, PCI_ANY_ID, PCI_ANY_ID },
171 { PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5520, PCI_ANY_ID, PCI_ANY_ID }, 171 { PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5520, PCI_ANY_ID, PCI_ANY_ID },
172 { PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5510, PCI_ANY_ID, PCI_ANY_ID }, 172 { PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5510, PCI_ANY_ID, PCI_ANY_ID },
173 { 0, }, 173 { 0, },
174}; 174};
175 175
176/** 176/**
177 * gx_detect_chipset: 177 * gx_detect_chipset:
178 * 178 *
179 **/ 179 **/
180static __init struct pci_dev *gx_detect_chipset(void) 180static __init struct pci_dev *gx_detect_chipset(void)
@@ -182,17 +182,16 @@ static __init struct pci_dev *gx_detect_chipset(void)
182 struct pci_dev *gx_pci = NULL; 182 struct pci_dev *gx_pci = NULL;
183 183
184 /* check if CPU is a MediaGX or a Geode. */ 184 /* check if CPU is a MediaGX or a Geode. */
185 if ((current_cpu_data.x86_vendor != X86_VENDOR_NSC) && 185 if ((current_cpu_data.x86_vendor != X86_VENDOR_NSC) &&
186 (current_cpu_data.x86_vendor != X86_VENDOR_CYRIX)) { 186 (current_cpu_data.x86_vendor != X86_VENDOR_CYRIX)) {
187 dprintk("error: no MediaGX/Geode processor found!\n"); 187 dprintk("error: no MediaGX/Geode processor found!\n");
188 return NULL; 188 return NULL;
189 } 189 }
190 190
191 /* detect which companion chip is used */ 191 /* detect which companion chip is used */
192 while ((gx_pci = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, gx_pci)) != NULL) { 192 while ((gx_pci = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, gx_pci)) != NULL) {
193 if ((pci_match_id(gx_chipset_tbl, gx_pci)) != NULL) { 193 if ((pci_match_id(gx_chipset_tbl, gx_pci)) != NULL)
194 return gx_pci; 194 return gx_pci;
195 }
196 } 195 }
197 196
198 dprintk("error: no supported chipset found!\n"); 197 dprintk("error: no supported chipset found!\n");
@@ -200,24 +199,24 @@ static __init struct pci_dev *gx_detect_chipset(void)
200} 199}
201 200
202/** 201/**
203 * gx_get_cpuspeed: 202 * gx_get_cpuspeed:
204 * 203 *
205 * Finds out at which efficient frequency the Cyrix MediaGX/NatSemi Geode CPU runs. 204 * Finds out at which efficient frequency the Cyrix MediaGX/NatSemi Geode CPU runs.
206 */ 205 */
207static unsigned int gx_get_cpuspeed(unsigned int cpu) 206static unsigned int gx_get_cpuspeed(unsigned int cpu)
208{ 207{
209 if ((gx_params->pci_suscfg & SUSMOD) == 0) 208 if ((gx_params->pci_suscfg & SUSMOD) == 0)
210 return stock_freq; 209 return stock_freq;
211 210
212 return (stock_freq * gx_params->off_duration) 211 return (stock_freq * gx_params->off_duration)
213 / (gx_params->on_duration + gx_params->off_duration); 212 / (gx_params->on_duration + gx_params->off_duration);
214} 213}
215 214
216/** 215/**
217 * gx_validate_speed: 216 * gx_validate_speed:
218 * determine current cpu speed 217 * determine current cpu speed
219 * 218 *
220**/ 219 **/
221 220
222static unsigned int gx_validate_speed(unsigned int khz, u8 *on_duration, u8 *off_duration) 221static unsigned int gx_validate_speed(unsigned int khz, u8 *on_duration, u8 *off_duration)
223{ 222{
@@ -230,7 +229,7 @@ static unsigned int gx_validate_speed(unsigned int khz, u8 *on_duration, u8 *off
230 *on_duration=0; 229 *on_duration=0;
231 230
232 for (i=max_duration; i>0; i--) { 231 for (i=max_duration; i>0; i--) {
233 tmp_off = ((khz * i) / stock_freq) & 0xff; 232 tmp_off = ((khz * i) / stock_freq) & 0xff;
234 tmp_on = i - tmp_off; 233 tmp_on = i - tmp_off;
235 tmp_freq = (stock_freq * tmp_off) / i; 234 tmp_freq = (stock_freq * tmp_off) / i;
236 /* if this relation is closer to khz, use this. If it's equal, 235 /* if this relation is closer to khz, use this. If it's equal,
@@ -247,18 +246,17 @@ static unsigned int gx_validate_speed(unsigned int khz, u8 *on_duration, u8 *off
247 246
248 247
249/** 248/**
250 * gx_set_cpuspeed: 249 * gx_set_cpuspeed:
251 * set cpu speed in khz. 250 * set cpu speed in khz.
252 **/ 251 **/
253 252
254static void gx_set_cpuspeed(unsigned int khz) 253static void gx_set_cpuspeed(unsigned int khz)
255{ 254{
256 u8 suscfg, pmer1; 255 u8 suscfg, pmer1;
257 unsigned int new_khz; 256 unsigned int new_khz;
258 unsigned long flags; 257 unsigned long flags;
259 struct cpufreq_freqs freqs; 258 struct cpufreq_freqs freqs;
260 259
261
262 freqs.cpu = 0; 260 freqs.cpu = 0;
263 freqs.old = gx_get_cpuspeed(0); 261 freqs.old = gx_get_cpuspeed(0);
264 262
@@ -303,18 +301,18 @@ static void gx_set_cpuspeed(unsigned int khz)
303 pci_write_config_byte(gx_params->cs55x0, PCI_MODOFF, gx_params->off_duration); 301 pci_write_config_byte(gx_params->cs55x0, PCI_MODOFF, gx_params->off_duration);
304 pci_write_config_byte(gx_params->cs55x0, PCI_MODON, gx_params->on_duration); 302 pci_write_config_byte(gx_params->cs55x0, PCI_MODON, gx_params->on_duration);
305 303
306 pci_write_config_byte(gx_params->cs55x0, PCI_SUSCFG, suscfg); 304 pci_write_config_byte(gx_params->cs55x0, PCI_SUSCFG, suscfg);
307 pci_read_config_byte(gx_params->cs55x0, PCI_SUSCFG, &suscfg); 305 pci_read_config_byte(gx_params->cs55x0, PCI_SUSCFG, &suscfg);
308 306
309 local_irq_restore(flags); 307 local_irq_restore(flags);
310 308
311 gx_params->pci_suscfg = suscfg; 309 gx_params->pci_suscfg = suscfg;
312 310
313 cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); 311 cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
314 312
315 dprintk("suspend modulation w/ duration of ON:%d us, OFF:%d us\n", 313 dprintk("suspend modulation w/ duration of ON:%d us, OFF:%d us\n",
316 gx_params->on_duration * 32, gx_params->off_duration * 32); 314 gx_params->on_duration * 32, gx_params->off_duration * 32);
317 dprintk("suspend modulation w/ clock speed: %d kHz.\n", freqs.new); 315 dprintk("suspend modulation w/ clock speed: %d kHz.\n", freqs.new);
318} 316}
319 317
320/**************************************************************** 318/****************************************************************
@@ -322,10 +320,10 @@ static void gx_set_cpuspeed(unsigned int khz)
322 ****************************************************************/ 320 ****************************************************************/
323 321
324/* 322/*
325 * cpufreq_gx_verify: test if frequency range is valid 323 * cpufreq_gx_verify: test if frequency range is valid
326 * 324 *
327 * This function checks if a given frequency range in kHz is valid 325 * This function checks if a given frequency range in kHz is valid
328 * for the hardware supported by the driver. 326 * for the hardware supported by the driver.
329 */ 327 */
330 328
331static int cpufreq_gx_verify(struct cpufreq_policy *policy) 329static int cpufreq_gx_verify(struct cpufreq_policy *policy)
@@ -333,8 +331,8 @@ static int cpufreq_gx_verify(struct cpufreq_policy *policy)
333 unsigned int tmp_freq = 0; 331 unsigned int tmp_freq = 0;
334 u8 tmp1, tmp2; 332 u8 tmp1, tmp2;
335 333
336 if (!stock_freq || !policy) 334 if (!stock_freq || !policy)
337 return -EINVAL; 335 return -EINVAL;
338 336
339 policy->cpu = 0; 337 policy->cpu = 0;
340 cpufreq_verify_within_limits(policy, (stock_freq / max_duration), stock_freq); 338 cpufreq_verify_within_limits(policy, (stock_freq / max_duration), stock_freq);
@@ -342,14 +340,14 @@ static int cpufreq_gx_verify(struct cpufreq_policy *policy)
342 /* it needs to be assured that at least one supported frequency is 340 /* it needs to be assured that at least one supported frequency is
343 * within policy->min and policy->max. If it is not, policy->max 341 * within policy->min and policy->max. If it is not, policy->max
344 * needs to be increased until one freuqency is supported. 342 * needs to be increased until one freuqency is supported.
345 * policy->min may not be decreased, though. This way we guarantee a 343 * policy->min may not be decreased, though. This way we guarantee a
346 * specific processing capacity. 344 * specific processing capacity.
347 */ 345 */
348 tmp_freq = gx_validate_speed(policy->min, &tmp1, &tmp2); 346 tmp_freq = gx_validate_speed(policy->min, &tmp1, &tmp2);
349 if (tmp_freq < policy->min) 347 if (tmp_freq < policy->min)
350 tmp_freq += stock_freq / max_duration; 348 tmp_freq += stock_freq / max_duration;
351 policy->min = tmp_freq; 349 policy->min = tmp_freq;
352 if (policy->min > policy->max) 350 if (policy->min > policy->max)
353 policy->max = tmp_freq; 351 policy->max = tmp_freq;
354 tmp_freq = gx_validate_speed(policy->max, &tmp1, &tmp2); 352 tmp_freq = gx_validate_speed(policy->max, &tmp1, &tmp2);
355 if (tmp_freq > policy->max) 353 if (tmp_freq > policy->max)
@@ -358,12 +356,12 @@ static int cpufreq_gx_verify(struct cpufreq_policy *policy)
358 if (policy->max < policy->min) 356 if (policy->max < policy->min)
359 policy->max = policy->min; 357 policy->max = policy->min;
360 cpufreq_verify_within_limits(policy, (stock_freq / max_duration), stock_freq); 358 cpufreq_verify_within_limits(policy, (stock_freq / max_duration), stock_freq);
361 359
362 return 0; 360 return 0;
363} 361}
364 362
365/* 363/*
366 * cpufreq_gx_target: 364 * cpufreq_gx_target:
367 * 365 *
368 */ 366 */
369static int cpufreq_gx_target(struct cpufreq_policy *policy, 367static int cpufreq_gx_target(struct cpufreq_policy *policy,
@@ -373,8 +371,8 @@ static int cpufreq_gx_target(struct cpufreq_policy *policy,
373 u8 tmp1, tmp2; 371 u8 tmp1, tmp2;
374 unsigned int tmp_freq; 372 unsigned int tmp_freq;
375 373
376 if (!stock_freq || !policy) 374 if (!stock_freq || !policy)
377 return -EINVAL; 375 return -EINVAL;
378 376
379 policy->cpu = 0; 377 policy->cpu = 0;
380 378
@@ -431,7 +429,7 @@ static int cpufreq_gx_cpu_init(struct cpufreq_policy *policy)
431 return 0; 429 return 0;
432} 430}
433 431
434/* 432/*
435 * cpufreq_gx_init: 433 * cpufreq_gx_init:
436 * MediaGX/Geode GX initialize cpufreq driver 434 * MediaGX/Geode GX initialize cpufreq driver
437 */ 435 */
@@ -452,7 +450,7 @@ static int __init cpufreq_gx_init(void)
452 u32 class_rev; 450 u32 class_rev;
453 451
454 /* Test if we have the right hardware */ 452 /* Test if we have the right hardware */
455 if ((gx_pci = gx_detect_chipset()) == NULL) 453 if ((gx_pci = gx_detect_chipset()) == NULL)
456 return -ENODEV; 454 return -ENODEV;
457 455
458 /* check whether module parameters are sane */ 456 /* check whether module parameters are sane */
@@ -461,10 +459,9 @@ static int __init cpufreq_gx_init(void)
461 459
462 dprintk("geode suspend modulation available.\n"); 460 dprintk("geode suspend modulation available.\n");
463 461
464 params = kmalloc(sizeof(struct gxfreq_params), GFP_KERNEL); 462 params = kzalloc(sizeof(struct gxfreq_params), GFP_KERNEL);
465 if (params == NULL) 463 if (params == NULL)
466 return -ENOMEM; 464 return -ENOMEM;
467 memset(params, 0, sizeof(struct gxfreq_params));
468 465
469 params->cs55x0 = gx_pci; 466 params->cs55x0 = gx_pci;
470 gx_params = params; 467 gx_params = params;
@@ -478,7 +475,7 @@ static int __init cpufreq_gx_init(void)
478 pci_read_config_dword(params->cs55x0, PCI_CLASS_REVISION, &class_rev); 475 pci_read_config_dword(params->cs55x0, PCI_CLASS_REVISION, &class_rev);
479 params->pci_rev = class_rev && 0xff; 476 params->pci_rev = class_rev && 0xff;
480 477
481 if ((ret = cpufreq_register_driver(&gx_suspmod_driver))) { 478 if ((ret = cpufreq_register_driver(&gx_suspmod_driver))) {
482 kfree(params); 479 kfree(params);
483 return ret; /* register error! */ 480 return ret; /* register error! */
484 } 481 }
diff --git a/arch/i386/kernel/cpu/cpufreq/longhaul.h b/arch/i386/kernel/cpu/cpufreq/longhaul.h
index 2a495c162ec7..d3a95d77ee85 100644
--- a/arch/i386/kernel/cpu/cpufreq/longhaul.h
+++ b/arch/i386/kernel/cpu/cpufreq/longhaul.h
@@ -234,7 +234,7 @@ static int __initdata ezrat_eblcr[32] = {
234 234
235/* 235/*
236 * VIA C3 Nehemiah */ 236 * VIA C3 Nehemiah */
237 237
238static int __initdata nehemiah_a_clock_ratio[32] = { 238static int __initdata nehemiah_a_clock_ratio[32] = {
239 100, /* 0000 -> 10.0x */ 239 100, /* 0000 -> 10.0x */
240 160, /* 0001 -> 16.0x */ 240 160, /* 0001 -> 16.0x */
@@ -446,7 +446,7 @@ static int __initdata nehemiah_c_eblcr[32] = {
446 /* end of table */ 446 /* end of table */
447}; 447};
448 448
449/* 449/*
450 * Voltage scales. Div/Mod by 1000 to get actual voltage. 450 * Voltage scales. Div/Mod by 1000 to get actual voltage.
451 * Which scale to use depends on the VRM type in use. 451 * Which scale to use depends on the VRM type in use.
452 */ 452 */
diff --git a/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c b/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c
index cc73a7ae34bc..ab6504efd801 100644
--- a/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c
+++ b/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c
@@ -14,7 +14,7 @@
14 * The author(s) of this software shall not be held liable for damages 14 * The author(s) of this software shall not be held liable for damages
15 * of any nature resulting due to the use of this software. This 15 * of any nature resulting due to the use of this software. This
16 * software is provided AS-IS with no warranties. 16 * software is provided AS-IS with no warranties.
17 * 17 *
18 * Date Errata Description 18 * Date Errata Description
19 * 20020525 N44, O17 12.5% or 25% DC causes lockup 19 * 20020525 N44, O17 12.5% or 25% DC causes lockup
20 * 20 *
@@ -22,7 +22,7 @@
22 22
23#include <linux/config.h> 23#include <linux/config.h>
24#include <linux/kernel.h> 24#include <linux/kernel.h>
25#include <linux/module.h> 25#include <linux/module.h>
26#include <linux/init.h> 26#include <linux/init.h>
27#include <linux/smp.h> 27#include <linux/smp.h>
28#include <linux/cpufreq.h> 28#include <linux/cpufreq.h>
@@ -30,7 +30,7 @@
30#include <linux/cpumask.h> 30#include <linux/cpumask.h>
31#include <linux/sched.h> /* current / set_cpus_allowed() */ 31#include <linux/sched.h> /* current / set_cpus_allowed() */
32 32
33#include <asm/processor.h> 33#include <asm/processor.h>
34#include <asm/msr.h> 34#include <asm/msr.h>
35#include <asm/timex.h> 35#include <asm/timex.h>
36 36
@@ -79,7 +79,7 @@ static int cpufreq_p4_setdc(unsigned int cpu, unsigned int newstate)
79 } else { 79 } else {
80 dprintk("CPU#%d setting duty cycle to %d%%\n", 80 dprintk("CPU#%d setting duty cycle to %d%%\n",
81 cpu, ((125 * newstate) / 10)); 81 cpu, ((125 * newstate) / 10));
82 /* bits 63 - 5 : reserved 82 /* bits 63 - 5 : reserved
83 * bit 4 : enable/disable 83 * bit 4 : enable/disable
84 * bits 3-1 : duty cycle 84 * bits 3-1 : duty cycle
85 * bit 0 : reserved 85 * bit 0 : reserved
@@ -132,7 +132,7 @@ static int cpufreq_p4_target(struct cpufreq_policy *policy,
132 } 132 }
133 133
134 /* run on each logical CPU, see section 13.15.3 of IA32 Intel Architecture Software 134 /* run on each logical CPU, see section 13.15.3 of IA32 Intel Architecture Software
135 * Developer's Manual, Volume 3 135 * Developer's Manual, Volume 3
136 */ 136 */
137 cpus_allowed = current->cpus_allowed; 137 cpus_allowed = current->cpus_allowed;
138 138
@@ -206,7 +206,7 @@ static unsigned int cpufreq_p4_get_frequency(struct cpuinfo_x86 *c)
206 return speedstep_get_processor_frequency(SPEEDSTEP_PROCESSOR_P4D); 206 return speedstep_get_processor_frequency(SPEEDSTEP_PROCESSOR_P4D);
207} 207}
208 208
209 209
210 210
211static int cpufreq_p4_cpu_init(struct cpufreq_policy *policy) 211static int cpufreq_p4_cpu_init(struct cpufreq_policy *policy)
212{ 212{
@@ -234,7 +234,7 @@ static int cpufreq_p4_cpu_init(struct cpufreq_policy *policy)
234 dprintk("has errata -- disabling frequencies lower than 2ghz\n"); 234 dprintk("has errata -- disabling frequencies lower than 2ghz\n");
235 break; 235 break;
236 } 236 }
237 237
238 /* get max frequency */ 238 /* get max frequency */
239 stock_freq = cpufreq_p4_get_frequency(c); 239 stock_freq = cpufreq_p4_get_frequency(c);
240 if (!stock_freq) 240 if (!stock_freq)
@@ -244,13 +244,13 @@ static int cpufreq_p4_cpu_init(struct cpufreq_policy *policy)
244 for (i=1; (p4clockmod_table[i].frequency != CPUFREQ_TABLE_END); i++) { 244 for (i=1; (p4clockmod_table[i].frequency != CPUFREQ_TABLE_END); i++) {
245 if ((i<2) && (has_N44_O17_errata[policy->cpu])) 245 if ((i<2) && (has_N44_O17_errata[policy->cpu]))
246 p4clockmod_table[i].frequency = CPUFREQ_ENTRY_INVALID; 246 p4clockmod_table[i].frequency = CPUFREQ_ENTRY_INVALID;
247 else if (has_N60_errata[policy->cpu] && p4clockmod_table[i].frequency < 2000000) 247 else if (has_N60_errata[policy->cpu] && ((stock_freq * i)/8) < 2000000)
248 p4clockmod_table[i].frequency = CPUFREQ_ENTRY_INVALID; 248 p4clockmod_table[i].frequency = CPUFREQ_ENTRY_INVALID;
249 else 249 else
250 p4clockmod_table[i].frequency = (stock_freq * i)/8; 250 p4clockmod_table[i].frequency = (stock_freq * i)/8;
251 } 251 }
252 cpufreq_frequency_table_get_attr(p4clockmod_table, policy->cpu); 252 cpufreq_frequency_table_get_attr(p4clockmod_table, policy->cpu);
253 253
254 /* cpuinfo and default policy values */ 254 /* cpuinfo and default policy values */
255 policy->governor = CPUFREQ_DEFAULT_GOVERNOR; 255 policy->governor = CPUFREQ_DEFAULT_GOVERNOR;
256 policy->cpuinfo.transition_latency = 1000000; /* assumed */ 256 policy->cpuinfo.transition_latency = 1000000; /* assumed */
@@ -262,7 +262,7 @@ static int cpufreq_p4_cpu_init(struct cpufreq_policy *policy)
262 262
263static int cpufreq_p4_cpu_exit(struct cpufreq_policy *policy) 263static int cpufreq_p4_cpu_exit(struct cpufreq_policy *policy)
264{ 264{
265 cpufreq_frequency_table_put_attr(policy->cpu); 265 cpufreq_frequency_table_put_attr(policy->cpu);
266 return 0; 266 return 0;
267} 267}
268 268
@@ -298,7 +298,7 @@ static struct freq_attr* p4clockmod_attr[] = {
298}; 298};
299 299
300static struct cpufreq_driver p4clockmod_driver = { 300static struct cpufreq_driver p4clockmod_driver = {
301 .verify = cpufreq_p4_verify, 301 .verify = cpufreq_p4_verify,
302 .target = cpufreq_p4_target, 302 .target = cpufreq_p4_target,
303 .init = cpufreq_p4_cpu_init, 303 .init = cpufreq_p4_cpu_init,
304 .exit = cpufreq_p4_cpu_exit, 304 .exit = cpufreq_p4_cpu_exit,
@@ -310,12 +310,12 @@ static struct cpufreq_driver p4clockmod_driver = {
310 310
311 311
312static int __init cpufreq_p4_init(void) 312static int __init cpufreq_p4_init(void)
313{ 313{
314 struct cpuinfo_x86 *c = cpu_data; 314 struct cpuinfo_x86 *c = cpu_data;
315 int ret; 315 int ret;
316 316
317 /* 317 /*
318 * THERM_CONTROL is architectural for IA32 now, so 318 * THERM_CONTROL is architectural for IA32 now, so
319 * we can rely on the capability checks 319 * we can rely on the capability checks
320 */ 320 */
321 if (c->x86_vendor != X86_VENDOR_INTEL) 321 if (c->x86_vendor != X86_VENDOR_INTEL)
diff --git a/arch/i386/kernel/cpu/cpufreq/powernow-k6.c b/arch/i386/kernel/cpu/cpufreq/powernow-k6.c
index 222f8cfe3c57..f89524051e4a 100644
--- a/arch/i386/kernel/cpu/cpufreq/powernow-k6.c
+++ b/arch/i386/kernel/cpu/cpufreq/powernow-k6.c
@@ -8,7 +8,7 @@
8 */ 8 */
9 9
10#include <linux/kernel.h> 10#include <linux/kernel.h>
11#include <linux/module.h> 11#include <linux/module.h>
12#include <linux/init.h> 12#include <linux/init.h>
13#include <linux/cpufreq.h> 13#include <linux/cpufreq.h>
14#include <linux/ioport.h> 14#include <linux/ioport.h>
@@ -50,7 +50,7 @@ static int powernow_k6_get_cpu_multiplier(void)
50{ 50{
51 u64 invalue = 0; 51 u64 invalue = 0;
52 u32 msrval; 52 u32 msrval;
53 53
54 msrval = POWERNOW_IOPORT + 0x1; 54 msrval = POWERNOW_IOPORT + 0x1;
55 wrmsr(MSR_K6_EPMR, msrval, 0); /* enable the PowerNow port */ 55 wrmsr(MSR_K6_EPMR, msrval, 0); /* enable the PowerNow port */
56 invalue=inl(POWERNOW_IOPORT + 0x8); 56 invalue=inl(POWERNOW_IOPORT + 0x8);
@@ -81,7 +81,7 @@ static void powernow_k6_set_state (unsigned int best_i)
81 freqs.old = busfreq * powernow_k6_get_cpu_multiplier(); 81 freqs.old = busfreq * powernow_k6_get_cpu_multiplier();
82 freqs.new = busfreq * clock_ratio[best_i].index; 82 freqs.new = busfreq * clock_ratio[best_i].index;
83 freqs.cpu = 0; /* powernow-k6.c is UP only driver */ 83 freqs.cpu = 0; /* powernow-k6.c is UP only driver */
84 84
85 cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); 85 cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
86 86
87 /* we now need to transform best_i to the BVC format, see AMD#23446 */ 87 /* we now need to transform best_i to the BVC format, see AMD#23446 */
@@ -152,7 +152,7 @@ static int powernow_k6_cpu_init(struct cpufreq_policy *policy)
152 busfreq = cpu_khz / max_multiplier; 152 busfreq = cpu_khz / max_multiplier;
153 153
154 /* table init */ 154 /* table init */
155 for (i=0; (clock_ratio[i].frequency != CPUFREQ_TABLE_END); i++) { 155 for (i=0; (clock_ratio[i].frequency != CPUFREQ_TABLE_END); i++) {
156 if (clock_ratio[i].index > max_multiplier) 156 if (clock_ratio[i].index > max_multiplier)
157 clock_ratio[i].frequency = CPUFREQ_ENTRY_INVALID; 157 clock_ratio[i].frequency = CPUFREQ_ENTRY_INVALID;
158 else 158 else
@@ -182,7 +182,7 @@ static int powernow_k6_cpu_exit(struct cpufreq_policy *policy)
182 powernow_k6_set_state(i); 182 powernow_k6_set_state(i);
183 } 183 }
184 cpufreq_frequency_table_put_attr(policy->cpu); 184 cpufreq_frequency_table_put_attr(policy->cpu);
185 return 0; 185 return 0;
186} 186}
187 187
188static unsigned int powernow_k6_get(unsigned int cpu) 188static unsigned int powernow_k6_get(unsigned int cpu)
@@ -196,8 +196,8 @@ static struct freq_attr* powernow_k6_attr[] = {
196}; 196};
197 197
198static struct cpufreq_driver powernow_k6_driver = { 198static struct cpufreq_driver powernow_k6_driver = {
199 .verify = powernow_k6_verify, 199 .verify = powernow_k6_verify,
200 .target = powernow_k6_target, 200 .target = powernow_k6_target,
201 .init = powernow_k6_cpu_init, 201 .init = powernow_k6_cpu_init,
202 .exit = powernow_k6_cpu_exit, 202 .exit = powernow_k6_cpu_exit,
203 .get = powernow_k6_get, 203 .get = powernow_k6_get,
@@ -215,7 +215,7 @@ static struct cpufreq_driver powernow_k6_driver = {
215 * on success. 215 * on success.
216 */ 216 */
217static int __init powernow_k6_init(void) 217static int __init powernow_k6_init(void)
218{ 218{
219 struct cpuinfo_x86 *c = cpu_data; 219 struct cpuinfo_x86 *c = cpu_data;
220 220
221 if ((c->x86_vendor != X86_VENDOR_AMD) || (c->x86 != 5) || 221 if ((c->x86_vendor != X86_VENDOR_AMD) || (c->x86 != 5) ||
diff --git a/arch/i386/kernel/cpu/cpufreq/powernow-k7.c b/arch/i386/kernel/cpu/cpufreq/powernow-k7.c
index edcd626001da..2bf4237cb94e 100644
--- a/arch/i386/kernel/cpu/cpufreq/powernow-k7.c
+++ b/arch/i386/kernel/cpu/cpufreq/powernow-k7.c
@@ -199,8 +199,8 @@ static int get_ranges (unsigned char *pst)
199 powernow_table[j].index |= (vid << 8); /* upper 8 bits */ 199 powernow_table[j].index |= (vid << 8); /* upper 8 bits */
200 200
201 dprintk (" FID: 0x%x (%d.%dx [%dMHz]) " 201 dprintk (" FID: 0x%x (%d.%dx [%dMHz]) "
202 "VID: 0x%x (%d.%03dV)\n", fid, fid_codes[fid] / 10, 202 "VID: 0x%x (%d.%03dV)\n", fid, fid_codes[fid] / 10,
203 fid_codes[fid] % 10, speed/1000, vid, 203 fid_codes[fid] % 10, speed/1000, vid,
204 mobile_vid_table[vid]/1000, 204 mobile_vid_table[vid]/1000,
205 mobile_vid_table[vid]%1000); 205 mobile_vid_table[vid]%1000);
206 } 206 }
@@ -368,8 +368,8 @@ static int powernow_acpi_init(void)
368 } 368 }
369 369
370 dprintk (" FID: 0x%x (%d.%dx [%dMHz]) " 370 dprintk (" FID: 0x%x (%d.%dx [%dMHz]) "
371 "VID: 0x%x (%d.%03dV)\n", fid, fid_codes[fid] / 10, 371 "VID: 0x%x (%d.%03dV)\n", fid, fid_codes[fid] / 10,
372 fid_codes[fid] % 10, speed/1000, vid, 372 fid_codes[fid] % 10, speed/1000, vid,
373 mobile_vid_table[vid]/1000, 373 mobile_vid_table[vid]/1000,
374 mobile_vid_table[vid]%1000); 374 mobile_vid_table[vid]%1000);
375 375
@@ -460,7 +460,7 @@ static int powernow_decode_bios (int maxfid, int startvid)
460 (maxfid==pst->maxfid) && (startvid==pst->startvid)) 460 (maxfid==pst->maxfid) && (startvid==pst->startvid))
461 { 461 {
462 dprintk ("PST:%d (@%p)\n", i, pst); 462 dprintk ("PST:%d (@%p)\n", i, pst);
463 dprintk (" cpuid: 0x%x fsb: %d maxFID: 0x%x startvid: 0x%x\n", 463 dprintk (" cpuid: 0x%x fsb: %d maxFID: 0x%x startvid: 0x%x\n",
464 pst->cpuid, pst->fsbspeed, pst->maxfid, pst->startvid); 464 pst->cpuid, pst->fsbspeed, pst->maxfid, pst->startvid);
465 465
466 ret = get_ranges ((char *) pst + sizeof (struct pst_s)); 466 ret = get_ranges ((char *) pst + sizeof (struct pst_s));
diff --git a/arch/i386/kernel/cpu/cpufreq/powernow-k8.c b/arch/i386/kernel/cpu/cpufreq/powernow-k8.c
index e11a09207ec8..712a26bd4457 100644
--- a/arch/i386/kernel/cpu/cpufreq/powernow-k8.c
+++ b/arch/i386/kernel/cpu/cpufreq/powernow-k8.c
@@ -40,21 +40,22 @@
40 40
41#ifdef CONFIG_X86_POWERNOW_K8_ACPI 41#ifdef CONFIG_X86_POWERNOW_K8_ACPI
42#include <linux/acpi.h> 42#include <linux/acpi.h>
43#include <linux/mutex.h>
43#include <acpi/processor.h> 44#include <acpi/processor.h>
44#endif 45#endif
45 46
46#define PFX "powernow-k8: " 47#define PFX "powernow-k8: "
47#define BFX PFX "BIOS error: " 48#define BFX PFX "BIOS error: "
48#define VERSION "version 1.60.0" 49#define VERSION "version 1.60.1"
49#include "powernow-k8.h" 50#include "powernow-k8.h"
50 51
51/* serialize freq changes */ 52/* serialize freq changes */
52static DECLARE_MUTEX(fidvid_sem); 53static DEFINE_MUTEX(fidvid_mutex);
53 54
54static struct powernow_k8_data *powernow_data[NR_CPUS]; 55static struct powernow_k8_data *powernow_data[NR_CPUS];
55 56
56#ifndef CONFIG_SMP 57#ifndef CONFIG_SMP
57static cpumask_t cpu_core_map[1]; 58static cpumask_t cpu_core_map[1] = { CPU_MASK_ALL };
58#endif 59#endif
59 60
60/* Return a frequency in MHz, given an input fid */ 61/* Return a frequency in MHz, given an input fid */
@@ -83,11 +84,10 @@ static u32 find_millivolts_from_vid(struct powernow_k8_data *data, u32 vid)
83 */ 84 */
84static u32 convert_fid_to_vco_fid(u32 fid) 85static u32 convert_fid_to_vco_fid(u32 fid)
85{ 86{
86 if (fid < HI_FID_TABLE_BOTTOM) { 87 if (fid < HI_FID_TABLE_BOTTOM)
87 return 8 + (2 * fid); 88 return 8 + (2 * fid);
88 } else { 89 else
89 return fid; 90 return fid;
90 }
91} 91}
92 92
93/* 93/*
@@ -177,7 +177,7 @@ static int write_new_fid(struct powernow_k8_data *data, u32 fid)
177 if (i++ > 100) { 177 if (i++ > 100) {
178 printk(KERN_ERR PFX "internal error - pending bit very stuck - no further pstate changes possible\n"); 178 printk(KERN_ERR PFX "internal error - pending bit very stuck - no further pstate changes possible\n");
179 return 1; 179 return 1;
180 } 180 }
181 } while (query_current_values_with_pending_wait(data)); 181 } while (query_current_values_with_pending_wait(data));
182 182
183 count_off_irt(data); 183 count_off_irt(data);
@@ -474,8 +474,10 @@ static int check_supported_cpu(unsigned int cpu)
474 goto out; 474 goto out;
475 475
476 eax = cpuid_eax(CPUID_PROCESSOR_SIGNATURE); 476 eax = cpuid_eax(CPUID_PROCESSOR_SIGNATURE);
477 if ((eax & CPUID_XFAM) != CPUID_XFAM_K8)
478 goto out;
479
477 if (((eax & CPUID_USE_XFAM_XMOD) != CPUID_USE_XFAM_XMOD) || 480 if (((eax & CPUID_USE_XFAM_XMOD) != CPUID_USE_XFAM_XMOD) ||
478 ((eax & CPUID_XFAM) != CPUID_XFAM_K8) ||
479 ((eax & CPUID_XMOD) > CPUID_XMOD_REV_G)) { 481 ((eax & CPUID_XMOD) > CPUID_XMOD_REV_G)) {
480 printk(KERN_INFO PFX "Processor cpuid %x not supported\n", eax); 482 printk(KERN_INFO PFX "Processor cpuid %x not supported\n", eax);
481 goto out; 483 goto out;
@@ -780,9 +782,7 @@ static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data)
780 /* verify only 1 entry from the lo frequency table */ 782 /* verify only 1 entry from the lo frequency table */
781 if (fid < HI_FID_TABLE_BOTTOM) { 783 if (fid < HI_FID_TABLE_BOTTOM) {
782 if (cntlofreq) { 784 if (cntlofreq) {
783 /* if both entries are the same, ignore this 785 /* if both entries are the same, ignore this one ... */
784 * one...
785 */
786 if ((powernow_table[i].frequency != powernow_table[cntlofreq].frequency) || 786 if ((powernow_table[i].frequency != powernow_table[cntlofreq].frequency) ||
787 (powernow_table[i].index != powernow_table[cntlofreq].index)) { 787 (powernow_table[i].index != powernow_table[cntlofreq].index)) {
788 printk(KERN_ERR PFX "Too many lo freq table entries\n"); 788 printk(KERN_ERR PFX "Too many lo freq table entries\n");
@@ -854,7 +854,7 @@ static int transition_frequency(struct powernow_k8_data *data, unsigned int inde
854 dprintk("cpu %d transition to index %u\n", smp_processor_id(), index); 854 dprintk("cpu %d transition to index %u\n", smp_processor_id(), index);
855 855
856 /* fid are the lower 8 bits of the index we stored into 856 /* fid are the lower 8 bits of the index we stored into
857 * the cpufreq frequency table in find_psb_table, vid are 857 * the cpufreq frequency table in find_psb_table, vid are
858 * the upper 8 bits. 858 * the upper 8 bits.
859 */ 859 */
860 860
@@ -909,7 +909,6 @@ static int powernowk8_target(struct cpufreq_policy *pol, unsigned targfreq, unsi
909 u32 checkvid = data->currvid; 909 u32 checkvid = data->currvid;
910 unsigned int newstate; 910 unsigned int newstate;
911 int ret = -EIO; 911 int ret = -EIO;
912 int i;
913 912
914 /* only run on specific CPU from here on */ 913 /* only run on specific CPU from here on */
915 oldmask = current->cpus_allowed; 914 oldmask = current->cpus_allowed;
@@ -945,23 +944,17 @@ static int powernowk8_target(struct cpufreq_policy *pol, unsigned targfreq, unsi
945 if (cpufreq_frequency_table_target(pol, data->powernow_table, targfreq, relation, &newstate)) 944 if (cpufreq_frequency_table_target(pol, data->powernow_table, targfreq, relation, &newstate))
946 goto err_out; 945 goto err_out;
947 946
948 down(&fidvid_sem); 947 mutex_lock(&fidvid_mutex);
949 948
950 powernow_k8_acpi_pst_values(data, newstate); 949 powernow_k8_acpi_pst_values(data, newstate);
951 950
952 if (transition_frequency(data, newstate)) { 951 if (transition_frequency(data, newstate)) {
953 printk(KERN_ERR PFX "transition frequency failed\n"); 952 printk(KERN_ERR PFX "transition frequency failed\n");
954 ret = 1; 953 ret = 1;
955 up(&fidvid_sem); 954 mutex_unlock(&fidvid_mutex);
956 goto err_out; 955 goto err_out;
957 } 956 }
958 957 mutex_unlock(&fidvid_mutex);
959 /* Update all the fid/vids of our siblings */
960 for_each_cpu_mask(i, cpu_core_map[pol->cpu]) {
961 powernow_data[i]->currvid = data->currvid;
962 powernow_data[i]->currfid = data->currfid;
963 }
964 up(&fidvid_sem);
965 958
966 pol->cur = find_khz_freq_from_fid(data->currfid); 959 pol->cur = find_khz_freq_from_fid(data->currfid);
967 ret = 0; 960 ret = 0;
@@ -1048,7 +1041,7 @@ static int __cpuinit powernowk8_cpu_init(struct cpufreq_policy *pol)
1048 pol->governor = CPUFREQ_DEFAULT_GOVERNOR; 1041 pol->governor = CPUFREQ_DEFAULT_GOVERNOR;
1049 pol->cpus = cpu_core_map[pol->cpu]; 1042 pol->cpus = cpu_core_map[pol->cpu];
1050 1043
1051 /* Take a crude guess here. 1044 /* Take a crude guess here.
1052 * That guess was in microseconds, so multiply with 1000 */ 1045 * That guess was in microseconds, so multiply with 1000 */
1053 pol->cpuinfo.transition_latency = (((data->rvo + 8) * data->vstable * VST_UNITS_20US) 1046 pol->cpuinfo.transition_latency = (((data->rvo + 8) * data->vstable * VST_UNITS_20US)
1054 + (3 * (1 << data->irt) * 10)) * 1000; 1047 + (3 * (1 << data->irt) * 10)) * 1000;
@@ -1070,9 +1063,8 @@ static int __cpuinit powernowk8_cpu_init(struct cpufreq_policy *pol)
1070 printk("cpu_init done, current fid 0x%x, vid 0x%x\n", 1063 printk("cpu_init done, current fid 0x%x, vid 0x%x\n",
1071 data->currfid, data->currvid); 1064 data->currfid, data->currvid);
1072 1065
1073 for_each_cpu_mask(i, cpu_core_map[pol->cpu]) { 1066 for_each_cpu_mask(i, cpu_core_map[pol->cpu])
1074 powernow_data[i] = data; 1067 powernow_data[i] = data;
1075 }
1076 1068
1077 return 0; 1069 return 0;
1078 1070
@@ -1103,10 +1095,15 @@ static int __devexit powernowk8_cpu_exit (struct cpufreq_policy *pol)
1103 1095
1104static unsigned int powernowk8_get (unsigned int cpu) 1096static unsigned int powernowk8_get (unsigned int cpu)
1105{ 1097{
1106 struct powernow_k8_data *data = powernow_data[cpu]; 1098 struct powernow_k8_data *data;
1107 cpumask_t oldmask = current->cpus_allowed; 1099 cpumask_t oldmask = current->cpus_allowed;
1108 unsigned int khz = 0; 1100 unsigned int khz = 0;
1109 1101
1102 data = powernow_data[first_cpu(cpu_core_map[cpu])];
1103
1104 if (!data)
1105 return -EINVAL;
1106
1110 set_cpus_allowed(current, cpumask_of_cpu(cpu)); 1107 set_cpus_allowed(current, cpumask_of_cpu(cpu));
1111 if (smp_processor_id() != cpu) { 1108 if (smp_processor_id() != cpu) {
1112 printk(KERN_ERR PFX "limiting to CPU %d failed in powernowk8_get\n", cpu); 1109 printk(KERN_ERR PFX "limiting to CPU %d failed in powernowk8_get\n", cpu);
@@ -1145,16 +1142,14 @@ static int __cpuinit powernowk8_init(void)
1145{ 1142{
1146 unsigned int i, supported_cpus = 0; 1143 unsigned int i, supported_cpus = 0;
1147 1144
1148 for (i=0; i<NR_CPUS; i++) { 1145 for_each_online_cpu(i) {
1149 if (!cpu_online(i))
1150 continue;
1151 if (check_supported_cpu(i)) 1146 if (check_supported_cpu(i))
1152 supported_cpus++; 1147 supported_cpus++;
1153 } 1148 }
1154 1149
1155 if (supported_cpus == num_online_cpus()) { 1150 if (supported_cpus == num_online_cpus()) {
1156 printk(KERN_INFO PFX "Found %d AMD Athlon 64 / Opteron processors (" VERSION ")\n", 1151 printk(KERN_INFO PFX "Found %d AMD Athlon 64 / Opteron "
1157 supported_cpus); 1152 "processors (" VERSION ")\n", supported_cpus);
1158 return cpufreq_register_driver(&cpufreq_amd64_driver); 1153 return cpufreq_register_driver(&cpufreq_amd64_driver);
1159 } 1154 }
1160 1155
diff --git a/arch/i386/kernel/cpu/cpufreq/powernow-k8.h b/arch/i386/kernel/cpu/cpufreq/powernow-k8.h
index d0de37d58e9a..79a7c5c87edc 100644
--- a/arch/i386/kernel/cpu/cpufreq/powernow-k8.h
+++ b/arch/i386/kernel/cpu/cpufreq/powernow-k8.h
@@ -63,7 +63,7 @@ struct powernow_k8_data {
63#define MSR_C_LO_VID_SHIFT 8 63#define MSR_C_LO_VID_SHIFT 8
64 64
65/* Field definitions within the FID VID High Control MSR : */ 65/* Field definitions within the FID VID High Control MSR : */
66#define MSR_C_HI_STP_GNT_TO 0x000fffff 66#define MSR_C_HI_STP_GNT_TO 0x000fffff
67 67
68/* Field definitions within the FID VID Low Status MSR : */ 68/* Field definitions within the FID VID Low Status MSR : */
69#define MSR_S_LO_CHANGE_PENDING 0x80000000 /* cleared when completed */ 69#define MSR_S_LO_CHANGE_PENDING 0x80000000 /* cleared when completed */
@@ -123,7 +123,7 @@ struct powernow_k8_data {
123 * Most values of interest are enocoded in a single field of the _PSS 123 * Most values of interest are enocoded in a single field of the _PSS
124 * entries: the "control" value. 124 * entries: the "control" value.
125 */ 125 */
126 126
127#define IRT_SHIFT 30 127#define IRT_SHIFT 30
128#define RVO_SHIFT 28 128#define RVO_SHIFT 28
129#define EXT_TYPE_SHIFT 27 129#define EXT_TYPE_SHIFT 27
@@ -182,10 +182,6 @@ static int core_frequency_transition(struct powernow_k8_data *data, u32 reqfid);
182 182
183static void powernow_k8_acpi_pst_values(struct powernow_k8_data *data, unsigned int index); 183static void powernow_k8_acpi_pst_values(struct powernow_k8_data *data, unsigned int index);
184 184
185#ifndef for_each_cpu_mask
186#define for_each_cpu_mask(i,mask) for (i=0;i<1;i++)
187#endif
188
189#ifdef CONFIG_SMP 185#ifdef CONFIG_SMP
190static inline void define_siblings(int cpu, cpumask_t cpu_sharedcore_mask[]) 186static inline void define_siblings(int cpu, cpumask_t cpu_sharedcore_mask[])
191{ 187{
diff --git a/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c b/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c
index c173c0fa117a..b0ff9075708c 100644
--- a/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c
+++ b/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c
@@ -479,15 +479,13 @@ static int centrino_cpu_init(struct cpufreq_policy *policy)
479 unsigned l, h; 479 unsigned l, h;
480 int ret; 480 int ret;
481 int i; 481 int i;
482 struct cpuinfo_x86 *c = &cpu_data[policy->cpu];
483 482
484 /* Only Intel makes Enhanced Speedstep-capable CPUs */ 483 /* Only Intel makes Enhanced Speedstep-capable CPUs */
485 if (cpu->x86_vendor != X86_VENDOR_INTEL || !cpu_has(cpu, X86_FEATURE_EST)) 484 if (cpu->x86_vendor != X86_VENDOR_INTEL || !cpu_has(cpu, X86_FEATURE_EST))
486 return -ENODEV; 485 return -ENODEV;
487 486
488 if (cpu_has(c, X86_FEATURE_CONSTANT_TSC)) { 487 if (cpu_has(cpu, X86_FEATURE_CONSTANT_TSC))
489 centrino_driver.flags |= CPUFREQ_CONST_LOOPS; 488 centrino_driver.flags |= CPUFREQ_CONST_LOOPS;
490 }
491 489
492 if (centrino_cpu_init_acpi(policy)) { 490 if (centrino_cpu_init_acpi(policy)) {
493 if (policy->cpu != 0) 491 if (policy->cpu != 0)
diff --git a/arch/i386/kernel/cpu/cpufreq/speedstep-lib.c b/arch/i386/kernel/cpu/cpufreq/speedstep-lib.c
index 7c47005a1805..4f46cac155c4 100644
--- a/arch/i386/kernel/cpu/cpufreq/speedstep-lib.c
+++ b/arch/i386/kernel/cpu/cpufreq/speedstep-lib.c
@@ -9,7 +9,7 @@
9 */ 9 */
10 10
11#include <linux/kernel.h> 11#include <linux/kernel.h>
12#include <linux/module.h> 12#include <linux/module.h>
13#include <linux/moduleparam.h> 13#include <linux/moduleparam.h>
14#include <linux/init.h> 14#include <linux/init.h>
15#include <linux/cpufreq.h> 15#include <linux/cpufreq.h>
@@ -36,8 +36,8 @@ static unsigned int pentium3_get_frequency (unsigned int processor)
36 /* See table 14 of p3_ds.pdf and table 22 of 29834003.pdf */ 36 /* See table 14 of p3_ds.pdf and table 22 of 29834003.pdf */
37 struct { 37 struct {
38 unsigned int ratio; /* Frequency Multiplier (x10) */ 38 unsigned int ratio; /* Frequency Multiplier (x10) */
39 u8 bitmap; /* power on configuration bits 39 u8 bitmap; /* power on configuration bits
40 [27, 25:22] (in MSR 0x2a) */ 40 [27, 25:22] (in MSR 0x2a) */
41 } msr_decode_mult [] = { 41 } msr_decode_mult [] = {
42 { 30, 0x01 }, 42 { 30, 0x01 },
43 { 35, 0x05 }, 43 { 35, 0x05 },
@@ -58,9 +58,9 @@ static unsigned int pentium3_get_frequency (unsigned int processor)
58 58
59 /* PIII(-M) FSB settings: see table b1-b of 24547206.pdf */ 59 /* PIII(-M) FSB settings: see table b1-b of 24547206.pdf */
60 struct { 60 struct {
61 unsigned int value; /* Front Side Bus speed in MHz */ 61 unsigned int value; /* Front Side Bus speed in MHz */
62 u8 bitmap; /* power on configuration bits [18: 19] 62 u8 bitmap; /* power on configuration bits [18: 19]
63 (in MSR 0x2a) */ 63 (in MSR 0x2a) */
64 } msr_decode_fsb [] = { 64 } msr_decode_fsb [] = {
65 { 66, 0x0 }, 65 { 66, 0x0 },
66 { 100, 0x2 }, 66 { 100, 0x2 },
@@ -68,8 +68,8 @@ static unsigned int pentium3_get_frequency (unsigned int processor)
68 { 0, 0xff} 68 { 0, 0xff}
69 }; 69 };
70 70
71 u32 msr_lo, msr_tmp; 71 u32 msr_lo, msr_tmp;
72 int i = 0, j = 0; 72 int i = 0, j = 0;
73 73
74 /* read MSR 0x2a - we only need the low 32 bits */ 74 /* read MSR 0x2a - we only need the low 32 bits */
75 rdmsr(MSR_IA32_EBL_CR_POWERON, msr_lo, msr_tmp); 75 rdmsr(MSR_IA32_EBL_CR_POWERON, msr_lo, msr_tmp);
@@ -106,7 +106,7 @@ static unsigned int pentium3_get_frequency (unsigned int processor)
106 106
107static unsigned int pentiumM_get_frequency(void) 107static unsigned int pentiumM_get_frequency(void)
108{ 108{
109 u32 msr_lo, msr_tmp; 109 u32 msr_lo, msr_tmp;
110 110
111 rdmsr(MSR_IA32_EBL_CR_POWERON, msr_lo, msr_tmp); 111 rdmsr(MSR_IA32_EBL_CR_POWERON, msr_lo, msr_tmp);
112 dprintk("PM - MSR_IA32_EBL_CR_POWERON: 0x%x 0x%x\n", msr_lo, msr_tmp); 112 dprintk("PM - MSR_IA32_EBL_CR_POWERON: 0x%x 0x%x\n", msr_lo, msr_tmp);
@@ -134,7 +134,7 @@ static unsigned int pentium4_get_frequency(void)
134 134
135 dprintk("P4 - MSR_EBC_FREQUENCY_ID: 0x%x 0x%x\n", msr_lo, msr_hi); 135 dprintk("P4 - MSR_EBC_FREQUENCY_ID: 0x%x 0x%x\n", msr_lo, msr_hi);
136 136
137 /* decode the FSB: see IA-32 Intel (C) Architecture Software 137 /* decode the FSB: see IA-32 Intel (C) Architecture Software
138 * Developer's Manual, Volume 3: System Prgramming Guide, 138 * Developer's Manual, Volume 3: System Prgramming Guide,
139 * revision #12 in Table B-1: MSRs in the Pentium 4 and 139 * revision #12 in Table B-1: MSRs in the Pentium 4 and
140 * Intel Xeon Processors, on page B-4 and B-5. 140 * Intel Xeon Processors, on page B-4 and B-5.
@@ -170,7 +170,7 @@ static unsigned int pentium4_get_frequency(void)
170 return (fsb * mult); 170 return (fsb * mult);
171} 171}
172 172
173 173
174unsigned int speedstep_get_processor_frequency(unsigned int processor) 174unsigned int speedstep_get_processor_frequency(unsigned int processor)
175{ 175{
176 switch (processor) { 176 switch (processor) {
@@ -198,11 +198,11 @@ EXPORT_SYMBOL_GPL(speedstep_get_processor_frequency);
198unsigned int speedstep_detect_processor (void) 198unsigned int speedstep_detect_processor (void)
199{ 199{
200 struct cpuinfo_x86 *c = cpu_data; 200 struct cpuinfo_x86 *c = cpu_data;
201 u32 ebx, msr_lo, msr_hi; 201 u32 ebx, msr_lo, msr_hi;
202 202
203 dprintk("x86: %x, model: %x\n", c->x86, c->x86_model); 203 dprintk("x86: %x, model: %x\n", c->x86, c->x86_model);
204 204
205 if ((c->x86_vendor != X86_VENDOR_INTEL) || 205 if ((c->x86_vendor != X86_VENDOR_INTEL) ||
206 ((c->x86 != 6) && (c->x86 != 0xF))) 206 ((c->x86 != 6) && (c->x86 != 0xF)))
207 return 0; 207 return 0;
208 208
@@ -218,15 +218,15 @@ unsigned int speedstep_detect_processor (void)
218 dprintk("ebx value is %x, x86_mask is %x\n", ebx, c->x86_mask); 218 dprintk("ebx value is %x, x86_mask is %x\n", ebx, c->x86_mask);
219 219
220 switch (c->x86_mask) { 220 switch (c->x86_mask) {
221 case 4: 221 case 4:
222 /* 222 /*
223 * B-stepping [M-P4-M] 223 * B-stepping [M-P4-M]
224 * sample has ebx = 0x0f, production has 0x0e. 224 * sample has ebx = 0x0f, production has 0x0e.
225 */ 225 */
226 if ((ebx == 0x0e) || (ebx == 0x0f)) 226 if ((ebx == 0x0e) || (ebx == 0x0f))
227 return SPEEDSTEP_PROCESSOR_P4M; 227 return SPEEDSTEP_PROCESSOR_P4M;
228 break; 228 break;
229 case 7: 229 case 7:
230 /* 230 /*
231 * C-stepping [M-P4-M] 231 * C-stepping [M-P4-M]
232 * needs to have ebx=0x0e, else it's a celeron: 232 * needs to have ebx=0x0e, else it's a celeron:
@@ -253,7 +253,7 @@ unsigned int speedstep_detect_processor (void)
253 * also, M-P4M HTs have ebx=0x8, too 253 * also, M-P4M HTs have ebx=0x8, too
254 * For now, they are distinguished by the model_id string 254 * For now, they are distinguished by the model_id string
255 */ 255 */
256 if ((ebx == 0x0e) || (strstr(c->x86_model_id,"Mobile Intel(R) Pentium(R) 4") != NULL)) 256 if ((ebx == 0x0e) || (strstr(c->x86_model_id,"Mobile Intel(R) Pentium(R) 4") != NULL))
257 return SPEEDSTEP_PROCESSOR_P4M; 257 return SPEEDSTEP_PROCESSOR_P4M;
258 break; 258 break;
259 default: 259 default:
@@ -264,8 +264,7 @@ unsigned int speedstep_detect_processor (void)
264 264
265 switch (c->x86_model) { 265 switch (c->x86_model) {
266 case 0x0B: /* Intel PIII [Tualatin] */ 266 case 0x0B: /* Intel PIII [Tualatin] */
267 /* cpuid_ebx(1) is 0x04 for desktop PIII, 267 /* cpuid_ebx(1) is 0x04 for desktop PIII, 0x06 for mobile PIII-M */
268 0x06 for mobile PIII-M */
269 ebx = cpuid_ebx(0x00000001); 268 ebx = cpuid_ebx(0x00000001);
270 dprintk("ebx is %x\n", ebx); 269 dprintk("ebx is %x\n", ebx);
271 270
@@ -275,9 +274,8 @@ unsigned int speedstep_detect_processor (void)
275 return 0; 274 return 0;
276 275
277 /* So far all PIII-M processors support SpeedStep. See 276 /* So far all PIII-M processors support SpeedStep. See
278 * Intel's 24540640.pdf of June 2003 277 * Intel's 24540640.pdf of June 2003
279 */ 278 */
280
281 return SPEEDSTEP_PROCESSOR_PIII_T; 279 return SPEEDSTEP_PROCESSOR_PIII_T;
282 280
283 case 0x08: /* Intel PIII [Coppermine] */ 281 case 0x08: /* Intel PIII [Coppermine] */
@@ -399,7 +397,7 @@ unsigned int speedstep_get_freqs(unsigned int processor,
399 } 397 }
400 } 398 }
401 399
402 out: 400out:
403 local_irq_restore(flags); 401 local_irq_restore(flags);
404 return (ret); 402 return (ret);
405} 403}
diff --git a/arch/i386/kernel/cpu/cpufreq/speedstep-lib.h b/arch/i386/kernel/cpu/cpufreq/speedstep-lib.h
index 6a727fd3a77e..b735429c50b4 100644
--- a/arch/i386/kernel/cpu/cpufreq/speedstep-lib.h
+++ b/arch/i386/kernel/cpu/cpufreq/speedstep-lib.h
@@ -14,7 +14,7 @@
14 14
15#define SPEEDSTEP_PROCESSOR_PIII_C_EARLY 0x00000001 /* Coppermine core */ 15#define SPEEDSTEP_PROCESSOR_PIII_C_EARLY 0x00000001 /* Coppermine core */
16#define SPEEDSTEP_PROCESSOR_PIII_C 0x00000002 /* Coppermine core */ 16#define SPEEDSTEP_PROCESSOR_PIII_C 0x00000002 /* Coppermine core */
17#define SPEEDSTEP_PROCESSOR_PIII_T 0x00000003 /* Tualatin core */ 17#define SPEEDSTEP_PROCESSOR_PIII_T 0x00000003 /* Tualatin core */
18#define SPEEDSTEP_PROCESSOR_P4M 0x00000004 /* P4-M */ 18#define SPEEDSTEP_PROCESSOR_P4M 0x00000004 /* P4-M */
19 19
20/* the following processors are not speedstep-capable and are not auto-detected 20/* the following processors are not speedstep-capable and are not auto-detected
@@ -25,8 +25,8 @@
25 25
26/* speedstep states -- only two of them */ 26/* speedstep states -- only two of them */
27 27
28#define SPEEDSTEP_HIGH 0x00000000 28#define SPEEDSTEP_HIGH 0x00000000
29#define SPEEDSTEP_LOW 0x00000001 29#define SPEEDSTEP_LOW 0x00000001
30 30
31 31
32/* detect a speedstep-capable processor */ 32/* detect a speedstep-capable processor */
@@ -36,13 +36,13 @@ extern unsigned int speedstep_detect_processor (void);
36extern unsigned int speedstep_get_processor_frequency(unsigned int processor); 36extern unsigned int speedstep_get_processor_frequency(unsigned int processor);
37 37
38 38
39/* detect the low and high speeds of the processor. The callback 39/* detect the low and high speeds of the processor. The callback
40 * set_state"'s first argument is either SPEEDSTEP_HIGH or 40 * set_state"'s first argument is either SPEEDSTEP_HIGH or
41 * SPEEDSTEP_LOW; the second argument is zero so that no 41 * SPEEDSTEP_LOW; the second argument is zero so that no
42 * cpufreq_notify_transition calls are initiated. 42 * cpufreq_notify_transition calls are initiated.
43 */ 43 */
44extern unsigned int speedstep_get_freqs(unsigned int processor, 44extern unsigned int speedstep_get_freqs(unsigned int processor,
45 unsigned int *low_speed, 45 unsigned int *low_speed,
46 unsigned int *high_speed, 46 unsigned int *high_speed,
47 unsigned int *transition_latency, 47 unsigned int *transition_latency,
48 void (*set_state) (unsigned int state)); 48 void (*set_state) (unsigned int state));
diff --git a/arch/i386/kernel/cpu/cpufreq/speedstep-smi.c b/arch/i386/kernel/cpu/cpufreq/speedstep-smi.c
index 28cc5d524afc..c28333d53646 100644
--- a/arch/i386/kernel/cpu/cpufreq/speedstep-smi.c
+++ b/arch/i386/kernel/cpu/cpufreq/speedstep-smi.c
@@ -13,8 +13,8 @@
13 *********************************************************************/ 13 *********************************************************************/
14 14
15#include <linux/kernel.h> 15#include <linux/kernel.h>
16#include <linux/module.h> 16#include <linux/module.h>
17#include <linux/moduleparam.h> 17#include <linux/moduleparam.h>
18#include <linux/init.h> 18#include <linux/init.h>
19#include <linux/cpufreq.h> 19#include <linux/cpufreq.h>
20#include <linux/pci.h> 20#include <linux/pci.h>
@@ -28,21 +28,21 @@
28 * 28 *
29 * These parameters are got from IST-SMI BIOS call. 29 * These parameters are got from IST-SMI BIOS call.
30 * If user gives it, these are used. 30 * If user gives it, these are used.
31 * 31 *
32 */ 32 */
33static int smi_port = 0; 33static int smi_port = 0;
34static int smi_cmd = 0; 34static int smi_cmd = 0;
35static unsigned int smi_sig = 0; 35static unsigned int smi_sig = 0;
36 36
37/* info about the processor */ 37/* info about the processor */
38static unsigned int speedstep_processor = 0; 38static unsigned int speedstep_processor = 0;
39 39
40/* 40/*
41 * There are only two frequency states for each processor. Values 41 * There are only two frequency states for each processor. Values
42 * are in kHz for the time being. 42 * are in kHz for the time being.
43 */ 43 */
44static struct cpufreq_frequency_table speedstep_freqs[] = { 44static struct cpufreq_frequency_table speedstep_freqs[] = {
45 {SPEEDSTEP_HIGH, 0}, 45 {SPEEDSTEP_HIGH, 0},
46 {SPEEDSTEP_LOW, 0}, 46 {SPEEDSTEP_LOW, 0},
47 {0, CPUFREQ_TABLE_END}, 47 {0, CPUFREQ_TABLE_END},
48}; 48};
@@ -75,7 +75,9 @@ static int speedstep_smi_ownership (void)
75 __asm__ __volatile__( 75 __asm__ __volatile__(
76 "out %%al, (%%dx)\n" 76 "out %%al, (%%dx)\n"
77 : "=D" (result) 77 : "=D" (result)
78 : "a" (command), "b" (function), "c" (0), "d" (smi_port), "D" (0), "S" (magic) 78 : "a" (command), "b" (function), "c" (0), "d" (smi_port),
79 "D" (0), "S" (magic)
80 : "memory"
79 ); 81 );
80 82
81 dprintk("result is %x\n", result); 83 dprintk("result is %x\n", result);
@@ -123,7 +125,7 @@ static int speedstep_smi_get_freqs (unsigned int *low, unsigned int *high)
123 *low = low_mhz * 1000; 125 *low = low_mhz * 1000;
124 126
125 return result; 127 return result;
126} 128}
127 129
128/** 130/**
129 * speedstep_get_state - set the SpeedStep state 131 * speedstep_get_state - set the SpeedStep state
@@ -204,7 +206,7 @@ static void speedstep_set_state (unsigned int state)
204 * speedstep_target - set a new CPUFreq policy 206 * speedstep_target - set a new CPUFreq policy
205 * @policy: new policy 207 * @policy: new policy
206 * @target_freq: new freq 208 * @target_freq: new freq
207 * @relation: 209 * @relation:
208 * 210 *
209 * Sets a new CPUFreq policy/freq. 211 * Sets a new CPUFreq policy/freq.
210 */ 212 */
@@ -283,7 +285,7 @@ static int speedstep_cpu_init(struct cpufreq_policy *policy)
283 state = speedstep_get_state(); 285 state = speedstep_get_state();
284 speed = speedstep_freqs[state].frequency; 286 speed = speedstep_freqs[state].frequency;
285 287
286 dprintk("currently at %s speed setting - %i MHz\n", 288 dprintk("currently at %s speed setting - %i MHz\n",
287 (speed == speedstep_freqs[SPEEDSTEP_LOW].frequency) ? "low" : "high", 289 (speed == speedstep_freqs[SPEEDSTEP_LOW].frequency) ? "low" : "high",
288 (speed / 1000)); 290 (speed / 1000));
289 291
@@ -296,7 +298,7 @@ static int speedstep_cpu_init(struct cpufreq_policy *policy)
296 if (result) 298 if (result)
297 return (result); 299 return (result);
298 300
299 cpufreq_frequency_table_get_attr(speedstep_freqs, policy->cpu); 301 cpufreq_frequency_table_get_attr(speedstep_freqs, policy->cpu);
300 302
301 return 0; 303 return 0;
302} 304}
@@ -332,8 +334,8 @@ static struct freq_attr* speedstep_attr[] = {
332 334
333static struct cpufreq_driver speedstep_driver = { 335static struct cpufreq_driver speedstep_driver = {
334 .name = "speedstep-smi", 336 .name = "speedstep-smi",
335 .verify = speedstep_verify, 337 .verify = speedstep_verify,
336 .target = speedstep_target, 338 .target = speedstep_target,
337 .init = speedstep_cpu_init, 339 .init = speedstep_cpu_init,
338 .exit = speedstep_cpu_exit, 340 .exit = speedstep_cpu_exit,
339 .get = speedstep_get, 341 .get = speedstep_get,
@@ -370,13 +372,12 @@ static int __init speedstep_init(void)
370 return -ENODEV; 372 return -ENODEV;
371 } 373 }
372 374
373 dprintk("signature:0x%.8lx, command:0x%.8lx, event:0x%.8lx, perf_level:0x%.8lx.\n", 375 dprintk("signature:0x%.8lx, command:0x%.8lx, event:0x%.8lx, perf_level:0x%.8lx.\n",
374 ist_info.signature, ist_info.command, ist_info.event, ist_info.perf_level); 376 ist_info.signature, ist_info.command, ist_info.event, ist_info.perf_level);
375 377
376 378 /* Error if no IST-SMI BIOS or no PARM
377 /* Error if no IST-SMI BIOS or no PARM
378 sig= 'ISGE' aka 'Intel Speedstep Gate E' */ 379 sig= 'ISGE' aka 'Intel Speedstep Gate E' */
379 if ((ist_info.signature != 0x47534943) && ( 380 if ((ist_info.signature != 0x47534943) && (
380 (smi_port == 0) || (smi_cmd == 0))) 381 (smi_port == 0) || (smi_cmd == 0)))
381 return -ENODEV; 382 return -ENODEV;
382 383
@@ -386,17 +387,15 @@ static int __init speedstep_init(void)
386 smi_sig = ist_info.signature; 387 smi_sig = ist_info.signature;
387 388
388 /* setup smi_port from MODLULE_PARM or BIOS */ 389 /* setup smi_port from MODLULE_PARM or BIOS */
389 if ((smi_port > 0xff) || (smi_port < 0)) { 390 if ((smi_port > 0xff) || (smi_port < 0))
390 return -EINVAL; 391 return -EINVAL;
391 } else if (smi_port == 0) { 392 else if (smi_port == 0)
392 smi_port = ist_info.command & 0xff; 393 smi_port = ist_info.command & 0xff;
393 }
394 394
395 if ((smi_cmd > 0xff) || (smi_cmd < 0)) { 395 if ((smi_cmd > 0xff) || (smi_cmd < 0))
396 return -EINVAL; 396 return -EINVAL;
397 } else if (smi_cmd == 0) { 397 else if (smi_cmd == 0)
398 smi_cmd = (ist_info.command >> 16) & 0xff; 398 smi_cmd = (ist_info.command >> 16) & 0xff;
399 }
400 399
401 return cpufreq_register_driver(&speedstep_driver); 400 return cpufreq_register_driver(&speedstep_driver);
402} 401}
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..9df87b03612c 100644
--- a/arch/i386/kernel/cpu/intel_cacheinfo.c
+++ b/arch/i386/kernel/cpu/intel_cacheinfo.c
@@ -173,8 +173,12 @@ unsigned int __cpuinit init_intel_cacheinfo(struct cpuinfo_x86 *c)
173 unsigned int trace = 0, l1i = 0, l1d = 0, l2 = 0, l3 = 0; /* Cache sizes */ 173 unsigned int trace = 0, l1i = 0, l1d = 0, l2 = 0, l3 = 0; /* Cache sizes */
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 unsigned int l2_id = 0, l3_id = 0, num_threads_sharing, index_msb;
177#ifdef CONFIG_SMP
178 unsigned int cpu = (c == &boot_cpu_data) ? 0 : (c - cpu_data);
179#endif
176 180
177 if (c->cpuid_level > 4) { 181 if (c->cpuid_level > 3) {
178 static int is_initialized; 182 static int is_initialized;
179 183
180 if (is_initialized == 0) { 184 if (is_initialized == 0) {
@@ -205,9 +209,15 @@ unsigned int __cpuinit init_intel_cacheinfo(struct cpuinfo_x86 *c)
205 break; 209 break;
206 case 2: 210 case 2:
207 new_l2 = this_leaf.size/1024; 211 new_l2 = this_leaf.size/1024;
212 num_threads_sharing = 1 + this_leaf.eax.split.num_threads_sharing;
213 index_msb = get_count_order(num_threads_sharing);
214 l2_id = c->apicid >> index_msb;
208 break; 215 break;
209 case 3: 216 case 3:
210 new_l3 = this_leaf.size/1024; 217 new_l3 = this_leaf.size/1024;
218 num_threads_sharing = 1 + this_leaf.eax.split.num_threads_sharing;
219 index_msb = get_count_order(num_threads_sharing);
220 l3_id = c->apicid >> index_msb;
211 break; 221 break;
212 default: 222 default:
213 break; 223 break;
@@ -215,11 +225,19 @@ unsigned int __cpuinit init_intel_cacheinfo(struct cpuinfo_x86 *c)
215 } 225 }
216 } 226 }
217 } 227 }
218 if (c->cpuid_level > 1) { 228 /*
229 * Don't use cpuid2 if cpuid4 is supported. For P4, we use cpuid2 for
230 * trace cache
231 */
232 if ((num_cache_leaves == 0 || c->x86 == 15) && c->cpuid_level > 1) {
219 /* supports eax=2 call */ 233 /* supports eax=2 call */
220 int i, j, n; 234 int i, j, n;
221 int regs[4]; 235 int regs[4];
222 unsigned char *dp = (unsigned char *)regs; 236 unsigned char *dp = (unsigned char *)regs;
237 int only_trace = 0;
238
239 if (num_cache_leaves != 0 && c->x86 == 15)
240 only_trace = 1;
223 241
224 /* Number of times to iterate */ 242 /* Number of times to iterate */
225 n = cpuid_eax(2) & 0xFF; 243 n = cpuid_eax(2) & 0xFF;
@@ -241,6 +259,8 @@ unsigned int __cpuinit init_intel_cacheinfo(struct cpuinfo_x86 *c)
241 while (cache_table[k].descriptor != 0) 259 while (cache_table[k].descriptor != 0)
242 { 260 {
243 if (cache_table[k].descriptor == des) { 261 if (cache_table[k].descriptor == des) {
262 if (only_trace && cache_table[k].cache_type != LVL_TRACE)
263 break;
244 switch (cache_table[k].cache_type) { 264 switch (cache_table[k].cache_type) {
245 case LVL_1_INST: 265 case LVL_1_INST:
246 l1i += cache_table[k].size; 266 l1i += cache_table[k].size;
@@ -266,34 +286,45 @@ unsigned int __cpuinit init_intel_cacheinfo(struct cpuinfo_x86 *c)
266 } 286 }
267 } 287 }
268 } 288 }
289 }
269 290
270 if (new_l1d) 291 if (new_l1d)
271 l1d = new_l1d; 292 l1d = new_l1d;
272 293
273 if (new_l1i) 294 if (new_l1i)
274 l1i = new_l1i; 295 l1i = new_l1i;
275 296
276 if (new_l2) 297 if (new_l2) {
277 l2 = new_l2; 298 l2 = new_l2;
299#ifdef CONFIG_SMP
300 cpu_llc_id[cpu] = l2_id;
301#endif
302 }
278 303
279 if (new_l3) 304 if (new_l3) {
280 l3 = new_l3; 305 l3 = new_l3;
306#ifdef CONFIG_SMP
307 cpu_llc_id[cpu] = l3_id;
308#endif
309 }
281 310
282 if ( trace ) 311 if (trace)
283 printk (KERN_INFO "CPU: Trace cache: %dK uops", trace); 312 printk (KERN_INFO "CPU: Trace cache: %dK uops", trace);
284 else if ( l1i ) 313 else if ( l1i )
285 printk (KERN_INFO "CPU: L1 I cache: %dK", l1i); 314 printk (KERN_INFO "CPU: L1 I cache: %dK", l1i);
286 if ( l1d )
287 printk(", L1 D cache: %dK\n", l1d);
288 else
289 printk("\n");
290 if ( l2 )
291 printk(KERN_INFO "CPU: L2 cache: %dK\n", l2);
292 if ( l3 )
293 printk(KERN_INFO "CPU: L3 cache: %dK\n", l3);
294 315
295 c->x86_cache_size = l3 ? l3 : (l2 ? l2 : (l1i+l1d)); 316 if (l1d)
296 } 317 printk(", L1 D cache: %dK\n", l1d);
318 else
319 printk("\n");
320
321 if (l2)
322 printk(KERN_INFO "CPU: L2 cache: %dK\n", l2);
323
324 if (l3)
325 printk(KERN_INFO "CPU: L3 cache: %dK\n", l3);
326
327 c->x86_cache_size = l3 ? l3 : (l2 ? l2 : (l1i+l1d));
297 328
298 return l2; 329 return l2;
299} 330}
@@ -330,7 +361,7 @@ static void __cpuinit cache_shared_cpu_map_setup(unsigned int cpu, int index)
330 } 361 }
331 } 362 }
332} 363}
333static void __devinit cache_remove_shared_cpu_map(unsigned int cpu, int index) 364static void __cpuinit cache_remove_shared_cpu_map(unsigned int cpu, int index)
334{ 365{
335 struct _cpuid4_info *this_leaf, *sibling_leaf; 366 struct _cpuid4_info *this_leaf, *sibling_leaf;
336 int sibling; 367 int sibling;
diff --git a/arch/i386/kernel/cpu/mcheck/mce.c b/arch/i386/kernel/cpu/mcheck/mce.c
index 6170af3c271a..afa0888f9a1e 100644
--- a/arch/i386/kernel/cpu/mcheck/mce.c
+++ b/arch/i386/kernel/cpu/mcheck/mce.c
@@ -64,13 +64,13 @@ void mcheck_init(struct cpuinfo_x86 *c)
64static int __init mcheck_disable(char *str) 64static int __init mcheck_disable(char *str)
65{ 65{
66 mce_disabled = 1; 66 mce_disabled = 1;
67 return 0; 67 return 1;
68} 68}
69 69
70static int __init mcheck_enable(char *str) 70static int __init mcheck_enable(char *str)
71{ 71{
72 mce_disabled = -1; 72 mce_disabled = -1;
73 return 0; 73 return 1;
74} 74}
75 75
76__setup("nomce", mcheck_disable); 76__setup("nomce", mcheck_disable);
diff --git a/arch/i386/kernel/cpu/mtrr/main.c b/arch/i386/kernel/cpu/mtrr/main.c
index 3b4618bed70d..fff90bda4733 100644
--- a/arch/i386/kernel/cpu/mtrr/main.c
+++ b/arch/i386/kernel/cpu/mtrr/main.c
@@ -36,6 +36,7 @@
36#include <linux/pci.h> 36#include <linux/pci.h>
37#include <linux/smp.h> 37#include <linux/smp.h>
38#include <linux/cpu.h> 38#include <linux/cpu.h>
39#include <linux/mutex.h>
39 40
40#include <asm/mtrr.h> 41#include <asm/mtrr.h>
41 42
@@ -47,7 +48,7 @@
47u32 num_var_ranges = 0; 48u32 num_var_ranges = 0;
48 49
49unsigned int *usage_table; 50unsigned int *usage_table;
50static DECLARE_MUTEX(mtrr_sem); 51static DEFINE_MUTEX(mtrr_mutex);
51 52
52u32 size_or_mask, size_and_mask; 53u32 size_or_mask, size_and_mask;
53 54
@@ -333,7 +334,7 @@ int mtrr_add_page(unsigned long base, unsigned long size,
333 /* No CPU hotplug when we change MTRR entries */ 334 /* No CPU hotplug when we change MTRR entries */
334 lock_cpu_hotplug(); 335 lock_cpu_hotplug();
335 /* Search for existing MTRR */ 336 /* Search for existing MTRR */
336 down(&mtrr_sem); 337 mutex_lock(&mtrr_mutex);
337 for (i = 0; i < num_var_ranges; ++i) { 338 for (i = 0; i < num_var_ranges; ++i) {
338 mtrr_if->get(i, &lbase, &lsize, &ltype); 339 mtrr_if->get(i, &lbase, &lsize, &ltype);
339 if (base >= lbase + lsize) 340 if (base >= lbase + lsize)
@@ -371,7 +372,7 @@ int mtrr_add_page(unsigned long base, unsigned long size,
371 printk(KERN_INFO "mtrr: no more MTRRs available\n"); 372 printk(KERN_INFO "mtrr: no more MTRRs available\n");
372 error = i; 373 error = i;
373 out: 374 out:
374 up(&mtrr_sem); 375 mutex_unlock(&mtrr_mutex);
375 unlock_cpu_hotplug(); 376 unlock_cpu_hotplug();
376 return error; 377 return error;
377} 378}
@@ -464,7 +465,7 @@ int mtrr_del_page(int reg, unsigned long base, unsigned long size)
464 max = num_var_ranges; 465 max = num_var_ranges;
465 /* No CPU hotplug when we change MTRR entries */ 466 /* No CPU hotplug when we change MTRR entries */
466 lock_cpu_hotplug(); 467 lock_cpu_hotplug();
467 down(&mtrr_sem); 468 mutex_lock(&mtrr_mutex);
468 if (reg < 0) { 469 if (reg < 0) {
469 /* Search for existing MTRR */ 470 /* Search for existing MTRR */
470 for (i = 0; i < max; ++i) { 471 for (i = 0; i < max; ++i) {
@@ -503,7 +504,7 @@ int mtrr_del_page(int reg, unsigned long base, unsigned long size)
503 set_mtrr(reg, 0, 0, 0); 504 set_mtrr(reg, 0, 0, 0);
504 error = reg; 505 error = reg;
505 out: 506 out:
506 up(&mtrr_sem); 507 mutex_unlock(&mtrr_mutex);
507 unlock_cpu_hotplug(); 508 unlock_cpu_hotplug();
508 return error; 509 return error;
509} 510}
@@ -685,7 +686,7 @@ void mtrr_ap_init(void)
685 if (!mtrr_if || !use_intel()) 686 if (!mtrr_if || !use_intel())
686 return; 687 return;
687 /* 688 /*
688 * Ideally we should hold mtrr_sem here to avoid mtrr entries changed, 689 * Ideally we should hold mtrr_mutex here to avoid mtrr entries changed,
689 * but this routine will be called in cpu boot time, holding the lock 690 * but this routine will be called in cpu boot time, holding the lock
690 * breaks it. This routine is called in two cases: 1.very earily time 691 * breaks it. This routine is called in two cases: 1.very earily time
691 * of software resume, when there absolutely isn't mtrr entry changes; 692 * of software resume, when there absolutely isn't mtrr entry changes;
diff --git a/arch/i386/kernel/cpu/proc.c b/arch/i386/kernel/cpu/proc.c
index 89a85af33d28..f94cdb7aca50 100644
--- a/arch/i386/kernel/cpu/proc.c
+++ b/arch/i386/kernel/cpu/proc.c
@@ -40,12 +40,12 @@ 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
47 /* Intel-defined (#2) */ 47 /* Intel-defined (#2) */
48 "pni", NULL, NULL, "monitor", "ds_cpl", "vmx", NULL, "est", 48 "pni", NULL, NULL, "monitor", "ds_cpl", "vmx", "smx", "est",
49 "tm2", NULL, "cid", NULL, NULL, "cx16", "xtpr", NULL, 49 "tm2", NULL, "cid", NULL, NULL, "cx16", "xtpr", NULL,
50 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 50 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
51 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 51 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
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/dmi_scan.c b/arch/i386/kernel/dmi_scan.c
index 6a93d75db431..5efceebc48dc 100644
--- a/arch/i386/kernel/dmi_scan.c
+++ b/arch/i386/kernel/dmi_scan.c
@@ -3,8 +3,10 @@
3#include <linux/init.h> 3#include <linux/init.h>
4#include <linux/module.h> 4#include <linux/module.h>
5#include <linux/dmi.h> 5#include <linux/dmi.h>
6#include <linux/efi.h>
6#include <linux/bootmem.h> 7#include <linux/bootmem.h>
7#include <linux/slab.h> 8#include <linux/slab.h>
9#include <asm/dmi.h>
8 10
9static char * __init dmi_string(struct dmi_header *dm, u8 s) 11static char * __init dmi_string(struct dmi_header *dm, u8 s)
10{ 12{
@@ -106,7 +108,7 @@ static void __init dmi_save_devices(struct dmi_header *dm)
106 struct dmi_device *dev; 108 struct dmi_device *dev;
107 109
108 for (i = 0; i < count; i++) { 110 for (i = 0; i < count; i++) {
109 char *d = ((char *) dm) + (i * 2); 111 char *d = (char *)(dm + 1) + (i * 2);
110 112
111 /* Skip disabled device */ 113 /* Skip disabled device */
112 if ((*d & 0x80) == 0) 114 if ((*d & 0x80) == 0)
@@ -184,47 +186,72 @@ static void __init dmi_decode(struct dmi_header *dm)
184 } 186 }
185} 187}
186 188
187void __init dmi_scan_machine(void) 189static int __init dmi_present(char __iomem *p)
188{ 190{
189 u8 buf[15]; 191 u8 buf[15];
190 char __iomem *p, *q; 192 memcpy_fromio(buf, p, 15);
193 if ((memcmp(buf, "_DMI_", 5) == 0) && dmi_checksum(buf)) {
194 u16 num = (buf[13] << 8) | buf[12];
195 u16 len = (buf[7] << 8) | buf[6];
196 u32 base = (buf[11] << 24) | (buf[10] << 16) |
197 (buf[9] << 8) | buf[8];
191 198
192 /* 199 /*
193 * no iounmap() for that ioremap(); it would be a no-op, but it's 200 * DMI version 0.0 means that the real version is taken from
194 * so early in setup that sucker gets confused into doing what 201 * the SMBIOS version, which we don't know at this point.
195 * it shouldn't if we actually call it. 202 */
196 */ 203 if (buf[14] != 0)
197 p = ioremap(0xF0000, 0x10000); 204 printk(KERN_INFO "DMI %d.%d present.\n",
198 if (p == NULL) 205 buf[14] >> 4, buf[14] & 0xF);
199 goto out; 206 else
200 207 printk(KERN_INFO "DMI present.\n");
201 for (q = p; q < p + 0x10000; q += 16) { 208 if (dmi_table(base,len, num, dmi_decode) == 0)
202 memcpy_fromio(buf, q, 15); 209 return 0;
203 if ((memcmp(buf, "_DMI_", 5) == 0) && dmi_checksum(buf)) { 210 }
204 u16 num = (buf[13] << 8) | buf[12]; 211 return 1;
205 u16 len = (buf[7] << 8) | buf[6]; 212}
206 u32 base = (buf[11] << 24) | (buf[10] << 16) | 213
207 (buf[9] << 8) | buf[8]; 214void __init dmi_scan_machine(void)
208 215{
209 /* 216 char __iomem *p, *q;
210 * DMI version 0.0 means that the real version is taken from 217 int rc;
211 * the SMBIOS version, which we don't know at this point. 218
212 */ 219 if (efi_enabled) {
213 if (buf[14] != 0) 220 if (efi.smbios == EFI_INVALID_TABLE_ADDR)
214 printk(KERN_INFO "DMI %d.%d present.\n", 221 goto out;
215 buf[14] >> 4, buf[14] & 0xF); 222
216 else 223 /* This is called as a core_initcall() because it isn't
217 printk(KERN_INFO "DMI present.\n"); 224 * needed during early boot. This also means we can
225 * iounmap the space when we're done with it.
226 */
227 p = dmi_ioremap(efi.smbios, 32);
228 if (p == NULL)
229 goto out;
230
231 rc = dmi_present(p + 0x10); /* offset of _DMI_ string */
232 dmi_iounmap(p, 32);
233 if (!rc)
234 return;
235 }
236 else {
237 /*
238 * no iounmap() for that ioremap(); it would be a no-op, but
239 * it's so early in setup that sucker gets confused into doing
240 * what it shouldn't if we actually call it.
241 */
242 p = dmi_ioremap(0xF0000, 0x10000);
243 if (p == NULL)
244 goto out;
218 245
219 if (dmi_table(base,len, num, dmi_decode) == 0) 246 for (q = p; q < p + 0x10000; q += 16) {
247 rc = dmi_present(q);
248 if (!rc)
220 return; 249 return;
221 } 250 }
222 } 251 }
223 252 out: printk(KERN_INFO "DMI not present or invalid.\n");
224out: printk(KERN_INFO "DMI not present or invalid.\n");
225} 253}
226 254
227
228/** 255/**
229 * dmi_check_system - check system DMI data 256 * dmi_check_system - check system DMI data
230 * @list: array of dmi_system_id structures to match against 257 * @list: array of dmi_system_id structures to match against
@@ -299,3 +326,33 @@ struct dmi_device * dmi_find_device(int type, const char *name,
299 return NULL; 326 return NULL;
300} 327}
301EXPORT_SYMBOL(dmi_find_device); 328EXPORT_SYMBOL(dmi_find_device);
329
330/**
331 * dmi_get_year - Return year of a DMI date
332 * @field: data index (like dmi_get_system_info)
333 *
334 * Returns -1 when the field doesn't exist. 0 when it is broken.
335 */
336int dmi_get_year(int field)
337{
338 int year;
339 char *s = dmi_get_system_info(field);
340
341 if (!s)
342 return -1;
343 if (*s == '\0')
344 return 0;
345 s = strrchr(s, '/');
346 if (!s)
347 return 0;
348
349 s += 1;
350 year = simple_strtoul(s, NULL, 0);
351 if (year && year < 100) { /* 2-digit year */
352 year += 1900;
353 if (year < 1996) /* no dates < spec 1.0 */
354 year += 100;
355 }
356
357 return year;
358}
diff --git a/arch/i386/kernel/efi.c b/arch/i386/kernel/efi.c
index c9cad7ba0d2d..9202b67c4b2e 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();
@@ -361,7 +361,7 @@ void __init efi_init(void)
361 */ 361 */
362 c16 = (efi_char16_t *) boot_ioremap(efi.systab->fw_vendor, 2); 362 c16 = (efi_char16_t *) boot_ioremap(efi.systab->fw_vendor, 2);
363 if (c16) { 363 if (c16) {
364 for (i = 0; i < sizeof(vendor) && *c16; ++i) 364 for (i = 0; i < (sizeof(vendor) - 1) && *c16; ++i)
365 vendor[i] = *c16++; 365 vendor[i] = *c16++;
366 vendor[i] = '\0'; 366 vendor[i] = '\0';
367 } else 367 } else
@@ -381,29 +381,38 @@ void __init efi_init(void)
381 if (config_tables == NULL) 381 if (config_tables == NULL)
382 printk(KERN_ERR PFX "Could not map EFI Configuration Table!\n"); 382 printk(KERN_ERR PFX "Could not map EFI Configuration Table!\n");
383 383
384 efi.mps = EFI_INVALID_TABLE_ADDR;
385 efi.acpi = EFI_INVALID_TABLE_ADDR;
386 efi.acpi20 = EFI_INVALID_TABLE_ADDR;
387 efi.smbios = EFI_INVALID_TABLE_ADDR;
388 efi.sal_systab = EFI_INVALID_TABLE_ADDR;
389 efi.boot_info = EFI_INVALID_TABLE_ADDR;
390 efi.hcdp = EFI_INVALID_TABLE_ADDR;
391 efi.uga = EFI_INVALID_TABLE_ADDR;
392
384 for (i = 0; i < num_config_tables; i++) { 393 for (i = 0; i < num_config_tables; i++) {
385 if (efi_guidcmp(config_tables[i].guid, MPS_TABLE_GUID) == 0) { 394 if (efi_guidcmp(config_tables[i].guid, MPS_TABLE_GUID) == 0) {
386 efi.mps = (void *)config_tables[i].table; 395 efi.mps = config_tables[i].table;
387 printk(KERN_INFO " MPS=0x%lx ", config_tables[i].table); 396 printk(KERN_INFO " MPS=0x%lx ", config_tables[i].table);
388 } else 397 } else
389 if (efi_guidcmp(config_tables[i].guid, ACPI_20_TABLE_GUID) == 0) { 398 if (efi_guidcmp(config_tables[i].guid, ACPI_20_TABLE_GUID) == 0) {
390 efi.acpi20 = __va(config_tables[i].table); 399 efi.acpi20 = config_tables[i].table;
391 printk(KERN_INFO " ACPI 2.0=0x%lx ", config_tables[i].table); 400 printk(KERN_INFO " ACPI 2.0=0x%lx ", config_tables[i].table);
392 } else 401 } else
393 if (efi_guidcmp(config_tables[i].guid, ACPI_TABLE_GUID) == 0) { 402 if (efi_guidcmp(config_tables[i].guid, ACPI_TABLE_GUID) == 0) {
394 efi.acpi = __va(config_tables[i].table); 403 efi.acpi = config_tables[i].table;
395 printk(KERN_INFO " ACPI=0x%lx ", config_tables[i].table); 404 printk(KERN_INFO " ACPI=0x%lx ", config_tables[i].table);
396 } else 405 } else
397 if (efi_guidcmp(config_tables[i].guid, SMBIOS_TABLE_GUID) == 0) { 406 if (efi_guidcmp(config_tables[i].guid, SMBIOS_TABLE_GUID) == 0) {
398 efi.smbios = (void *) config_tables[i].table; 407 efi.smbios = config_tables[i].table;
399 printk(KERN_INFO " SMBIOS=0x%lx ", config_tables[i].table); 408 printk(KERN_INFO " SMBIOS=0x%lx ", config_tables[i].table);
400 } else 409 } else
401 if (efi_guidcmp(config_tables[i].guid, HCDP_TABLE_GUID) == 0) { 410 if (efi_guidcmp(config_tables[i].guid, HCDP_TABLE_GUID) == 0) {
402 efi.hcdp = (void *)config_tables[i].table; 411 efi.hcdp = config_tables[i].table;
403 printk(KERN_INFO " HCDP=0x%lx ", config_tables[i].table); 412 printk(KERN_INFO " HCDP=0x%lx ", config_tables[i].table);
404 } else 413 } else
405 if (efi_guidcmp(config_tables[i].guid, UGA_IO_PROTOCOL_GUID) == 0) { 414 if (efi_guidcmp(config_tables[i].guid, UGA_IO_PROTOCOL_GUID) == 0) {
406 efi.uga = (void *)config_tables[i].table; 415 efi.uga = config_tables[i].table;
407 printk(KERN_INFO " UGA=0x%lx ", config_tables[i].table); 416 printk(KERN_INFO " UGA=0x%lx ", config_tables[i].table);
408 } 417 }
409 } 418 }
@@ -543,7 +552,7 @@ efi_initialize_iomem_resources(struct resource *code_resource,
543 if ((md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT)) > 552 if ((md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT)) >
544 0x100000000ULL) 553 0x100000000ULL)
545 continue; 554 continue;
546 res = alloc_bootmem_low(sizeof(struct resource)); 555 res = kzalloc(sizeof(struct resource), GFP_ATOMIC);
547 switch (md->type) { 556 switch (md->type) {
548 case EFI_RESERVED_TYPE: 557 case EFI_RESERVED_TYPE:
549 res->name = "Reserved Memory"; 558 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..f8f132aa5472 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_possible_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_possible_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}
@@ -648,7 +644,7 @@ failed:
648int __init irqbalance_disable(char *str) 644int __init irqbalance_disable(char *str)
649{ 645{
650 irqbalance_disabled = 1; 646 irqbalance_disabled = 1;
651 return 0; 647 return 1;
652} 648}
653 649
654__setup("noirqbalance", irqbalance_disable); 650__setup("noirqbalance", irqbalance_disable);
@@ -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..f19768789e8a 100644
--- a/arch/i386/kernel/kprobes.c
+++ b/arch/i386/kernel/kprobes.c
@@ -35,12 +35,56 @@
35#include <asm/cacheflush.h> 35#include <asm/cacheflush.h>
36#include <asm/kdebug.h> 36#include <asm/kdebug.h>
37#include <asm/desc.h> 37#include <asm/desc.h>
38#include <asm/uaccess.h>
38 39
39void jprobe_return_end(void); 40void jprobe_return_end(void);
40 41
41DEFINE_PER_CPU(struct kprobe *, current_kprobe) = NULL; 42DEFINE_PER_CPU(struct kprobe *, current_kprobe) = NULL;
42DEFINE_PER_CPU(struct kprobe_ctlblk, kprobe_ctlblk); 43DEFINE_PER_CPU(struct kprobe_ctlblk, kprobe_ctlblk);
43 44
45/* insert a jmp code */
46static inline void set_jmp_op(void *from, void *to)
47{
48 struct __arch_jmp_op {
49 char op;
50 long raddr;
51 } __attribute__((packed)) *jop;
52 jop = (struct __arch_jmp_op *)from;
53 jop->raddr = (long)(to) - ((long)(from) + 5);
54 jop->op = RELATIVEJUMP_INSTRUCTION;
55}
56
57/*
58 * returns non-zero if opcodes can be boosted.
59 */
60static inline int can_boost(kprobe_opcode_t opcode)
61{
62 switch (opcode & 0xf0 ) {
63 case 0x70:
64 return 0; /* can't boost conditional jump */
65 case 0x90:
66 /* can't boost call and pushf */
67 return opcode != 0x9a && opcode != 0x9c;
68 case 0xc0:
69 /* can't boost undefined opcodes and soft-interruptions */
70 return (0xc1 < opcode && opcode < 0xc6) ||
71 (0xc7 < opcode && opcode < 0xcc) || opcode == 0xcf;
72 case 0xd0:
73 /* can boost AA* and XLAT */
74 return (opcode == 0xd4 || opcode == 0xd5 || opcode == 0xd7);
75 case 0xe0:
76 /* can boost in/out and (may be) jmps */
77 return (0xe3 < opcode && opcode != 0xe8);
78 case 0xf0:
79 /* clear and set flags can be boost */
80 return (opcode == 0xf5 || (0xf7 < opcode && opcode < 0xfe));
81 default:
82 /* currently, can't boost 2 bytes opcodes */
83 return opcode != 0x0f;
84 }
85}
86
87
44/* 88/*
45 * returns non-zero if opcode modifies the interrupt flag. 89 * returns non-zero if opcode modifies the interrupt flag.
46 */ 90 */
@@ -65,6 +109,11 @@ int __kprobes arch_prepare_kprobe(struct kprobe *p)
65 109
66 memcpy(p->ainsn.insn, p->addr, MAX_INSN_SIZE * sizeof(kprobe_opcode_t)); 110 memcpy(p->ainsn.insn, p->addr, MAX_INSN_SIZE * sizeof(kprobe_opcode_t));
67 p->opcode = *p->addr; 111 p->opcode = *p->addr;
112 if (can_boost(p->opcode)) {
113 p->ainsn.boostable = 0;
114 } else {
115 p->ainsn.boostable = -1;
116 }
68 return 0; 117 return 0;
69} 118}
70 119
@@ -84,9 +133,9 @@ void __kprobes arch_disarm_kprobe(struct kprobe *p)
84 133
85void __kprobes arch_remove_kprobe(struct kprobe *p) 134void __kprobes arch_remove_kprobe(struct kprobe *p)
86{ 135{
87 down(&kprobe_mutex); 136 mutex_lock(&kprobe_mutex);
88 free_insn_slot(p->ainsn.insn); 137 free_insn_slot(p->ainsn.insn);
89 up(&kprobe_mutex); 138 mutex_unlock(&kprobe_mutex);
90} 139}
91 140
92static inline void save_previous_kprobe(struct kprobe_ctlblk *kcb) 141static inline void save_previous_kprobe(struct kprobe_ctlblk *kcb)
@@ -155,9 +204,13 @@ static int __kprobes kprobe_handler(struct pt_regs *regs)
155{ 204{
156 struct kprobe *p; 205 struct kprobe *p;
157 int ret = 0; 206 int ret = 0;
158 kprobe_opcode_t *addr = NULL; 207 kprobe_opcode_t *addr;
159 unsigned long *lp;
160 struct kprobe_ctlblk *kcb; 208 struct kprobe_ctlblk *kcb;
209#ifdef CONFIG_PREEMPT
210 unsigned pre_preempt_count = preempt_count();
211#endif /* CONFIG_PREEMPT */
212
213 addr = (kprobe_opcode_t *)(regs->eip - sizeof(kprobe_opcode_t));
161 214
162 /* 215 /*
163 * We don't want to be preempted for the entire 216 * We don't want to be preempted for the entire
@@ -166,17 +219,6 @@ static int __kprobes kprobe_handler(struct pt_regs *regs)
166 preempt_disable(); 219 preempt_disable();
167 kcb = get_kprobe_ctlblk(); 220 kcb = get_kprobe_ctlblk();
168 221
169 /* Check if the application is using LDT entry for its code segment and
170 * calculate the address by reading the base address from the LDT entry.
171 */
172 if ((regs->xcs & 4) && (current->mm)) {
173 lp = (unsigned long *) ((unsigned long)((regs->xcs >> 3) * 8)
174 + (char *) current->mm->context.ldt);
175 addr = (kprobe_opcode_t *) (get_desc_base(lp) + regs->eip -
176 sizeof(kprobe_opcode_t));
177 } else {
178 addr = (kprobe_opcode_t *)(regs->eip - sizeof(kprobe_opcode_t));
179 }
180 /* Check we're not actually recursing */ 222 /* Check we're not actually recursing */
181 if (kprobe_running()) { 223 if (kprobe_running()) {
182 p = get_kprobe(addr); 224 p = get_kprobe(addr);
@@ -252,6 +294,21 @@ static int __kprobes kprobe_handler(struct pt_regs *regs)
252 /* handler has already set things up, so skip ss setup */ 294 /* handler has already set things up, so skip ss setup */
253 return 1; 295 return 1;
254 296
297 if (p->ainsn.boostable == 1 &&
298#ifdef CONFIG_PREEMPT
299 !(pre_preempt_count) && /*
300 * This enables booster when the direct
301 * execution path aren't preempted.
302 */
303#endif /* CONFIG_PREEMPT */
304 !p->post_handler && !p->break_handler ) {
305 /* Boost up -- we can execute copied instructions directly */
306 reset_current_kprobe();
307 regs->eip = (unsigned long)p->ainsn.insn;
308 preempt_enable_no_resched();
309 return 1;
310 }
311
255ss_probe: 312ss_probe:
256 prepare_singlestep(p, regs); 313 prepare_singlestep(p, regs);
257 kcb->kprobe_status = KPROBE_HIT_SS; 314 kcb->kprobe_status = KPROBE_HIT_SS;
@@ -267,17 +324,44 @@ no_kprobe:
267 * here. When a retprobed function returns, this probe is hit and 324 * here. When a retprobed function returns, this probe is hit and
268 * trampoline_probe_handler() runs, calling the kretprobe's handler. 325 * trampoline_probe_handler() runs, calling the kretprobe's handler.
269 */ 326 */
270 void kretprobe_trampoline_holder(void) 327 void __kprobes kretprobe_trampoline_holder(void)
271 { 328 {
272 asm volatile ( ".global kretprobe_trampoline\n" 329 asm volatile ( ".global kretprobe_trampoline\n"
273 "kretprobe_trampoline: \n" 330 "kretprobe_trampoline: \n"
274 "nop\n"); 331 " pushf\n"
275 } 332 /* skip cs, eip, orig_eax, es, ds */
333 " subl $20, %esp\n"
334 " pushl %eax\n"
335 " pushl %ebp\n"
336 " pushl %edi\n"
337 " pushl %esi\n"
338 " pushl %edx\n"
339 " pushl %ecx\n"
340 " pushl %ebx\n"
341 " movl %esp, %eax\n"
342 " call trampoline_handler\n"
343 /* move eflags to cs */
344 " movl 48(%esp), %edx\n"
345 " movl %edx, 44(%esp)\n"
346 /* save true return address on eflags */
347 " movl %eax, 48(%esp)\n"
348 " popl %ebx\n"
349 " popl %ecx\n"
350 " popl %edx\n"
351 " popl %esi\n"
352 " popl %edi\n"
353 " popl %ebp\n"
354 " popl %eax\n"
355 /* skip eip, orig_eax, es, ds */
356 " addl $16, %esp\n"
357 " popf\n"
358 " ret\n");
359}
276 360
277/* 361/*
278 * Called when we hit the probe point at kretprobe_trampoline 362 * Called from kretprobe_trampoline
279 */ 363 */
280int __kprobes trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs) 364fastcall void *__kprobes trampoline_handler(struct pt_regs *regs)
281{ 365{
282 struct kretprobe_instance *ri = NULL; 366 struct kretprobe_instance *ri = NULL;
283 struct hlist_head *head; 367 struct hlist_head *head;
@@ -306,8 +390,11 @@ int __kprobes trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs)
306 /* another task is sharing our hash bucket */ 390 /* another task is sharing our hash bucket */
307 continue; 391 continue;
308 392
309 if (ri->rp && ri->rp->handler) 393 if (ri->rp && ri->rp->handler){
394 __get_cpu_var(current_kprobe) = &ri->rp->kp;
310 ri->rp->handler(ri, regs); 395 ri->rp->handler(ri, regs);
396 __get_cpu_var(current_kprobe) = NULL;
397 }
311 398
312 orig_ret_address = (unsigned long)ri->ret_addr; 399 orig_ret_address = (unsigned long)ri->ret_addr;
313 recycle_rp_inst(ri); 400 recycle_rp_inst(ri);
@@ -322,18 +409,10 @@ int __kprobes trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs)
322 } 409 }
323 410
324 BUG_ON(!orig_ret_address || (orig_ret_address == trampoline_address)); 411 BUG_ON(!orig_ret_address || (orig_ret_address == trampoline_address));
325 regs->eip = orig_ret_address;
326 412
327 reset_current_kprobe();
328 spin_unlock_irqrestore(&kretprobe_lock, flags); 413 spin_unlock_irqrestore(&kretprobe_lock, flags);
329 preempt_enable_no_resched();
330 414
331 /* 415 return (void*)orig_ret_address;
332 * By returning a non-zero value, we are telling
333 * kprobe_handler() that we don't want the post_handler
334 * to run (and have re-enabled preemption)
335 */
336 return 1;
337} 416}
338 417
339/* 418/*
@@ -357,15 +436,17 @@ int __kprobes trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs)
357 * 2) If the single-stepped instruction was a call, the return address 436 * 2) If the single-stepped instruction was a call, the return address
358 * that is atop the stack is the address following the copied instruction. 437 * that is atop the stack is the address following the copied instruction.
359 * We need to make it the address following the original instruction. 438 * We need to make it the address following the original instruction.
439 *
440 * This function also checks instruction size for preparing direct execution.
360 */ 441 */
361static void __kprobes resume_execution(struct kprobe *p, 442static void __kprobes resume_execution(struct kprobe *p,
362 struct pt_regs *regs, struct kprobe_ctlblk *kcb) 443 struct pt_regs *regs, struct kprobe_ctlblk *kcb)
363{ 444{
364 unsigned long *tos = (unsigned long *)&regs->esp; 445 unsigned long *tos = (unsigned long *)&regs->esp;
365 unsigned long next_eip = 0;
366 unsigned long copy_eip = (unsigned long)p->ainsn.insn; 446 unsigned long copy_eip = (unsigned long)p->ainsn.insn;
367 unsigned long orig_eip = (unsigned long)p->addr; 447 unsigned long orig_eip = (unsigned long)p->addr;
368 448
449 regs->eflags &= ~TF_MASK;
369 switch (p->ainsn.insn[0]) { 450 switch (p->ainsn.insn[0]) {
370 case 0x9c: /* pushfl */ 451 case 0x9c: /* pushfl */
371 *tos &= ~(TF_MASK | IF_MASK); 452 *tos &= ~(TF_MASK | IF_MASK);
@@ -375,37 +456,51 @@ static void __kprobes resume_execution(struct kprobe *p,
375 case 0xcb: 456 case 0xcb:
376 case 0xc2: 457 case 0xc2:
377 case 0xca: 458 case 0xca:
378 regs->eflags &= ~TF_MASK; 459 case 0xea: /* jmp absolute -- eip is correct */
379 /* eip is already adjusted, no more changes required*/ 460 /* eip is already adjusted, no more changes required */
380 return; 461 p->ainsn.boostable = 1;
462 goto no_change;
381 case 0xe8: /* call relative - Fix return addr */ 463 case 0xe8: /* call relative - Fix return addr */
382 *tos = orig_eip + (*tos - copy_eip); 464 *tos = orig_eip + (*tos - copy_eip);
383 break; 465 break;
384 case 0xff: 466 case 0xff:
385 if ((p->ainsn.insn[1] & 0x30) == 0x10) { 467 if ((p->ainsn.insn[1] & 0x30) == 0x10) {
386 /* call absolute, indirect */ 468 /* call absolute, indirect */
387 /* Fix return addr; eip is correct. */ 469 /*
388 next_eip = regs->eip; 470 * Fix return addr; eip is correct.
471 * But this is not boostable
472 */
389 *tos = orig_eip + (*tos - copy_eip); 473 *tos = orig_eip + (*tos - copy_eip);
474 goto no_change;
390 } else if (((p->ainsn.insn[1] & 0x31) == 0x20) || /* jmp near, absolute indirect */ 475 } else if (((p->ainsn.insn[1] & 0x31) == 0x20) || /* jmp near, absolute indirect */
391 ((p->ainsn.insn[1] & 0x31) == 0x21)) { /* jmp far, absolute indirect */ 476 ((p->ainsn.insn[1] & 0x31) == 0x21)) { /* jmp far, absolute indirect */
392 /* eip is correct. */ 477 /* eip is correct. And this is boostable */
393 next_eip = regs->eip; 478 p->ainsn.boostable = 1;
479 goto no_change;
394 } 480 }
395 break;
396 case 0xea: /* jmp absolute -- eip is correct */
397 next_eip = regs->eip;
398 break;
399 default: 481 default:
400 break; 482 break;
401 } 483 }
402 484
403 regs->eflags &= ~TF_MASK; 485 if (p->ainsn.boostable == 0) {
404 if (next_eip) { 486 if ((regs->eip > copy_eip) &&
405 regs->eip = next_eip; 487 (regs->eip - copy_eip) + 5 < MAX_INSN_SIZE) {
406 } else { 488 /*
407 regs->eip = orig_eip + (regs->eip - copy_eip); 489 * These instructions can be executed directly if it
490 * jumps back to correct address.
491 */
492 set_jmp_op((void *)regs->eip,
493 (void *)orig_eip + (regs->eip - copy_eip));
494 p->ainsn.boostable = 1;
495 } else {
496 p->ainsn.boostable = -1;
497 }
408 } 498 }
499
500 regs->eip = orig_eip + (regs->eip - copy_eip);
501
502no_change:
503 return;
409} 504}
410 505
411/* 506/*
@@ -453,15 +548,57 @@ static inline int kprobe_fault_handler(struct pt_regs *regs, int trapnr)
453 struct kprobe *cur = kprobe_running(); 548 struct kprobe *cur = kprobe_running();
454 struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); 549 struct kprobe_ctlblk *kcb = get_kprobe_ctlblk();
455 550
456 if (cur->fault_handler && cur->fault_handler(cur, regs, trapnr)) 551 switch(kcb->kprobe_status) {
457 return 1; 552 case KPROBE_HIT_SS:
458 553 case KPROBE_REENTER:
459 if (kcb->kprobe_status & KPROBE_HIT_SS) { 554 /*
460 resume_execution(cur, regs, kcb); 555 * We are here because the instruction being single
556 * stepped caused a page fault. We reset the current
557 * kprobe and the eip points back to the probe address
558 * and allow the page fault handler to continue as a
559 * normal page fault.
560 */
561 regs->eip = (unsigned long)cur->addr;
461 regs->eflags |= kcb->kprobe_old_eflags; 562 regs->eflags |= kcb->kprobe_old_eflags;
462 563 if (kcb->kprobe_status == KPROBE_REENTER)
463 reset_current_kprobe(); 564 restore_previous_kprobe(kcb);
565 else
566 reset_current_kprobe();
464 preempt_enable_no_resched(); 567 preempt_enable_no_resched();
568 break;
569 case KPROBE_HIT_ACTIVE:
570 case KPROBE_HIT_SSDONE:
571 /*
572 * We increment the nmissed count for accounting,
573 * we can also use npre/npostfault count for accouting
574 * these specific fault cases.
575 */
576 kprobes_inc_nmissed_count(cur);
577
578 /*
579 * We come here because instructions in the pre/post
580 * handler caused the page_fault, this could happen
581 * if handler tries to access user space by
582 * copy_from_user(), get_user() etc. Let the
583 * user-specified handler try to fix it first.
584 */
585 if (cur->fault_handler && cur->fault_handler(cur, regs, trapnr))
586 return 1;
587
588 /*
589 * In case the user-specified fault handler returned
590 * zero, try to fix up.
591 */
592 if (fixup_exception(regs))
593 return 1;
594
595 /*
596 * fixup_exception() could not handle it,
597 * Let do_page_fault() fix it.
598 */
599 break;
600 default:
601 break;
465 } 602 }
466 return 0; 603 return 0;
467} 604}
@@ -475,6 +612,9 @@ int __kprobes kprobe_exceptions_notify(struct notifier_block *self,
475 struct die_args *args = (struct die_args *)data; 612 struct die_args *args = (struct die_args *)data;
476 int ret = NOTIFY_DONE; 613 int ret = NOTIFY_DONE;
477 614
615 if (args->regs && user_mode(args->regs))
616 return ret;
617
478 switch (val) { 618 switch (val) {
479 case DIE_INT3: 619 case DIE_INT3:
480 if (kprobe_handler(args->regs)) 620 if (kprobe_handler(args->regs))
@@ -564,12 +704,7 @@ int __kprobes longjmp_break_handler(struct kprobe *p, struct pt_regs *regs)
564 return 0; 704 return 0;
565} 705}
566 706
567static struct kprobe trampoline_p = {
568 .addr = (kprobe_opcode_t *) &kretprobe_trampoline,
569 .pre_handler = trampoline_probe_handler
570};
571
572int __init arch_init_kprobes(void) 707int __init arch_init_kprobes(void)
573{ 708{
574 return register_kprobe(&trampoline_p); 709 return 0;
575} 710}
diff --git a/arch/i386/kernel/microcode.c b/arch/i386/kernel/microcode.c
index 5390b521aca0..e7c138f66c5a 100644
--- a/arch/i386/kernel/microcode.c
+++ b/arch/i386/kernel/microcode.c
@@ -81,6 +81,7 @@
81#include <linux/miscdevice.h> 81#include <linux/miscdevice.h>
82#include <linux/spinlock.h> 82#include <linux/spinlock.h>
83#include <linux/mm.h> 83#include <linux/mm.h>
84#include <linux/mutex.h>
84 85
85#include <asm/msr.h> 86#include <asm/msr.h>
86#include <asm/uaccess.h> 87#include <asm/uaccess.h>
@@ -114,7 +115,7 @@ MODULE_LICENSE("GPL");
114static DEFINE_SPINLOCK(microcode_update_lock); 115static DEFINE_SPINLOCK(microcode_update_lock);
115 116
116/* no concurrent ->write()s are allowed on /dev/cpu/microcode */ 117/* no concurrent ->write()s are allowed on /dev/cpu/microcode */
117static DECLARE_MUTEX(microcode_sem); 118static DEFINE_MUTEX(microcode_mutex);
118 119
119static void __user *user_buffer; /* user area microcode data buffer */ 120static void __user *user_buffer; /* user area microcode data buffer */
120static unsigned int user_buffer_size; /* it's size */ 121static unsigned int user_buffer_size; /* it's size */
@@ -202,8 +203,6 @@ static inline void mark_microcode_update (int cpu_num, microcode_header_t *mc_he
202 } else if (mc_header->rev == uci->rev) { 203 } else if (mc_header->rev == uci->rev) {
203 /* notify the caller of success on this cpu */ 204 /* notify the caller of success on this cpu */
204 uci->err = MC_SUCCESS; 205 uci->err = MC_SUCCESS;
205 printk(KERN_ERR "microcode: CPU%d already at revision"
206 " 0x%x (current=0x%x)\n", cpu_num, mc_header->rev, uci->rev);
207 goto out; 206 goto out;
208 } 207 }
209 208
@@ -369,7 +368,6 @@ static void do_update_one (void * unused)
369 struct ucode_cpu_info *uci = ucode_cpu_info + cpu_num; 368 struct ucode_cpu_info *uci = ucode_cpu_info + cpu_num;
370 369
371 if (uci->mc == NULL) { 370 if (uci->mc == NULL) {
372 printk(KERN_INFO "microcode: No new microcode data for CPU%d\n", cpu_num);
373 return; 371 return;
374 } 372 }
375 373
@@ -447,7 +445,7 @@ static ssize_t microcode_write (struct file *file, const char __user *buf, size_
447 return -EINVAL; 445 return -EINVAL;
448 } 446 }
449 447
450 down(&microcode_sem); 448 mutex_lock(&microcode_mutex);
451 449
452 user_buffer = (void __user *) buf; 450 user_buffer = (void __user *) buf;
453 user_buffer_size = (int) len; 451 user_buffer_size = (int) len;
@@ -456,31 +454,14 @@ static ssize_t microcode_write (struct file *file, const char __user *buf, size_
456 if (!ret) 454 if (!ret)
457 ret = (ssize_t)len; 455 ret = (ssize_t)len;
458 456
459 up(&microcode_sem); 457 mutex_unlock(&microcode_mutex);
460 458
461 return ret; 459 return ret;
462} 460}
463 461
464static int microcode_ioctl (struct inode *inode, struct file *file,
465 unsigned int cmd, unsigned long arg)
466{
467 switch (cmd) {
468 /*
469 * XXX: will be removed after microcode_ctl
470 * is updated to ignore failure of this ioctl()
471 */
472 case MICROCODE_IOCFREE:
473 return 0;
474 default:
475 return -EINVAL;
476 }
477 return -EINVAL;
478}
479
480static struct file_operations microcode_fops = { 462static struct file_operations microcode_fops = {
481 .owner = THIS_MODULE, 463 .owner = THIS_MODULE,
482 .write = microcode_write, 464 .write = microcode_write,
483 .ioctl = microcode_ioctl,
484 .open = microcode_open, 465 .open = microcode_open,
485}; 466};
486 467
@@ -511,7 +492,6 @@ static int __init microcode_init (void)
511static void __exit microcode_exit (void) 492static void __exit microcode_exit (void)
512{ 493{
513 misc_deregister(&microcode_dev); 494 misc_deregister(&microcode_dev);
514 printk(KERN_INFO "IA-32 Microcode Update Driver v" MICROCODE_VERSION " unregistered\n");
515} 495}
516 496
517module_init(microcode_init) 497module_init(microcode_init)
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..d43b498ec745 100644
--- a/arch/i386/kernel/nmi.c
+++ b/arch/i386/kernel/nmi.c
@@ -138,12 +138,12 @@ static int __init check_nmi_watchdog(void)
138 if (nmi_watchdog == NMI_LOCAL_APIC) 138 if (nmi_watchdog == NMI_LOCAL_APIC)
139 smp_call_function(nmi_cpu_busy, (void *)&endflag, 0, 0); 139 smp_call_function(nmi_cpu_busy, (void *)&endflag, 0, 0);
140 140
141 for_each_cpu(cpu) 141 for_each_possible_cpu(cpu)
142 prev_nmi_count[cpu] = per_cpu(irq_stat, cpu).__nmi_count; 142 prev_nmi_count[cpu] = per_cpu(irq_stat, cpu).__nmi_count;
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_possible_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_possible_cpu(i)
514 alert_counter[i] = 0; 514 alert_counter[i] = 0;
515 515
516 /* 516 /*
@@ -529,7 +529,8 @@ void nmi_watchdog_tick (struct pt_regs * regs)
529 * always switch the stack NMI-atomically, it's safe to use 529 * always switch the stack NMI-atomically, it's safe to use
530 * smp_processor_id(). 530 * smp_processor_id().
531 */ 531 */
532 int sum, cpu = smp_processor_id(); 532 unsigned int sum;
533 int cpu = smp_processor_id();
533 534
534 sum = per_cpu(irq_stat, cpu).apic_timer_irqs; 535 sum = per_cpu(irq_stat, cpu).apic_timer_irqs;
535 536
@@ -543,7 +544,7 @@ void nmi_watchdog_tick (struct pt_regs * regs)
543 /* 544 /*
544 * die_nmi will return ONLY if NOTIFY_STOP happens.. 545 * die_nmi will return ONLY if NOTIFY_STOP happens..
545 */ 546 */
546 die_nmi(regs, "NMI Watchdog detected LOCKUP"); 547 die_nmi(regs, "BUG: NMI Watchdog detected LOCKUP");
547 } else { 548 } else {
548 last_irq_sums[cpu] = sum; 549 last_irq_sums[cpu] = sum;
549 alert_counter[cpu] = 0; 550 alert_counter[cpu] = 0;
diff --git a/arch/i386/kernel/process.c b/arch/i386/kernel/process.c
index 0480454ebffa..6259afea46d1 100644
--- a/arch/i386/kernel/process.c
+++ b/arch/i386/kernel/process.c
@@ -38,7 +38,6 @@
38#include <linux/kallsyms.h> 38#include <linux/kallsyms.h>
39#include <linux/ptrace.h> 39#include <linux/ptrace.h>
40#include <linux/random.h> 40#include <linux/random.h>
41#include <linux/kprobes.h>
42 41
43#include <asm/uaccess.h> 42#include <asm/uaccess.h>
44#include <asm/pgtable.h> 43#include <asm/pgtable.h>
@@ -295,7 +294,7 @@ void show_regs(struct pt_regs * regs)
295 printk("EIP: %04x:[<%08lx>] CPU: %d\n",0xffff & regs->xcs,regs->eip, smp_processor_id()); 294 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); 295 print_symbol("EIP is at %s\n", regs->eip);
297 296
298 if (user_mode(regs)) 297 if (user_mode_vm(regs))
299 printk(" ESP: %04x:%08lx",0xffff & regs->xss,regs->esp); 298 printk(" ESP: %04x:%08lx",0xffff & regs->xss,regs->esp);
300 printk(" EFLAGS: %08lx %s (%s %.*s)\n", 299 printk(" EFLAGS: %08lx %s (%s %.*s)\n",
301 regs->eflags, print_tainted(), system_utsname.release, 300 regs->eflags, print_tainted(), system_utsname.release,
@@ -364,13 +363,6 @@ void exit_thread(void)
364 struct task_struct *tsk = current; 363 struct task_struct *tsk = current;
365 struct thread_struct *t = &tsk->thread; 364 struct thread_struct *t = &tsk->thread;
366 365
367 /*
368 * Remove function-return probe instances associated with this task
369 * and put them back on the free list. Do not insert an exit probe for
370 * this function, it will be disabled by kprobe_flush_task if you do.
371 */
372 kprobe_flush_task(tsk);
373
374 /* The process may have allocated an io port bitmap... nuke it. */ 366 /* The process may have allocated an io port bitmap... nuke it. */
375 if (unlikely(NULL != t->io_bitmap_ptr)) { 367 if (unlikely(NULL != t->io_bitmap_ptr)) {
376 int cpu = get_cpu(); 368 int cpu = get_cpu();
@@ -789,7 +781,6 @@ unsigned long get_wchan(struct task_struct *p)
789 } while (count++ < 16); 781 } while (count++ < 16);
790 return 0; 782 return 0;
791} 783}
792EXPORT_SYMBOL(get_wchan);
793 784
794/* 785/*
795 * sys_alloc_thread_area: get a yet unused TLS descriptor index. 786 * sys_alloc_thread_area: get a yet unused TLS descriptor index.
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 a0b407585679..eacc3f0a2ea4 100644
--- a/arch/i386/kernel/setup.c
+++ b/arch/i386/kernel/setup.c
@@ -47,6 +47,7 @@
47#include <linux/kexec.h> 47#include <linux/kexec.h>
48#include <linux/crash_dump.h> 48#include <linux/crash_dump.h>
49#include <linux/dmi.h> 49#include <linux/dmi.h>
50#include <linux/pfn.h>
50 51
51#include <video/edid.h> 52#include <video/edid.h>
52 53
@@ -1059,10 +1060,10 @@ static int __init
1059free_available_memory(unsigned long start, unsigned long end, void *arg) 1060free_available_memory(unsigned long start, unsigned long end, void *arg)
1060{ 1061{
1061 /* check max_low_pfn */ 1062 /* check max_low_pfn */
1062 if (start >= ((max_low_pfn + 1) << PAGE_SHIFT)) 1063 if (start >= (max_low_pfn << PAGE_SHIFT))
1063 return 0; 1064 return 0;
1064 if (end >= ((max_low_pfn + 1) << PAGE_SHIFT)) 1065 if (end >= (max_low_pfn << PAGE_SHIFT))
1065 end = (max_low_pfn + 1) << PAGE_SHIFT; 1066 end = max_low_pfn << PAGE_SHIFT;
1066 if (start < end) 1067 if (start < end)
1067 free_bootmem(start, end - start); 1068 free_bootmem(start, end - start);
1068 1069
@@ -1287,9 +1288,7 @@ legacy_init_iomem_resources(struct resource *code_resource, struct resource *dat
1287 probe_roms(); 1288 probe_roms();
1288 for (i = 0; i < e820.nr_map; i++) { 1289 for (i = 0; i < e820.nr_map; i++) {
1289 struct resource *res; 1290 struct resource *res;
1290 if (e820.map[i].addr + e820.map[i].size > 0x100000000ULL) 1291 res = kzalloc(sizeof(struct resource), GFP_ATOMIC);
1291 continue;
1292 res = alloc_bootmem_low(sizeof(struct resource));
1293 switch (e820.map[i].type) { 1292 switch (e820.map[i].type) {
1294 case E820_RAM: res->name = "System RAM"; break; 1293 case E820_RAM: res->name = "System RAM"; break;
1295 case E820_ACPI: res->name = "ACPI Tables"; break; 1294 case E820_ACPI: res->name = "ACPI Tables"; break;
@@ -1317,13 +1316,15 @@ legacy_init_iomem_resources(struct resource *code_resource, struct resource *dat
1317 1316
1318/* 1317/*
1319 * 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).
1320 */ 1322 */
1321static void __init register_memory(void) 1323static int __init request_standard_resources(void)
1322{ 1324{
1323 unsigned long gapstart, gapsize, round; 1325 int i;
1324 unsigned long long last;
1325 int i;
1326 1326
1327 printk("Setting up standard PCI resources\n");
1327 if (efi_enabled) 1328 if (efi_enabled)
1328 efi_initialize_iomem_resources(&code_resource, &data_resource); 1329 efi_initialize_iomem_resources(&code_resource, &data_resource);
1329 else 1330 else
@@ -1335,6 +1336,16 @@ static void __init register_memory(void)
1335 /* 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 */
1336 for (i = 0; i < STANDARD_IO_RESOURCES; i++) 1337 for (i = 0; i < STANDARD_IO_RESOURCES; i++)
1337 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;
1338 1349
1339 /* 1350 /*
1340 * 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
@@ -1378,101 +1389,6 @@ static void __init register_memory(void)
1378 pci_mem_start, gapstart, gapsize); 1389 pci_mem_start, gapstart, gapsize);
1379} 1390}
1380 1391
1381/* Use inline assembly to define this because the nops are defined
1382 as inline assembly strings in the include files and we cannot
1383 get them easily into strings. */
1384asm("\t.data\nintelnops: "
1385 GENERIC_NOP1 GENERIC_NOP2 GENERIC_NOP3 GENERIC_NOP4 GENERIC_NOP5 GENERIC_NOP6
1386 GENERIC_NOP7 GENERIC_NOP8);
1387asm("\t.data\nk8nops: "
1388 K8_NOP1 K8_NOP2 K8_NOP3 K8_NOP4 K8_NOP5 K8_NOP6
1389 K8_NOP7 K8_NOP8);
1390asm("\t.data\nk7nops: "
1391 K7_NOP1 K7_NOP2 K7_NOP3 K7_NOP4 K7_NOP5 K7_NOP6
1392 K7_NOP7 K7_NOP8);
1393
1394extern unsigned char intelnops[], k8nops[], k7nops[];
1395static unsigned char *intel_nops[ASM_NOP_MAX+1] = {
1396 NULL,
1397 intelnops,
1398 intelnops + 1,
1399 intelnops + 1 + 2,
1400 intelnops + 1 + 2 + 3,
1401 intelnops + 1 + 2 + 3 + 4,
1402 intelnops + 1 + 2 + 3 + 4 + 5,
1403 intelnops + 1 + 2 + 3 + 4 + 5 + 6,
1404 intelnops + 1 + 2 + 3 + 4 + 5 + 6 + 7,
1405};
1406static unsigned char *k8_nops[ASM_NOP_MAX+1] = {
1407 NULL,
1408 k8nops,
1409 k8nops + 1,
1410 k8nops + 1 + 2,
1411 k8nops + 1 + 2 + 3,
1412 k8nops + 1 + 2 + 3 + 4,
1413 k8nops + 1 + 2 + 3 + 4 + 5,
1414 k8nops + 1 + 2 + 3 + 4 + 5 + 6,
1415 k8nops + 1 + 2 + 3 + 4 + 5 + 6 + 7,
1416};
1417static unsigned char *k7_nops[ASM_NOP_MAX+1] = {
1418 NULL,
1419 k7nops,
1420 k7nops + 1,
1421 k7nops + 1 + 2,
1422 k7nops + 1 + 2 + 3,
1423 k7nops + 1 + 2 + 3 + 4,
1424 k7nops + 1 + 2 + 3 + 4 + 5,
1425 k7nops + 1 + 2 + 3 + 4 + 5 + 6,
1426 k7nops + 1 + 2 + 3 + 4 + 5 + 6 + 7,
1427};
1428static struct nop {
1429 int cpuid;
1430 unsigned char **noptable;
1431} noptypes[] = {
1432 { X86_FEATURE_K8, k8_nops },
1433 { X86_FEATURE_K7, k7_nops },
1434 { -1, NULL }
1435};
1436
1437/* Replace instructions with better alternatives for this CPU type.
1438
1439 This runs before SMP is initialized to avoid SMP problems with
1440 self modifying code. This implies that assymetric systems where
1441 APs have less capabilities than the boot processor are not handled.
1442 Tough. Make sure you disable such features by hand. */
1443void apply_alternatives(void *start, void *end)
1444{
1445 struct alt_instr *a;
1446 int diff, i, k;
1447 unsigned char **noptable = intel_nops;
1448 for (i = 0; noptypes[i].cpuid >= 0; i++) {
1449 if (boot_cpu_has(noptypes[i].cpuid)) {
1450 noptable = noptypes[i].noptable;
1451 break;
1452 }
1453 }
1454 for (a = start; (void *)a < end; a++) {
1455 if (!boot_cpu_has(a->cpuid))
1456 continue;
1457 BUG_ON(a->replacementlen > a->instrlen);
1458 memcpy(a->instr, a->replacement, a->replacementlen);
1459 diff = a->instrlen - a->replacementlen;
1460 /* Pad the rest with nops */
1461 for (i = a->replacementlen; diff > 0; diff -= k, i += k) {
1462 k = diff;
1463 if (k > ASM_NOP_MAX)
1464 k = ASM_NOP_MAX;
1465 memcpy(a->instr + i, noptable[k], k);
1466 }
1467 }
1468}
1469
1470void __init alternative_instructions(void)
1471{
1472 extern struct alt_instr __alt_instructions[], __alt_instructions_end[];
1473 apply_alternatives(__alt_instructions, __alt_instructions_end);
1474}
1475
1476static char * __init machine_specific_memory_setup(void); 1392static char * __init machine_specific_memory_setup(void);
1477 1393
1478#ifdef CONFIG_MCA 1394#ifdef CONFIG_MCA
@@ -1555,6 +1471,16 @@ void __init setup_arch(char **cmdline_p)
1555 1471
1556 parse_cmdline_early(cmdline_p); 1472 parse_cmdline_early(cmdline_p);
1557 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
1558 max_low_pfn = setup_memory(); 1484 max_low_pfn = setup_memory();
1559 1485
1560 /* 1486 /*
@@ -1579,19 +1505,6 @@ void __init setup_arch(char **cmdline_p)
1579 * NOTE: at this point the bootmem allocator is fully available. 1505 * NOTE: at this point the bootmem allocator is fully available.
1580 */ 1506 */
1581 1507
1582#ifdef CONFIG_EARLY_PRINTK
1583 {
1584 char *s = strstr(*cmdline_p, "earlyprintk=");
1585 if (s) {
1586 extern void setup_early_printk(char *);
1587
1588 setup_early_printk(strchr(s, '=') + 1);
1589 printk("early console enabled\n");
1590 }
1591 }
1592#endif
1593
1594
1595 dmi_scan_machine(); 1508 dmi_scan_machine();
1596 1509
1597#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 eba7f53f8b4a..a6969903f2d6 100644
--- a/arch/i386/kernel/smpboot.c
+++ b/arch/i386/kernel/smpboot.c
@@ -72,6 +72,9 @@ int phys_proc_id[NR_CPUS] __read_mostly = {[0 ... NR_CPUS-1] = BAD_APICID};
72/* Core ID of each logical CPU */ 72/* Core ID of each logical CPU */
73int cpu_core_id[NR_CPUS] __read_mostly = {[0 ... NR_CPUS-1] = BAD_APICID}; 73int cpu_core_id[NR_CPUS] __read_mostly = {[0 ... NR_CPUS-1] = BAD_APICID};
74 74
75/* Last level cache ID of each logical CPU */
76int cpu_llc_id[NR_CPUS] __cpuinitdata = {[0 ... NR_CPUS-1] = BAD_APICID};
77
75/* representing HT siblings of each logical CPU */ 78/* representing HT siblings of each logical CPU */
76cpumask_t cpu_sibling_map[NR_CPUS] __read_mostly; 79cpumask_t cpu_sibling_map[NR_CPUS] __read_mostly;
77EXPORT_SYMBOL(cpu_sibling_map); 80EXPORT_SYMBOL(cpu_sibling_map);
@@ -440,6 +443,18 @@ static void __devinit smp_callin(void)
440 443
441static int cpucount; 444static int cpucount;
442 445
446/* maps the cpu to the sched domain representing multi-core */
447cpumask_t cpu_coregroup_map(int cpu)
448{
449 struct cpuinfo_x86 *c = cpu_data + cpu;
450 /*
451 * For perf, we return last level cache shared map.
452 * TBD: when power saving sched policy is added, we will return
453 * cpu_core_map when power saving policy is enabled
454 */
455 return c->llc_shared_map;
456}
457
443/* representing cpus for which sibling maps can be computed */ 458/* representing cpus for which sibling maps can be computed */
444static cpumask_t cpu_sibling_setup_map; 459static cpumask_t cpu_sibling_setup_map;
445 460
@@ -459,12 +474,16 @@ set_cpu_sibling_map(int cpu)
459 cpu_set(cpu, cpu_sibling_map[i]); 474 cpu_set(cpu, cpu_sibling_map[i]);
460 cpu_set(i, cpu_core_map[cpu]); 475 cpu_set(i, cpu_core_map[cpu]);
461 cpu_set(cpu, cpu_core_map[i]); 476 cpu_set(cpu, cpu_core_map[i]);
477 cpu_set(i, c[cpu].llc_shared_map);
478 cpu_set(cpu, c[i].llc_shared_map);
462 } 479 }
463 } 480 }
464 } else { 481 } else {
465 cpu_set(cpu, cpu_sibling_map[cpu]); 482 cpu_set(cpu, cpu_sibling_map[cpu]);
466 } 483 }
467 484
485 cpu_set(cpu, c[cpu].llc_shared_map);
486
468 if (current_cpu_data.x86_max_cores == 1) { 487 if (current_cpu_data.x86_max_cores == 1) {
469 cpu_core_map[cpu] = cpu_sibling_map[cpu]; 488 cpu_core_map[cpu] = cpu_sibling_map[cpu];
470 c[cpu].booted_cores = 1; 489 c[cpu].booted_cores = 1;
@@ -472,6 +491,11 @@ set_cpu_sibling_map(int cpu)
472 } 491 }
473 492
474 for_each_cpu_mask(i, cpu_sibling_setup_map) { 493 for_each_cpu_mask(i, cpu_sibling_setup_map) {
494 if (cpu_llc_id[cpu] != BAD_APICID &&
495 cpu_llc_id[cpu] == cpu_llc_id[i]) {
496 cpu_set(i, c[cpu].llc_shared_map);
497 cpu_set(cpu, c[i].llc_shared_map);
498 }
475 if (phys_proc_id[cpu] == phys_proc_id[i]) { 499 if (phys_proc_id[cpu] == phys_proc_id[i]) {
476 cpu_set(i, cpu_core_map[cpu]); 500 cpu_set(i, cpu_core_map[cpu]);
477 cpu_set(cpu, cpu_core_map[i]); 501 cpu_set(cpu, cpu_core_map[i]);
@@ -899,6 +923,7 @@ static int __devinit do_boot_cpu(int apicid, int cpu)
899 unsigned short nmi_high = 0, nmi_low = 0; 923 unsigned short nmi_high = 0, nmi_low = 0;
900 924
901 ++cpucount; 925 ++cpucount;
926 alternatives_smp_switch(1);
902 927
903 /* 928 /*
904 * We can't use kernel_thread since we must avoid to 929 * We can't use kernel_thread since we must avoid to
@@ -1002,7 +1027,6 @@ void cpu_exit_clear(void)
1002 1027
1003 cpu_clear(cpu, cpu_callout_map); 1028 cpu_clear(cpu, cpu_callout_map);
1004 cpu_clear(cpu, cpu_callin_map); 1029 cpu_clear(cpu, cpu_callin_map);
1005 cpu_clear(cpu, cpu_present_map);
1006 1030
1007 cpu_clear(cpu, smp_commenced_mask); 1031 cpu_clear(cpu, smp_commenced_mask);
1008 unmap_cpu_to_logical_apicid(cpu); 1032 unmap_cpu_to_logical_apicid(cpu);
@@ -1014,21 +1038,20 @@ struct warm_boot_cpu_info {
1014 int cpu; 1038 int cpu;
1015}; 1039};
1016 1040
1017static void __devinit do_warm_boot_cpu(void *p) 1041static void __cpuinit do_warm_boot_cpu(void *p)
1018{ 1042{
1019 struct warm_boot_cpu_info *info = p; 1043 struct warm_boot_cpu_info *info = p;
1020 do_boot_cpu(info->apicid, info->cpu); 1044 do_boot_cpu(info->apicid, info->cpu);
1021 complete(info->complete); 1045 complete(info->complete);
1022} 1046}
1023 1047
1024int __devinit smp_prepare_cpu(int cpu) 1048static int __cpuinit __smp_prepare_cpu(int cpu)
1025{ 1049{
1026 DECLARE_COMPLETION(done); 1050 DECLARE_COMPLETION(done);
1027 struct warm_boot_cpu_info info; 1051 struct warm_boot_cpu_info info;
1028 struct work_struct task; 1052 struct work_struct task;
1029 int apicid, ret; 1053 int apicid, ret;
1030 1054
1031 lock_cpu_hotplug();
1032 apicid = x86_cpu_to_apicid[cpu]; 1055 apicid = x86_cpu_to_apicid[cpu];
1033 if (apicid == BAD_APICID) { 1056 if (apicid == BAD_APICID) {
1034 ret = -ENODEV; 1057 ret = -ENODEV;
@@ -1053,7 +1076,6 @@ int __devinit smp_prepare_cpu(int cpu)
1053 zap_low_mappings(); 1076 zap_low_mappings();
1054 ret = 0; 1077 ret = 0;
1055exit: 1078exit:
1056 unlock_cpu_hotplug();
1057 return ret; 1079 return ret;
1058} 1080}
1059#endif 1081#endif
@@ -1358,6 +1380,8 @@ void __cpu_die(unsigned int cpu)
1358 /* They ack this in play_dead by setting CPU_DEAD */ 1380 /* They ack this in play_dead by setting CPU_DEAD */
1359 if (per_cpu(cpu_state, cpu) == CPU_DEAD) { 1381 if (per_cpu(cpu_state, cpu) == CPU_DEAD) {
1360 printk ("CPU %d is now offline\n", cpu); 1382 printk ("CPU %d is now offline\n", cpu);
1383 if (1 == num_online_cpus())
1384 alternatives_smp_switch(0);
1361 return; 1385 return;
1362 } 1386 }
1363 msleep(100); 1387 msleep(100);
@@ -1379,6 +1403,22 @@ void __cpu_die(unsigned int cpu)
1379 1403
1380int __devinit __cpu_up(unsigned int cpu) 1404int __devinit __cpu_up(unsigned int cpu)
1381{ 1405{
1406#ifdef CONFIG_HOTPLUG_CPU
1407 int ret=0;
1408
1409 /*
1410 * We do warm boot only on cpus that had booted earlier
1411 * Otherwise cold boot is all handled from smp_boot_cpus().
1412 * cpu_callin_map is set during AP kickstart process. Its reset
1413 * when a cpu is taken offline from cpu_exit_clear().
1414 */
1415 if (!cpu_isset(cpu, cpu_callin_map))
1416 ret = __smp_prepare_cpu(cpu);
1417
1418 if (ret)
1419 return -EIO;
1420#endif
1421
1382 /* In case one didn't come up */ 1422 /* In case one didn't come up */
1383 if (!cpu_isset(cpu, cpu_callin_map)) { 1423 if (!cpu_isset(cpu, cpu_callin_map)) {
1384 printk(KERN_DEBUG "skipping cpu%d, didn't come online\n", cpu); 1424 printk(KERN_DEBUG "skipping cpu%d, didn't come online\n", cpu);
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/syscall_table.S b/arch/i386/kernel/syscall_table.S
index ac687d00a1ce..4f58b9c0efe3 100644
--- a/arch/i386/kernel/syscall_table.S
+++ b/arch/i386/kernel/syscall_table.S
@@ -310,3 +310,7 @@ ENTRY(sys_call_table)
310 .long sys_pselect6 310 .long sys_pselect6
311 .long sys_ppoll 311 .long sys_ppoll
312 .long sys_unshare /* 310 */ 312 .long sys_unshare /* 310 */
313 .long sys_set_robust_list
314 .long sys_get_robust_list
315 .long sys_splice
316 .long sys_sync_file_range
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_pm.c b/arch/i386/kernel/timers/timer_pm.c
index 264edaaac315..144e94a04933 100644
--- a/arch/i386/kernel/timers/timer_pm.c
+++ b/arch/i386/kernel/timers/timer_pm.c
@@ -15,6 +15,7 @@
15#include <linux/module.h> 15#include <linux/module.h>
16#include <linux/device.h> 16#include <linux/device.h>
17#include <linux/init.h> 17#include <linux/init.h>
18#include <linux/pci.h>
18#include <asm/types.h> 19#include <asm/types.h>
19#include <asm/timer.h> 20#include <asm/timer.h>
20#include <asm/smp.h> 21#include <asm/smp.h>
@@ -45,24 +46,31 @@ static seqlock_t monotonic_lock = SEQLOCK_UNLOCKED;
45 46
46#define ACPI_PM_MASK 0xFFFFFF /* limit it to 24 bits */ 47#define ACPI_PM_MASK 0xFFFFFF /* limit it to 24 bits */
47 48
49static int pmtmr_need_workaround __read_mostly = 1;
50
48/*helper function to safely read acpi pm timesource*/ 51/*helper function to safely read acpi pm timesource*/
49static inline u32 read_pmtmr(void) 52static inline u32 read_pmtmr(void)
50{ 53{
51 u32 v1=0,v2=0,v3=0; 54 if (pmtmr_need_workaround) {
52 /* It has been reported that because of various broken 55 u32 v1, v2, v3;
53 * chipsets (ICH4, PIIX4 and PIIX4E) where the ACPI PM time 56
54 * source is not latched, so you must read it multiple 57 /* It has been reported that because of various broken
55 * times to insure a safe value is read. 58 * chipsets (ICH4, PIIX4 and PIIX4E) where the ACPI PM time
56 */ 59 * source is not latched, so you must read it multiple
57 do { 60 * times to insure a safe value is read.
58 v1 = inl(pmtmr_ioport); 61 */
59 v2 = inl(pmtmr_ioport); 62 do {
60 v3 = inl(pmtmr_ioport); 63 v1 = inl(pmtmr_ioport);
61 } while ((v1 > v2 && v1 < v3) || (v2 > v3 && v2 < v1) 64 v2 = inl(pmtmr_ioport);
62 || (v3 > v1 && v3 < v2)); 65 v3 = inl(pmtmr_ioport);
63 66 } while ((v1 > v2 && v1 < v3) || (v2 > v3 && v2 < v1)
64 /* mask the output to 24 bits */ 67 || (v3 > v1 && v3 < v2));
65 return v2 & ACPI_PM_MASK; 68
69 /* mask the output to 24 bits */
70 return v2 & ACPI_PM_MASK;
71 }
72
73 return inl(pmtmr_ioport) & ACPI_PM_MASK;
66} 74}
67 75
68 76
@@ -263,6 +271,72 @@ struct init_timer_opts __initdata timer_pmtmr_init = {
263 .opts = &timer_pmtmr, 271 .opts = &timer_pmtmr,
264}; 272};
265 273
274#ifdef CONFIG_PCI
275/*
276 * PIIX4 Errata:
277 *
278 * The power management timer may return improper results when read.
279 * Although the timer value settles properly after incrementing,
280 * while incrementing there is a 3 ns window every 69.8 ns where the
281 * timer value is indeterminate (a 4.2% chance that the data will be
282 * incorrect when read). As a result, the ACPI free running count up
283 * timer specification is violated due to erroneous reads.
284 */
285static int __init pmtmr_bug_check(void)
286{
287 static struct pci_device_id gray_list[] __initdata = {
288 /* these chipsets may have bug. */
289 { PCI_DEVICE(PCI_VENDOR_ID_INTEL,
290 PCI_DEVICE_ID_INTEL_82801DB_0) },
291 { },
292 };
293 struct pci_dev *dev;
294 int pmtmr_has_bug = 0;
295 u8 rev;
296
297 if (cur_timer != &timer_pmtmr || !pmtmr_need_workaround)
298 return 0;
299
300 dev = pci_get_device(PCI_VENDOR_ID_INTEL,
301 PCI_DEVICE_ID_INTEL_82371AB_3, NULL);
302 if (dev) {
303 pci_read_config_byte(dev, PCI_REVISION_ID, &rev);
304 /* the bug has been fixed in PIIX4M */
305 if (rev < 3) {
306 printk(KERN_WARNING "* Found PM-Timer Bug on this "
307 "chipset. Due to workarounds for a bug,\n"
308 "* this time source is slow. Consider trying "
309 "other time sources (clock=)\n");
310 pmtmr_has_bug = 1;
311 }
312 pci_dev_put(dev);
313 }
314
315 if (pci_dev_present(gray_list)) {
316 printk(KERN_WARNING "* This chipset may have PM-Timer Bug. Due"
317 " to workarounds for a bug,\n"
318 "* this time source is slow. If you are sure your timer"
319 " does not have\n"
320 "* this bug, please use \"pmtmr_good\" to disable the "
321 "workaround\n");
322 pmtmr_has_bug = 1;
323 }
324
325 if (!pmtmr_has_bug)
326 pmtmr_need_workaround = 0;
327
328 return 0;
329}
330device_initcall(pmtmr_bug_check);
331#endif
332
333static int __init pmtr_good_setup(char *__str)
334{
335 pmtmr_need_workaround = 0;
336 return 1;
337}
338__setup("pmtmr_good", pmtr_good_setup);
339
266MODULE_LICENSE("GPL"); 340MODULE_LICENSE("GPL");
267MODULE_AUTHOR("Dominik Brodowski <linux@brodo.de>"); 341MODULE_AUTHOR("Dominik Brodowski <linux@brodo.de>");
268MODULE_DESCRIPTION("Power Management Timer (PMTMR) as primary timing source for x86"); 342MODULE_DESCRIPTION("Power Management Timer (PMTMR) as primary timing source for x86");
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..e38527994590 100644
--- a/arch/i386/kernel/traps.c
+++ b/arch/i386/kernel/traps.c
@@ -92,32 +92,51 @@ asmlinkage void spurious_interrupt_bug(void);
92asmlinkage void machine_check(void); 92asmlinkage void machine_check(void);
93 93
94static int kstack_depth_to_print = 24; 94static int kstack_depth_to_print = 24;
95struct notifier_block *i386die_chain; 95ATOMIC_NOTIFIER_HEAD(i386die_chain);
96static DEFINE_SPINLOCK(die_notifier_lock);
97 96
98int register_die_notifier(struct notifier_block *nb) 97int register_die_notifier(struct notifier_block *nb)
99{ 98{
100 int err = 0; 99 vmalloc_sync_all();
101 unsigned long flags; 100 return atomic_notifier_chain_register(&i386die_chain, nb);
102 spin_lock_irqsave(&die_notifier_lock, flags);
103 err = notifier_chain_register(&i386die_chain, nb);
104 spin_unlock_irqrestore(&die_notifier_lock, flags);
105 return err;
106} 101}
107EXPORT_SYMBOL(register_die_notifier); 102EXPORT_SYMBOL(register_die_notifier);
108 103
104int unregister_die_notifier(struct notifier_block *nb)
105{
106 return atomic_notifier_chain_unregister(&i386die_chain, nb);
107}
108EXPORT_SYMBOL(unregister_die_notifier);
109
109static inline int valid_stack_ptr(struct thread_info *tinfo, void *p) 110static inline int valid_stack_ptr(struct thread_info *tinfo, void *p)
110{ 111{
111 return p > (void *)tinfo && 112 return p > (void *)tinfo &&
112 p < (void *)tinfo + THREAD_SIZE - 3; 113 p < (void *)tinfo + THREAD_SIZE - 3;
113} 114}
114 115
115static void print_addr_and_symbol(unsigned long addr, char *log_lvl) 116/*
117 * Print CONFIG_STACK_BACKTRACE_COLS address/symbol entries per line.
118 */
119static inline int print_addr_and_symbol(unsigned long addr, char *log_lvl,
120 int printed)
116{ 121{
117 printk(log_lvl); 122 if (!printed)
123 printk(log_lvl);
124
125#if CONFIG_STACK_BACKTRACE_COLS == 1
118 printk(" [<%08lx>] ", addr); 126 printk(" [<%08lx>] ", addr);
127#else
128 printk(" <%08lx> ", addr);
129#endif
119 print_symbol("%s", addr); 130 print_symbol("%s", addr);
120 printk("\n"); 131
132 printed = (printed + 1) % CONFIG_STACK_BACKTRACE_COLS;
133
134 if (printed)
135 printk(" ");
136 else
137 printk("\n");
138
139 return printed;
121} 140}
122 141
123static inline unsigned long print_context_stack(struct thread_info *tinfo, 142static inline unsigned long print_context_stack(struct thread_info *tinfo,
@@ -125,20 +144,24 @@ static inline unsigned long print_context_stack(struct thread_info *tinfo,
125 char *log_lvl) 144 char *log_lvl)
126{ 145{
127 unsigned long addr; 146 unsigned long addr;
147 int printed = 0; /* nr of entries already printed on current line */
128 148
129#ifdef CONFIG_FRAME_POINTER 149#ifdef CONFIG_FRAME_POINTER
130 while (valid_stack_ptr(tinfo, (void *)ebp)) { 150 while (valid_stack_ptr(tinfo, (void *)ebp)) {
131 addr = *(unsigned long *)(ebp + 4); 151 addr = *(unsigned long *)(ebp + 4);
132 print_addr_and_symbol(addr, log_lvl); 152 printed = print_addr_and_symbol(addr, log_lvl, printed);
133 ebp = *(unsigned long *)ebp; 153 ebp = *(unsigned long *)ebp;
134 } 154 }
135#else 155#else
136 while (valid_stack_ptr(tinfo, stack)) { 156 while (valid_stack_ptr(tinfo, stack)) {
137 addr = *stack++; 157 addr = *stack++;
138 if (__kernel_text_address(addr)) 158 if (__kernel_text_address(addr))
139 print_addr_and_symbol(addr, log_lvl); 159 printed = print_addr_and_symbol(addr, log_lvl, printed);
140 } 160 }
141#endif 161#endif
162 if (printed)
163 printk("\n");
164
142 return ebp; 165 return ebp;
143} 166}
144 167
@@ -166,8 +189,7 @@ static void show_trace_log_lvl(struct task_struct *task,
166 stack = (unsigned long*)context->previous_esp; 189 stack = (unsigned long*)context->previous_esp;
167 if (!stack) 190 if (!stack)
168 break; 191 break;
169 printk(log_lvl); 192 printk("%s =======================\n", log_lvl);
170 printk(" =======================\n");
171 } 193 }
172} 194}
173 195
@@ -194,21 +216,17 @@ static void show_stack_log_lvl(struct task_struct *task, unsigned long *esp,
194 for(i = 0; i < kstack_depth_to_print; i++) { 216 for(i = 0; i < kstack_depth_to_print; i++) {
195 if (kstack_end(stack)) 217 if (kstack_end(stack))
196 break; 218 break;
197 if (i && ((i % 8) == 0)) { 219 if (i && ((i % 8) == 0))
198 printk("\n"); 220 printk("\n%s ", log_lvl);
199 printk(log_lvl);
200 printk(" ");
201 }
202 printk("%08lx ", *stack++); 221 printk("%08lx ", *stack++);
203 } 222 }
204 printk("\n"); 223 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); 224 show_trace_log_lvl(task, esp, log_lvl);
208} 225}
209 226
210void show_stack(struct task_struct *task, unsigned long *esp) 227void show_stack(struct task_struct *task, unsigned long *esp)
211{ 228{
229 printk(" ");
212 show_stack_log_lvl(task, esp, ""); 230 show_stack_log_lvl(task, esp, "");
213} 231}
214 232
@@ -233,7 +251,7 @@ void show_registers(struct pt_regs *regs)
233 251
234 esp = (unsigned long) (&regs->esp); 252 esp = (unsigned long) (&regs->esp);
235 savesegment(ss, ss); 253 savesegment(ss, ss);
236 if (user_mode(regs)) { 254 if (user_mode_vm(regs)) {
237 in_kernel = 0; 255 in_kernel = 0;
238 esp = regs->esp; 256 esp = regs->esp;
239 ss = regs->xss & 0xffff; 257 ss = regs->xss & 0xffff;
@@ -333,6 +351,8 @@ void die(const char * str, struct pt_regs * regs, long err)
333 static int die_counter; 351 static int die_counter;
334 unsigned long flags; 352 unsigned long flags;
335 353
354 oops_enter();
355
336 if (die.lock_owner != raw_smp_processor_id()) { 356 if (die.lock_owner != raw_smp_processor_id()) {
337 console_verbose(); 357 console_verbose();
338 spin_lock_irqsave(&die.lock, flags); 358 spin_lock_irqsave(&die.lock, flags);
@@ -365,8 +385,12 @@ void die(const char * str, struct pt_regs * regs, long err)
365#endif 385#endif
366 if (nl) 386 if (nl)
367 printk("\n"); 387 printk("\n");
368 notify_die(DIE_OOPS, (char *)str, regs, err, 255, SIGSEGV); 388 if (notify_die(DIE_OOPS, str, regs, err,
369 show_registers(regs); 389 current->thread.trap_no, SIGSEGV) !=
390 NOTIFY_STOP)
391 show_registers(regs);
392 else
393 regs = NULL;
370 } else 394 } else
371 printk(KERN_EMERG "Recursive die() failure, output suppressed\n"); 395 printk(KERN_EMERG "Recursive die() failure, output suppressed\n");
372 396
@@ -374,6 +398,9 @@ void die(const char * str, struct pt_regs * regs, long err)
374 die.lock_owner = -1; 398 die.lock_owner = -1;
375 spin_unlock_irqrestore(&die.lock, flags); 399 spin_unlock_irqrestore(&die.lock, flags);
376 400
401 if (!regs)
402 return;
403
377 if (kexec_should_crash(current)) 404 if (kexec_should_crash(current))
378 crash_kexec(regs); 405 crash_kexec(regs);
379 406
@@ -385,6 +412,7 @@ void die(const char * str, struct pt_regs * regs, long err)
385 ssleep(5); 412 ssleep(5);
386 panic("Fatal exception"); 413 panic("Fatal exception");
387 } 414 }
415 oops_exit();
388 do_exit(SIGSEGV); 416 do_exit(SIGSEGV);
389} 417}
390 418
@@ -601,7 +629,7 @@ static DEFINE_SPINLOCK(nmi_print_lock);
601 629
602void die_nmi (struct pt_regs *regs, const char *msg) 630void die_nmi (struct pt_regs *regs, const char *msg)
603{ 631{
604 if (notify_die(DIE_NMIWATCHDOG, msg, regs, 0, 0, SIGINT) == 632 if (notify_die(DIE_NMIWATCHDOG, msg, regs, 0, 2, SIGINT) ==
605 NOTIFY_STOP) 633 NOTIFY_STOP)
606 return; 634 return;
607 635
@@ -623,7 +651,7 @@ void die_nmi (struct pt_regs *regs, const char *msg)
623 /* If we are in kernel we are probably nested up pretty bad 651 /* If we are in kernel we are probably nested up pretty bad
624 * and might aswell get out now while we still can. 652 * and might aswell get out now while we still can.
625 */ 653 */
626 if (!user_mode(regs)) { 654 if (!user_mode_vm(regs)) {
627 current->thread.trap_no = 2; 655 current->thread.trap_no = 2;
628 crash_kexec(regs); 656 crash_kexec(regs);
629 } 657 }
@@ -640,7 +668,7 @@ static void default_do_nmi(struct pt_regs * regs)
640 reason = get_nmi_reason(); 668 reason = get_nmi_reason();
641 669
642 if (!(reason & 0xc0)) { 670 if (!(reason & 0xc0)) {
643 if (notify_die(DIE_NMI_IPI, "nmi_ipi", regs, reason, 0, SIGINT) 671 if (notify_die(DIE_NMI_IPI, "nmi_ipi", regs, reason, 2, SIGINT)
644 == NOTIFY_STOP) 672 == NOTIFY_STOP)
645 return; 673 return;
646#ifdef CONFIG_X86_LOCAL_APIC 674#ifdef CONFIG_X86_LOCAL_APIC
@@ -656,7 +684,7 @@ static void default_do_nmi(struct pt_regs * regs)
656 unknown_nmi_error(reason, regs); 684 unknown_nmi_error(reason, regs);
657 return; 685 return;
658 } 686 }
659 if (notify_die(DIE_NMI, "nmi", regs, reason, 0, SIGINT) == NOTIFY_STOP) 687 if (notify_die(DIE_NMI, "nmi", regs, reason, 2, SIGINT) == NOTIFY_STOP)
660 return; 688 return;
661 if (reason & 0x80) 689 if (reason & 0x80)
662 mem_parity_error(reason, regs); 690 mem_parity_error(reason, regs);
@@ -694,6 +722,7 @@ fastcall void do_nmi(struct pt_regs * regs, long error_code)
694 722
695void set_nmi_callback(nmi_callback_t callback) 723void set_nmi_callback(nmi_callback_t callback)
696{ 724{
725 vmalloc_sync_all();
697 rcu_assign_pointer(nmi_callback, callback); 726 rcu_assign_pointer(nmi_callback, callback);
698} 727}
699EXPORT_SYMBOL_GPL(set_nmi_callback); 728EXPORT_SYMBOL_GPL(set_nmi_callback);
@@ -1164,6 +1193,6 @@ void __init trap_init(void)
1164static int __init kstack_setup(char *s) 1193static int __init kstack_setup(char *s)
1165{ 1194{
1166 kstack_depth_to_print = simple_strtoul(s, NULL, 0); 1195 kstack_depth_to_print = simple_strtoul(s, NULL, 0);
1167 return 0; 1196 return 1;
1168} 1197}
1169__setup("kstack=", kstack_setup); 1198__setup("kstack=", kstack_setup);
diff --git a/arch/i386/kernel/vm86.c b/arch/i386/kernel/vm86.c
index f51c894a7da5..aee14fafd13d 100644
--- a/arch/i386/kernel/vm86.c
+++ b/arch/i386/kernel/vm86.c
@@ -43,6 +43,7 @@
43#include <linux/smp_lock.h> 43#include <linux/smp_lock.h>
44#include <linux/highmem.h> 44#include <linux/highmem.h>
45#include <linux/ptrace.h> 45#include <linux/ptrace.h>
46#include <linux/audit.h>
46 47
47#include <asm/uaccess.h> 48#include <asm/uaccess.h>
48#include <asm/io.h> 49#include <asm/io.h>
@@ -252,6 +253,7 @@ out:
252static void do_sys_vm86(struct kernel_vm86_struct *info, struct task_struct *tsk) 253static void do_sys_vm86(struct kernel_vm86_struct *info, struct task_struct *tsk)
253{ 254{
254 struct tss_struct *tss; 255 struct tss_struct *tss;
256 long eax;
255/* 257/*
256 * make sure the vm86() system call doesn't try to do anything silly 258 * make sure the vm86() system call doesn't try to do anything silly
257 */ 259 */
@@ -305,13 +307,19 @@ static void do_sys_vm86(struct kernel_vm86_struct *info, struct task_struct *tsk
305 tsk->thread.screen_bitmap = info->screen_bitmap; 307 tsk->thread.screen_bitmap = info->screen_bitmap;
306 if (info->flags & VM86_SCREEN_BITMAP) 308 if (info->flags & VM86_SCREEN_BITMAP)
307 mark_screen_rdonly(tsk->mm); 309 mark_screen_rdonly(tsk->mm);
310 __asm__ __volatile__("xorl %eax,%eax; movl %eax,%fs; movl %eax,%gs\n\t");
311 __asm__ __volatile__("movl %%eax, %0\n" :"=r"(eax));
312
313 /*call audit_syscall_exit since we do not exit via the normal paths */
314 if (unlikely(current->audit_context))
315 audit_syscall_exit(current, AUDITSC_RESULT(eax), eax);
316
308 __asm__ __volatile__( 317 __asm__ __volatile__(
309 "xorl %%eax,%%eax; movl %%eax,%%fs; movl %%eax,%%gs\n\t"
310 "movl %0,%%esp\n\t" 318 "movl %0,%%esp\n\t"
311 "movl %1,%%ebp\n\t" 319 "movl %1,%%ebp\n\t"
312 "jmp resume_userspace" 320 "jmp resume_userspace"
313 : /* no outputs */ 321 : /* no outputs */
314 :"r" (&info->regs), "r" (task_thread_info(tsk)) : "ax"); 322 :"r" (&info->regs), "r" (task_thread_info(tsk)));
315 /* we never return here */ 323 /* we never return here */
316} 324}
317 325
diff --git a/arch/i386/kernel/vmlinux.lds.S b/arch/i386/kernel/vmlinux.lds.S
index 4710195b6b74..8831303a473f 100644
--- a/arch/i386/kernel/vmlinux.lds.S
+++ b/arch/i386/kernel/vmlinux.lds.S
@@ -7,6 +7,7 @@
7#include <asm-generic/vmlinux.lds.h> 7#include <asm-generic/vmlinux.lds.h>
8#include <asm/thread_info.h> 8#include <asm/thread_info.h>
9#include <asm/page.h> 9#include <asm/page.h>
10#include <asm/cache.h>
10 11
11OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") 12OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
12OUTPUT_ARCH(i386) 13OUTPUT_ARCH(i386)
@@ -68,6 +69,26 @@ SECTIONS
68 *(.data.init_task) 69 *(.data.init_task)
69 } 70 }
70 71
72 /* might get freed after init */
73 . = ALIGN(4096);
74 __smp_alt_begin = .;
75 __smp_alt_instructions = .;
76 .smp_altinstructions : AT(ADDR(.smp_altinstructions) - LOAD_OFFSET) {
77 *(.smp_altinstructions)
78 }
79 __smp_alt_instructions_end = .;
80 . = ALIGN(4);
81 __smp_locks = .;
82 .smp_locks : AT(ADDR(.smp_locks) - LOAD_OFFSET) {
83 *(.smp_locks)
84 }
85 __smp_locks_end = .;
86 .smp_altinstr_replacement : AT(ADDR(.smp_altinstr_replacement) - LOAD_OFFSET) {
87 *(.smp_altinstr_replacement)
88 }
89 . = ALIGN(4096);
90 __smp_alt_end = .;
91
71 /* will be freed after init */ 92 /* will be freed after init */
72 . = ALIGN(4096); /* Init code and data */ 93 . = ALIGN(4096); /* Init code and data */
73 __init_begin = .; 94 __init_begin = .;
@@ -115,7 +136,7 @@ SECTIONS
115 __initramfs_start = .; 136 __initramfs_start = .;
116 .init.ramfs : AT(ADDR(.init.ramfs) - LOAD_OFFSET) { *(.init.ramfs) } 137 .init.ramfs : AT(ADDR(.init.ramfs) - LOAD_OFFSET) { *(.init.ramfs) }
117 __initramfs_end = .; 138 __initramfs_end = .;
118 . = ALIGN(32); 139 . = ALIGN(L1_CACHE_BYTES);
119 __per_cpu_start = .; 140 __per_cpu_start = .;
120 .data.percpu : AT(ADDR(.data.percpu) - LOAD_OFFSET) { *(.data.percpu) } 141 .data.percpu : AT(ADDR(.data.percpu) - LOAD_OFFSET) { *(.data.percpu) }
121 __per_cpu_end = .; 142 __per_cpu_end = .;
diff --git a/arch/i386/kernel/vsyscall-sigreturn.S b/arch/i386/kernel/vsyscall-sigreturn.S
index fadb5bc3c374..a92262f41659 100644
--- a/arch/i386/kernel/vsyscall-sigreturn.S
+++ b/arch/i386/kernel/vsyscall-sigreturn.S
@@ -44,7 +44,7 @@ __kernel_rt_sigreturn:
44.LSTARTCIEDLSI1: 44.LSTARTCIEDLSI1:
45 .long 0 /* CIE ID */ 45 .long 0 /* CIE ID */
46 .byte 1 /* Version number */ 46 .byte 1 /* Version number */
47 .string "zR" /* NUL-terminated augmentation string */ 47 .string "zRS" /* NUL-terminated augmentation string */
48 .uleb128 1 /* Code alignment factor */ 48 .uleb128 1 /* Code alignment factor */
49 .sleb128 -4 /* Data alignment factor */ 49 .sleb128 -4 /* Data alignment factor */
50 .byte 8 /* Return address register column */ 50 .byte 8 /* Return address register column */
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/mach-visws/reboot.c b/arch/i386/mach-visws/reboot.c
index 5d73e042ed0a..99332abfad42 100644
--- a/arch/i386/mach-visws/reboot.c
+++ b/arch/i386/mach-visws/reboot.c
@@ -1,7 +1,6 @@
1#include <linux/module.h> 1#include <linux/module.h>
2#include <linux/smp.h> 2#include <linux/smp.h>
3#include <linux/delay.h> 3#include <linux/delay.h>
4#include <linux/platform.h>
5 4
6#include <asm/io.h> 5#include <asm/io.h>
7#include "piix4.h" 6#include "piix4.h"
diff --git a/arch/i386/mach-voyager/voyager_smp.c b/arch/i386/mach-voyager/voyager_smp.c
index 8165626a5c30..70e560a1b79a 100644
--- a/arch/i386/mach-voyager/voyager_smp.c
+++ b/arch/i386/mach-voyager/voyager_smp.c
@@ -1700,7 +1700,7 @@ after_handle_vic_irq(unsigned int irq)
1700 1700
1701 printk("VOYAGER SMP: CPU%d lost interrupt %d\n", 1701 printk("VOYAGER SMP: CPU%d lost interrupt %d\n",
1702 cpu, irq); 1702 cpu, irq);
1703 for_each_cpu(real_cpu, mask) { 1703 for_each_possible_cpu(real_cpu, mask) {
1704 1704
1705 outb(VIC_CPU_MASQUERADE_ENABLE | real_cpu, 1705 outb(VIC_CPU_MASQUERADE_ENABLE | real_cpu,
1706 VIC_PROCESSOR_ID); 1706 VIC_PROCESSOR_ID);
diff --git a/arch/i386/mm/discontig.c b/arch/i386/mm/discontig.c
index c4af9638dbfa..fe6eb901326e 100644
--- a/arch/i386/mm/discontig.c
+++ b/arch/i386/mm/discontig.c
@@ -31,6 +31,7 @@
31#include <linux/nodemask.h> 31#include <linux/nodemask.h>
32#include <linux/module.h> 32#include <linux/module.h>
33#include <linux/kexec.h> 33#include <linux/kexec.h>
34#include <linux/pfn.h>
34 35
35#include <asm/e820.h> 36#include <asm/e820.h>
36#include <asm/setup.h> 37#include <asm/setup.h>
@@ -352,17 +353,6 @@ void __init zone_sizes_init(void)
352{ 353{
353 int nid; 354 int nid;
354 355
355 /*
356 * Insert nodes into pgdat_list backward so they appear in order.
357 * Clobber node 0's links and NULL out pgdat_list before starting.
358 */
359 pgdat_list = NULL;
360 for (nid = MAX_NUMNODES - 1; nid >= 0; nid--) {
361 if (!node_online(nid))
362 continue;
363 NODE_DATA(nid)->pgdat_next = pgdat_list;
364 pgdat_list = NODE_DATA(nid);
365 }
366 356
367 for_each_online_node(nid) { 357 for_each_online_node(nid) {
368 unsigned long zones_size[MAX_NR_ZONES] = {0, 0, 0}; 358 unsigned long zones_size[MAX_NR_ZONES] = {0, 0, 0};
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/mm/pgtable.c b/arch/i386/mm/pgtable.c
index 9db3242103be..2889567e21a1 100644
--- a/arch/i386/mm/pgtable.c
+++ b/arch/i386/mm/pgtable.c
@@ -36,7 +36,7 @@ void show_mem(void)
36 printk(KERN_INFO "Mem-info:\n"); 36 printk(KERN_INFO "Mem-info:\n");
37 show_free_areas(); 37 show_free_areas();
38 printk(KERN_INFO "Free swap: %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10)); 38 printk(KERN_INFO "Free swap: %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10));
39 for_each_pgdat(pgdat) { 39 for_each_online_pgdat(pgdat) {
40 pgdat_resize_lock(pgdat, &flags); 40 pgdat_resize_lock(pgdat, &flags);
41 for (i = 0; i < pgdat->node_spanned_pages; ++i) { 41 for (i = 0; i < pgdat->node_spanned_pages; ++i) {
42 page = pgdat_page_nr(pgdat, i); 42 page = pgdat_page_nr(pgdat, i);
diff --git a/arch/i386/oprofile/nmi_int.c b/arch/i386/oprofile/nmi_int.c
index 0493e8b8ec49..1a2076ce6f6a 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_possible_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