diff options
Diffstat (limited to 'arch/i386')
69 files changed, 1914 insertions, 1178 deletions
diff --git a/arch/i386/Kconfig b/arch/i386/Kconfig index 5b1a7d46d1d9..b008fb0cd7b7 100644 --- a/arch/i386/Kconfig +++ b/arch/i386/Kconfig | |||
@@ -80,6 +80,7 @@ config X86_VOYAGER | |||
80 | 80 | ||
81 | config X86_NUMAQ | 81 | config X86_NUMAQ |
82 | bool "NUMAQ (IBM/Sequent)" | 82 | bool "NUMAQ (IBM/Sequent)" |
83 | select SMP | ||
83 | select NUMA | 84 | select NUMA |
84 | help | 85 | help |
85 | This option is used for getting Linux to run on a (IBM/Sequent) NUMA | 86 | This option is used for getting Linux to run on a (IBM/Sequent) NUMA |
@@ -400,6 +401,7 @@ choice | |||
400 | 401 | ||
401 | config NOHIGHMEM | 402 | config NOHIGHMEM |
402 | bool "off" | 403 | bool "off" |
404 | depends on !X86_NUMAQ | ||
403 | ---help--- | 405 | ---help--- |
404 | Linux can use up to 64 Gigabytes of physical memory on x86 systems. | 406 | Linux can use up to 64 Gigabytes of physical memory on x86 systems. |
405 | However, the address space of 32-bit x86 processors is only 4 | 407 | However, the address space of 32-bit x86 processors is only 4 |
@@ -436,6 +438,7 @@ config NOHIGHMEM | |||
436 | 438 | ||
437 | config HIGHMEM4G | 439 | config HIGHMEM4G |
438 | bool "4GB" | 440 | bool "4GB" |
441 | depends on !X86_NUMAQ | ||
439 | help | 442 | help |
440 | Select this if you have a 32-bit processor and between 1 and 4 | 443 | Select this if you have a 32-bit processor and between 1 and 4 |
441 | gigabytes of physical RAM. | 444 | gigabytes of physical RAM. |
@@ -503,10 +506,6 @@ config NUMA | |||
503 | default n if X86_PC | 506 | default n if X86_PC |
504 | default y if (X86_NUMAQ || X86_SUMMIT) | 507 | default y if (X86_NUMAQ || X86_SUMMIT) |
505 | 508 | ||
506 | # Need comments to help the hapless user trying to turn on NUMA support | ||
507 | comment "NUMA (NUMA-Q) requires SMP, 64GB highmem support" | ||
508 | depends on X86_NUMAQ && (!HIGHMEM64G || !SMP) | ||
509 | |||
510 | comment "NUMA (Summit) requires SMP, 64GB highmem support, ACPI" | 509 | comment "NUMA (Summit) requires SMP, 64GB highmem support, ACPI" |
511 | depends on X86_SUMMIT && (!HIGHMEM64G || !ACPI) | 510 | depends on X86_SUMMIT && (!HIGHMEM64G || !ACPI) |
512 | 511 | ||
@@ -660,13 +659,18 @@ config BOOT_IOREMAP | |||
660 | default y | 659 | default y |
661 | 660 | ||
662 | config REGPARM | 661 | config REGPARM |
663 | bool "Use register arguments (EXPERIMENTAL)" | 662 | bool "Use register arguments" |
664 | depends on EXPERIMENTAL | 663 | default y |
665 | default n | ||
666 | help | 664 | help |
667 | Compile the kernel with -mregparm=3. This uses a different ABI | 665 | Compile the kernel with -mregparm=3. This instructs gcc to use |
668 | and passes the first three arguments of a function call in registers. | 666 | a more efficient function call ABI which passes the first three |
669 | This will probably break binary only modules. | 667 | arguments of a function call via registers, which results in denser |
668 | and faster code. | ||
669 | |||
670 | If this option is disabled, then the default ABI of passing | ||
671 | arguments via the stack is used. | ||
672 | |||
673 | If unsure, say Y. | ||
670 | 674 | ||
671 | config SECCOMP | 675 | config SECCOMP |
672 | bool "Enable seccomp to safely compute untrusted bytecode" | 676 | bool "Enable seccomp to safely compute untrusted bytecode" |
@@ -733,7 +737,7 @@ config PHYSICAL_START | |||
733 | 737 | ||
734 | config HOTPLUG_CPU | 738 | config HOTPLUG_CPU |
735 | bool "Support for hot-pluggable CPUs (EXPERIMENTAL)" | 739 | bool "Support for hot-pluggable CPUs (EXPERIMENTAL)" |
736 | depends on SMP && HOTPLUG && EXPERIMENTAL && !X86_VOYAGER | 740 | depends on SMP && HOTPLUG && EXPERIMENTAL && !X86_VOYAGER && !X86_PC |
737 | ---help--- | 741 | ---help--- |
738 | Say Y here to experiment with turning CPUs off and on. CPUs | 742 | Say Y here to experiment with turning CPUs off and on. CPUs |
739 | can be controlled through /sys/devices/system/cpu. | 743 | 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 | ||
34 | config 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 | |||
34 | comment "Page alloc debug is incompatible with Software Suspend on i386" | 43 | comment "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 | ||
37 | config DEBUG_PAGEALLOC | 46 | config 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..c848a5b30391 100644 --- a/arch/i386/Makefile +++ b/arch/i386/Makefile | |||
@@ -39,6 +39,9 @@ include $(srctree)/arch/i386/Makefile.cpu | |||
39 | 39 | ||
40 | cflags-$(CONFIG_REGPARM) += -mregparm=3 | 40 | cflags-$(CONFIG_REGPARM) += -mregparm=3 |
41 | 41 | ||
42 | # temporary until string.h is fixed | ||
43 | cflags-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: |
44 | CFLAGS += $(shell if [ $(call cc-version) -lt 0400 ] ; then echo $(call cc-option,-fno-unit-at-a-time); fi ;) | 47 | CFLAGS += $(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 | ||
100 | boot := arch/i386/boot | 103 | boot := arch/i386/boot |
101 | 104 | ||
102 | .PHONY: zImage bzImage compressed zlilo bzlilo \ | 105 | PHONY += zImage bzImage compressed zlilo bzlilo \ |
103 | zdisk bzdisk fdimage fdimage144 fdimage288 install | 106 | zdisk bzdisk fdimage fdimage144 fdimage288 install |
104 | 107 | ||
105 | all: bzImage | 108 | all: bzImage |
106 | 109 | ||
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 |
40 | cflags-$(CONFIG_MGEODEGX1) += -march=pentium-mmx | 40 | cflags-$(CONFIG_MGEODEGX1) += -march=pentium-mmx |
41 | 41 | ||
42 | # add at the end to overwrite eventual tuning options from earlier | ||
43 | # cpu entries | ||
44 | cflags-$(CONFIG_X86_GENERIC) += $(call tune,generic) | ||
45 | |||
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/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 | # |
4 | CONFIG_X86_32=y | ||
5 | CONFIG_SEMAPHORE_SLEEPERS=y | ||
4 | CONFIG_X86=y | 6 | CONFIG_X86=y |
5 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
6 | CONFIG_UID16=y | ||
7 | CONFIG_GENERIC_ISA_DMA=y | 8 | CONFIG_GENERIC_ISA_DMA=y |
9 | CONFIG_GENERIC_IOMAP=y | ||
10 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y | ||
11 | CONFIG_DMI=y | ||
8 | 12 | ||
9 | # | 13 | # |
10 | # Code maturity level options | 14 | # Code maturity level options |
11 | # | 15 | # |
12 | CONFIG_EXPERIMENTAL=y | 16 | CONFIG_EXPERIMENTAL=y |
13 | CONFIG_CLEAN_COMPILE=y | 17 | CONFIG_BROKEN_ON_SMP=y |
14 | CONFIG_STANDALONE=y | 18 | CONFIG_INIT_ENV_ARG_LIMIT=32 |
15 | 19 | ||
16 | # | 20 | # |
17 | # General setup | 21 | # General setup |
18 | # | 22 | # |
23 | CONFIG_LOCALVERSION="" | ||
24 | # CONFIG_LOCALVERSION_AUTO is not set | ||
19 | CONFIG_SWAP=y | 25 | CONFIG_SWAP=y |
20 | CONFIG_SYSVIPC=y | 26 | CONFIG_SYSVIPC=y |
21 | CONFIG_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 |
23 | CONFIG_SYSCTL=y | 29 | CONFIG_SYSCTL=y |
24 | CONFIG_AUDIT=y | 30 | # CONFIG_AUDIT is not set |
25 | CONFIG_AUDITSYSCALL=y | 31 | CONFIG_IKCONFIG=y |
26 | CONFIG_LOG_BUF_SHIFT=15 | 32 | CONFIG_IKCONFIG_PROC=y |
27 | CONFIG_HOTPLUG=y | 33 | CONFIG_INITRAMFS_SOURCE="" |
28 | # CONFIG_IKCONFIG is not set | 34 | CONFIG_UID16=y |
35 | CONFIG_VM86=y | ||
36 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
29 | # CONFIG_EMBEDDED is not set | 37 | # CONFIG_EMBEDDED is not set |
30 | CONFIG_KALLSYMS=y | 38 | CONFIG_KALLSYMS=y |
39 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
40 | CONFIG_HOTPLUG=y | ||
41 | CONFIG_PRINTK=y | ||
42 | CONFIG_BUG=y | ||
43 | CONFIG_ELF_CORE=y | ||
44 | CONFIG_BASE_FULL=y | ||
31 | CONFIG_FUTEX=y | 45 | CONFIG_FUTEX=y |
32 | CONFIG_EPOLL=y | 46 | CONFIG_EPOLL=y |
33 | CONFIG_IOSCHED_NOOP=y | 47 | CONFIG_SHMEM=y |
34 | CONFIG_IOSCHED_AS=y | 48 | CONFIG_CC_ALIGN_FUNCTIONS=0 |
35 | CONFIG_IOSCHED_DEADLINE=y | 49 | CONFIG_CC_ALIGN_LABELS=0 |
36 | CONFIG_IOSCHED_CFQ=y | 50 | CONFIG_CC_ALIGN_LOOPS=0 |
37 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 51 | CONFIG_CC_ALIGN_JUMPS=0 |
52 | CONFIG_SLAB=y | ||
53 | # CONFIG_TINY_SHMEM is not set | ||
54 | CONFIG_BASE_SMALL=0 | ||
55 | # CONFIG_SLOB is not set | ||
38 | 56 | ||
39 | # | 57 | # |
40 | # Loadable module support | 58 | # Loadable module support |
41 | # | 59 | # |
42 | CONFIG_MODULES=y | 60 | CONFIG_MODULES=y |
43 | # CONFIG_MODULE_UNLOAD is not set | 61 | CONFIG_MODULE_UNLOAD=y |
62 | CONFIG_MODULE_FORCE_UNLOAD=y | ||
44 | CONFIG_OBSOLETE_MODPARM=y | 63 | CONFIG_OBSOLETE_MODPARM=y |
45 | # CONFIG_MODVERSIONS is not set | 64 | # CONFIG_MODVERSIONS is not set |
46 | CONFIG_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 | # | ||
76 | CONFIG_IOSCHED_NOOP=y | ||
77 | # CONFIG_IOSCHED_AS is not set | ||
78 | # CONFIG_IOSCHED_DEADLINE is not set | ||
79 | CONFIG_IOSCHED_CFQ=y | ||
80 | # CONFIG_DEFAULT_AS is not set | ||
81 | # CONFIG_DEFAULT_DEADLINE is not set | ||
82 | CONFIG_DEFAULT_CFQ=y | ||
83 | # CONFIG_DEFAULT_NOOP is not set | ||
84 | CONFIG_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 |
69 | CONFIG_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 | 109 | CONFIG_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 |
81 | CONFIG_X86_CMPXCHG=y | 121 | CONFIG_X86_CMPXCHG=y |
82 | CONFIG_X86_XADD=y | 122 | CONFIG_X86_XADD=y |
83 | CONFIG_X86_L1_CACHE_SHIFT=7 | 123 | CONFIG_X86_L1_CACHE_SHIFT=6 |
84 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | 124 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y |
125 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
85 | CONFIG_X86_WP_WORKS_OK=y | 126 | CONFIG_X86_WP_WORKS_OK=y |
86 | CONFIG_X86_INVLPG=y | 127 | CONFIG_X86_INVLPG=y |
87 | CONFIG_X86_BSWAP=y | 128 | CONFIG_X86_BSWAP=y |
88 | CONFIG_X86_POPAD_OK=y | 129 | CONFIG_X86_POPAD_OK=y |
130 | CONFIG_X86_CMPXCHG64=y | ||
89 | CONFIG_X86_GOOD_APIC=y | 131 | CONFIG_X86_GOOD_APIC=y |
90 | CONFIG_X86_INTEL_USERCOPY=y | 132 | CONFIG_X86_INTEL_USERCOPY=y |
91 | CONFIG_X86_USE_PPRO_CHECKSUM=y | 133 | CONFIG_X86_USE_PPRO_CHECKSUM=y |
134 | CONFIG_X86_USE_3DNOW=y | ||
135 | CONFIG_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 |
94 | CONFIG_SMP=y | 138 | CONFIG_PREEMPT_NONE=y |
95 | CONFIG_NR_CPUS=8 | 139 | # CONFIG_PREEMPT_VOLUNTARY is not set |
96 | CONFIG_SCHED_SMT=y | 140 | # CONFIG_PREEMPT is not set |
97 | CONFIG_PREEMPT=y | 141 | CONFIG_X86_UP_APIC=y |
142 | CONFIG_X86_UP_IOAPIC=y | ||
98 | CONFIG_X86_LOCAL_APIC=y | 143 | CONFIG_X86_LOCAL_APIC=y |
99 | CONFIG_X86_IO_APIC=y | 144 | CONFIG_X86_IO_APIC=y |
100 | CONFIG_X86_TSC=y | ||
101 | CONFIG_X86_MCE=y | 145 | CONFIG_X86_MCE=y |
102 | CONFIG_X86_MCE_NONFATAL=y | 146 | CONFIG_X86_MCE_NONFATAL=y |
103 | CONFIG_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 | ||
114 | CONFIG_NOHIGHMEM=y | 161 | CONFIG_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 |
164 | CONFIG_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 | ||
168 | CONFIG_PAGE_OFFSET=0xC0000000 | ||
169 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
170 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | ||
171 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | ||
172 | CONFIG_SELECT_MEMORY_MODEL=y | ||
173 | CONFIG_FLATMEM_MANUAL=y | ||
174 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
175 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
176 | CONFIG_FLATMEM=y | ||
177 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
178 | CONFIG_SPARSEMEM_STATIC=y | ||
179 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
117 | # CONFIG_MATH_EMULATION is not set | 180 | # CONFIG_MATH_EMULATION is not set |
118 | CONFIG_MTRR=y | 181 | CONFIG_MTRR=y |
119 | # CONFIG_EFI is not set | 182 | # CONFIG_EFI is not set |
120 | CONFIG_IRQBALANCE=y | 183 | CONFIG_REGPARM=y |
121 | CONFIG_HAVE_DEC_LOCK=y | 184 | # CONFIG_SECCOMP is not set |
122 | # CONFIG_REGPARM is not set | 185 | CONFIG_HZ_100=y |
186 | # CONFIG_HZ_250 is not set | ||
187 | # CONFIG_HZ_1000 is not set | ||
188 | CONFIG_HZ=100 | ||
189 | # CONFIG_KEXEC is not set | ||
190 | CONFIG_PHYSICAL_START=0x100000 | ||
191 | CONFIG_DOUBLEFAULT=y | ||
123 | 192 | ||
124 | # | 193 | # |
125 | # Power management options (ACPI, APM) | 194 | # Power management options (ACPI, APM) |
126 | # | 195 | # |
127 | CONFIG_PM=y | 196 | CONFIG_PM=y |
197 | # CONFIG_PM_LEGACY is not set | ||
198 | # CONFIG_PM_DEBUG is not set | ||
128 | CONFIG_SOFTWARE_SUSPEND=y | 199 | CONFIG_SOFTWARE_SUSPEND=y |
200 | CONFIG_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 | # |
133 | CONFIG_ACPI=y | 205 | CONFIG_ACPI=y |
134 | CONFIG_ACPI_SLEEP=y | 206 | # CONFIG_ACPI_SLEEP is not set |
135 | CONFIG_ACPI_SLEEP_PROC_FS=y | 207 | # CONFIG_ACPI_AC is not set |
136 | CONFIG_ACPI_AC=y | 208 | # CONFIG_ACPI_BATTERY is not set |
137 | CONFIG_ACPI_BATTERY=y | 209 | # CONFIG_ACPI_BUTTON is not set |
138 | CONFIG_ACPI_BUTTON=y | 210 | # CONFIG_ACPI_VIDEO is not set |
139 | CONFIG_ACPI_FAN=y | 211 | # CONFIG_ACPI_HOTKEY is not set |
140 | CONFIG_ACPI_PROCESSOR=y | 212 | # CONFIG_ACPI_FAN is not set |
141 | CONFIG_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 |
217 | CONFIG_ACPI_BLACKLIST_YEAR=0 | ||
144 | # CONFIG_ACPI_DEBUG is not set | 218 | # CONFIG_ACPI_DEBUG is not set |
145 | CONFIG_ACPI_EC=y | 219 | CONFIG_ACPI_EC=y |
146 | CONFIG_ACPI_POWER=y | 220 | CONFIG_ACPI_POWER=y |
147 | CONFIG_ACPI_SYSTEM=y | 221 | CONFIG_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 | |||
168 | CONFIG_PCI_BIOS=y | 243 | CONFIG_PCI_BIOS=y |
169 | CONFIG_PCI_DIRECT=y | 244 | CONFIG_PCI_DIRECT=y |
170 | CONFIG_PCI_MMCONFIG=y | 245 | CONFIG_PCI_MMCONFIG=y |
171 | # CONFIG_PCI_USE_VECTOR is not set | 246 | # CONFIG_PCIEPORTBUS is not set |
172 | CONFIG_PCI_LEGACY_PROC=y | 247 | # CONFIG_PCI_MSI is not set |
173 | CONFIG_PCI_NAMES=y | 248 | # CONFIG_PCI_LEGACY_PROC is not set |
174 | CONFIG_ISA=y | 249 | CONFIG_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 |
183 | CONFIG_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 | # |
193 | CONFIG_BINFMT_ELF=y | 267 | CONFIG_BINFMT_ELF=y |
194 | CONFIG_BINFMT_AOUT=y | 268 | # CONFIG_BINFMT_AOUT is not set |
195 | CONFIG_BINFMT_MISC=y | 269 | # CONFIG_BINFMT_MISC is not set |
270 | |||
271 | # | ||
272 | # Networking | ||
273 | # | ||
274 | CONFIG_NET=y | ||
275 | |||
276 | # | ||
277 | # Networking options | ||
278 | # | ||
279 | # CONFIG_NETDEBUG is not set | ||
280 | CONFIG_PACKET=y | ||
281 | CONFIG_PACKET_MMAP=y | ||
282 | CONFIG_UNIX=y | ||
283 | # CONFIG_NET_KEY is not set | ||
284 | CONFIG_INET=y | ||
285 | # CONFIG_IP_MULTICAST is not set | ||
286 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
287 | CONFIG_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 | ||
299 | CONFIG_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 | ||
306 | CONFIG_NETFILTER=y | ||
307 | # CONFIG_NETFILTER_DEBUG is not set | ||
308 | |||
309 | # | ||
310 | # Core Netfilter Configuration | ||
311 | # | ||
312 | # CONFIG_NETFILTER_NETLINK is not set | ||
313 | CONFIG_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 | ||
322 | CONFIG_NETFILTER_XT_MATCH_LIMIT=y | ||
323 | CONFIG_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 | ||
328 | CONFIG_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 | # | ||
335 | CONFIG_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 | ||
340 | CONFIG_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 | ||
347 | CONFIG_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 | ||
359 | CONFIG_IP_NF_FILTER=y | ||
360 | # CONFIG_IP_NF_TARGET_REJECT is not set | ||
361 | CONFIG_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 | # |
204 | CONFIG_FW_LOADER=m | 417 | CONFIG_STANDALONE=y |
418 | CONFIG_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 | # |
214 | CONFIG_PARPORT=y | 434 | CONFIG_PARPORT=y |
215 | CONFIG_PARPORT_PC=y | 435 | CONFIG_PARPORT_PC=y |
216 | CONFIG_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 | 440 | CONFIG_PARPORT_1284=y |
222 | 441 | ||
223 | # | 442 | # |
224 | # Plug and Play support | 443 | # Plug and Play support |
225 | # | 444 | # |
226 | CONFIG_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 | # |
238 | CONFIG_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 |
457 | CONFIG_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 |
249 | CONFIG_LBD=y | 463 | CONFIG_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 |
261 | CONFIG_BLK_DEV_IDEDISK=y | 478 | CONFIG_BLK_DEV_IDEDISK=y |
262 | CONFIG_IDEDISK_MULTI_MODE=y | 479 | # CONFIG_IDEDISK_MULTI_MODE is not set |
263 | CONFIG_BLK_DEV_IDECD=y | 480 | CONFIG_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 |
268 | CONFIG_IDE_TASKFILE_IO=y | ||
269 | 485 | ||
270 | # | 486 | # |
271 | # IDE chipset support/bugfixes | 487 | # IDE chipset support/bugfixes |
272 | # | 488 | # |
273 | CONFIG_IDE_GENERIC=y | 489 | # CONFIG_IDE_GENERIC is not set |
274 | CONFIG_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 | ||
277 | CONFIG_BLK_DEV_IDEPCI=y | 491 | CONFIG_BLK_DEV_IDEPCI=y |
278 | CONFIG_IDEPCI_SHARE_IRQ=y | 492 | CONFIG_IDEPCI_SHARE_IRQ=y |
279 | # CONFIG_BLK_DEV_OFFBOARD is not set | 493 | # CONFIG_BLK_DEV_OFFBOARD is not set |
280 | CONFIG_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 |
282 | CONFIG_BLK_DEV_RZ1000=y | 496 | # CONFIG_BLK_DEV_RZ1000 is not set |
283 | CONFIG_BLK_DEV_IDEDMA_PCI=y | 497 | CONFIG_BLK_DEV_IDEDMA_PCI=y |
284 | # CONFIG_BLK_DEV_IDEDMA_FORCED is not set | 498 | # CONFIG_BLK_DEV_IDEDMA_FORCED is not set |
285 | CONFIG_IDEDMA_PCI_AUTO=y | 499 | CONFIG_IDEDMA_PCI_AUTO=y |
286 | # CONFIG_IDEDMA_ONLYDISK is not set | 500 | # CONFIG_IDEDMA_ONLYDISK is not set |
287 | CONFIG_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 |
300 | CONFIG_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 | 524 | CONFIG_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 | ||
312 | CONFIG_BLK_DEV_IDEDMA=y | 526 | CONFIG_BLK_DEV_IDEDMA=y |
313 | # CONFIG_IDEDMA_IVB is not set | 527 | # CONFIG_IDEDMA_IVB is not set |
314 | CONFIG_IDEDMA_AUTO=y | 528 | CONFIG_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 | ||
320 | CONFIG_SCSI=y | 535 | CONFIG_SCSI=y |
321 | CONFIG_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 |
330 | CONFIG_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 |
357 | CONFIG_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 |
361 | CONFIG_SCSI_SATA=y | 578 | # CONFIG_SCSI_SATA is not set |
362 | # CONFIG_SCSI_SATA_SVW is not set | ||
363 | CONFIG_SCSI_ATA_PIIX=y | ||
364 | # CONFIG_SCSI_SATA_PROMISE is not set | ||
365 | CONFIG_SCSI_SATA_SX4=m | ||
366 | # CONFIG_SCSI_SATA_SIL is not set | ||
367 | CONFIG_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 |
386 | CONFIG_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 |
395 | CONFIG_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 | # |
429 | CONFIG_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 | # | ||
445 | CONFIG_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 | ||
454 | CONFIG_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 | # | ||
465 | CONFIG_NET=y | ||
466 | |||
467 | # | ||
468 | # Networking options | ||
469 | # | ||
470 | CONFIG_PACKET=y | ||
471 | # CONFIG_PACKET_MMAP is not set | ||
472 | # CONFIG_NETLINK_DEV is not set | ||
473 | CONFIG_UNIX=y | ||
474 | # CONFIG_NET_KEY is not set | ||
475 | CONFIG_INET=y | ||
476 | CONFIG_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 | ||
493 | CONFIG_NETFILTER=y | ||
494 | # CONFIG_NETFILTER_DEBUG is not set | ||
495 | |||
496 | # | ||
497 | # IP: Netfilter Configuration | ||
498 | # | 625 | # |
499 | CONFIG_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 | ||
504 | CONFIG_IP_NF_QUEUE=y | ||
505 | CONFIG_IP_NF_IPTABLES=y | ||
506 | CONFIG_IP_NF_MATCH_LIMIT=y | ||
507 | CONFIG_IP_NF_MATCH_IPRANGE=y | ||
508 | CONFIG_IP_NF_MATCH_MAC=y | ||
509 | CONFIG_IP_NF_MATCH_PKTTYPE=y | ||
510 | CONFIG_IP_NF_MATCH_MARK=y | ||
511 | CONFIG_IP_NF_MATCH_MULTIPORT=y | ||
512 | CONFIG_IP_NF_MATCH_TOS=y | ||
513 | CONFIG_IP_NF_MATCH_RECENT=y | ||
514 | CONFIG_IP_NF_MATCH_ECN=y | ||
515 | CONFIG_IP_NF_MATCH_DSCP=y | ||
516 | CONFIG_IP_NF_MATCH_AH_ESP=y | ||
517 | CONFIG_IP_NF_MATCH_LENGTH=y | ||
518 | CONFIG_IP_NF_MATCH_TTL=y | ||
519 | CONFIG_IP_NF_MATCH_TCPMSS=y | ||
520 | CONFIG_IP_NF_MATCH_HELPER=y | ||
521 | CONFIG_IP_NF_MATCH_STATE=y | ||
522 | CONFIG_IP_NF_MATCH_CONNTRACK=y | ||
523 | CONFIG_IP_NF_MATCH_OWNER=y | ||
524 | CONFIG_IP_NF_FILTER=y | ||
525 | CONFIG_IP_NF_TARGET_REJECT=y | ||
526 | CONFIG_IP_NF_NAT=y | ||
527 | CONFIG_IP_NF_NAT_NEEDED=y | ||
528 | CONFIG_IP_NF_TARGET_MASQUERADE=y | ||
529 | CONFIG_IP_NF_TARGET_REDIRECT=y | ||
530 | CONFIG_IP_NF_TARGET_NETMAP=y | ||
531 | CONFIG_IP_NF_TARGET_SAME=y | ||
532 | # CONFIG_IP_NF_NAT_SNMP_BASIC is not set | ||
533 | CONFIG_IP_NF_MANGLE=y | ||
534 | CONFIG_IP_NF_TARGET_TOS=y | ||
535 | CONFIG_IP_NF_TARGET_ECN=y | ||
536 | CONFIG_IP_NF_TARGET_DSCP=y | ||
537 | CONFIG_IP_NF_TARGET_MARK=y | ||
538 | CONFIG_IP_NF_TARGET_CLASSIFY=y | ||
539 | CONFIG_IP_NF_TARGET_LOG=y | ||
540 | CONFIG_IP_NF_TARGET_ULOG=y | ||
541 | CONFIG_IP_NF_TARGET_TCPMSS=y | ||
542 | CONFIG_IP_NF_ARPTABLES=y | ||
543 | CONFIG_IP_NF_ARPFILTER=y | ||
544 | CONFIG_IP_NF_ARP_MANGLE=y | ||
545 | CONFIG_IP_NF_TARGET_NOTRACK=m | ||
546 | CONFIG_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 | ||
581 | CONFIG_NETDEVICES=y | 626 | CONFIG_NETDEVICES=y |
582 | CONFIG_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 | # |
596 | CONFIG_NET_ETHERNET=y | 645 | CONFIG_NET_ETHERNET=y |
597 | CONFIG_MII=y | 646 | CONFIG_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 | ||
613 | CONFIG_NET_PCI=y | 657 | CONFIG_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 | 665 | CONFIG_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 |
629 | CONFIG_8139TOO=y | 670 | # CONFIG_8139TOO is not set |
630 | CONFIG_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 |
660 | CONFIG_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 | # |
704 | CONFIG_INPUT_MOUSEDEV=y | 746 | CONFIG_INPUT_MOUSEDEV=y |
705 | CONFIG_INPUT_MOUSEDEV_PSAUX=y | 747 | CONFIG_INPUT_MOUSEDEV_PSAUX=y |
706 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | 748 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1280 |
707 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | 749 | CONFIG_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 | 752 | CONFIG_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 | ||
717 | CONFIG_SOUND_GAMEPORT=y | ||
718 | CONFIG_SERIO=y | ||
719 | CONFIG_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 | # |
728 | CONFIG_INPUT_KEYBOARD=y | 758 | CONFIG_INPUT_KEYBOARD=y |
@@ -734,15 +764,25 @@ CONFIG_KEYBOARD_ATKBD=y | |||
734 | CONFIG_INPUT_MOUSE=y | 764 | CONFIG_INPUT_MOUSE=y |
735 | CONFIG_MOUSE_PS2=y | 765 | CONFIG_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 | # | ||
775 | CONFIG_SERIO=y | ||
776 | CONFIG_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 | ||
781 | CONFIG_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 | # |
748 | CONFIG_VT=y | 788 | CONFIG_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 |
759 | CONFIG_SERIAL_8250_NR_UARTS=4 | 799 | CONFIG_SERIAL_8250_NR_UARTS=4 |
800 | CONFIG_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 | # |
765 | CONFIG_SERIAL_CORE=y | 806 | CONFIG_SERIAL_CORE=y |
807 | # CONFIG_SERIAL_JSM is not set | ||
766 | CONFIG_UNIX98_PTYS=y | 808 | CONFIG_UNIX98_PTYS=y |
767 | CONFIG_LEGACY_PTYS=y | 809 | CONFIG_LEGACY_PTYS=y |
768 | CONFIG_LEGACY_PTY_COUNT=256 | 810 | CONFIG_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 | 826 | CONFIG_NVRAM=y |
786 | # CONFIG_RTC is not set | 827 | CONFIG_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 | ||
796 | CONFIG_AGP=y | 837 | CONFIG_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 |
801 | CONFIG_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 | 846 | CONFIG_AGP_VIA=y |
806 | # CONFIG_AGP_EFFICEON is not set | 847 | # CONFIG_AGP_EFFICEON is not set |
807 | CONFIG_DRM=y | 848 | CONFIG_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 | 851 | CONFIG_DRM_RADEON=y |
812 | # CONFIG_DRM_I810 is not set | ||
813 | CONFIG_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 | 871 | CONFIG_I2C=y |
872 | CONFIG_I2C_CHARDEV=y | ||
873 | |||
874 | # | ||
875 | # I2C Algorithms | ||
876 | # | ||
877 | CONFIG_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 | ||
892 | CONFIG_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 | ||
904 | CONFIG_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 | # | ||
939 | CONFIG_HWMON=y | ||
940 | CONFIG_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 | ||
954 | CONFIG_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 | 992 | CONFIG_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 | ||
1012 | CONFIG_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 |
1035 | CONFIG_VIDEO_TUNER=y | ||
1036 | CONFIG_VIDEO_BUF=y | ||
1037 | CONFIG_VIDEO_IR=y | ||
839 | 1038 | ||
840 | # | 1039 | # |
841 | # Graphics support | 1040 | # Graphics support |
842 | # | 1041 | # |
843 | # CONFIG_FB is not set | 1042 | CONFIG_FB=y |
844 | # CONFIG_VIDEO_SELECT is not set | 1043 | CONFIG_FB_CFB_FILLRECT=y |
1044 | CONFIG_FB_CFB_COPYAREA=y | ||
1045 | CONFIG_FB_CFB_IMAGEBLIT=y | ||
1046 | # CONFIG_FB_MACMODES is not set | ||
1047 | CONFIG_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 | ||
1057 | CONFIG_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 | ||
1066 | CONFIG_FB_RADEON=y | ||
1067 | CONFIG_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 | # |
849 | CONFIG_VGA_CONSOLE=y | 1085 | CONFIG_VGA_CONSOLE=y |
850 | # CONFIG_MDA_CONSOLE is not set | ||
851 | CONFIG_DUMMY_CONSOLE=y | 1086 | CONFIG_DUMMY_CONSOLE=y |
1087 | CONFIG_FRAMEBUFFER_CONSOLE=y | ||
1088 | # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set | ||
1089 | # CONFIG_FONTS is not set | ||
1090 | CONFIG_FONT_8x8=y | ||
1091 | CONFIG_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 | |||
864 | CONFIG_SND_RAWMIDI=y | 1110 | CONFIG_SND_RAWMIDI=y |
865 | CONFIG_SND_SEQUENCER=y | 1111 | CONFIG_SND_SEQUENCER=y |
866 | # CONFIG_SND_SEQ_DUMMY is not set | 1112 | # CONFIG_SND_SEQ_DUMMY is not set |
867 | CONFIG_SND_OSSEMUL=y | 1113 | # CONFIG_SND_MIXER_OSS is not set |
868 | CONFIG_SND_MIXER_OSS=y | 1114 | # CONFIG_SND_PCM_OSS is not set |
869 | CONFIG_SND_PCM_OSS=y | 1115 | # CONFIG_SND_SEQUENCER_OSS is not set |
870 | CONFIG_SND_SEQUENCER_OSS=y | 1116 | CONFIG_SND_RTCTIMER=y |
1117 | CONFIG_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 | # |
877 | CONFIG_SND_MPU401_UART=y | 1126 | CONFIG_SND_MPU401_UART=y |
1127 | CONFIG_SND_AC97_CODEC=y | ||
1128 | CONFIG_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 | # |
913 | CONFIG_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 |
943 | CONFIG_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 |
1177 | CONFIG_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 | # |
1196 | CONFIG_USB_ARCH_HAS_HCD=y | ||
1197 | CONFIG_USB_ARCH_HAS_OHCI=y | ||
962 | CONFIG_USB=y | 1198 | CONFIG_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 | |||
968 | CONFIG_USB_DEVICEFS=y | 1204 | CONFIG_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 | |||
975 | CONFIG_USB_EHCI_HCD=y | 1213 | CONFIG_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 |
979 | CONFIG_USB_UHCI_HCD=y | 1218 | CONFIG_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 |
988 | CONFIG_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 | # | ||
989 | CONFIG_USB_STORAGE=y | 1235 | CONFIG_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 | # |
1003 | CONFIG_USB_HID=y | 1254 | # USB HID Boot Protocol drivers |
1004 | CONFIG_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 |
1012 | CONFIG_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 |
1062 | CONFIG_USB_CYTHERM=m | 1324 | # CONFIG_USB_CYTHERM is not set |
1063 | CONFIG_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 | # |
1074 | CONFIG_EXT2_FS=y | 1363 | CONFIG_EXT2_FS=y |
1075 | # CONFIG_EXT2_FS_XATTR is not set | 1364 | # CONFIG_EXT2_FS_XATTR is not set |
1076 | CONFIG_EXT3_FS=y | 1365 | # CONFIG_EXT2_FS_XIP is not set |
1077 | CONFIG_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 | ||
1080 | CONFIG_JBD=y | ||
1081 | # CONFIG_JBD_DEBUG is not set | ||
1082 | CONFIG_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 |
1376 | CONFIG_DNOTIFY=y | ||
1089 | # CONFIG_AUTOFS_FS is not set | 1377 | # CONFIG_AUTOFS_FS is not set |
1090 | CONFIG_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 | # |
1095 | CONFIG_ISO9660_FS=y | 1384 | CONFIG_ISO9660_FS=y |
1096 | CONFIG_JOLIET=y | 1385 | CONFIG_JOLIET=y |
1097 | # CONFIG_ZISOFS is not set | 1386 | CONFIG_ZISOFS=y |
1098 | CONFIG_UDF_FS=y | 1387 | CONFIG_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 | # |
1103 | CONFIG_FAT_FS=y | 1393 | CONFIG_FAT_FS=y |
1104 | CONFIG_MSDOS_FS=y | 1394 | # CONFIG_MSDOS_FS is not set |
1105 | CONFIG_VFAT_FS=y | 1395 | CONFIG_VFAT_FS=y |
1396 | CONFIG_FAT_DEFAULT_CODEPAGE=850 | ||
1397 | CONFIG_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 | |||
1111 | CONFIG_PROC_FS=y | 1403 | CONFIG_PROC_FS=y |
1112 | CONFIG_PROC_KCORE=y | 1404 | CONFIG_PROC_KCORE=y |
1113 | CONFIG_SYSFS=y | 1405 | CONFIG_SYSFS=y |
1114 | # CONFIG_DEVFS_FS is not set | ||
1115 | # CONFIG_DEVPTS_FS_XATTR is not set | ||
1116 | CONFIG_TMPFS=y | 1406 | CONFIG_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 |
1119 | CONFIG_RAMFS=y | 1409 | CONFIG_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 | # |
1141 | CONFIG_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 | ||
1145 | CONFIG_NFSD=y | ||
1146 | # CONFIG_NFSD_V3 is not set | ||
1147 | CONFIG_NFSD_TCP=y | ||
1148 | CONFIG_LOCKD=y | ||
1149 | CONFIG_EXPORTFS=y | ||
1150 | CONFIG_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 | 1436 | CONFIG_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 | 1448 | CONFIG_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 | ||
1162 | CONFIG_MSDOS_PARTITION=y | 1454 | CONFIG_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 | # |
1167 | CONFIG_NLS=y | 1469 | CONFIG_NLS=y |
1168 | CONFIG_NLS_DEFAULT="iso8859-1" | 1470 | CONFIG_NLS_DEFAULT="iso8859-15" |
1169 | CONFIG_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 | 1474 | CONFIG_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 | ||
1192 | CONFIG_NLS_ISO8859_1=y | 1495 | CONFIG_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 | 1505 | CONFIG_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 | 1508 | CONFIG_NLS_UTF8=y |
1206 | 1509 | ||
1207 | # | 1510 | # |
1208 | # Profiling support | 1511 | # Instrumentation Support |
1209 | # | 1512 | # |
1210 | CONFIG_PROFILING=y | 1513 | # CONFIG_PROFILING is not set |
1211 | CONFIG_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 | ||
1520 | CONFIG_MAGIC_SYSRQ=y | ||
1216 | # CONFIG_DEBUG_KERNEL is not set | 1521 | # CONFIG_DEBUG_KERNEL is not set |
1522 | CONFIG_LOG_BUF_SHIFT=14 | ||
1523 | CONFIG_DEBUG_BUGVERBOSE=y | ||
1217 | CONFIG_EARLY_PRINTK=y | 1524 | CONFIG_EARLY_PRINTK=y |
1218 | CONFIG_DEBUG_SPINLOCK_SLEEP=y | ||
1219 | # CONFIG_FRAME_POINTER is not set | ||
1220 | CONFIG_4KSTACKS=y | ||
1221 | CONFIG_X86_FIND_SMP_CONFIG=y | 1525 | CONFIG_X86_FIND_SMP_CONFIG=y |
1222 | CONFIG_X86_MPPARSE=y | 1526 | CONFIG_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 | ||
1237 | CONFIG_CRC32=y | 1548 | CONFIG_CRC32=y |
1238 | CONFIG_LIBCRC32C=m | 1549 | # CONFIG_LIBCRC32C is not set |
1239 | CONFIG_X86_SMP=y | 1550 | CONFIG_ZLIB_INFLATE=y |
1240 | CONFIG_X86_HT=y | 1551 | CONFIG_GENERIC_HARDIRQS=y |
1552 | CONFIG_GENERIC_IRQ_PROBE=y | ||
1241 | CONFIG_X86_BIOS_REBOOT=y | 1553 | CONFIG_X86_BIOS_REBOOT=y |
1242 | CONFIG_X86_TRAMPOLINE=y | 1554 | CONFIG_KTIME_SCALAR=y |
1243 | CONFIG_X86_STD_RESOURCES=y | ||
1244 | CONFIG_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 | |||
7 | obj-y := process.o semaphore.o signal.o entry.o traps.o irq.o \ | 7 | obj-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 | ||
12 | obj-y += cpu/ | 12 | obj-y += cpu/ |
13 | obj-y += timers/ | 13 | obj-y += timers/ |
diff --git a/arch/i386/kernel/alternative.c b/arch/i386/kernel/alternative.c new file mode 100644 index 000000000000..5cbd6f99fb2a --- /dev/null +++ b/arch/i386/kernel/alternative.c | |||
@@ -0,0 +1,321 @@ | |||
1 | #include <linux/module.h> | ||
2 | #include <linux/spinlock.h> | ||
3 | #include <linux/list.h> | ||
4 | #include <asm/alternative.h> | ||
5 | #include <asm/sections.h> | ||
6 | |||
7 | #define DEBUG 0 | ||
8 | #if DEBUG | ||
9 | # define DPRINTK(fmt, args...) printk(fmt, args) | ||
10 | #else | ||
11 | # define DPRINTK(fmt, args...) | ||
12 | #endif | ||
13 | |||
14 | /* Use inline assembly to define this because the nops are defined | ||
15 | as inline assembly strings in the include files and we cannot | ||
16 | get them easily into strings. */ | ||
17 | asm("\t.data\nintelnops: " | ||
18 | GENERIC_NOP1 GENERIC_NOP2 GENERIC_NOP3 GENERIC_NOP4 GENERIC_NOP5 GENERIC_NOP6 | ||
19 | GENERIC_NOP7 GENERIC_NOP8); | ||
20 | asm("\t.data\nk8nops: " | ||
21 | K8_NOP1 K8_NOP2 K8_NOP3 K8_NOP4 K8_NOP5 K8_NOP6 | ||
22 | K8_NOP7 K8_NOP8); | ||
23 | asm("\t.data\nk7nops: " | ||
24 | K7_NOP1 K7_NOP2 K7_NOP3 K7_NOP4 K7_NOP5 K7_NOP6 | ||
25 | K7_NOP7 K7_NOP8); | ||
26 | |||
27 | extern unsigned char intelnops[], k8nops[], k7nops[]; | ||
28 | static 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 | }; | ||
39 | static 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 | }; | ||
50 | static 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 | }; | ||
61 | static 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 | |||
71 | extern struct alt_instr __alt_instructions[], __alt_instructions_end[]; | ||
72 | extern struct alt_instr __smp_alt_instructions[], __smp_alt_instructions_end[]; | ||
73 | extern u8 *__smp_locks[], *__smp_locks_end[]; | ||
74 | |||
75 | extern u8 __smp_alt_begin[], __smp_alt_end[]; | ||
76 | |||
77 | |||
78 | static 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 | |||
98 | void 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 | |||
121 | static 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 | |||
133 | static 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 | |||
144 | static 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 | |||
157 | static 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 | |||
171 | struct 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 | }; | ||
186 | static LIST_HEAD(smp_alt_modules); | ||
187 | static DEFINE_SPINLOCK(smp_alt); | ||
188 | |||
189 | static int smp_alt_once = 0; | ||
190 | static int __init bootonly(char *str) | ||
191 | { | ||
192 | smp_alt_once = 1; | ||
193 | return 1; | ||
194 | } | ||
195 | __setup("smp-alt-boot", bootonly); | ||
196 | |||
197 | void 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 | |||
233 | void 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 | |||
254 | void 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 | |||
286 | void __init alternative_instructions(void) | ||
287 | { | ||
288 | apply_alternatives(__alt_instructions, __alt_instructions_end); | ||
289 | |||
290 | /* switch to patch-once-at-boottime-only mode and free the | ||
291 | * tables in case we know the number of CPUs will never ever | ||
292 | * change */ | ||
293 | #ifdef CONFIG_HOTPLUG_CPU | ||
294 | if (num_possible_cpus() < 2) | ||
295 | smp_alt_once = 1; | ||
296 | #else | ||
297 | smp_alt_once = 1; | ||
298 | #endif | ||
299 | |||
300 | if (smp_alt_once) { | ||
301 | if (1 == num_possible_cpus()) { | ||
302 | printk(KERN_INFO "SMP alternatives: switching to UP code\n"); | ||
303 | set_bit(X86_FEATURE_UP, boot_cpu_data.x86_capability); | ||
304 | set_bit(X86_FEATURE_UP, cpu_data[0].x86_capability); | ||
305 | apply_alternatives(__smp_alt_instructions, | ||
306 | __smp_alt_instructions_end); | ||
307 | alternatives_smp_unlock(__smp_locks, __smp_locks_end, | ||
308 | _text, _etext); | ||
309 | } | ||
310 | free_init_pages("SMP alternatives", | ||
311 | (unsigned long)__smp_alt_begin, | ||
312 | (unsigned long)__smp_alt_end); | ||
313 | } else { | ||
314 | alternatives_smp_save(__smp_alt_instructions, | ||
315 | __smp_alt_instructions_end); | ||
316 | alternatives_smp_module_add(NULL, "core kernel", | ||
317 | __smp_locks, __smp_locks_end, | ||
318 | _text, _etext); | ||
319 | alternatives_smp_switch(0); | ||
320 | } | ||
321 | } | ||
diff --git a/arch/i386/kernel/apic.c b/arch/i386/kernel/apic.c index 776c90989e06..eb5279d23b7f 100644 --- a/arch/i386/kernel/apic.c +++ b/arch/i386/kernel/apic.c | |||
@@ -38,6 +38,7 @@ | |||
38 | #include <asm/i8253.h> | 38 | #include <asm/i8253.h> |
39 | 39 | ||
40 | #include <mach_apic.h> | 40 | #include <mach_apic.h> |
41 | #include <mach_apicdef.h> | ||
41 | #include <mach_ipi.h> | 42 | #include <mach_ipi.h> |
42 | 43 | ||
43 | #include "io_ports.h" | 44 | #include "io_ports.h" |
diff --git a/arch/i386/kernel/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 | ||
825 | static void (*original_pm_idle)(void); | 825 | static void (*original_pm_idle)(void); |
826 | 826 | ||
827 | extern 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..7e3d6b6a4e96 100644 --- a/arch/i386/kernel/cpu/common.c +++ b/arch/i386/kernel/cpu/common.c | |||
@@ -25,9 +25,10 @@ EXPORT_PER_CPU_SYMBOL(cpu_gdt_descr); | |||
25 | DEFINE_PER_CPU(unsigned char, cpu_16bit_stack[CPU_16BIT_STACK_SIZE]); | 25 | DEFINE_PER_CPU(unsigned char, cpu_16bit_stack[CPU_16BIT_STACK_SIZE]); |
26 | EXPORT_PER_CPU_SYMBOL(cpu_16bit_stack); | 26 | EXPORT_PER_CPU_SYMBOL(cpu_16bit_stack); |
27 | 27 | ||
28 | static int cachesize_override __devinitdata = -1; | 28 | static int cachesize_override __cpuinitdata = -1; |
29 | static int disable_x86_fxsr __devinitdata = 0; | 29 | static int disable_x86_fxsr __cpuinitdata; |
30 | static int disable_x86_serial_nr __devinitdata = 1; | 30 | static int disable_x86_serial_nr __cpuinitdata = 1; |
31 | static int disable_x86_sep __cpuinitdata; | ||
31 | 32 | ||
32 | struct cpu_dev * cpu_devs[X86_VENDOR_NUM] = {}; | 33 | struct 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 | ||
62 | int __devinit get_model_name(struct cpuinfo_x86 *c) | 63 | int __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 | ||
92 | void __devinit display_cacheinfo(struct cpuinfo_x86 *c) | 93 | void __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. */ |
133 | static char __devinit *table_lookup_model(struct cpuinfo_x86 *c) | 134 | static 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 | ||
154 | static void __devinit get_cpu_vendor(struct cpuinfo_x86 *c, int early) | 155 | static 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 | ||
191 | static 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 */ |
191 | static inline int flag_is_changeable_p(u32 flag) | 200 | static 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 */ |
213 | static int __devinit have_cpuid_p(void) | 222 | static int __cpuinit have_cpuid_p(void) |
214 | { | 223 | { |
215 | return flag_is_changeable_p(X86_EFLAGS_ID); | 224 | return flag_is_changeable_p(X86_EFLAGS_ID); |
216 | } | 225 | } |
@@ -254,7 +263,7 @@ static void __init early_cpu_detect(void) | |||
254 | } | 263 | } |
255 | } | 264 | } |
256 | 265 | ||
257 | void __devinit generic_identify(struct cpuinfo_x86 * c) | 266 | void __cpuinit generic_identify(struct cpuinfo_x86 * c) |
258 | { | 267 | { |
259 | u32 tfms, xlvl; | 268 | u32 tfms, xlvl; |
260 | int junk; | 269 | int junk; |
@@ -307,7 +316,7 @@ void __devinit generic_identify(struct cpuinfo_x86 * c) | |||
307 | #endif | 316 | #endif |
308 | } | 317 | } |
309 | 318 | ||
310 | static void __devinit squash_the_stupid_serial_number(struct cpuinfo_x86 *c) | 319 | static void __cpuinit squash_the_stupid_serial_number(struct cpuinfo_x86 *c) |
311 | { | 320 | { |
312 | if (cpu_has(c, X86_FEATURE_PN) && disable_x86_serial_nr ) { | 321 | if (cpu_has(c, X86_FEATURE_PN) && disable_x86_serial_nr ) { |
313 | /* Disable processor serial number */ | 322 | /* Disable processor serial number */ |
@@ -335,7 +344,7 @@ __setup("serialnumber", x86_serial_nr_setup); | |||
335 | /* | 344 | /* |
336 | * This does the hard work of actually picking apart the CPU stuff... | 345 | * This does the hard work of actually picking apart the CPU stuff... |
337 | */ | 346 | */ |
338 | void __devinit identify_cpu(struct cpuinfo_x86 *c) | 347 | void __cpuinit identify_cpu(struct cpuinfo_x86 *c) |
339 | { | 348 | { |
340 | int i; | 349 | int i; |
341 | 350 | ||
@@ -405,6 +414,10 @@ void __devinit identify_cpu(struct cpuinfo_x86 *c) | |||
405 | clear_bit(X86_FEATURE_XMM, c->x86_capability); | 414 | clear_bit(X86_FEATURE_XMM, c->x86_capability); |
406 | } | 415 | } |
407 | 416 | ||
417 | /* SEP disabled? */ | ||
418 | if (disable_x86_sep) | ||
419 | clear_bit(X86_FEATURE_SEP, c->x86_capability); | ||
420 | |||
408 | if (disable_pse) | 421 | if (disable_pse) |
409 | clear_bit(X86_FEATURE_PSE, c->x86_capability); | 422 | clear_bit(X86_FEATURE_PSE, c->x86_capability); |
410 | 423 | ||
@@ -417,7 +430,7 @@ void __devinit identify_cpu(struct cpuinfo_x86 *c) | |||
417 | else | 430 | else |
418 | /* Last resort... */ | 431 | /* Last resort... */ |
419 | sprintf(c->x86_model_id, "%02x/%02x", | 432 | sprintf(c->x86_model_id, "%02x/%02x", |
420 | c->x86_vendor, c->x86_model); | 433 | c->x86, c->x86_model); |
421 | } | 434 | } |
422 | 435 | ||
423 | /* Now the feature flags better reflect actual CPU features! */ | 436 | /* Now the feature flags better reflect actual CPU features! */ |
@@ -453,7 +466,7 @@ void __devinit identify_cpu(struct cpuinfo_x86 *c) | |||
453 | } | 466 | } |
454 | 467 | ||
455 | #ifdef CONFIG_X86_HT | 468 | #ifdef CONFIG_X86_HT |
456 | void __devinit detect_ht(struct cpuinfo_x86 *c) | 469 | void __cpuinit detect_ht(struct cpuinfo_x86 *c) |
457 | { | 470 | { |
458 | u32 eax, ebx, ecx, edx; | 471 | u32 eax, ebx, ecx, edx; |
459 | int index_msb, core_bits; | 472 | int index_msb, core_bits; |
@@ -500,7 +513,7 @@ void __devinit detect_ht(struct cpuinfo_x86 *c) | |||
500 | } | 513 | } |
501 | #endif | 514 | #endif |
502 | 515 | ||
503 | void __devinit print_cpu_info(struct cpuinfo_x86 *c) | 516 | void __cpuinit print_cpu_info(struct cpuinfo_x86 *c) |
504 | { | 517 | { |
505 | char *vendor = NULL; | 518 | char *vendor = NULL; |
506 | 519 | ||
@@ -523,7 +536,7 @@ void __devinit print_cpu_info(struct cpuinfo_x86 *c) | |||
523 | printk("\n"); | 536 | printk("\n"); |
524 | } | 537 | } |
525 | 538 | ||
526 | cpumask_t cpu_initialized __devinitdata = CPU_MASK_NONE; | 539 | cpumask_t cpu_initialized __cpuinitdata = CPU_MASK_NONE; |
527 | 540 | ||
528 | /* This is hacky. :) | 541 | /* This is hacky. :) |
529 | * We're emulating future behavior. | 542 | * We're emulating future behavior. |
@@ -570,7 +583,7 @@ void __init early_cpu_init(void) | |||
570 | * and IDT. We reload them nevertheless, this function acts as a | 583 | * and IDT. We reload them nevertheless, this function acts as a |
571 | * 'CPU state barrier', nothing should get across. | 584 | * 'CPU state barrier', nothing should get across. |
572 | */ | 585 | */ |
573 | void __devinit cpu_init(void) | 586 | void __cpuinit cpu_init(void) |
574 | { | 587 | { |
575 | int cpu = smp_processor_id(); | 588 | int cpu = smp_processor_id(); |
576 | struct tss_struct * t = &per_cpu(init_tss, cpu); | 589 | struct tss_struct * t = &per_cpu(init_tss, cpu); |
@@ -670,7 +683,7 @@ void __devinit cpu_init(void) | |||
670 | } | 683 | } |
671 | 684 | ||
672 | #ifdef CONFIG_HOTPLUG_CPU | 685 | #ifdef CONFIG_HOTPLUG_CPU |
673 | void __devinit cpu_uninit(void) | 686 | void __cpuinit cpu_uninit(void) |
674 | { | 687 | { |
675 | int cpu = raw_smp_processor_id(); | 688 | int cpu = raw_smp_processor_id(); |
676 | cpu_clear(cpu, cpu_initialized); | 689 | cpu_clear(cpu, cpu_initialized); |
diff --git a/arch/i386/kernel/cpu/cpufreq/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 | ||
97 | config X86_GX_SUSPMOD | 97 | config 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 | ||
123 | config X86_SPEEDSTEP_CENTRINO_ACPI | 122 | config 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 | |||
203 | config X86_LONGHAUL | 202 | config 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 | |||
215 | comment "shared options" | 215 | comment "shared options" |
216 | 216 | ||
217 | config X86_ACPI_CPUFREQ_PROC_INTF | 217 | config 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; | |||
39 | static int fid = 0; | 39 | static 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 | */ |
44 | static int min_fsb = 0; | 44 | static int min_fsb = 0; |
45 | static int max_fsb = 0; | 45 | static 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 | */ |
66 | static int nforce2_calc_fsb(int pll) | 66 | static 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 | */ |
85 | static int nforce2_calc_pll(unsigned int fsb) | 85 | static 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 | */ |
115 | static void nforce2_write_pll(int pll) | 115 | static 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 | */ |
178 | static int nforce2_set_fsb(unsigned int fsb) | 169 | static 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 | */ |
245 | static unsigned int nforce2_get(unsigned int cpu) | 235 | static 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 | */ |
403 | static unsigned int nforce2_detect_chipset(void) | 393 | static 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 | */ |
47 | struct s_elan_multiplier elan_multiplier[] = { | 47 | struct 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 | ||
80 | static unsigned int elanfreq_get_cpu_frequency(unsigned int cpu) | 80 | static 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 | ||
120 | static void elanfreq_set_cpu_state (unsigned int state) { | 120 | static 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 | ||
175 | static int elanfreq_verify (struct cpufreq_policy *policy) | 176 | static 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 | ||
180 | static int elanfreq_target (struct cpufreq_policy *policy, | 181 | static 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 | ||
270 | static struct cpufreq_driver elanfreq_driver = { | 270 | static 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 | ||
282 | static int __init elanfreq_init(void) | 282 | static 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 | ||
298 | static void __exit elanfreq_exit(void) | 296 | static 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 | ||
310 | module_init(elanfreq_init); | 308 | module_init(elanfreq_init); |
311 | module_exit(elanfreq_exit); | 309 | module_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 | ||
112 | struct gxfreq_params { | 112 | struct 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 | **/ |
160 | static int gx_freq_mult[16] = { | 160 | static 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 | ****************************************************************/ |
169 | static struct pci_device_id gx_chipset_tbl[] __initdata = { | 169 | static 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 | **/ |
180 | static __init struct pci_dev *gx_detect_chipset(void) | 180 | static __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 | */ |
207 | static unsigned int gx_get_cpuspeed(unsigned int cpu) | 206 | static 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 | ||
222 | static unsigned int gx_validate_speed(unsigned int khz, u8 *on_duration, u8 *off_duration) | 221 | static 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 | ||
254 | static void gx_set_cpuspeed(unsigned int khz) | 253 | static 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 | ||
331 | static int cpufreq_gx_verify(struct cpufreq_policy *policy) | 329 | static 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 | */ |
369 | static int cpufreq_gx_target(struct cpufreq_policy *policy, | 367 | static 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 | ||
238 | static int __initdata nehemiah_a_clock_ratio[32] = { | 238 | static 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 | ||
211 | static int cpufreq_p4_cpu_init(struct cpufreq_policy *policy) | 211 | static 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 | ||
263 | static int cpufreq_p4_cpu_exit(struct cpufreq_policy *policy) | 263 | static 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 | ||
300 | static struct cpufreq_driver p4clockmod_driver = { | 300 | static 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 | ||
312 | static int __init cpufreq_p4_init(void) | 312 | static 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 | ||
188 | static unsigned int powernow_k6_get(unsigned int cpu) | 188 | static unsigned int powernow_k6_get(unsigned int cpu) |
@@ -196,8 +196,8 @@ static struct freq_attr* powernow_k6_attr[] = { | |||
196 | }; | 196 | }; |
197 | 197 | ||
198 | static struct cpufreq_driver powernow_k6_driver = { | 198 | static 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 | */ |
217 | static int __init powernow_k6_init(void) | 217 | static 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..e5bc06480ff9 100644 --- a/arch/i386/kernel/cpu/cpufreq/powernow-k8.c +++ b/arch/i386/kernel/cpu/cpufreq/powernow-k8.c | |||
@@ -45,7 +45,7 @@ | |||
45 | 45 | ||
46 | #define PFX "powernow-k8: " | 46 | #define PFX "powernow-k8: " |
47 | #define BFX PFX "BIOS error: " | 47 | #define BFX PFX "BIOS error: " |
48 | #define VERSION "version 1.60.0" | 48 | #define VERSION "version 1.60.1" |
49 | #include "powernow-k8.h" | 49 | #include "powernow-k8.h" |
50 | 50 | ||
51 | /* serialize freq changes */ | 51 | /* serialize freq changes */ |
@@ -54,7 +54,7 @@ static DECLARE_MUTEX(fidvid_sem); | |||
54 | static struct powernow_k8_data *powernow_data[NR_CPUS]; | 54 | static struct powernow_k8_data *powernow_data[NR_CPUS]; |
55 | 55 | ||
56 | #ifndef CONFIG_SMP | 56 | #ifndef CONFIG_SMP |
57 | static cpumask_t cpu_core_map[1]; | 57 | static cpumask_t cpu_core_map[1] = { CPU_MASK_ALL }; |
58 | #endif | 58 | #endif |
59 | 59 | ||
60 | /* Return a frequency in MHz, given an input fid */ | 60 | /* Return a frequency in MHz, given an input fid */ |
@@ -83,11 +83,10 @@ static u32 find_millivolts_from_vid(struct powernow_k8_data *data, u32 vid) | |||
83 | */ | 83 | */ |
84 | static u32 convert_fid_to_vco_fid(u32 fid) | 84 | static u32 convert_fid_to_vco_fid(u32 fid) |
85 | { | 85 | { |
86 | if (fid < HI_FID_TABLE_BOTTOM) { | 86 | if (fid < HI_FID_TABLE_BOTTOM) |
87 | return 8 + (2 * fid); | 87 | return 8 + (2 * fid); |
88 | } else { | 88 | else |
89 | return fid; | 89 | return fid; |
90 | } | ||
91 | } | 90 | } |
92 | 91 | ||
93 | /* | 92 | /* |
@@ -177,7 +176,7 @@ static int write_new_fid(struct powernow_k8_data *data, u32 fid) | |||
177 | if (i++ > 100) { | 176 | if (i++ > 100) { |
178 | printk(KERN_ERR PFX "internal error - pending bit very stuck - no further pstate changes possible\n"); | 177 | printk(KERN_ERR PFX "internal error - pending bit very stuck - no further pstate changes possible\n"); |
179 | return 1; | 178 | return 1; |
180 | } | 179 | } |
181 | } while (query_current_values_with_pending_wait(data)); | 180 | } while (query_current_values_with_pending_wait(data)); |
182 | 181 | ||
183 | count_off_irt(data); | 182 | count_off_irt(data); |
@@ -474,8 +473,10 @@ static int check_supported_cpu(unsigned int cpu) | |||
474 | goto out; | 473 | goto out; |
475 | 474 | ||
476 | eax = cpuid_eax(CPUID_PROCESSOR_SIGNATURE); | 475 | eax = cpuid_eax(CPUID_PROCESSOR_SIGNATURE); |
476 | if ((eax & CPUID_XFAM) != CPUID_XFAM_K8) | ||
477 | goto out; | ||
478 | |||
477 | if (((eax & CPUID_USE_XFAM_XMOD) != CPUID_USE_XFAM_XMOD) || | 479 | 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)) { | 480 | ((eax & CPUID_XMOD) > CPUID_XMOD_REV_G)) { |
480 | printk(KERN_INFO PFX "Processor cpuid %x not supported\n", eax); | 481 | printk(KERN_INFO PFX "Processor cpuid %x not supported\n", eax); |
481 | goto out; | 482 | goto out; |
@@ -780,9 +781,7 @@ static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data) | |||
780 | /* verify only 1 entry from the lo frequency table */ | 781 | /* verify only 1 entry from the lo frequency table */ |
781 | if (fid < HI_FID_TABLE_BOTTOM) { | 782 | if (fid < HI_FID_TABLE_BOTTOM) { |
782 | if (cntlofreq) { | 783 | if (cntlofreq) { |
783 | /* if both entries are the same, ignore this | 784 | /* if both entries are the same, ignore this one ... */ |
784 | * one... | ||
785 | */ | ||
786 | if ((powernow_table[i].frequency != powernow_table[cntlofreq].frequency) || | 785 | if ((powernow_table[i].frequency != powernow_table[cntlofreq].frequency) || |
787 | (powernow_table[i].index != powernow_table[cntlofreq].index)) { | 786 | (powernow_table[i].index != powernow_table[cntlofreq].index)) { |
788 | printk(KERN_ERR PFX "Too many lo freq table entries\n"); | 787 | printk(KERN_ERR PFX "Too many lo freq table entries\n"); |
@@ -854,7 +853,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); | 853 | dprintk("cpu %d transition to index %u\n", smp_processor_id(), index); |
855 | 854 | ||
856 | /* fid are the lower 8 bits of the index we stored into | 855 | /* fid are the lower 8 bits of the index we stored into |
857 | * the cpufreq frequency table in find_psb_table, vid are | 856 | * the cpufreq frequency table in find_psb_table, vid are |
858 | * the upper 8 bits. | 857 | * the upper 8 bits. |
859 | */ | 858 | */ |
860 | 859 | ||
@@ -909,7 +908,6 @@ static int powernowk8_target(struct cpufreq_policy *pol, unsigned targfreq, unsi | |||
909 | u32 checkvid = data->currvid; | 908 | u32 checkvid = data->currvid; |
910 | unsigned int newstate; | 909 | unsigned int newstate; |
911 | int ret = -EIO; | 910 | int ret = -EIO; |
912 | int i; | ||
913 | 911 | ||
914 | /* only run on specific CPU from here on */ | 912 | /* only run on specific CPU from here on */ |
915 | oldmask = current->cpus_allowed; | 913 | oldmask = current->cpus_allowed; |
@@ -955,12 +953,6 @@ static int powernowk8_target(struct cpufreq_policy *pol, unsigned targfreq, unsi | |||
955 | up(&fidvid_sem); | 953 | up(&fidvid_sem); |
956 | goto err_out; | 954 | goto err_out; |
957 | } | 955 | } |
958 | |||
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); | 956 | up(&fidvid_sem); |
965 | 957 | ||
966 | pol->cur = find_khz_freq_from_fid(data->currfid); | 958 | pol->cur = find_khz_freq_from_fid(data->currfid); |
@@ -1048,7 +1040,7 @@ static int __cpuinit powernowk8_cpu_init(struct cpufreq_policy *pol) | |||
1048 | pol->governor = CPUFREQ_DEFAULT_GOVERNOR; | 1040 | pol->governor = CPUFREQ_DEFAULT_GOVERNOR; |
1049 | pol->cpus = cpu_core_map[pol->cpu]; | 1041 | pol->cpus = cpu_core_map[pol->cpu]; |
1050 | 1042 | ||
1051 | /* Take a crude guess here. | 1043 | /* Take a crude guess here. |
1052 | * That guess was in microseconds, so multiply with 1000 */ | 1044 | * That guess was in microseconds, so multiply with 1000 */ |
1053 | pol->cpuinfo.transition_latency = (((data->rvo + 8) * data->vstable * VST_UNITS_20US) | 1045 | pol->cpuinfo.transition_latency = (((data->rvo + 8) * data->vstable * VST_UNITS_20US) |
1054 | + (3 * (1 << data->irt) * 10)) * 1000; | 1046 | + (3 * (1 << data->irt) * 10)) * 1000; |
@@ -1070,9 +1062,8 @@ static int __cpuinit powernowk8_cpu_init(struct cpufreq_policy *pol) | |||
1070 | printk("cpu_init done, current fid 0x%x, vid 0x%x\n", | 1062 | printk("cpu_init done, current fid 0x%x, vid 0x%x\n", |
1071 | data->currfid, data->currvid); | 1063 | data->currfid, data->currvid); |
1072 | 1064 | ||
1073 | for_each_cpu_mask(i, cpu_core_map[pol->cpu]) { | 1065 | for_each_cpu_mask(i, cpu_core_map[pol->cpu]) |
1074 | powernow_data[i] = data; | 1066 | powernow_data[i] = data; |
1075 | } | ||
1076 | 1067 | ||
1077 | return 0; | 1068 | return 0; |
1078 | 1069 | ||
@@ -1145,16 +1136,14 @@ static int __cpuinit powernowk8_init(void) | |||
1145 | { | 1136 | { |
1146 | unsigned int i, supported_cpus = 0; | 1137 | unsigned int i, supported_cpus = 0; |
1147 | 1138 | ||
1148 | for (i=0; i<NR_CPUS; i++) { | 1139 | for_each_online_cpu(i) { |
1149 | if (!cpu_online(i)) | ||
1150 | continue; | ||
1151 | if (check_supported_cpu(i)) | 1140 | if (check_supported_cpu(i)) |
1152 | supported_cpus++; | 1141 | supported_cpus++; |
1153 | } | 1142 | } |
1154 | 1143 | ||
1155 | if (supported_cpus == num_online_cpus()) { | 1144 | if (supported_cpus == num_online_cpus()) { |
1156 | printk(KERN_INFO PFX "Found %d AMD Athlon 64 / Opteron processors (" VERSION ")\n", | 1145 | printk(KERN_INFO PFX "Found %d AMD Athlon 64 / Opteron " |
1157 | supported_cpus); | 1146 | "processors (" VERSION ")\n", supported_cpus); |
1158 | return cpufreq_register_driver(&cpufreq_amd64_driver); | 1147 | return cpufreq_register_driver(&cpufreq_amd64_driver); |
1159 | } | 1148 | } |
1160 | 1149 | ||
diff --git a/arch/i386/kernel/cpu/cpufreq/powernow-k8.h b/arch/i386/kernel/cpu/cpufreq/powernow-k8.h index d0de37d58e9a..00ea899c17e1 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 |
@@ -185,7 +185,7 @@ static void powernow_k8_acpi_pst_values(struct powernow_k8_data *data, unsigned | |||
185 | #ifndef for_each_cpu_mask | 185 | #ifndef for_each_cpu_mask |
186 | #define for_each_cpu_mask(i,mask) for (i=0;i<1;i++) | 186 | #define for_each_cpu_mask(i,mask) for (i=0;i<1;i++) |
187 | #endif | 187 | #endif |
188 | 188 | ||
189 | #ifdef CONFIG_SMP | 189 | #ifdef CONFIG_SMP |
190 | static inline void define_siblings(int cpu, cpumask_t cpu_sharedcore_mask[]) | 190 | static inline void define_siblings(int cpu, cpumask_t cpu_sharedcore_mask[]) |
191 | { | 191 | { |
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 | ||
107 | static unsigned int pentiumM_get_frequency(void) | 107 | static 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 | ||
174 | unsigned int speedstep_get_processor_frequency(unsigned int processor) | 174 | unsigned 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); | |||
198 | unsigned int speedstep_detect_processor (void) | 198 | unsigned 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: | 400 | out: |
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); | |||
36 | extern unsigned int speedstep_get_processor_frequency(unsigned int processor); | 36 | extern 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 | */ |
44 | extern unsigned int speedstep_get_freqs(unsigned int processor, | 44 | extern 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 | */ |
33 | static int smi_port = 0; | 33 | static int smi_port = 0; |
34 | static int smi_cmd = 0; | 34 | static int smi_cmd = 0; |
35 | static unsigned int smi_sig = 0; | 35 | static unsigned int smi_sig = 0; |
36 | 36 | ||
37 | /* info about the processor */ | 37 | /* info about the processor */ |
38 | static unsigned int speedstep_processor = 0; | 38 | static 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 | */ |
44 | static struct cpufreq_frequency_table speedstep_freqs[] = { | 44 | static 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 | ||
333 | static struct cpufreq_driver speedstep_driver = { | 335 | static 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); | |||
29 | struct movsl_mask movsl_mask __read_mostly; | 29 | struct movsl_mask movsl_mask __read_mostly; |
30 | #endif | 30 | #endif |
31 | 31 | ||
32 | void __devinit early_intel_workaround(struct cpuinfo_x86 *c) | 32 | void __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 | ||
47 | int __devinit ppro_with_ram_bug(void) | 47 | int __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 | */ |
65 | static void __devinit Intel_errata_workarounds(struct cpuinfo_x86 *c) | 65 | static 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 | */ |
84 | static int __devinit num_cpu_cores(struct cpuinfo_x86 *c) | 84 | static 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 | ||
99 | static void __devinit init_intel(struct cpuinfo_x86 *c) | 99 | static 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 | ||
208 | static struct cpu_dev intel_cpu_dev __devinitdata = { | 208 | static struct cpu_dev intel_cpu_dev __cpuinitdata = { |
209 | .c_vendor = "Intel", | 209 | .c_vendor = "Intel", |
210 | .c_ident = { "GenuineIntel" }, | 210 | .c_ident = { "GenuineIntel" }, |
211 | .c_models = { | 211 | .c_models = { |
diff --git a/arch/i386/kernel/cpu/intel_cacheinfo.c b/arch/i386/kernel/cpu/intel_cacheinfo.c index ffe58cee0c48..ce61921369e5 100644 --- a/arch/i386/kernel/cpu/intel_cacheinfo.c +++ b/arch/i386/kernel/cpu/intel_cacheinfo.c | |||
@@ -174,7 +174,7 @@ unsigned int __cpuinit init_intel_cacheinfo(struct cpuinfo_x86 *c) | |||
174 | unsigned int new_l1d = 0, new_l1i = 0; /* Cache sizes from cpuid(4) */ | 174 | unsigned int new_l1d = 0, new_l1i = 0; /* Cache sizes from cpuid(4) */ |
175 | unsigned int new_l2 = 0, new_l3 = 0, i; /* Cache sizes from cpuid(4) */ | 175 | unsigned int new_l2 = 0, new_l3 = 0, i; /* Cache sizes from cpuid(4) */ |
176 | 176 | ||
177 | if (c->cpuid_level > 4) { | 177 | if (c->cpuid_level > 3) { |
178 | static int is_initialized; | 178 | static int is_initialized; |
179 | 179 | ||
180 | if (is_initialized == 0) { | 180 | if (is_initialized == 0) { |
@@ -330,7 +330,7 @@ static void __cpuinit cache_shared_cpu_map_setup(unsigned int cpu, int index) | |||
330 | } | 330 | } |
331 | } | 331 | } |
332 | } | 332 | } |
333 | static void __devinit cache_remove_shared_cpu_map(unsigned int cpu, int index) | 333 | static void __cpuinit cache_remove_shared_cpu_map(unsigned int cpu, int index) |
334 | { | 334 | { |
335 | struct _cpuid4_info *this_leaf, *sibling_leaf; | 335 | struct _cpuid4_info *this_leaf, *sibling_leaf; |
336 | int sibling; | 336 | int sibling; |
diff --git a/arch/i386/kernel/cpu/proc.c b/arch/i386/kernel/cpu/proc.c index 89a85af33d28..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..ebc8dc116c43 100644 --- a/arch/i386/kernel/dmi_scan.c +++ b/arch/i386/kernel/dmi_scan.c | |||
@@ -5,6 +5,7 @@ | |||
5 | #include <linux/dmi.h> | 5 | #include <linux/dmi.h> |
6 | #include <linux/bootmem.h> | 6 | #include <linux/bootmem.h> |
7 | #include <linux/slab.h> | 7 | #include <linux/slab.h> |
8 | #include <asm/dmi.h> | ||
8 | 9 | ||
9 | static char * __init dmi_string(struct dmi_header *dm, u8 s) | 10 | static char * __init dmi_string(struct dmi_header *dm, u8 s) |
10 | { | 11 | { |
@@ -106,7 +107,7 @@ static void __init dmi_save_devices(struct dmi_header *dm) | |||
106 | struct dmi_device *dev; | 107 | struct dmi_device *dev; |
107 | 108 | ||
108 | for (i = 0; i < count; i++) { | 109 | for (i = 0; i < count; i++) { |
109 | char *d = ((char *) dm) + (i * 2); | 110 | char *d = (char *)(dm + 1) + (i * 2); |
110 | 111 | ||
111 | /* Skip disabled device */ | 112 | /* Skip disabled device */ |
112 | if ((*d & 0x80) == 0) | 113 | if ((*d & 0x80) == 0) |
@@ -299,3 +300,33 @@ struct dmi_device * dmi_find_device(int type, const char *name, | |||
299 | return NULL; | 300 | return NULL; |
300 | } | 301 | } |
301 | EXPORT_SYMBOL(dmi_find_device); | 302 | EXPORT_SYMBOL(dmi_find_device); |
303 | |||
304 | /** | ||
305 | * dmi_get_year - Return year of a DMI date | ||
306 | * @field: data index (like dmi_get_system_info) | ||
307 | * | ||
308 | * Returns -1 when the field doesn't exist. 0 when it is broken. | ||
309 | */ | ||
310 | int dmi_get_year(int field) | ||
311 | { | ||
312 | int year; | ||
313 | char *s = dmi_get_system_info(field); | ||
314 | |||
315 | if (!s) | ||
316 | return -1; | ||
317 | if (*s == '\0') | ||
318 | return 0; | ||
319 | s = strrchr(s, '/'); | ||
320 | if (!s) | ||
321 | return 0; | ||
322 | |||
323 | s += 1; | ||
324 | year = simple_strtoul(s, NULL, 0); | ||
325 | if (year && year < 100) { /* 2-digit year */ | ||
326 | year += 1900; | ||
327 | if (year < 1996) /* no dates < spec 1.0 */ | ||
328 | year += 100; | ||
329 | } | ||
330 | |||
331 | return year; | ||
332 | } | ||
diff --git a/arch/i386/kernel/efi.c b/arch/i386/kernel/efi.c index c9cad7ba0d2d..7ec6cfa01fb3 100644 --- a/arch/i386/kernel/efi.c +++ b/arch/i386/kernel/efi.c | |||
@@ -115,7 +115,7 @@ static void efi_call_phys_epilog(void) | |||
115 | unsigned long cr4; | 115 | unsigned long cr4; |
116 | struct Xgt_desc_struct *cpu_gdt_descr = &per_cpu(cpu_gdt_descr, 0); | 116 | struct Xgt_desc_struct *cpu_gdt_descr = &per_cpu(cpu_gdt_descr, 0); |
117 | 117 | ||
118 | cpu_gdt_descr->address = __va(cpu_gdt_descr->address); | 118 | cpu_gdt_descr->address = (unsigned long)__va(cpu_gdt_descr->address); |
119 | load_gdt(cpu_gdt_descr); | 119 | load_gdt(cpu_gdt_descr); |
120 | 120 | ||
121 | cr4 = read_cr4(); | 121 | cr4 = read_cr4(); |
@@ -543,7 +543,7 @@ efi_initialize_iomem_resources(struct resource *code_resource, | |||
543 | if ((md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT)) > | 543 | if ((md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT)) > |
544 | 0x100000000ULL) | 544 | 0x100000000ULL) |
545 | continue; | 545 | continue; |
546 | res = alloc_bootmem_low(sizeof(struct resource)); | 546 | res = kzalloc(sizeof(struct resource), GFP_ATOMIC); |
547 | switch (md->type) { | 547 | switch (md->type) { |
548 | case EFI_RESERVED_TYPE: | 548 | case EFI_RESERVED_TYPE: |
549 | res->name = "Reserved Memory"; | 549 | res->name = "Reserved Memory"; |
diff --git a/arch/i386/kernel/entry.S b/arch/i386/kernel/entry.S index 4d704724b2f5..cfc683f153b9 100644 --- a/arch/i386/kernel/entry.S +++ b/arch/i386/kernel/entry.S | |||
@@ -226,6 +226,10 @@ ENTRY(system_call) | |||
226 | pushl %eax # save orig_eax | 226 | pushl %eax # save orig_eax |
227 | SAVE_ALL | 227 | SAVE_ALL |
228 | GET_THREAD_INFO(%ebp) | 228 | GET_THREAD_INFO(%ebp) |
229 | testl $TF_MASK,EFLAGS(%esp) | ||
230 | jz no_singlestep | ||
231 | orl $_TIF_SINGLESTEP,TI_flags(%ebp) | ||
232 | no_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 |
489 | ENTRY(cpu_gdt_table) | 486 | ENTRY(cpu_gdt_table) |
490 | .quad 0x0000000000000000 /* NULL descriptor */ | 487 | .quad 0x0000000000000000 /* NULL descriptor */ |
491 | .quad 0x0000000000000000 /* 0x0b reserved */ | 488 | .quad 0x0000000000000000 /* 0x0b reserved */ |
diff --git a/arch/i386/kernel/io_apic.c b/arch/i386/kernel/io_apic.c index 39d9a5fa907e..311b4e7266f1 100644 --- a/arch/i386/kernel/io_apic.c +++ b/arch/i386/kernel/io_apic.c | |||
@@ -351,8 +351,8 @@ static inline void rotate_irqs_among_cpus(unsigned long useful_load_threshold) | |||
351 | { | 351 | { |
352 | int i, j; | 352 | int i, j; |
353 | Dprintk("Rotating IRQs among CPUs.\n"); | 353 | Dprintk("Rotating IRQs among CPUs.\n"); |
354 | for (i = 0; i < NR_CPUS; i++) { | 354 | for_each_online_cpu(i) { |
355 | for (j = 0; cpu_online(i) && (j < NR_IRQS); j++) { | 355 | for (j = 0; j < NR_IRQS; j++) { |
356 | if (!irq_desc[j].action) | 356 | if (!irq_desc[j].action) |
357 | continue; | 357 | continue; |
358 | /* Is it a significant load ? */ | 358 | /* Is it a significant load ? */ |
@@ -381,7 +381,7 @@ static void do_irq_balance(void) | |||
381 | unsigned long imbalance = 0; | 381 | unsigned long imbalance = 0; |
382 | cpumask_t allowed_mask, target_cpu_mask, tmp; | 382 | cpumask_t allowed_mask, target_cpu_mask, tmp; |
383 | 383 | ||
384 | for (i = 0; i < NR_CPUS; i++) { | 384 | for_each_cpu(i) { |
385 | int package_index; | 385 | int package_index; |
386 | CPU_IRQ(i) = 0; | 386 | CPU_IRQ(i) = 0; |
387 | if (!cpu_online(i)) | 387 | if (!cpu_online(i)) |
@@ -422,9 +422,7 @@ static void do_irq_balance(void) | |||
422 | } | 422 | } |
423 | } | 423 | } |
424 | /* Find the least loaded processor package */ | 424 | /* Find the least loaded processor package */ |
425 | for (i = 0; i < NR_CPUS; i++) { | 425 | for_each_online_cpu(i) { |
426 | if (!cpu_online(i)) | ||
427 | continue; | ||
428 | if (i != CPU_TO_PACKAGEINDEX(i)) | 426 | if (i != CPU_TO_PACKAGEINDEX(i)) |
429 | continue; | 427 | continue; |
430 | if (min_cpu_irq > CPU_IRQ(i)) { | 428 | if (min_cpu_irq > CPU_IRQ(i)) { |
@@ -441,9 +439,7 @@ tryanothercpu: | |||
441 | */ | 439 | */ |
442 | tmp_cpu_irq = 0; | 440 | tmp_cpu_irq = 0; |
443 | tmp_loaded = -1; | 441 | tmp_loaded = -1; |
444 | for (i = 0; i < NR_CPUS; i++) { | 442 | for_each_online_cpu(i) { |
445 | if (!cpu_online(i)) | ||
446 | continue; | ||
447 | if (i != CPU_TO_PACKAGEINDEX(i)) | 443 | if (i != CPU_TO_PACKAGEINDEX(i)) |
448 | continue; | 444 | continue; |
449 | if (max_cpu_irq <= CPU_IRQ(i)) | 445 | if (max_cpu_irq <= CPU_IRQ(i)) |
@@ -619,9 +615,7 @@ static int __init balanced_irq_init(void) | |||
619 | if (smp_num_siblings > 1 && !cpus_empty(tmp)) | 615 | if (smp_num_siblings > 1 && !cpus_empty(tmp)) |
620 | physical_balance = 1; | 616 | physical_balance = 1; |
621 | 617 | ||
622 | for (i = 0; i < NR_CPUS; i++) { | 618 | for_each_online_cpu(i) { |
623 | if (!cpu_online(i)) | ||
624 | continue; | ||
625 | irq_cpu_data[i].irq_delta = kmalloc(sizeof(unsigned long) * NR_IRQS, GFP_KERNEL); | 619 | irq_cpu_data[i].irq_delta = kmalloc(sizeof(unsigned long) * NR_IRQS, GFP_KERNEL); |
626 | irq_cpu_data[i].last_irq = kmalloc(sizeof(unsigned long) * NR_IRQS, GFP_KERNEL); | 620 | irq_cpu_data[i].last_irq = kmalloc(sizeof(unsigned long) * NR_IRQS, GFP_KERNEL); |
627 | if (irq_cpu_data[i].irq_delta == NULL || irq_cpu_data[i].last_irq == NULL) { | 621 | if (irq_cpu_data[i].irq_delta == NULL || irq_cpu_data[i].last_irq == NULL) { |
@@ -638,9 +632,11 @@ static int __init balanced_irq_init(void) | |||
638 | else | 632 | else |
639 | printk(KERN_ERR "balanced_irq_init: failed to spawn balanced_irq"); | 633 | printk(KERN_ERR "balanced_irq_init: failed to spawn balanced_irq"); |
640 | failed: | 634 | failed: |
641 | for (i = 0; i < NR_CPUS; i++) { | 635 | for_each_cpu(i) { |
642 | kfree(irq_cpu_data[i].irq_delta); | 636 | kfree(irq_cpu_data[i].irq_delta); |
637 | irq_cpu_data[i].irq_delta = NULL; | ||
643 | kfree(irq_cpu_data[i].last_irq); | 638 | kfree(irq_cpu_data[i].last_irq); |
639 | irq_cpu_data[i].last_irq = NULL; | ||
644 | } | 640 | } |
645 | return 0; | 641 | return 0; |
646 | } | 642 | } |
@@ -1761,7 +1757,8 @@ static void __init setup_ioapic_ids_from_mpc(void) | |||
1761 | * Don't check I/O APIC IDs for xAPIC systems. They have | 1757 | * Don't check I/O APIC IDs for xAPIC systems. They have |
1762 | * no meaning without the serial APIC bus. | 1758 | * no meaning without the serial APIC bus. |
1763 | */ | 1759 | */ |
1764 | if (!(boot_cpu_data.x86_vendor == X86_VENDOR_INTEL && boot_cpu_data.x86 < 15)) | 1760 | if (!(boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) |
1761 | || APIC_XAPIC(apic_version[boot_cpu_physical_apicid])) | ||
1765 | return; | 1762 | return; |
1766 | /* | 1763 | /* |
1767 | * This is broken; anything with a real cpu count has to | 1764 | * This is broken; anything with a real cpu count has to |
diff --git a/arch/i386/kernel/kprobes.c b/arch/i386/kernel/kprobes.c index 694a13997637..7a59050242a7 100644 --- a/arch/i386/kernel/kprobes.c +++ b/arch/i386/kernel/kprobes.c | |||
@@ -84,9 +84,9 @@ void __kprobes arch_disarm_kprobe(struct kprobe *p) | |||
84 | 84 | ||
85 | void __kprobes arch_remove_kprobe(struct kprobe *p) | 85 | void __kprobes arch_remove_kprobe(struct kprobe *p) |
86 | { | 86 | { |
87 | down(&kprobe_mutex); | 87 | mutex_lock(&kprobe_mutex); |
88 | free_insn_slot(p->ainsn.insn); | 88 | free_insn_slot(p->ainsn.insn); |
89 | up(&kprobe_mutex); | 89 | mutex_unlock(&kprobe_mutex); |
90 | } | 90 | } |
91 | 91 | ||
92 | static inline void save_previous_kprobe(struct kprobe_ctlblk *kcb) | 92 | static inline void save_previous_kprobe(struct kprobe_ctlblk *kcb) |
diff --git a/arch/i386/kernel/microcode.c b/arch/i386/kernel/microcode.c index 5390b521aca0..55bc365b8753 100644 --- a/arch/i386/kernel/microcode.c +++ b/arch/i386/kernel/microcode.c | |||
@@ -202,8 +202,6 @@ static inline void mark_microcode_update (int cpu_num, microcode_header_t *mc_he | |||
202 | } else if (mc_header->rev == uci->rev) { | 202 | } else if (mc_header->rev == uci->rev) { |
203 | /* notify the caller of success on this cpu */ | 203 | /* notify the caller of success on this cpu */ |
204 | uci->err = MC_SUCCESS; | 204 | 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; | 205 | goto out; |
208 | } | 206 | } |
209 | 207 | ||
@@ -369,7 +367,6 @@ static void do_update_one (void * unused) | |||
369 | struct ucode_cpu_info *uci = ucode_cpu_info + cpu_num; | 367 | struct ucode_cpu_info *uci = ucode_cpu_info + cpu_num; |
370 | 368 | ||
371 | if (uci->mc == NULL) { | 369 | if (uci->mc == NULL) { |
372 | printk(KERN_INFO "microcode: No new microcode data for CPU%d\n", cpu_num); | ||
373 | return; | 370 | return; |
374 | } | 371 | } |
375 | 372 | ||
@@ -511,7 +508,6 @@ static int __init microcode_init (void) | |||
511 | static void __exit microcode_exit (void) | 508 | static void __exit microcode_exit (void) |
512 | { | 509 | { |
513 | misc_deregister(µcode_dev); | 510 | misc_deregister(µcode_dev); |
514 | printk(KERN_INFO "IA-32 Microcode Update Driver v" MICROCODE_VERSION " unregistered\n"); | ||
515 | } | 511 | } |
516 | 512 | ||
517 | module_init(microcode_init) | 513 | module_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 | ||
107 | extern void apply_alternatives(void *start, void *end); | ||
108 | |||
109 | int module_finalize(const Elf_Ehdr *hdr, | 107 | int 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 | ||
127 | void module_arch_cleanup(struct module *mod) | 138 | void 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 | ||
831 | int 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 | ||
1014 | int es7000_plat; | ||
1015 | |||
1016 | void __init mp_config_acpi_legacy_irqs (void) | 1017 | void __init mp_config_acpi_legacy_irqs (void) |
1017 | { | 1018 | { |
1018 | struct mpc_config_intsrc intsrc; | 1019 | struct mpc_config_intsrc intsrc; |
diff --git a/arch/i386/kernel/nmi.c b/arch/i386/kernel/nmi.c index be87c5e2ee95..9074818b9473 100644 --- a/arch/i386/kernel/nmi.c +++ b/arch/i386/kernel/nmi.c | |||
@@ -143,7 +143,7 @@ static int __init check_nmi_watchdog(void) | |||
143 | local_irq_enable(); | 143 | local_irq_enable(); |
144 | mdelay((10*1000)/nmi_hz); // wait 10 ticks | 144 | mdelay((10*1000)/nmi_hz); // wait 10 ticks |
145 | 145 | ||
146 | for (cpu = 0; cpu < NR_CPUS; cpu++) { | 146 | for_each_cpu(cpu) { |
147 | #ifdef CONFIG_SMP | 147 | #ifdef CONFIG_SMP |
148 | /* Check cpu_callin_map here because that is set | 148 | /* Check cpu_callin_map here because that is set |
149 | after the timer is started. */ | 149 | after the timer is started. */ |
@@ -510,7 +510,7 @@ void touch_nmi_watchdog (void) | |||
510 | * Just reset the alert counters, (other CPUs might be | 510 | * Just reset the alert counters, (other CPUs might be |
511 | * spinning on locks we hold): | 511 | * spinning on locks we hold): |
512 | */ | 512 | */ |
513 | for (i = 0; i < NR_CPUS; i++) | 513 | for_each_cpu(i) |
514 | alert_counter[i] = 0; | 514 | alert_counter[i] = 0; |
515 | 515 | ||
516 | /* | 516 | /* |
@@ -543,7 +543,7 @@ void nmi_watchdog_tick (struct pt_regs * regs) | |||
543 | /* | 543 | /* |
544 | * die_nmi will return ONLY if NOTIFY_STOP happens.. | 544 | * die_nmi will return ONLY if NOTIFY_STOP happens.. |
545 | */ | 545 | */ |
546 | die_nmi(regs, "NMI Watchdog detected LOCKUP"); | 546 | die_nmi(regs, "BUG: NMI Watchdog detected LOCKUP"); |
547 | } else { | 547 | } else { |
548 | last_irq_sums[cpu] = sum; | 548 | last_irq_sums[cpu] = sum; |
549 | alert_counter[cpu] = 0; | 549 | alert_counter[cpu] = 0; |
diff --git a/arch/i386/kernel/process.c b/arch/i386/kernel/process.c index 0480454ebffa..299e61674084 100644 --- a/arch/i386/kernel/process.c +++ b/arch/i386/kernel/process.c | |||
@@ -295,7 +295,7 @@ void show_regs(struct pt_regs * regs) | |||
295 | printk("EIP: %04x:[<%08lx>] CPU: %d\n",0xffff & regs->xcs,regs->eip, smp_processor_id()); | 295 | printk("EIP: %04x:[<%08lx>] CPU: %d\n",0xffff & regs->xcs,regs->eip, smp_processor_id()); |
296 | print_symbol("EIP is at %s\n", regs->eip); | 296 | print_symbol("EIP is at %s\n", regs->eip); |
297 | 297 | ||
298 | if (user_mode(regs)) | 298 | if (user_mode_vm(regs)) |
299 | printk(" ESP: %04x:%08lx",0xffff & regs->xss,regs->esp); | 299 | printk(" ESP: %04x:%08lx",0xffff & regs->xss,regs->esp); |
300 | printk(" EFLAGS: %08lx %s (%s %.*s)\n", | 300 | printk(" EFLAGS: %08lx %s (%s %.*s)\n", |
301 | regs->eflags, print_tainted(), system_utsname.release, | 301 | regs->eflags, print_tainted(), system_utsname.release, |
diff --git a/arch/i386/kernel/ptrace.c b/arch/i386/kernel/ptrace.c index 5c1fb6aada5b..506462ef36a0 100644 --- a/arch/i386/kernel/ptrace.c +++ b/arch/i386/kernel/ptrace.c | |||
@@ -34,10 +34,10 @@ | |||
34 | 34 | ||
35 | /* | 35 | /* |
36 | * Determines which flags the user has access to [1 = access, 0 = no access]. | 36 | * Determines which flags the user has access to [1 = access, 0 = no access]. |
37 | * Prohibits changing ID(21), VIP(20), VIF(19), VM(17), IOPL(12-13), IF(9). | 37 | * Prohibits changing ID(21), VIP(20), VIF(19), VM(17), NT(14), IOPL(12-13), IF(9). |
38 | * Also masks reserved bits (31-22, 15, 5, 3, 1). | 38 | * Also masks reserved bits (31-22, 15, 5, 3, 1). |
39 | */ | 39 | */ |
40 | #define FLAG_MASK 0x00054dd5 | 40 | #define FLAG_MASK 0x00050dd5 |
41 | 41 | ||
42 | /* set's the trap flag. */ | 42 | /* set's the trap flag. */ |
43 | #define TRAP_FLAG 0x100 | 43 | #define TRAP_FLAG 0x100 |
diff --git a/arch/i386/kernel/semaphore.c b/arch/i386/kernel/semaphore.c index 7455ab643943..967dc74df9ee 100644 --- a/arch/i386/kernel/semaphore.c +++ b/arch/i386/kernel/semaphore.c | |||
@@ -110,11 +110,11 @@ asm( | |||
110 | ".align 4\n" | 110 | ".align 4\n" |
111 | ".globl __write_lock_failed\n" | 111 | ".globl __write_lock_failed\n" |
112 | "__write_lock_failed:\n\t" | 112 | "__write_lock_failed:\n\t" |
113 | LOCK "addl $" RW_LOCK_BIAS_STR ",(%eax)\n" | 113 | LOCK_PREFIX "addl $" RW_LOCK_BIAS_STR ",(%eax)\n" |
114 | "1: rep; nop\n\t" | 114 | "1: rep; nop\n\t" |
115 | "cmpl $" RW_LOCK_BIAS_STR ",(%eax)\n\t" | 115 | "cmpl $" RW_LOCK_BIAS_STR ",(%eax)\n\t" |
116 | "jne 1b\n\t" | 116 | "jne 1b\n\t" |
117 | LOCK "subl $" RW_LOCK_BIAS_STR ",(%eax)\n\t" | 117 | LOCK_PREFIX "subl $" RW_LOCK_BIAS_STR ",(%eax)\n\t" |
118 | "jnz __write_lock_failed\n\t" | 118 | "jnz __write_lock_failed\n\t" |
119 | "ret" | 119 | "ret" |
120 | ); | 120 | ); |
@@ -124,11 +124,11 @@ asm( | |||
124 | ".align 4\n" | 124 | ".align 4\n" |
125 | ".globl __read_lock_failed\n" | 125 | ".globl __read_lock_failed\n" |
126 | "__read_lock_failed:\n\t" | 126 | "__read_lock_failed:\n\t" |
127 | LOCK "incl (%eax)\n" | 127 | LOCK_PREFIX "incl (%eax)\n" |
128 | "1: rep; nop\n\t" | 128 | "1: rep; nop\n\t" |
129 | "cmpl $1,(%eax)\n\t" | 129 | "cmpl $1,(%eax)\n\t" |
130 | "js 1b\n\t" | 130 | "js 1b\n\t" |
131 | LOCK "decl (%eax)\n\t" | 131 | LOCK_PREFIX "decl (%eax)\n\t" |
132 | "js __read_lock_failed\n\t" | 132 | "js __read_lock_failed\n\t" |
133 | "ret" | 133 | "ret" |
134 | ); | 134 | ); |
diff --git a/arch/i386/kernel/setup.c b/arch/i386/kernel/setup.c index ab62a9f4701e..d313a11acafa 100644 --- a/arch/i386/kernel/setup.c +++ b/arch/i386/kernel/setup.c | |||
@@ -1288,7 +1288,7 @@ legacy_init_iomem_resources(struct resource *code_resource, struct resource *dat | |||
1288 | struct resource *res; | 1288 | struct resource *res; |
1289 | if (e820.map[i].addr + e820.map[i].size > 0x100000000ULL) | 1289 | if (e820.map[i].addr + e820.map[i].size > 0x100000000ULL) |
1290 | continue; | 1290 | continue; |
1291 | res = alloc_bootmem_low(sizeof(struct resource)); | 1291 | res = kzalloc(sizeof(struct resource), GFP_ATOMIC); |
1292 | switch (e820.map[i].type) { | 1292 | switch (e820.map[i].type) { |
1293 | case E820_RAM: res->name = "System RAM"; break; | 1293 | case E820_RAM: res->name = "System RAM"; break; |
1294 | case E820_ACPI: res->name = "ACPI Tables"; break; | 1294 | case E820_ACPI: res->name = "ACPI Tables"; break; |
@@ -1316,13 +1316,15 @@ legacy_init_iomem_resources(struct resource *code_resource, struct resource *dat | |||
1316 | 1316 | ||
1317 | /* | 1317 | /* |
1318 | * Request address space for all standard resources | 1318 | * Request address space for all standard resources |
1319 | * | ||
1320 | * This is called just before pcibios_assign_resources(), which is also | ||
1321 | * an fs_initcall, but is linked in later (in arch/i386/pci/i386.c). | ||
1319 | */ | 1322 | */ |
1320 | static void __init register_memory(void) | 1323 | static int __init request_standard_resources(void) |
1321 | { | 1324 | { |
1322 | unsigned long gapstart, gapsize, round; | 1325 | int i; |
1323 | unsigned long long last; | ||
1324 | int i; | ||
1325 | 1326 | ||
1327 | printk("Setting up standard PCI resources\n"); | ||
1326 | if (efi_enabled) | 1328 | if (efi_enabled) |
1327 | efi_initialize_iomem_resources(&code_resource, &data_resource); | 1329 | efi_initialize_iomem_resources(&code_resource, &data_resource); |
1328 | else | 1330 | else |
@@ -1334,6 +1336,16 @@ static void __init register_memory(void) | |||
1334 | /* request I/O space for devices used on all i[345]86 PCs */ | 1336 | /* request I/O space for devices used on all i[345]86 PCs */ |
1335 | for (i = 0; i < STANDARD_IO_RESOURCES; i++) | 1337 | for (i = 0; i < STANDARD_IO_RESOURCES; i++) |
1336 | request_resource(&ioport_resource, &standard_io_resources[i]); | 1338 | request_resource(&ioport_resource, &standard_io_resources[i]); |
1339 | return 0; | ||
1340 | } | ||
1341 | |||
1342 | fs_initcall(request_standard_resources); | ||
1343 | |||
1344 | static void __init register_memory(void) | ||
1345 | { | ||
1346 | unsigned long gapstart, gapsize, round; | ||
1347 | unsigned long long last; | ||
1348 | int i; | ||
1337 | 1349 | ||
1338 | /* | 1350 | /* |
1339 | * Search for the bigest gap in the low 32 bits of the e820 | 1351 | * Search for the bigest gap in the low 32 bits of the e820 |
@@ -1377,101 +1389,6 @@ static void __init register_memory(void) | |||
1377 | pci_mem_start, gapstart, gapsize); | 1389 | pci_mem_start, gapstart, gapsize); |
1378 | } | 1390 | } |
1379 | 1391 | ||
1380 | /* Use inline assembly to define this because the nops are defined | ||
1381 | as inline assembly strings in the include files and we cannot | ||
1382 | get them easily into strings. */ | ||
1383 | asm("\t.data\nintelnops: " | ||
1384 | GENERIC_NOP1 GENERIC_NOP2 GENERIC_NOP3 GENERIC_NOP4 GENERIC_NOP5 GENERIC_NOP6 | ||
1385 | GENERIC_NOP7 GENERIC_NOP8); | ||
1386 | asm("\t.data\nk8nops: " | ||
1387 | K8_NOP1 K8_NOP2 K8_NOP3 K8_NOP4 K8_NOP5 K8_NOP6 | ||
1388 | K8_NOP7 K8_NOP8); | ||
1389 | asm("\t.data\nk7nops: " | ||
1390 | K7_NOP1 K7_NOP2 K7_NOP3 K7_NOP4 K7_NOP5 K7_NOP6 | ||
1391 | K7_NOP7 K7_NOP8); | ||
1392 | |||
1393 | extern unsigned char intelnops[], k8nops[], k7nops[]; | ||
1394 | static unsigned char *intel_nops[ASM_NOP_MAX+1] = { | ||
1395 | NULL, | ||
1396 | intelnops, | ||
1397 | intelnops + 1, | ||
1398 | intelnops + 1 + 2, | ||
1399 | intelnops + 1 + 2 + 3, | ||
1400 | intelnops + 1 + 2 + 3 + 4, | ||
1401 | intelnops + 1 + 2 + 3 + 4 + 5, | ||
1402 | intelnops + 1 + 2 + 3 + 4 + 5 + 6, | ||
1403 | intelnops + 1 + 2 + 3 + 4 + 5 + 6 + 7, | ||
1404 | }; | ||
1405 | static unsigned char *k8_nops[ASM_NOP_MAX+1] = { | ||
1406 | NULL, | ||
1407 | k8nops, | ||
1408 | k8nops + 1, | ||
1409 | k8nops + 1 + 2, | ||
1410 | k8nops + 1 + 2 + 3, | ||
1411 | k8nops + 1 + 2 + 3 + 4, | ||
1412 | k8nops + 1 + 2 + 3 + 4 + 5, | ||
1413 | k8nops + 1 + 2 + 3 + 4 + 5 + 6, | ||
1414 | k8nops + 1 + 2 + 3 + 4 + 5 + 6 + 7, | ||
1415 | }; | ||
1416 | static unsigned char *k7_nops[ASM_NOP_MAX+1] = { | ||
1417 | NULL, | ||
1418 | k7nops, | ||
1419 | k7nops + 1, | ||
1420 | k7nops + 1 + 2, | ||
1421 | k7nops + 1 + 2 + 3, | ||
1422 | k7nops + 1 + 2 + 3 + 4, | ||
1423 | k7nops + 1 + 2 + 3 + 4 + 5, | ||
1424 | k7nops + 1 + 2 + 3 + 4 + 5 + 6, | ||
1425 | k7nops + 1 + 2 + 3 + 4 + 5 + 6 + 7, | ||
1426 | }; | ||
1427 | static struct nop { | ||
1428 | int cpuid; | ||
1429 | unsigned char **noptable; | ||
1430 | } noptypes[] = { | ||
1431 | { X86_FEATURE_K8, k8_nops }, | ||
1432 | { X86_FEATURE_K7, k7_nops }, | ||
1433 | { -1, NULL } | ||
1434 | }; | ||
1435 | |||
1436 | /* Replace instructions with better alternatives for this CPU type. | ||
1437 | |||
1438 | This runs before SMP is initialized to avoid SMP problems with | ||
1439 | self modifying code. This implies that assymetric systems where | ||
1440 | APs have less capabilities than the boot processor are not handled. | ||
1441 | Tough. Make sure you disable such features by hand. */ | ||
1442 | void apply_alternatives(void *start, void *end) | ||
1443 | { | ||
1444 | struct alt_instr *a; | ||
1445 | int diff, i, k; | ||
1446 | unsigned char **noptable = intel_nops; | ||
1447 | for (i = 0; noptypes[i].cpuid >= 0; i++) { | ||
1448 | if (boot_cpu_has(noptypes[i].cpuid)) { | ||
1449 | noptable = noptypes[i].noptable; | ||
1450 | break; | ||
1451 | } | ||
1452 | } | ||
1453 | for (a = start; (void *)a < end; a++) { | ||
1454 | if (!boot_cpu_has(a->cpuid)) | ||
1455 | continue; | ||
1456 | BUG_ON(a->replacementlen > a->instrlen); | ||
1457 | memcpy(a->instr, a->replacement, a->replacementlen); | ||
1458 | diff = a->instrlen - a->replacementlen; | ||
1459 | /* Pad the rest with nops */ | ||
1460 | for (i = a->replacementlen; diff > 0; diff -= k, i += k) { | ||
1461 | k = diff; | ||
1462 | if (k > ASM_NOP_MAX) | ||
1463 | k = ASM_NOP_MAX; | ||
1464 | memcpy(a->instr + i, noptable[k], k); | ||
1465 | } | ||
1466 | } | ||
1467 | } | ||
1468 | |||
1469 | void __init alternative_instructions(void) | ||
1470 | { | ||
1471 | extern struct alt_instr __alt_instructions[], __alt_instructions_end[]; | ||
1472 | apply_alternatives(__alt_instructions, __alt_instructions_end); | ||
1473 | } | ||
1474 | |||
1475 | static char * __init machine_specific_memory_setup(void); | 1392 | static char * __init machine_specific_memory_setup(void); |
1476 | 1393 | ||
1477 | #ifdef CONFIG_MCA | 1394 | #ifdef CONFIG_MCA |
@@ -1554,6 +1471,16 @@ void __init setup_arch(char **cmdline_p) | |||
1554 | 1471 | ||
1555 | parse_cmdline_early(cmdline_p); | 1472 | parse_cmdline_early(cmdline_p); |
1556 | 1473 | ||
1474 | #ifdef CONFIG_EARLY_PRINTK | ||
1475 | { | ||
1476 | char *s = strstr(*cmdline_p, "earlyprintk="); | ||
1477 | if (s) { | ||
1478 | setup_early_printk(strchr(s, '=') + 1); | ||
1479 | printk("early console enabled\n"); | ||
1480 | } | ||
1481 | } | ||
1482 | #endif | ||
1483 | |||
1557 | max_low_pfn = setup_memory(); | 1484 | max_low_pfn = setup_memory(); |
1558 | 1485 | ||
1559 | /* | 1486 | /* |
@@ -1578,19 +1505,6 @@ void __init setup_arch(char **cmdline_p) | |||
1578 | * NOTE: at this point the bootmem allocator is fully available. | 1505 | * NOTE: at this point the bootmem allocator is fully available. |
1579 | */ | 1506 | */ |
1580 | 1507 | ||
1581 | #ifdef CONFIG_EARLY_PRINTK | ||
1582 | { | ||
1583 | char *s = strstr(*cmdline_p, "earlyprintk="); | ||
1584 | if (s) { | ||
1585 | extern void setup_early_printk(char *); | ||
1586 | |||
1587 | setup_early_printk(strchr(s, '=') + 1); | ||
1588 | printk("early console enabled\n"); | ||
1589 | } | ||
1590 | } | ||
1591 | #endif | ||
1592 | |||
1593 | |||
1594 | dmi_scan_machine(); | 1508 | dmi_scan_machine(); |
1595 | 1509 | ||
1596 | #ifdef CONFIG_X86_GENERICARCH | 1510 | #ifdef CONFIG_X86_GENERICARCH |
diff --git a/arch/i386/kernel/signal.c b/arch/i386/kernel/signal.c index 963616d364ec..5c352c3a9e7f 100644 --- a/arch/i386/kernel/signal.c +++ b/arch/i386/kernel/signal.c | |||
@@ -123,7 +123,8 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc, int *peax | |||
123 | err |= __get_user(tmp, &sc->seg); \ | 123 | err |= __get_user(tmp, &sc->seg); \ |
124 | loadsegment(seg,tmp); } | 124 | loadsegment(seg,tmp); } |
125 | 125 | ||
126 | #define FIX_EFLAGS (X86_EFLAGS_AC | X86_EFLAGS_OF | X86_EFLAGS_DF | \ | 126 | #define FIX_EFLAGS (X86_EFLAGS_AC | X86_EFLAGS_RF | \ |
127 | X86_EFLAGS_OF | X86_EFLAGS_DF | \ | ||
127 | X86_EFLAGS_TF | X86_EFLAGS_SF | X86_EFLAGS_ZF | \ | 128 | X86_EFLAGS_TF | X86_EFLAGS_SF | X86_EFLAGS_ZF | \ |
128 | X86_EFLAGS_AF | X86_EFLAGS_PF | X86_EFLAGS_CF) | 129 | X86_EFLAGS_AF | X86_EFLAGS_PF | X86_EFLAGS_CF) |
129 | 130 | ||
@@ -582,9 +583,6 @@ static void fastcall do_signal(struct pt_regs *regs) | |||
582 | if (!user_mode(regs)) | 583 | if (!user_mode(regs)) |
583 | return; | 584 | return; |
584 | 585 | ||
585 | if (try_to_freeze()) | ||
586 | goto no_signal; | ||
587 | |||
588 | if (test_thread_flag(TIF_RESTORE_SIGMASK)) | 586 | if (test_thread_flag(TIF_RESTORE_SIGMASK)) |
589 | oldset = ¤t->saved_sigmask; | 587 | oldset = ¤t->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 | ||
616 | no_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 | ||
507 | static struct call_data_struct * call_data; | 507 | static 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. | |
514 | int 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 | */ |
522 | int smp_call_function (void (*func) (void *info), void *info, int nonatomic, | ||
523 | int wait) | ||
528 | { | 524 | { |
529 | struct call_data_struct data; | 525 | struct call_data_struct data; |
530 | int cpus; | 526 | int cpus; |
diff --git a/arch/i386/kernel/smpboot.c b/arch/i386/kernel/smpboot.c index 7007e1783797..82371d83bfa9 100644 --- a/arch/i386/kernel/smpboot.c +++ b/arch/i386/kernel/smpboot.c | |||
@@ -899,6 +899,7 @@ static int __devinit do_boot_cpu(int apicid, int cpu) | |||
899 | unsigned short nmi_high = 0, nmi_low = 0; | 899 | unsigned short nmi_high = 0, nmi_low = 0; |
900 | 900 | ||
901 | ++cpucount; | 901 | ++cpucount; |
902 | alternatives_smp_switch(1); | ||
902 | 903 | ||
903 | /* | 904 | /* |
904 | * We can't use kernel_thread since we must avoid to | 905 | * We can't use kernel_thread since we must avoid to |
@@ -1002,7 +1003,6 @@ void cpu_exit_clear(void) | |||
1002 | 1003 | ||
1003 | cpu_clear(cpu, cpu_callout_map); | 1004 | cpu_clear(cpu, cpu_callout_map); |
1004 | cpu_clear(cpu, cpu_callin_map); | 1005 | cpu_clear(cpu, cpu_callin_map); |
1005 | cpu_clear(cpu, cpu_present_map); | ||
1006 | 1006 | ||
1007 | cpu_clear(cpu, smp_commenced_mask); | 1007 | cpu_clear(cpu, smp_commenced_mask); |
1008 | unmap_cpu_to_logical_apicid(cpu); | 1008 | unmap_cpu_to_logical_apicid(cpu); |
@@ -1014,31 +1014,20 @@ struct warm_boot_cpu_info { | |||
1014 | int cpu; | 1014 | int cpu; |
1015 | }; | 1015 | }; |
1016 | 1016 | ||
1017 | static void __devinit do_warm_boot_cpu(void *p) | 1017 | static void __cpuinit do_warm_boot_cpu(void *p) |
1018 | { | 1018 | { |
1019 | struct warm_boot_cpu_info *info = p; | 1019 | struct warm_boot_cpu_info *info = p; |
1020 | do_boot_cpu(info->apicid, info->cpu); | 1020 | do_boot_cpu(info->apicid, info->cpu); |
1021 | complete(info->complete); | 1021 | complete(info->complete); |
1022 | } | 1022 | } |
1023 | 1023 | ||
1024 | int __devinit smp_prepare_cpu(int cpu) | 1024 | static int __cpuinit __smp_prepare_cpu(int cpu) |
1025 | { | 1025 | { |
1026 | DECLARE_COMPLETION(done); | 1026 | DECLARE_COMPLETION(done); |
1027 | struct warm_boot_cpu_info info; | 1027 | struct warm_boot_cpu_info info; |
1028 | struct work_struct task; | 1028 | struct work_struct task; |
1029 | int apicid, ret; | 1029 | int apicid, ret; |
1030 | 1030 | ||
1031 | lock_cpu_hotplug(); | ||
1032 | |||
1033 | /* | ||
1034 | * On x86, CPU0 is never offlined. Trying to bring up an | ||
1035 | * already-booted CPU will hang. So check for that case. | ||
1036 | */ | ||
1037 | if (cpu_online(cpu)) { | ||
1038 | ret = -EINVAL; | ||
1039 | goto exit; | ||
1040 | } | ||
1041 | |||
1042 | apicid = x86_cpu_to_apicid[cpu]; | 1031 | apicid = x86_cpu_to_apicid[cpu]; |
1043 | if (apicid == BAD_APICID) { | 1032 | if (apicid == BAD_APICID) { |
1044 | ret = -ENODEV; | 1033 | ret = -ENODEV; |
@@ -1063,7 +1052,6 @@ int __devinit smp_prepare_cpu(int cpu) | |||
1063 | zap_low_mappings(); | 1052 | zap_low_mappings(); |
1064 | ret = 0; | 1053 | ret = 0; |
1065 | exit: | 1054 | exit: |
1066 | unlock_cpu_hotplug(); | ||
1067 | return ret; | 1055 | return ret; |
1068 | } | 1056 | } |
1069 | #endif | 1057 | #endif |
@@ -1368,6 +1356,8 @@ void __cpu_die(unsigned int cpu) | |||
1368 | /* They ack this in play_dead by setting CPU_DEAD */ | 1356 | /* They ack this in play_dead by setting CPU_DEAD */ |
1369 | if (per_cpu(cpu_state, cpu) == CPU_DEAD) { | 1357 | if (per_cpu(cpu_state, cpu) == CPU_DEAD) { |
1370 | printk ("CPU %d is now offline\n", cpu); | 1358 | printk ("CPU %d is now offline\n", cpu); |
1359 | if (1 == num_online_cpus()) | ||
1360 | alternatives_smp_switch(0); | ||
1371 | return; | 1361 | return; |
1372 | } | 1362 | } |
1373 | msleep(100); | 1363 | msleep(100); |
@@ -1389,6 +1379,22 @@ void __cpu_die(unsigned int cpu) | |||
1389 | 1379 | ||
1390 | int __devinit __cpu_up(unsigned int cpu) | 1380 | int __devinit __cpu_up(unsigned int cpu) |
1391 | { | 1381 | { |
1382 | #ifdef CONFIG_HOTPLUG_CPU | ||
1383 | int ret=0; | ||
1384 | |||
1385 | /* | ||
1386 | * We do warm boot only on cpus that had booted earlier | ||
1387 | * Otherwise cold boot is all handled from smp_boot_cpus(). | ||
1388 | * cpu_callin_map is set during AP kickstart process. Its reset | ||
1389 | * when a cpu is taken offline from cpu_exit_clear(). | ||
1390 | */ | ||
1391 | if (!cpu_isset(cpu, cpu_callin_map)) | ||
1392 | ret = __smp_prepare_cpu(cpu); | ||
1393 | |||
1394 | if (ret) | ||
1395 | return -EIO; | ||
1396 | #endif | ||
1397 | |||
1392 | /* In case one didn't come up */ | 1398 | /* In case one didn't come up */ |
1393 | if (!cpu_isset(cpu, cpu_callin_map)) { | 1399 | if (!cpu_isset(cpu, cpu_callin_map)) { |
1394 | printk(KERN_DEBUG "skipping cpu%d, didn't come online\n", cpu); | 1400 | 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 */ | 43 | asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, |
44 | static 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(¤t->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(¤t->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 | ||
69 | asmlinkage 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); | ||
105 | out: | 98 | out: |
106 | return err; | 99 | return err; |
107 | } | 100 | } |
diff --git a/arch/i386/kernel/timers/timer_hpet.c b/arch/i386/kernel/timers/timer_hpet.c index be242723c339..17a6fe7166e7 100644 --- a/arch/i386/kernel/timers/timer_hpet.c +++ b/arch/i386/kernel/timers/timer_hpet.c | |||
@@ -46,7 +46,7 @@ static seqlock_t monotonic_lock = SEQLOCK_UNLOCKED; | |||
46 | * | 46 | * |
47 | * -johnstul@us.ibm.com "math is hard, lets go shopping!" | 47 | * -johnstul@us.ibm.com "math is hard, lets go shopping!" |
48 | */ | 48 | */ |
49 | static unsigned long cyc2ns_scale; | 49 | static 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 | ||
52 | static inline void set_cyc2ns_scale(unsigned long cpu_khz) | 52 | static inline void set_cyc2ns_scale(unsigned long cpu_khz) |
diff --git a/arch/i386/kernel/timers/timer_tsc.c b/arch/i386/kernel/timers/timer_tsc.c index a7f5a2aceba2..5e41ee29c8cf 100644 --- a/arch/i386/kernel/timers/timer_tsc.c +++ b/arch/i386/kernel/timers/timer_tsc.c | |||
@@ -74,7 +74,7 @@ late_initcall(start_lost_tick_compensation); | |||
74 | * | 74 | * |
75 | * -johnstul@us.ibm.com "math is hard, lets go shopping!" | 75 | * -johnstul@us.ibm.com "math is hard, lets go shopping!" |
76 | */ | 76 | */ |
77 | static unsigned long cyc2ns_scale; | 77 | static 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 | ||
80 | static inline void set_cyc2ns_scale(unsigned long cpu_khz) | 80 | static inline void set_cyc2ns_scale(unsigned long cpu_khz) |
diff --git a/arch/i386/kernel/topology.c b/arch/i386/kernel/topology.c index 67a0e1baa28b..296355292c7c 100644 --- a/arch/i386/kernel/topology.c +++ b/arch/i386/kernel/topology.c | |||
@@ -41,6 +41,15 @@ int arch_register_cpu(int num){ | |||
41 | parent = &node_devices[node].node; | 41 | parent = &node_devices[node].node; |
42 | #endif /* CONFIG_NUMA */ | 42 | #endif /* CONFIG_NUMA */ |
43 | 43 | ||
44 | /* | ||
45 | * CPU0 cannot be offlined due to several | ||
46 | * restrictions and assumptions in kernel. This basically | ||
47 | * doesnt add a control file, one cannot attempt to offline | ||
48 | * BSP. | ||
49 | */ | ||
50 | if (!num) | ||
51 | cpu_devices[num].cpu.no_control = 1; | ||
52 | |||
44 | return register_cpu(&cpu_devices[num].cpu, num, parent); | 53 | return register_cpu(&cpu_devices[num].cpu, num, parent); |
45 | } | 54 | } |
46 | 55 | ||
diff --git a/arch/i386/kernel/traps.c b/arch/i386/kernel/traps.c index b814dbdcc91e..de5386b01d38 100644 --- a/arch/i386/kernel/traps.c +++ b/arch/i386/kernel/traps.c | |||
@@ -99,6 +99,8 @@ int register_die_notifier(struct notifier_block *nb) | |||
99 | { | 99 | { |
100 | int err = 0; | 100 | int err = 0; |
101 | unsigned long flags; | 101 | unsigned long flags; |
102 | |||
103 | vmalloc_sync_all(); | ||
102 | spin_lock_irqsave(&die_notifier_lock, flags); | 104 | spin_lock_irqsave(&die_notifier_lock, flags); |
103 | err = notifier_chain_register(&i386die_chain, nb); | 105 | err = notifier_chain_register(&i386die_chain, nb); |
104 | spin_unlock_irqrestore(&die_notifier_lock, flags); | 106 | spin_unlock_irqrestore(&die_notifier_lock, flags); |
@@ -112,12 +114,30 @@ static inline int valid_stack_ptr(struct thread_info *tinfo, void *p) | |||
112 | p < (void *)tinfo + THREAD_SIZE - 3; | 114 | p < (void *)tinfo + THREAD_SIZE - 3; |
113 | } | 115 | } |
114 | 116 | ||
115 | static void print_addr_and_symbol(unsigned long addr, char *log_lvl) | 117 | /* |
118 | * Print CONFIG_STACK_BACKTRACE_COLS address/symbol entries per line. | ||
119 | */ | ||
120 | static inline int print_addr_and_symbol(unsigned long addr, char *log_lvl, | ||
121 | int printed) | ||
116 | { | 122 | { |
117 | printk(log_lvl); | 123 | if (!printed) |
124 | printk(log_lvl); | ||
125 | |||
126 | #if CONFIG_STACK_BACKTRACE_COLS == 1 | ||
118 | printk(" [<%08lx>] ", addr); | 127 | printk(" [<%08lx>] ", addr); |
128 | #else | ||
129 | printk(" <%08lx> ", addr); | ||
130 | #endif | ||
119 | print_symbol("%s", addr); | 131 | print_symbol("%s", addr); |
120 | printk("\n"); | 132 | |
133 | printed = (printed + 1) % CONFIG_STACK_BACKTRACE_COLS; | ||
134 | |||
135 | if (printed) | ||
136 | printk(" "); | ||
137 | else | ||
138 | printk("\n"); | ||
139 | |||
140 | return printed; | ||
121 | } | 141 | } |
122 | 142 | ||
123 | static inline unsigned long print_context_stack(struct thread_info *tinfo, | 143 | static inline unsigned long print_context_stack(struct thread_info *tinfo, |
@@ -125,20 +145,24 @@ static inline unsigned long print_context_stack(struct thread_info *tinfo, | |||
125 | char *log_lvl) | 145 | char *log_lvl) |
126 | { | 146 | { |
127 | unsigned long addr; | 147 | unsigned long addr; |
148 | int printed = 0; /* nr of entries already printed on current line */ | ||
128 | 149 | ||
129 | #ifdef CONFIG_FRAME_POINTER | 150 | #ifdef CONFIG_FRAME_POINTER |
130 | while (valid_stack_ptr(tinfo, (void *)ebp)) { | 151 | while (valid_stack_ptr(tinfo, (void *)ebp)) { |
131 | addr = *(unsigned long *)(ebp + 4); | 152 | addr = *(unsigned long *)(ebp + 4); |
132 | print_addr_and_symbol(addr, log_lvl); | 153 | printed = print_addr_and_symbol(addr, log_lvl, printed); |
133 | ebp = *(unsigned long *)ebp; | 154 | ebp = *(unsigned long *)ebp; |
134 | } | 155 | } |
135 | #else | 156 | #else |
136 | while (valid_stack_ptr(tinfo, stack)) { | 157 | while (valid_stack_ptr(tinfo, stack)) { |
137 | addr = *stack++; | 158 | addr = *stack++; |
138 | if (__kernel_text_address(addr)) | 159 | if (__kernel_text_address(addr)) |
139 | print_addr_and_symbol(addr, log_lvl); | 160 | printed = print_addr_and_symbol(addr, log_lvl, printed); |
140 | } | 161 | } |
141 | #endif | 162 | #endif |
163 | if (printed) | ||
164 | printk("\n"); | ||
165 | |||
142 | return ebp; | 166 | return ebp; |
143 | } | 167 | } |
144 | 168 | ||
@@ -166,8 +190,7 @@ static void show_trace_log_lvl(struct task_struct *task, | |||
166 | stack = (unsigned long*)context->previous_esp; | 190 | stack = (unsigned long*)context->previous_esp; |
167 | if (!stack) | 191 | if (!stack) |
168 | break; | 192 | break; |
169 | printk(log_lvl); | 193 | printk("%s =======================\n", log_lvl); |
170 | printk(" =======================\n"); | ||
171 | } | 194 | } |
172 | } | 195 | } |
173 | 196 | ||
@@ -194,21 +217,17 @@ static void show_stack_log_lvl(struct task_struct *task, unsigned long *esp, | |||
194 | for(i = 0; i < kstack_depth_to_print; i++) { | 217 | for(i = 0; i < kstack_depth_to_print; i++) { |
195 | if (kstack_end(stack)) | 218 | if (kstack_end(stack)) |
196 | break; | 219 | break; |
197 | if (i && ((i % 8) == 0)) { | 220 | if (i && ((i % 8) == 0)) |
198 | printk("\n"); | 221 | printk("\n%s ", log_lvl); |
199 | printk(log_lvl); | ||
200 | printk(" "); | ||
201 | } | ||
202 | printk("%08lx ", *stack++); | 222 | printk("%08lx ", *stack++); |
203 | } | 223 | } |
204 | printk("\n"); | 224 | printk("\n%sCall Trace:\n", log_lvl); |
205 | printk(log_lvl); | ||
206 | printk("Call Trace:\n"); | ||
207 | show_trace_log_lvl(task, esp, log_lvl); | 225 | show_trace_log_lvl(task, esp, log_lvl); |
208 | } | 226 | } |
209 | 227 | ||
210 | void show_stack(struct task_struct *task, unsigned long *esp) | 228 | void show_stack(struct task_struct *task, unsigned long *esp) |
211 | { | 229 | { |
230 | printk(" "); | ||
212 | show_stack_log_lvl(task, esp, ""); | 231 | show_stack_log_lvl(task, esp, ""); |
213 | } | 232 | } |
214 | 233 | ||
@@ -233,7 +252,7 @@ void show_registers(struct pt_regs *regs) | |||
233 | 252 | ||
234 | esp = (unsigned long) (®s->esp); | 253 | esp = (unsigned long) (®s->esp); |
235 | savesegment(ss, ss); | 254 | savesegment(ss, ss); |
236 | if (user_mode(regs)) { | 255 | if (user_mode_vm(regs)) { |
237 | in_kernel = 0; | 256 | in_kernel = 0; |
238 | esp = regs->esp; | 257 | esp = regs->esp; |
239 | ss = regs->xss & 0xffff; | 258 | ss = regs->xss & 0xffff; |
@@ -333,6 +352,8 @@ void die(const char * str, struct pt_regs * regs, long err) | |||
333 | static int die_counter; | 352 | static int die_counter; |
334 | unsigned long flags; | 353 | unsigned long flags; |
335 | 354 | ||
355 | oops_enter(); | ||
356 | |||
336 | if (die.lock_owner != raw_smp_processor_id()) { | 357 | if (die.lock_owner != raw_smp_processor_id()) { |
337 | console_verbose(); | 358 | console_verbose(); |
338 | spin_lock_irqsave(&die.lock, flags); | 359 | spin_lock_irqsave(&die.lock, flags); |
@@ -385,6 +406,7 @@ void die(const char * str, struct pt_regs * regs, long err) | |||
385 | ssleep(5); | 406 | ssleep(5); |
386 | panic("Fatal exception"); | 407 | panic("Fatal exception"); |
387 | } | 408 | } |
409 | oops_exit(); | ||
388 | do_exit(SIGSEGV); | 410 | do_exit(SIGSEGV); |
389 | } | 411 | } |
390 | 412 | ||
@@ -623,7 +645,7 @@ void die_nmi (struct pt_regs *regs, const char *msg) | |||
623 | /* If we are in kernel we are probably nested up pretty bad | 645 | /* If we are in kernel we are probably nested up pretty bad |
624 | * and might aswell get out now while we still can. | 646 | * and might aswell get out now while we still can. |
625 | */ | 647 | */ |
626 | if (!user_mode(regs)) { | 648 | if (!user_mode_vm(regs)) { |
627 | current->thread.trap_no = 2; | 649 | current->thread.trap_no = 2; |
628 | crash_kexec(regs); | 650 | crash_kexec(regs); |
629 | } | 651 | } |
@@ -694,6 +716,7 @@ fastcall void do_nmi(struct pt_regs * regs, long error_code) | |||
694 | 716 | ||
695 | void set_nmi_callback(nmi_callback_t callback) | 717 | void set_nmi_callback(nmi_callback_t callback) |
696 | { | 718 | { |
719 | vmalloc_sync_all(); | ||
697 | rcu_assign_pointer(nmi_callback, callback); | 720 | rcu_assign_pointer(nmi_callback, callback); |
698 | } | 721 | } |
699 | EXPORT_SYMBOL_GPL(set_nmi_callback); | 722 | EXPORT_SYMBOL_GPL(set_nmi_callback); |
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 | ||
11 | OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") | 12 | OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") |
12 | OUTPUT_ARCH(i386) | 13 | OUTPUT_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-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 | ||
86 | struct acpi_table_sdt { | 87 | struct 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 | ||
103 | extern int find_unisys_acpi_oem_table(unsigned long *oem_addr); | ||
104 | #endif | ||
105 | |||
102 | struct mip_reg { | 106 | struct 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 | ||
116 | extern int parse_unisys_oem (char *oemptr); | 120 | extern int parse_unisys_oem (char *oemptr); |
117 | extern int find_unisys_acpi_oem_table(unsigned long *oem_addr); | ||
118 | extern void setup_unisys(void); | 121 | extern void setup_unisys(void); |
119 | extern int es7000_start_cpu(int cpu, unsigned long eip); | 122 | extern int es7000_start_cpu(int cpu, unsigned long eip); |
120 | extern void es7000_sw_apic(void); | 123 | extern 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; | |||
51 | int mip_port; | 51 | int mip_port; |
52 | unsigned long mip_addr, host_addr; | 52 | unsigned 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 | |||
81 | void __init | 77 | void __init |
82 | setup_unisys(void) | 78 | setup_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 | ||
163 | int __init | 160 | int __init |
164 | find_unisys_acpi_oem_table(unsigned long *oem_addr) | 161 | find_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 | ||
216 | static void | 214 | static void |
217 | es7000_spin(int n) | 215 | es7000_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/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 | ||
215 | fastcall void do_invalid_op(struct pt_regs *, unsigned long); | 215 | fastcall void do_invalid_op(struct pt_regs *, unsigned long); |
216 | 216 | ||
217 | static 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 | */ | ||
257 | static 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 | */ |
227 | fastcall void __kprobes do_page_fault(struct pt_regs *regs, | 291 | fastcall 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 | |||
515 | vmalloc_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); | 592 | void 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 | */ | ||
54 | int 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 */ |
64 | struct page * | 52 | struct page * |
65 | follow_huge_addr(struct mm_struct *mm, unsigned long address, int write) | 53 | follow_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 | ||
271 | static void __meminit free_new_highpage(struct page *page) | 271 | static 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 | ||
723 | void 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 | ||
740 | extern char __start_rodata, __end_rodata; | 725 | extern char __start_rodata, __end_rodata; |
@@ -758,17 +743,31 @@ void mark_rodata_ro(void) | |||
758 | } | 743 | } |
759 | #endif | 744 | #endif |
760 | 745 | ||
746 | void 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 | |||
760 | void 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 |
763 | void free_initrd_mem(unsigned long start, unsigned long end) | 768 | void free_initrd_mem(unsigned long start, unsigned long end) |
764 | { | 769 | { |
765 | if (start < end) | 770 | free_init_pages("initrd memory", start, end); |
766 | printk (KERN_INFO "Freeing initrd memory: %ldk freed\n", (end - start) >> 10); | ||
767 | for (; start < end; start += PAGE_SIZE) { | ||
768 | ClearPageReserved(virt_to_page(start)); | ||
769 | set_page_count(virt_to_page(start), 1); | ||
770 | free_page(start); | ||
771 | totalram_pages++; | ||
772 | } | ||
773 | } | 771 | } |
774 | #endif | 772 | #endif |
773 | |||
diff --git a/arch/i386/mm/pageattr.c b/arch/i386/mm/pageattr.c index d0cadb33b54c..92c3d9f0e731 100644 --- a/arch/i386/mm/pageattr.c +++ b/arch/i386/mm/pageattr.c | |||
@@ -51,6 +51,13 @@ static struct page *split_large_page(unsigned long address, pgprot_t prot, | |||
51 | if (!base) | 51 | if (!base) |
52 | return NULL; | 52 | return NULL; |
53 | 53 | ||
54 | /* | ||
55 | * page_private is used to track the number of entries in | ||
56 | * the page table page that have non standard attributes. | ||
57 | */ | ||
58 | SetPagePrivate(base); | ||
59 | page_private(base) = 0; | ||
60 | |||
54 | address = __pa(address); | 61 | address = __pa(address); |
55 | addr = address & LARGE_PAGE_MASK; | 62 | addr = address & LARGE_PAGE_MASK; |
56 | pbase = (pte_t *)page_address(base); | 63 | pbase = (pte_t *)page_address(base); |
@@ -143,11 +150,12 @@ __change_page_attr(struct page *page, pgprot_t prot) | |||
143 | return -ENOMEM; | 150 | return -ENOMEM; |
144 | set_pmd_pte(kpte,address,mk_pte(split, ref_prot)); | 151 | set_pmd_pte(kpte,address,mk_pte(split, ref_prot)); |
145 | kpte_page = split; | 152 | kpte_page = split; |
146 | } | 153 | } |
147 | get_page(kpte_page); | 154 | page_private(kpte_page)++; |
148 | } else if ((pte_val(*kpte) & _PAGE_PSE) == 0) { | 155 | } else if ((pte_val(*kpte) & _PAGE_PSE) == 0) { |
149 | set_pte_atomic(kpte, mk_pte(page, PAGE_KERNEL)); | 156 | set_pte_atomic(kpte, mk_pte(page, PAGE_KERNEL)); |
150 | __put_page(kpte_page); | 157 | BUG_ON(page_private(kpte_page) == 0); |
158 | page_private(kpte_page)--; | ||
151 | } else | 159 | } else |
152 | BUG(); | 160 | BUG(); |
153 | 161 | ||
@@ -157,10 +165,8 @@ __change_page_attr(struct page *page, pgprot_t prot) | |||
157 | * replace it with a largepage. | 165 | * replace it with a largepage. |
158 | */ | 166 | */ |
159 | if (!PageReserved(kpte_page)) { | 167 | if (!PageReserved(kpte_page)) { |
160 | /* memleak and potential failed 2M page regeneration */ | 168 | if (cpu_has_pse && (page_private(kpte_page) == 0)) { |
161 | BUG_ON(!page_count(kpte_page)); | 169 | ClearPagePrivate(kpte_page); |
162 | |||
163 | if (cpu_has_pse && (page_count(kpte_page) == 1)) { | ||
164 | list_add(&kpte_page->lru, &df_list); | 170 | list_add(&kpte_page->lru, &df_list); |
165 | revert_page(kpte_page, address); | 171 | revert_page(kpte_page, address); |
166 | } | 172 | } |
diff --git a/arch/i386/oprofile/nmi_int.c b/arch/i386/oprofile/nmi_int.c index 0493e8b8ec49..1accce50c2c7 100644 --- a/arch/i386/oprofile/nmi_int.c +++ b/arch/i386/oprofile/nmi_int.c | |||
@@ -122,7 +122,7 @@ static void nmi_save_registers(void * dummy) | |||
122 | static void free_msrs(void) | 122 | static void free_msrs(void) |
123 | { | 123 | { |
124 | int i; | 124 | int i; |
125 | for (i = 0; i < NR_CPUS; ++i) { | 125 | for_each_cpu(i) { |
126 | kfree(cpu_msrs[i].counters); | 126 | kfree(cpu_msrs[i].counters); |
127 | cpu_msrs[i].counters = NULL; | 127 | cpu_msrs[i].counters = NULL; |
128 | kfree(cpu_msrs[i].controls); | 128 | kfree(cpu_msrs[i].controls); |
@@ -138,10 +138,7 @@ static int allocate_msrs(void) | |||
138 | size_t counters_size = sizeof(struct op_msr) * model->num_counters; | 138 | size_t counters_size = sizeof(struct op_msr) * model->num_counters; |
139 | 139 | ||
140 | int i; | 140 | int i; |
141 | for (i = 0; i < NR_CPUS; ++i) { | 141 | for_each_online_cpu(i) { |
142 | if (!cpu_online(i)) | ||
143 | continue; | ||
144 | |||
145 | cpu_msrs[i].counters = kmalloc(counters_size, GFP_KERNEL); | 142 | cpu_msrs[i].counters = kmalloc(counters_size, GFP_KERNEL); |
146 | if (!cpu_msrs[i].counters) { | 143 | if (!cpu_msrs[i].counters) { |
147 | success = 0; | 144 | success = 0; |
diff --git a/arch/i386/pci/Makefile b/arch/i386/pci/Makefile index 5461d4d5ea1e..62ad75c57e6a 100644 --- a/arch/i386/pci/Makefile +++ b/arch/i386/pci/Makefile | |||
@@ -1,4 +1,4 @@ | |||
1 | obj-y := i386.o | 1 | obj-y := i386.o init.o |
2 | 2 | ||
3 | obj-$(CONFIG_PCI_BIOS) += pcbios.o | 3 | obj-$(CONFIG_PCI_BIOS) += pcbios.o |
4 | obj-$(CONFIG_PCI_MMCONFIG) += mmconfig.o direct.o | 4 | obj-$(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__ | ||
128 | static 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 | */ | ||
140 | static 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 | ||
124 | struct pci_bus * __devinit pcibios_scan_root(int busnum) | 154 | struct 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 | ||
248 | static int __init pci_direct_init(void) | 248 | void __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 | |||
289 | arch_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. */ | ||
8 | static __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 | } | ||
25 | arch_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 | ||
175 | static int __init pci_mmcfg_init(void) | 175 | void __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 | |||
196 | arch_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 | } |
477 | EXPORT_SYMBOL(pcibios_set_irq_routing); | 477 | EXPORT_SYMBOL(pcibios_set_irq_routing); |
478 | 478 | ||
479 | static int __init pci_pcbios_init(void) | 479 | void __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 | ||
489 | arch_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, | |||
80 | extern int pci_conf1_read(unsigned int seg, unsigned int bus, | 80 | extern 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 | ||
83 | extern void pci_direct_init(void); | ||
84 | extern void pci_pcbios_init(void); | ||
85 | extern void pci_mmcfg_init(void); | ||
83 | 86 | ||