Commit 9b7131542178f5f948e4bb6bea6e1c545e697b06
1 parent
81e242d0ef
Exists in
master
and in
39 other branches
Revert "cpuidle: build fix for non-x86"
This reverts commit f757397097d0713c949af76dccabb65a2785782e. which ironically broke the ia64 build
Showing 3 changed files with 1 additions and 17 deletions Inline Diff
arch/x86/Kconfig
1 | # x86 configuration | 1 | # x86 configuration |
2 | mainmenu "Linux Kernel Configuration for x86" | 2 | mainmenu "Linux Kernel Configuration for x86" |
3 | 3 | ||
4 | # Select 32 or 64 bit | 4 | # Select 32 or 64 bit |
5 | config 64BIT | 5 | config 64BIT |
6 | bool "64-bit kernel" if ARCH = "x86" | 6 | bool "64-bit kernel" if ARCH = "x86" |
7 | default ARCH = "x86_64" | 7 | default ARCH = "x86_64" |
8 | help | 8 | help |
9 | Say yes to build a 64-bit kernel - formerly known as x86_64 | 9 | Say yes to build a 64-bit kernel - formerly known as x86_64 |
10 | Say no to build a 32-bit kernel - formerly known as i386 | 10 | Say no to build a 32-bit kernel - formerly known as i386 |
11 | 11 | ||
12 | config X86_32 | 12 | config X86_32 |
13 | def_bool !64BIT | 13 | def_bool !64BIT |
14 | 14 | ||
15 | config X86_64 | 15 | config X86_64 |
16 | def_bool 64BIT | 16 | def_bool 64BIT |
17 | 17 | ||
18 | ### Arch settings | 18 | ### Arch settings |
19 | config X86 | 19 | config X86 |
20 | def_bool y | 20 | def_bool y |
21 | select HAVE_OPROFILE | 21 | select HAVE_OPROFILE |
22 | select HAVE_KPROBES | 22 | select HAVE_KPROBES |
23 | 23 | ||
24 | config GENERIC_LOCKBREAK | 24 | config GENERIC_LOCKBREAK |
25 | def_bool n | 25 | def_bool n |
26 | 26 | ||
27 | config GENERIC_TIME | 27 | config GENERIC_TIME |
28 | def_bool y | 28 | def_bool y |
29 | 29 | ||
30 | config GENERIC_CMOS_UPDATE | 30 | config GENERIC_CMOS_UPDATE |
31 | def_bool y | 31 | def_bool y |
32 | 32 | ||
33 | config CLOCKSOURCE_WATCHDOG | 33 | config CLOCKSOURCE_WATCHDOG |
34 | def_bool y | 34 | def_bool y |
35 | 35 | ||
36 | config GENERIC_CLOCKEVENTS | 36 | config GENERIC_CLOCKEVENTS |
37 | def_bool y | 37 | def_bool y |
38 | 38 | ||
39 | config GENERIC_CLOCKEVENTS_BROADCAST | 39 | config GENERIC_CLOCKEVENTS_BROADCAST |
40 | def_bool y | 40 | def_bool y |
41 | depends on X86_64 || (X86_32 && X86_LOCAL_APIC) | 41 | depends on X86_64 || (X86_32 && X86_LOCAL_APIC) |
42 | 42 | ||
43 | config LOCKDEP_SUPPORT | 43 | config LOCKDEP_SUPPORT |
44 | def_bool y | 44 | def_bool y |
45 | 45 | ||
46 | config STACKTRACE_SUPPORT | 46 | config STACKTRACE_SUPPORT |
47 | def_bool y | 47 | def_bool y |
48 | 48 | ||
49 | config HAVE_LATENCYTOP_SUPPORT | 49 | config HAVE_LATENCYTOP_SUPPORT |
50 | def_bool y | 50 | def_bool y |
51 | 51 | ||
52 | config SEMAPHORE_SLEEPERS | 52 | config SEMAPHORE_SLEEPERS |
53 | def_bool y | 53 | def_bool y |
54 | 54 | ||
55 | config MMU | 55 | config MMU |
56 | def_bool y | 56 | def_bool y |
57 | 57 | ||
58 | config ZONE_DMA | 58 | config ZONE_DMA |
59 | def_bool y | 59 | def_bool y |
60 | 60 | ||
61 | config QUICKLIST | 61 | config QUICKLIST |
62 | def_bool X86_32 | 62 | def_bool X86_32 |
63 | 63 | ||
64 | config SBUS | 64 | config SBUS |
65 | bool | 65 | bool |
66 | 66 | ||
67 | config GENERIC_ISA_DMA | 67 | config GENERIC_ISA_DMA |
68 | def_bool y | 68 | def_bool y |
69 | 69 | ||
70 | config GENERIC_IOMAP | 70 | config GENERIC_IOMAP |
71 | def_bool y | 71 | def_bool y |
72 | 72 | ||
73 | config GENERIC_BUG | 73 | config GENERIC_BUG |
74 | def_bool y | 74 | def_bool y |
75 | depends on BUG | 75 | depends on BUG |
76 | 76 | ||
77 | config GENERIC_HWEIGHT | 77 | config GENERIC_HWEIGHT |
78 | def_bool y | 78 | def_bool y |
79 | 79 | ||
80 | config GENERIC_GPIO | 80 | config GENERIC_GPIO |
81 | def_bool n | 81 | def_bool n |
82 | 82 | ||
83 | config ARCH_MAY_HAVE_PC_FDC | 83 | config ARCH_MAY_HAVE_PC_FDC |
84 | def_bool y | 84 | def_bool y |
85 | 85 | ||
86 | config DMI | 86 | config DMI |
87 | def_bool y | 87 | def_bool y |
88 | 88 | ||
89 | config RWSEM_GENERIC_SPINLOCK | 89 | config RWSEM_GENERIC_SPINLOCK |
90 | def_bool !X86_XADD | 90 | def_bool !X86_XADD |
91 | 91 | ||
92 | config RWSEM_XCHGADD_ALGORITHM | 92 | config RWSEM_XCHGADD_ALGORITHM |
93 | def_bool X86_XADD | 93 | def_bool X86_XADD |
94 | 94 | ||
95 | config ARCH_HAS_ILOG2_U32 | 95 | config ARCH_HAS_ILOG2_U32 |
96 | def_bool n | 96 | def_bool n |
97 | 97 | ||
98 | config ARCH_HAS_ILOG2_U64 | 98 | config ARCH_HAS_ILOG2_U64 |
99 | def_bool n | 99 | def_bool n |
100 | 100 | ||
101 | config ARCH_HAS_CPU_IDLE_WAIT | ||
102 | def_bool y | ||
103 | |||
104 | config GENERIC_CALIBRATE_DELAY | 101 | config GENERIC_CALIBRATE_DELAY |
105 | def_bool y | 102 | def_bool y |
106 | 103 | ||
107 | config GENERIC_TIME_VSYSCALL | 104 | config GENERIC_TIME_VSYSCALL |
108 | bool | 105 | bool |
109 | default X86_64 | 106 | default X86_64 |
110 | 107 | ||
111 | config ARCH_HAS_CPU_RELAX | 108 | config ARCH_HAS_CPU_RELAX |
112 | def_bool y | 109 | def_bool y |
113 | 110 | ||
114 | config HAVE_SETUP_PER_CPU_AREA | 111 | config HAVE_SETUP_PER_CPU_AREA |
115 | def_bool X86_64 | 112 | def_bool X86_64 |
116 | 113 | ||
117 | select HAVE_KVM | 114 | select HAVE_KVM |
118 | 115 | ||
119 | config ARCH_HIBERNATION_POSSIBLE | 116 | config ARCH_HIBERNATION_POSSIBLE |
120 | def_bool y | 117 | def_bool y |
121 | depends on !SMP || !X86_VOYAGER | 118 | depends on !SMP || !X86_VOYAGER |
122 | 119 | ||
123 | config ARCH_SUSPEND_POSSIBLE | 120 | config ARCH_SUSPEND_POSSIBLE |
124 | def_bool y | 121 | def_bool y |
125 | depends on !X86_VOYAGER | 122 | depends on !X86_VOYAGER |
126 | 123 | ||
127 | config ZONE_DMA32 | 124 | config ZONE_DMA32 |
128 | bool | 125 | bool |
129 | default X86_64 | 126 | default X86_64 |
130 | 127 | ||
131 | config ARCH_POPULATES_NODE_MAP | 128 | config ARCH_POPULATES_NODE_MAP |
132 | def_bool y | 129 | def_bool y |
133 | 130 | ||
134 | config AUDIT_ARCH | 131 | config AUDIT_ARCH |
135 | bool | 132 | bool |
136 | default X86_64 | 133 | default X86_64 |
137 | 134 | ||
138 | # Use the generic interrupt handling code in kernel/irq/: | 135 | # Use the generic interrupt handling code in kernel/irq/: |
139 | config GENERIC_HARDIRQS | 136 | config GENERIC_HARDIRQS |
140 | bool | 137 | bool |
141 | default y | 138 | default y |
142 | 139 | ||
143 | config GENERIC_IRQ_PROBE | 140 | config GENERIC_IRQ_PROBE |
144 | bool | 141 | bool |
145 | default y | 142 | default y |
146 | 143 | ||
147 | config GENERIC_PENDING_IRQ | 144 | config GENERIC_PENDING_IRQ |
148 | bool | 145 | bool |
149 | depends on GENERIC_HARDIRQS && SMP | 146 | depends on GENERIC_HARDIRQS && SMP |
150 | default y | 147 | default y |
151 | 148 | ||
152 | config X86_SMP | 149 | config X86_SMP |
153 | bool | 150 | bool |
154 | depends on SMP && ((X86_32 && !X86_VOYAGER) || X86_64) | 151 | depends on SMP && ((X86_32 && !X86_VOYAGER) || X86_64) |
155 | default y | 152 | default y |
156 | 153 | ||
157 | config X86_32_SMP | 154 | config X86_32_SMP |
158 | def_bool y | 155 | def_bool y |
159 | depends on X86_32 && SMP | 156 | depends on X86_32 && SMP |
160 | 157 | ||
161 | config X86_64_SMP | 158 | config X86_64_SMP |
162 | def_bool y | 159 | def_bool y |
163 | depends on X86_64 && SMP | 160 | depends on X86_64 && SMP |
164 | 161 | ||
165 | config X86_HT | 162 | config X86_HT |
166 | bool | 163 | bool |
167 | depends on SMP | 164 | depends on SMP |
168 | depends on (X86_32 && !(X86_VISWS || X86_VOYAGER)) || (X86_64 && !MK8) | 165 | depends on (X86_32 && !(X86_VISWS || X86_VOYAGER)) || (X86_64 && !MK8) |
169 | default y | 166 | default y |
170 | 167 | ||
171 | config X86_BIOS_REBOOT | 168 | config X86_BIOS_REBOOT |
172 | bool | 169 | bool |
173 | depends on X86_32 && !(X86_VISWS || X86_VOYAGER) | 170 | depends on X86_32 && !(X86_VISWS || X86_VOYAGER) |
174 | default y | 171 | default y |
175 | 172 | ||
176 | config X86_TRAMPOLINE | 173 | config X86_TRAMPOLINE |
177 | bool | 174 | bool |
178 | depends on X86_SMP || (X86_VOYAGER && SMP) | 175 | depends on X86_SMP || (X86_VOYAGER && SMP) |
179 | default y | 176 | default y |
180 | 177 | ||
181 | config KTIME_SCALAR | 178 | config KTIME_SCALAR |
182 | def_bool X86_32 | 179 | def_bool X86_32 |
183 | source "init/Kconfig" | 180 | source "init/Kconfig" |
184 | 181 | ||
185 | menu "Processor type and features" | 182 | menu "Processor type and features" |
186 | 183 | ||
187 | source "kernel/time/Kconfig" | 184 | source "kernel/time/Kconfig" |
188 | 185 | ||
189 | config SMP | 186 | config SMP |
190 | bool "Symmetric multi-processing support" | 187 | bool "Symmetric multi-processing support" |
191 | ---help--- | 188 | ---help--- |
192 | This enables support for systems with more than one CPU. If you have | 189 | This enables support for systems with more than one CPU. If you have |
193 | a system with only one CPU, like most personal computers, say N. If | 190 | a system with only one CPU, like most personal computers, say N. If |
194 | you have a system with more than one CPU, say Y. | 191 | you have a system with more than one CPU, say Y. |
195 | 192 | ||
196 | If you say N here, the kernel will run on single and multiprocessor | 193 | If you say N here, the kernel will run on single and multiprocessor |
197 | machines, but will use only one CPU of a multiprocessor machine. If | 194 | machines, but will use only one CPU of a multiprocessor machine. If |
198 | you say Y here, the kernel will run on many, but not all, | 195 | you say Y here, the kernel will run on many, but not all, |
199 | singleprocessor machines. On a singleprocessor machine, the kernel | 196 | singleprocessor machines. On a singleprocessor machine, the kernel |
200 | will run faster if you say N here. | 197 | will run faster if you say N here. |
201 | 198 | ||
202 | Note that if you say Y here and choose architecture "586" or | 199 | Note that if you say Y here and choose architecture "586" or |
203 | "Pentium" under "Processor family", the kernel will not work on 486 | 200 | "Pentium" under "Processor family", the kernel will not work on 486 |
204 | architectures. Similarly, multiprocessor kernels for the "PPro" | 201 | architectures. Similarly, multiprocessor kernels for the "PPro" |
205 | architecture may not work on all Pentium based boards. | 202 | architecture may not work on all Pentium based boards. |
206 | 203 | ||
207 | People using multiprocessor machines who say Y here should also say | 204 | People using multiprocessor machines who say Y here should also say |
208 | Y to "Enhanced Real Time Clock Support", below. The "Advanced Power | 205 | Y to "Enhanced Real Time Clock Support", below. The "Advanced Power |
209 | Management" code will be disabled if you say Y here. | 206 | Management" code will be disabled if you say Y here. |
210 | 207 | ||
211 | See also <file:Documentation/i386/IO-APIC.txt>, | 208 | See also <file:Documentation/i386/IO-APIC.txt>, |
212 | <file:Documentation/nmi_watchdog.txt> and the SMP-HOWTO available at | 209 | <file:Documentation/nmi_watchdog.txt> and the SMP-HOWTO available at |
213 | <http://www.tldp.org/docs.html#howto>. | 210 | <http://www.tldp.org/docs.html#howto>. |
214 | 211 | ||
215 | If you don't know what to do here, say N. | 212 | If you don't know what to do here, say N. |
216 | 213 | ||
217 | choice | 214 | choice |
218 | prompt "Subarchitecture Type" | 215 | prompt "Subarchitecture Type" |
219 | default X86_PC | 216 | default X86_PC |
220 | 217 | ||
221 | config X86_PC | 218 | config X86_PC |
222 | bool "PC-compatible" | 219 | bool "PC-compatible" |
223 | help | 220 | help |
224 | Choose this option if your computer is a standard PC or compatible. | 221 | Choose this option if your computer is a standard PC or compatible. |
225 | 222 | ||
226 | config X86_ELAN | 223 | config X86_ELAN |
227 | bool "AMD Elan" | 224 | bool "AMD Elan" |
228 | depends on X86_32 | 225 | depends on X86_32 |
229 | help | 226 | help |
230 | Select this for an AMD Elan processor. | 227 | Select this for an AMD Elan processor. |
231 | 228 | ||
232 | Do not use this option for K6/Athlon/Opteron processors! | 229 | Do not use this option for K6/Athlon/Opteron processors! |
233 | 230 | ||
234 | If unsure, choose "PC-compatible" instead. | 231 | If unsure, choose "PC-compatible" instead. |
235 | 232 | ||
236 | config X86_VOYAGER | 233 | config X86_VOYAGER |
237 | bool "Voyager (NCR)" | 234 | bool "Voyager (NCR)" |
238 | depends on X86_32 | 235 | depends on X86_32 |
239 | select SMP if !BROKEN | 236 | select SMP if !BROKEN |
240 | help | 237 | help |
241 | Voyager is an MCA-based 32-way capable SMP architecture proprietary | 238 | Voyager is an MCA-based 32-way capable SMP architecture proprietary |
242 | to NCR Corp. Machine classes 345x/35xx/4100/51xx are Voyager-based. | 239 | to NCR Corp. Machine classes 345x/35xx/4100/51xx are Voyager-based. |
243 | 240 | ||
244 | *** WARNING *** | 241 | *** WARNING *** |
245 | 242 | ||
246 | If you do not specifically know you have a Voyager based machine, | 243 | If you do not specifically know you have a Voyager based machine, |
247 | say N here, otherwise the kernel you build will not be bootable. | 244 | say N here, otherwise the kernel you build will not be bootable. |
248 | 245 | ||
249 | config X86_NUMAQ | 246 | config X86_NUMAQ |
250 | bool "NUMAQ (IBM/Sequent)" | 247 | bool "NUMAQ (IBM/Sequent)" |
251 | select SMP | 248 | select SMP |
252 | select NUMA | 249 | select NUMA |
253 | depends on X86_32 | 250 | depends on X86_32 |
254 | help | 251 | help |
255 | This option is used for getting Linux to run on a (IBM/Sequent) NUMA | 252 | This option is used for getting Linux to run on a (IBM/Sequent) NUMA |
256 | multiquad box. This changes the way that processors are bootstrapped, | 253 | multiquad box. This changes the way that processors are bootstrapped, |
257 | and uses Clustered Logical APIC addressing mode instead of Flat Logical. | 254 | and uses Clustered Logical APIC addressing mode instead of Flat Logical. |
258 | You will need a new lynxer.elf file to flash your firmware with - send | 255 | You will need a new lynxer.elf file to flash your firmware with - send |
259 | email to <Martin.Bligh@us.ibm.com>. | 256 | email to <Martin.Bligh@us.ibm.com>. |
260 | 257 | ||
261 | config X86_SUMMIT | 258 | config X86_SUMMIT |
262 | bool "Summit/EXA (IBM x440)" | 259 | bool "Summit/EXA (IBM x440)" |
263 | depends on X86_32 && SMP | 260 | depends on X86_32 && SMP |
264 | help | 261 | help |
265 | This option is needed for IBM systems that use the Summit/EXA chipset. | 262 | This option is needed for IBM systems that use the Summit/EXA chipset. |
266 | In particular, it is needed for the x440. | 263 | In particular, it is needed for the x440. |
267 | 264 | ||
268 | If you don't have one of these computers, you should say N here. | 265 | If you don't have one of these computers, you should say N here. |
269 | If you want to build a NUMA kernel, you must select ACPI. | 266 | If you want to build a NUMA kernel, you must select ACPI. |
270 | 267 | ||
271 | config X86_BIGSMP | 268 | config X86_BIGSMP |
272 | bool "Support for other sub-arch SMP systems with more than 8 CPUs" | 269 | bool "Support for other sub-arch SMP systems with more than 8 CPUs" |
273 | depends on X86_32 && SMP | 270 | depends on X86_32 && SMP |
274 | help | 271 | help |
275 | This option is needed for the systems that have more than 8 CPUs | 272 | This option is needed for the systems that have more than 8 CPUs |
276 | and if the system is not of any sub-arch type above. | 273 | and if the system is not of any sub-arch type above. |
277 | 274 | ||
278 | If you don't have such a system, you should say N here. | 275 | If you don't have such a system, you should say N here. |
279 | 276 | ||
280 | config X86_VISWS | 277 | config X86_VISWS |
281 | bool "SGI 320/540 (Visual Workstation)" | 278 | bool "SGI 320/540 (Visual Workstation)" |
282 | depends on X86_32 | 279 | depends on X86_32 |
283 | help | 280 | help |
284 | The SGI Visual Workstation series is an IA32-based workstation | 281 | The SGI Visual Workstation series is an IA32-based workstation |
285 | based on SGI systems chips with some legacy PC hardware attached. | 282 | based on SGI systems chips with some legacy PC hardware attached. |
286 | 283 | ||
287 | Say Y here to create a kernel to run on the SGI 320 or 540. | 284 | Say Y here to create a kernel to run on the SGI 320 or 540. |
288 | 285 | ||
289 | A kernel compiled for the Visual Workstation will not run on PCs | 286 | A kernel compiled for the Visual Workstation will not run on PCs |
290 | and vice versa. See <file:Documentation/sgi-visws.txt> for details. | 287 | and vice versa. See <file:Documentation/sgi-visws.txt> for details. |
291 | 288 | ||
292 | config X86_GENERICARCH | 289 | config X86_GENERICARCH |
293 | bool "Generic architecture (Summit, bigsmp, ES7000, default)" | 290 | bool "Generic architecture (Summit, bigsmp, ES7000, default)" |
294 | depends on X86_32 | 291 | depends on X86_32 |
295 | help | 292 | help |
296 | This option compiles in the Summit, bigsmp, ES7000, default subarchitectures. | 293 | This option compiles in the Summit, bigsmp, ES7000, default subarchitectures. |
297 | It is intended for a generic binary kernel. | 294 | It is intended for a generic binary kernel. |
298 | If you want a NUMA kernel, select ACPI. We need SRAT for NUMA. | 295 | If you want a NUMA kernel, select ACPI. We need SRAT for NUMA. |
299 | 296 | ||
300 | config X86_ES7000 | 297 | config X86_ES7000 |
301 | bool "Support for Unisys ES7000 IA32 series" | 298 | bool "Support for Unisys ES7000 IA32 series" |
302 | depends on X86_32 && SMP | 299 | depends on X86_32 && SMP |
303 | help | 300 | help |
304 | Support for Unisys ES7000 systems. Say 'Y' here if this kernel is | 301 | Support for Unisys ES7000 systems. Say 'Y' here if this kernel is |
305 | supposed to run on an IA32-based Unisys ES7000 system. | 302 | supposed to run on an IA32-based Unisys ES7000 system. |
306 | Only choose this option if you have such a system, otherwise you | 303 | Only choose this option if you have such a system, otherwise you |
307 | should say N here. | 304 | should say N here. |
308 | 305 | ||
309 | config X86_RDC321X | 306 | config X86_RDC321X |
310 | bool "RDC R-321x SoC" | 307 | bool "RDC R-321x SoC" |
311 | depends on X86_32 | 308 | depends on X86_32 |
312 | select M486 | 309 | select M486 |
313 | select X86_REBOOTFIXUPS | 310 | select X86_REBOOTFIXUPS |
314 | select GENERIC_GPIO | 311 | select GENERIC_GPIO |
315 | select LEDS_CLASS | 312 | select LEDS_CLASS |
316 | select LEDS_GPIO | 313 | select LEDS_GPIO |
317 | help | 314 | help |
318 | This option is needed for RDC R-321x system-on-chip, also known | 315 | This option is needed for RDC R-321x system-on-chip, also known |
319 | as R-8610-(G). | 316 | as R-8610-(G). |
320 | If you don't have one of these chips, you should say N here. | 317 | If you don't have one of these chips, you should say N here. |
321 | 318 | ||
322 | config X86_VSMP | 319 | config X86_VSMP |
323 | bool "Support for ScaleMP vSMP" | 320 | bool "Support for ScaleMP vSMP" |
324 | depends on X86_64 && PCI | 321 | depends on X86_64 && PCI |
325 | help | 322 | help |
326 | Support for ScaleMP vSMP systems. Say 'Y' here if this kernel is | 323 | Support for ScaleMP vSMP systems. Say 'Y' here if this kernel is |
327 | supposed to run on these EM64T-based machines. Only choose this option | 324 | supposed to run on these EM64T-based machines. Only choose this option |
328 | if you have one of these machines. | 325 | if you have one of these machines. |
329 | 326 | ||
330 | endchoice | 327 | endchoice |
331 | 328 | ||
332 | config SCHED_NO_NO_OMIT_FRAME_POINTER | 329 | config SCHED_NO_NO_OMIT_FRAME_POINTER |
333 | def_bool y | 330 | def_bool y |
334 | prompt "Single-depth WCHAN output" | 331 | prompt "Single-depth WCHAN output" |
335 | depends on X86_32 | 332 | depends on X86_32 |
336 | help | 333 | help |
337 | Calculate simpler /proc/<PID>/wchan values. If this option | 334 | Calculate simpler /proc/<PID>/wchan values. If this option |
338 | is disabled then wchan values will recurse back to the | 335 | is disabled then wchan values will recurse back to the |
339 | caller function. This provides more accurate wchan values, | 336 | caller function. This provides more accurate wchan values, |
340 | at the expense of slightly more scheduling overhead. | 337 | at the expense of slightly more scheduling overhead. |
341 | 338 | ||
342 | If in doubt, say "Y". | 339 | If in doubt, say "Y". |
343 | 340 | ||
344 | menuconfig PARAVIRT_GUEST | 341 | menuconfig PARAVIRT_GUEST |
345 | bool "Paravirtualized guest support" | 342 | bool "Paravirtualized guest support" |
346 | help | 343 | help |
347 | Say Y here to get to see options related to running Linux under | 344 | Say Y here to get to see options related to running Linux under |
348 | various hypervisors. This option alone does not add any kernel code. | 345 | various hypervisors. This option alone does not add any kernel code. |
349 | 346 | ||
350 | If you say N, all options in this submenu will be skipped and disabled. | 347 | If you say N, all options in this submenu will be skipped and disabled. |
351 | 348 | ||
352 | if PARAVIRT_GUEST | 349 | if PARAVIRT_GUEST |
353 | 350 | ||
354 | source "arch/x86/xen/Kconfig" | 351 | source "arch/x86/xen/Kconfig" |
355 | 352 | ||
356 | config VMI | 353 | config VMI |
357 | bool "VMI Guest support" | 354 | bool "VMI Guest support" |
358 | select PARAVIRT | 355 | select PARAVIRT |
359 | depends on X86_32 | 356 | depends on X86_32 |
360 | depends on !(X86_VISWS || X86_VOYAGER) | 357 | depends on !(X86_VISWS || X86_VOYAGER) |
361 | help | 358 | help |
362 | VMI provides a paravirtualized interface to the VMware ESX server | 359 | VMI provides a paravirtualized interface to the VMware ESX server |
363 | (it could be used by other hypervisors in theory too, but is not | 360 | (it could be used by other hypervisors in theory too, but is not |
364 | at the moment), by linking the kernel to a GPL-ed ROM module | 361 | at the moment), by linking the kernel to a GPL-ed ROM module |
365 | provided by the hypervisor. | 362 | provided by the hypervisor. |
366 | 363 | ||
367 | source "arch/x86/lguest/Kconfig" | 364 | source "arch/x86/lguest/Kconfig" |
368 | 365 | ||
369 | config PARAVIRT | 366 | config PARAVIRT |
370 | bool "Enable paravirtualization code" | 367 | bool "Enable paravirtualization code" |
371 | depends on !(X86_VISWS || X86_VOYAGER) | 368 | depends on !(X86_VISWS || X86_VOYAGER) |
372 | help | 369 | help |
373 | This changes the kernel so it can modify itself when it is run | 370 | This changes the kernel so it can modify itself when it is run |
374 | under a hypervisor, potentially improving performance significantly | 371 | under a hypervisor, potentially improving performance significantly |
375 | over full virtualization. However, when run without a hypervisor | 372 | over full virtualization. However, when run without a hypervisor |
376 | the kernel is theoretically slower and slightly larger. | 373 | the kernel is theoretically slower and slightly larger. |
377 | 374 | ||
378 | endif | 375 | endif |
379 | 376 | ||
380 | config ACPI_SRAT | 377 | config ACPI_SRAT |
381 | def_bool y | 378 | def_bool y |
382 | depends on X86_32 && ACPI && NUMA && (X86_SUMMIT || X86_GENERICARCH) | 379 | depends on X86_32 && ACPI && NUMA && (X86_SUMMIT || X86_GENERICARCH) |
383 | select ACPI_NUMA | 380 | select ACPI_NUMA |
384 | 381 | ||
385 | config HAVE_ARCH_PARSE_SRAT | 382 | config HAVE_ARCH_PARSE_SRAT |
386 | def_bool y | 383 | def_bool y |
387 | depends on ACPI_SRAT | 384 | depends on ACPI_SRAT |
388 | 385 | ||
389 | config X86_SUMMIT_NUMA | 386 | config X86_SUMMIT_NUMA |
390 | def_bool y | 387 | def_bool y |
391 | depends on X86_32 && NUMA && (X86_SUMMIT || X86_GENERICARCH) | 388 | depends on X86_32 && NUMA && (X86_SUMMIT || X86_GENERICARCH) |
392 | 389 | ||
393 | config X86_CYCLONE_TIMER | 390 | config X86_CYCLONE_TIMER |
394 | def_bool y | 391 | def_bool y |
395 | depends on X86_32 && X86_SUMMIT || X86_GENERICARCH | 392 | depends on X86_32 && X86_SUMMIT || X86_GENERICARCH |
396 | 393 | ||
397 | config ES7000_CLUSTERED_APIC | 394 | config ES7000_CLUSTERED_APIC |
398 | def_bool y | 395 | def_bool y |
399 | depends on SMP && X86_ES7000 && MPENTIUMIII | 396 | depends on SMP && X86_ES7000 && MPENTIUMIII |
400 | 397 | ||
401 | source "arch/x86/Kconfig.cpu" | 398 | source "arch/x86/Kconfig.cpu" |
402 | 399 | ||
403 | config HPET_TIMER | 400 | config HPET_TIMER |
404 | def_bool X86_64 | 401 | def_bool X86_64 |
405 | prompt "HPET Timer Support" if X86_32 | 402 | prompt "HPET Timer Support" if X86_32 |
406 | help | 403 | help |
407 | Use the IA-PC HPET (High Precision Event Timer) to manage | 404 | Use the IA-PC HPET (High Precision Event Timer) to manage |
408 | time in preference to the PIT and RTC, if a HPET is | 405 | time in preference to the PIT and RTC, if a HPET is |
409 | present. | 406 | present. |
410 | HPET is the next generation timer replacing legacy 8254s. | 407 | HPET is the next generation timer replacing legacy 8254s. |
411 | The HPET provides a stable time base on SMP | 408 | The HPET provides a stable time base on SMP |
412 | systems, unlike the TSC, but it is more expensive to access, | 409 | systems, unlike the TSC, but it is more expensive to access, |
413 | as it is off-chip. You can find the HPET spec at | 410 | as it is off-chip. You can find the HPET spec at |
414 | <http://www.intel.com/hardwaredesign/hpetspec.htm>. | 411 | <http://www.intel.com/hardwaredesign/hpetspec.htm>. |
415 | 412 | ||
416 | You can safely choose Y here. However, HPET will only be | 413 | You can safely choose Y here. However, HPET will only be |
417 | activated if the platform and the BIOS support this feature. | 414 | activated if the platform and the BIOS support this feature. |
418 | Otherwise the 8254 will be used for timing services. | 415 | Otherwise the 8254 will be used for timing services. |
419 | 416 | ||
420 | Choose N to continue using the legacy 8254 timer. | 417 | Choose N to continue using the legacy 8254 timer. |
421 | 418 | ||
422 | config HPET_EMULATE_RTC | 419 | config HPET_EMULATE_RTC |
423 | def_bool y | 420 | def_bool y |
424 | depends on HPET_TIMER && (RTC=y || RTC=m || RTC_DRV_CMOS=m || RTC_DRV_CMOS=y) | 421 | depends on HPET_TIMER && (RTC=y || RTC=m || RTC_DRV_CMOS=m || RTC_DRV_CMOS=y) |
425 | 422 | ||
426 | # Mark as embedded because too many people got it wrong. | 423 | # Mark as embedded because too many people got it wrong. |
427 | # The code disables itself when not needed. | 424 | # The code disables itself when not needed. |
428 | config GART_IOMMU | 425 | config GART_IOMMU |
429 | bool "GART IOMMU support" if EMBEDDED | 426 | bool "GART IOMMU support" if EMBEDDED |
430 | default y | 427 | default y |
431 | select SWIOTLB | 428 | select SWIOTLB |
432 | select AGP | 429 | select AGP |
433 | depends on X86_64 && PCI | 430 | depends on X86_64 && PCI |
434 | help | 431 | help |
435 | Support for full DMA access of devices with 32bit memory access only | 432 | Support for full DMA access of devices with 32bit memory access only |
436 | on systems with more than 3GB. This is usually needed for USB, | 433 | on systems with more than 3GB. This is usually needed for USB, |
437 | sound, many IDE/SATA chipsets and some other devices. | 434 | sound, many IDE/SATA chipsets and some other devices. |
438 | Provides a driver for the AMD Athlon64/Opteron/Turion/Sempron GART | 435 | Provides a driver for the AMD Athlon64/Opteron/Turion/Sempron GART |
439 | based hardware IOMMU and a software bounce buffer based IOMMU used | 436 | based hardware IOMMU and a software bounce buffer based IOMMU used |
440 | on Intel systems and as fallback. | 437 | on Intel systems and as fallback. |
441 | The code is only active when needed (enough memory and limited | 438 | The code is only active when needed (enough memory and limited |
442 | device) unless CONFIG_IOMMU_DEBUG or iommu=force is specified | 439 | device) unless CONFIG_IOMMU_DEBUG or iommu=force is specified |
443 | too. | 440 | too. |
444 | 441 | ||
445 | config CALGARY_IOMMU | 442 | config CALGARY_IOMMU |
446 | bool "IBM Calgary IOMMU support" | 443 | bool "IBM Calgary IOMMU support" |
447 | select SWIOTLB | 444 | select SWIOTLB |
448 | depends on X86_64 && PCI && EXPERIMENTAL | 445 | depends on X86_64 && PCI && EXPERIMENTAL |
449 | help | 446 | help |
450 | Support for hardware IOMMUs in IBM's xSeries x366 and x460 | 447 | Support for hardware IOMMUs in IBM's xSeries x366 and x460 |
451 | systems. Needed to run systems with more than 3GB of memory | 448 | systems. Needed to run systems with more than 3GB of memory |
452 | properly with 32-bit PCI devices that do not support DAC | 449 | properly with 32-bit PCI devices that do not support DAC |
453 | (Double Address Cycle). Calgary also supports bus level | 450 | (Double Address Cycle). Calgary also supports bus level |
454 | isolation, where all DMAs pass through the IOMMU. This | 451 | isolation, where all DMAs pass through the IOMMU. This |
455 | prevents them from going anywhere except their intended | 452 | prevents them from going anywhere except their intended |
456 | destination. This catches hard-to-find kernel bugs and | 453 | destination. This catches hard-to-find kernel bugs and |
457 | mis-behaving drivers and devices that do not use the DMA-API | 454 | mis-behaving drivers and devices that do not use the DMA-API |
458 | properly to set up their DMA buffers. The IOMMU can be | 455 | properly to set up their DMA buffers. The IOMMU can be |
459 | turned off at boot time with the iommu=off parameter. | 456 | turned off at boot time with the iommu=off parameter. |
460 | Normally the kernel will make the right choice by itself. | 457 | Normally the kernel will make the right choice by itself. |
461 | If unsure, say Y. | 458 | If unsure, say Y. |
462 | 459 | ||
463 | config CALGARY_IOMMU_ENABLED_BY_DEFAULT | 460 | config CALGARY_IOMMU_ENABLED_BY_DEFAULT |
464 | def_bool y | 461 | def_bool y |
465 | prompt "Should Calgary be enabled by default?" | 462 | prompt "Should Calgary be enabled by default?" |
466 | depends on CALGARY_IOMMU | 463 | depends on CALGARY_IOMMU |
467 | help | 464 | help |
468 | Should Calgary be enabled by default? if you choose 'y', Calgary | 465 | Should Calgary be enabled by default? if you choose 'y', Calgary |
469 | will be used (if it exists). If you choose 'n', Calgary will not be | 466 | will be used (if it exists). If you choose 'n', Calgary will not be |
470 | used even if it exists. If you choose 'n' and would like to use | 467 | used even if it exists. If you choose 'n' and would like to use |
471 | Calgary anyway, pass 'iommu=calgary' on the kernel command line. | 468 | Calgary anyway, pass 'iommu=calgary' on the kernel command line. |
472 | If unsure, say Y. | 469 | If unsure, say Y. |
473 | 470 | ||
474 | config IOMMU_HELPER | 471 | config IOMMU_HELPER |
475 | def_bool (CALGARY_IOMMU || GART_IOMMU) | 472 | def_bool (CALGARY_IOMMU || GART_IOMMU) |
476 | 473 | ||
477 | # need this always selected by IOMMU for the VIA workaround | 474 | # need this always selected by IOMMU for the VIA workaround |
478 | config SWIOTLB | 475 | config SWIOTLB |
479 | bool | 476 | bool |
480 | help | 477 | help |
481 | Support for software bounce buffers used on x86-64 systems | 478 | Support for software bounce buffers used on x86-64 systems |
482 | which don't have a hardware IOMMU (e.g. the current generation | 479 | which don't have a hardware IOMMU (e.g. the current generation |
483 | of Intel's x86-64 CPUs). Using this PCI devices which can only | 480 | of Intel's x86-64 CPUs). Using this PCI devices which can only |
484 | access 32-bits of memory can be used on systems with more than | 481 | access 32-bits of memory can be used on systems with more than |
485 | 3 GB of memory. If unsure, say Y. | 482 | 3 GB of memory. If unsure, say Y. |
486 | 483 | ||
487 | 484 | ||
488 | config NR_CPUS | 485 | config NR_CPUS |
489 | int "Maximum number of CPUs (2-255)" | 486 | int "Maximum number of CPUs (2-255)" |
490 | range 2 255 | 487 | range 2 255 |
491 | depends on SMP | 488 | depends on SMP |
492 | default "32" if X86_NUMAQ || X86_SUMMIT || X86_BIGSMP || X86_ES7000 | 489 | default "32" if X86_NUMAQ || X86_SUMMIT || X86_BIGSMP || X86_ES7000 |
493 | default "8" | 490 | default "8" |
494 | help | 491 | help |
495 | This allows you to specify the maximum number of CPUs which this | 492 | This allows you to specify the maximum number of CPUs which this |
496 | kernel will support. The maximum supported value is 255 and the | 493 | kernel will support. The maximum supported value is 255 and the |
497 | minimum value which makes sense is 2. | 494 | minimum value which makes sense is 2. |
498 | 495 | ||
499 | This is purely to save memory - each supported CPU adds | 496 | This is purely to save memory - each supported CPU adds |
500 | approximately eight kilobytes to the kernel image. | 497 | approximately eight kilobytes to the kernel image. |
501 | 498 | ||
502 | config SCHED_SMT | 499 | config SCHED_SMT |
503 | bool "SMT (Hyperthreading) scheduler support" | 500 | bool "SMT (Hyperthreading) scheduler support" |
504 | depends on (X86_64 && SMP) || (X86_32 && X86_HT) | 501 | depends on (X86_64 && SMP) || (X86_32 && X86_HT) |
505 | help | 502 | help |
506 | SMT scheduler support improves the CPU scheduler's decision making | 503 | SMT scheduler support improves the CPU scheduler's decision making |
507 | when dealing with Intel Pentium 4 chips with HyperThreading at a | 504 | when dealing with Intel Pentium 4 chips with HyperThreading at a |
508 | cost of slightly increased overhead in some places. If unsure say | 505 | cost of slightly increased overhead in some places. If unsure say |
509 | N here. | 506 | N here. |
510 | 507 | ||
511 | config SCHED_MC | 508 | config SCHED_MC |
512 | def_bool y | 509 | def_bool y |
513 | prompt "Multi-core scheduler support" | 510 | prompt "Multi-core scheduler support" |
514 | depends on (X86_64 && SMP) || (X86_32 && X86_HT) | 511 | depends on (X86_64 && SMP) || (X86_32 && X86_HT) |
515 | help | 512 | help |
516 | Multi-core scheduler support improves the CPU scheduler's decision | 513 | Multi-core scheduler support improves the CPU scheduler's decision |
517 | making when dealing with multi-core CPU chips at a cost of slightly | 514 | making when dealing with multi-core CPU chips at a cost of slightly |
518 | increased overhead in some places. If unsure say N here. | 515 | increased overhead in some places. If unsure say N here. |
519 | 516 | ||
520 | source "kernel/Kconfig.preempt" | 517 | source "kernel/Kconfig.preempt" |
521 | 518 | ||
522 | config X86_UP_APIC | 519 | config X86_UP_APIC |
523 | bool "Local APIC support on uniprocessors" | 520 | bool "Local APIC support on uniprocessors" |
524 | depends on X86_32 && !SMP && !(X86_VISWS || X86_VOYAGER || X86_GENERICARCH) | 521 | depends on X86_32 && !SMP && !(X86_VISWS || X86_VOYAGER || X86_GENERICARCH) |
525 | help | 522 | help |
526 | A local APIC (Advanced Programmable Interrupt Controller) is an | 523 | A local APIC (Advanced Programmable Interrupt Controller) is an |
527 | integrated interrupt controller in the CPU. If you have a single-CPU | 524 | integrated interrupt controller in the CPU. If you have a single-CPU |
528 | system which has a processor with a local APIC, you can say Y here to | 525 | system which has a processor with a local APIC, you can say Y here to |
529 | enable and use it. If you say Y here even though your machine doesn't | 526 | enable and use it. If you say Y here even though your machine doesn't |
530 | have a local APIC, then the kernel will still run with no slowdown at | 527 | have a local APIC, then the kernel will still run with no slowdown at |
531 | all. The local APIC supports CPU-generated self-interrupts (timer, | 528 | all. The local APIC supports CPU-generated self-interrupts (timer, |
532 | performance counters), and the NMI watchdog which detects hard | 529 | performance counters), and the NMI watchdog which detects hard |
533 | lockups. | 530 | lockups. |
534 | 531 | ||
535 | config X86_UP_IOAPIC | 532 | config X86_UP_IOAPIC |
536 | bool "IO-APIC support on uniprocessors" | 533 | bool "IO-APIC support on uniprocessors" |
537 | depends on X86_UP_APIC | 534 | depends on X86_UP_APIC |
538 | help | 535 | help |
539 | An IO-APIC (I/O Advanced Programmable Interrupt Controller) is an | 536 | An IO-APIC (I/O Advanced Programmable Interrupt Controller) is an |
540 | SMP-capable replacement for PC-style interrupt controllers. Most | 537 | SMP-capable replacement for PC-style interrupt controllers. Most |
541 | SMP systems and many recent uniprocessor systems have one. | 538 | SMP systems and many recent uniprocessor systems have one. |
542 | 539 | ||
543 | If you have a single-CPU system with an IO-APIC, you can say Y here | 540 | If you have a single-CPU system with an IO-APIC, you can say Y here |
544 | to use it. If you say Y here even though your machine doesn't have | 541 | to use it. If you say Y here even though your machine doesn't have |
545 | an IO-APIC, then the kernel will still run with no slowdown at all. | 542 | an IO-APIC, then the kernel will still run with no slowdown at all. |
546 | 543 | ||
547 | config X86_LOCAL_APIC | 544 | config X86_LOCAL_APIC |
548 | def_bool y | 545 | def_bool y |
549 | depends on X86_64 || (X86_32 && (X86_UP_APIC || ((X86_VISWS || SMP) && !X86_VOYAGER) || X86_GENERICARCH)) | 546 | depends on X86_64 || (X86_32 && (X86_UP_APIC || ((X86_VISWS || SMP) && !X86_VOYAGER) || X86_GENERICARCH)) |
550 | 547 | ||
551 | config X86_IO_APIC | 548 | config X86_IO_APIC |
552 | def_bool y | 549 | def_bool y |
553 | depends on X86_64 || (X86_32 && (X86_UP_IOAPIC || (SMP && !(X86_VISWS || X86_VOYAGER)) || X86_GENERICARCH)) | 550 | depends on X86_64 || (X86_32 && (X86_UP_IOAPIC || (SMP && !(X86_VISWS || X86_VOYAGER)) || X86_GENERICARCH)) |
554 | 551 | ||
555 | config X86_VISWS_APIC | 552 | config X86_VISWS_APIC |
556 | def_bool y | 553 | def_bool y |
557 | depends on X86_32 && X86_VISWS | 554 | depends on X86_32 && X86_VISWS |
558 | 555 | ||
559 | config X86_MCE | 556 | config X86_MCE |
560 | bool "Machine Check Exception" | 557 | bool "Machine Check Exception" |
561 | depends on !X86_VOYAGER | 558 | depends on !X86_VOYAGER |
562 | ---help--- | 559 | ---help--- |
563 | Machine Check Exception support allows the processor to notify the | 560 | Machine Check Exception support allows the processor to notify the |
564 | kernel if it detects a problem (e.g. overheating, component failure). | 561 | kernel if it detects a problem (e.g. overheating, component failure). |
565 | The action the kernel takes depends on the severity of the problem, | 562 | The action the kernel takes depends on the severity of the problem, |
566 | ranging from a warning message on the console, to halting the machine. | 563 | ranging from a warning message on the console, to halting the machine. |
567 | Your processor must be a Pentium or newer to support this - check the | 564 | Your processor must be a Pentium or newer to support this - check the |
568 | flags in /proc/cpuinfo for mce. Note that some older Pentium systems | 565 | flags in /proc/cpuinfo for mce. Note that some older Pentium systems |
569 | have a design flaw which leads to false MCE events - hence MCE is | 566 | have a design flaw which leads to false MCE events - hence MCE is |
570 | disabled on all P5 processors, unless explicitly enabled with "mce" | 567 | disabled on all P5 processors, unless explicitly enabled with "mce" |
571 | as a boot argument. Similarly, if MCE is built in and creates a | 568 | as a boot argument. Similarly, if MCE is built in and creates a |
572 | problem on some new non-standard machine, you can boot with "nomce" | 569 | problem on some new non-standard machine, you can boot with "nomce" |
573 | to disable it. MCE support simply ignores non-MCE processors like | 570 | to disable it. MCE support simply ignores non-MCE processors like |
574 | the 386 and 486, so nearly everyone can say Y here. | 571 | the 386 and 486, so nearly everyone can say Y here. |
575 | 572 | ||
576 | config X86_MCE_INTEL | 573 | config X86_MCE_INTEL |
577 | def_bool y | 574 | def_bool y |
578 | prompt "Intel MCE features" | 575 | prompt "Intel MCE features" |
579 | depends on X86_64 && X86_MCE && X86_LOCAL_APIC | 576 | depends on X86_64 && X86_MCE && X86_LOCAL_APIC |
580 | help | 577 | help |
581 | Additional support for intel specific MCE features such as | 578 | Additional support for intel specific MCE features such as |
582 | the thermal monitor. | 579 | the thermal monitor. |
583 | 580 | ||
584 | config X86_MCE_AMD | 581 | config X86_MCE_AMD |
585 | def_bool y | 582 | def_bool y |
586 | prompt "AMD MCE features" | 583 | prompt "AMD MCE features" |
587 | depends on X86_64 && X86_MCE && X86_LOCAL_APIC | 584 | depends on X86_64 && X86_MCE && X86_LOCAL_APIC |
588 | help | 585 | help |
589 | Additional support for AMD specific MCE features such as | 586 | Additional support for AMD specific MCE features such as |
590 | the DRAM Error Threshold. | 587 | the DRAM Error Threshold. |
591 | 588 | ||
592 | config X86_MCE_NONFATAL | 589 | config X86_MCE_NONFATAL |
593 | tristate "Check for non-fatal errors on AMD Athlon/Duron / Intel Pentium 4" | 590 | tristate "Check for non-fatal errors on AMD Athlon/Duron / Intel Pentium 4" |
594 | depends on X86_32 && X86_MCE | 591 | depends on X86_32 && X86_MCE |
595 | help | 592 | help |
596 | Enabling this feature starts a timer that triggers every 5 seconds which | 593 | Enabling this feature starts a timer that triggers every 5 seconds which |
597 | will look at the machine check registers to see if anything happened. | 594 | will look at the machine check registers to see if anything happened. |
598 | Non-fatal problems automatically get corrected (but still logged). | 595 | Non-fatal problems automatically get corrected (but still logged). |
599 | Disable this if you don't want to see these messages. | 596 | Disable this if you don't want to see these messages. |
600 | Seeing the messages this option prints out may be indicative of dying | 597 | Seeing the messages this option prints out may be indicative of dying |
601 | or out-of-spec (ie, overclocked) hardware. | 598 | or out-of-spec (ie, overclocked) hardware. |
602 | This option only does something on certain CPUs. | 599 | This option only does something on certain CPUs. |
603 | (AMD Athlon/Duron and Intel Pentium 4) | 600 | (AMD Athlon/Duron and Intel Pentium 4) |
604 | 601 | ||
605 | config X86_MCE_P4THERMAL | 602 | config X86_MCE_P4THERMAL |
606 | bool "check for P4 thermal throttling interrupt." | 603 | bool "check for P4 thermal throttling interrupt." |
607 | depends on X86_32 && X86_MCE && (X86_UP_APIC || SMP) && !X86_VISWS | 604 | depends on X86_32 && X86_MCE && (X86_UP_APIC || SMP) && !X86_VISWS |
608 | help | 605 | help |
609 | Enabling this feature will cause a message to be printed when the P4 | 606 | Enabling this feature will cause a message to be printed when the P4 |
610 | enters thermal throttling. | 607 | enters thermal throttling. |
611 | 608 | ||
612 | config VM86 | 609 | config VM86 |
613 | bool "Enable VM86 support" if EMBEDDED | 610 | bool "Enable VM86 support" if EMBEDDED |
614 | default y | 611 | default y |
615 | depends on X86_32 | 612 | depends on X86_32 |
616 | help | 613 | help |
617 | This option is required by programs like DOSEMU to run 16-bit legacy | 614 | This option is required by programs like DOSEMU to run 16-bit legacy |
618 | code on X86 processors. It also may be needed by software like | 615 | code on X86 processors. It also may be needed by software like |
619 | XFree86 to initialize some video cards via BIOS. Disabling this | 616 | XFree86 to initialize some video cards via BIOS. Disabling this |
620 | option saves about 6k. | 617 | option saves about 6k. |
621 | 618 | ||
622 | config TOSHIBA | 619 | config TOSHIBA |
623 | tristate "Toshiba Laptop support" | 620 | tristate "Toshiba Laptop support" |
624 | depends on X86_32 | 621 | depends on X86_32 |
625 | ---help--- | 622 | ---help--- |
626 | This adds a driver to safely access the System Management Mode of | 623 | This adds a driver to safely access the System Management Mode of |
627 | the CPU on Toshiba portables with a genuine Toshiba BIOS. It does | 624 | the CPU on Toshiba portables with a genuine Toshiba BIOS. It does |
628 | not work on models with a Phoenix BIOS. The System Management Mode | 625 | not work on models with a Phoenix BIOS. The System Management Mode |
629 | is used to set the BIOS and power saving options on Toshiba portables. | 626 | is used to set the BIOS and power saving options on Toshiba portables. |
630 | 627 | ||
631 | For information on utilities to make use of this driver see the | 628 | For information on utilities to make use of this driver see the |
632 | Toshiba Linux utilities web site at: | 629 | Toshiba Linux utilities web site at: |
633 | <http://www.buzzard.org.uk/toshiba/>. | 630 | <http://www.buzzard.org.uk/toshiba/>. |
634 | 631 | ||
635 | Say Y if you intend to run this kernel on a Toshiba portable. | 632 | Say Y if you intend to run this kernel on a Toshiba portable. |
636 | Say N otherwise. | 633 | Say N otherwise. |
637 | 634 | ||
638 | config I8K | 635 | config I8K |
639 | tristate "Dell laptop support" | 636 | tristate "Dell laptop support" |
640 | depends on X86_32 | 637 | depends on X86_32 |
641 | ---help--- | 638 | ---help--- |
642 | This adds a driver to safely access the System Management Mode | 639 | This adds a driver to safely access the System Management Mode |
643 | of the CPU on the Dell Inspiron 8000. The System Management Mode | 640 | of the CPU on the Dell Inspiron 8000. The System Management Mode |
644 | is used to read cpu temperature and cooling fan status and to | 641 | is used to read cpu temperature and cooling fan status and to |
645 | control the fans on the I8K portables. | 642 | control the fans on the I8K portables. |
646 | 643 | ||
647 | This driver has been tested only on the Inspiron 8000 but it may | 644 | This driver has been tested only on the Inspiron 8000 but it may |
648 | also work with other Dell laptops. You can force loading on other | 645 | also work with other Dell laptops. You can force loading on other |
649 | models by passing the parameter `force=1' to the module. Use at | 646 | models by passing the parameter `force=1' to the module. Use at |
650 | your own risk. | 647 | your own risk. |
651 | 648 | ||
652 | For information on utilities to make use of this driver see the | 649 | For information on utilities to make use of this driver see the |
653 | I8K Linux utilities web site at: | 650 | I8K Linux utilities web site at: |
654 | <http://people.debian.org/~dz/i8k/> | 651 | <http://people.debian.org/~dz/i8k/> |
655 | 652 | ||
656 | Say Y if you intend to run this kernel on a Dell Inspiron 8000. | 653 | Say Y if you intend to run this kernel on a Dell Inspiron 8000. |
657 | Say N otherwise. | 654 | Say N otherwise. |
658 | 655 | ||
659 | config X86_REBOOTFIXUPS | 656 | config X86_REBOOTFIXUPS |
660 | def_bool n | 657 | def_bool n |
661 | prompt "Enable X86 board specific fixups for reboot" | 658 | prompt "Enable X86 board specific fixups for reboot" |
662 | depends on X86_32 && X86 | 659 | depends on X86_32 && X86 |
663 | ---help--- | 660 | ---help--- |
664 | This enables chipset and/or board specific fixups to be done | 661 | This enables chipset and/or board specific fixups to be done |
665 | in order to get reboot to work correctly. This is only needed on | 662 | in order to get reboot to work correctly. This is only needed on |
666 | some combinations of hardware and BIOS. The symptom, for which | 663 | some combinations of hardware and BIOS. The symptom, for which |
667 | this config is intended, is when reboot ends with a stalled/hung | 664 | this config is intended, is when reboot ends with a stalled/hung |
668 | system. | 665 | system. |
669 | 666 | ||
670 | Currently, the only fixup is for the Geode machines using | 667 | Currently, the only fixup is for the Geode machines using |
671 | CS5530A and CS5536 chipsets and the RDC R-321x SoC. | 668 | CS5530A and CS5536 chipsets and the RDC R-321x SoC. |
672 | 669 | ||
673 | Say Y if you want to enable the fixup. Currently, it's safe to | 670 | Say Y if you want to enable the fixup. Currently, it's safe to |
674 | enable this option even if you don't need it. | 671 | enable this option even if you don't need it. |
675 | Say N otherwise. | 672 | Say N otherwise. |
676 | 673 | ||
677 | config MICROCODE | 674 | config MICROCODE |
678 | tristate "/dev/cpu/microcode - Intel IA32 CPU microcode support" | 675 | tristate "/dev/cpu/microcode - Intel IA32 CPU microcode support" |
679 | select FW_LOADER | 676 | select FW_LOADER |
680 | ---help--- | 677 | ---help--- |
681 | If you say Y here, you will be able to update the microcode on | 678 | If you say Y here, you will be able to update the microcode on |
682 | Intel processors in the IA32 family, e.g. Pentium Pro, Pentium II, | 679 | Intel processors in the IA32 family, e.g. Pentium Pro, Pentium II, |
683 | Pentium III, Pentium 4, Xeon etc. You will obviously need the | 680 | Pentium III, Pentium 4, Xeon etc. You will obviously need the |
684 | actual microcode binary data itself which is not shipped with the | 681 | actual microcode binary data itself which is not shipped with the |
685 | Linux kernel. | 682 | Linux kernel. |
686 | 683 | ||
687 | For latest news and information on obtaining all the required | 684 | For latest news and information on obtaining all the required |
688 | ingredients for this driver, check: | 685 | ingredients for this driver, check: |
689 | <http://www.urbanmyth.org/microcode/>. | 686 | <http://www.urbanmyth.org/microcode/>. |
690 | 687 | ||
691 | To compile this driver as a module, choose M here: the | 688 | To compile this driver as a module, choose M here: the |
692 | module will be called microcode. | 689 | module will be called microcode. |
693 | 690 | ||
694 | config MICROCODE_OLD_INTERFACE | 691 | config MICROCODE_OLD_INTERFACE |
695 | def_bool y | 692 | def_bool y |
696 | depends on MICROCODE | 693 | depends on MICROCODE |
697 | 694 | ||
698 | config X86_MSR | 695 | config X86_MSR |
699 | tristate "/dev/cpu/*/msr - Model-specific register support" | 696 | tristate "/dev/cpu/*/msr - Model-specific register support" |
700 | help | 697 | help |
701 | This device gives privileged processes access to the x86 | 698 | This device gives privileged processes access to the x86 |
702 | Model-Specific Registers (MSRs). It is a character device with | 699 | Model-Specific Registers (MSRs). It is a character device with |
703 | major 202 and minors 0 to 31 for /dev/cpu/0/msr to /dev/cpu/31/msr. | 700 | major 202 and minors 0 to 31 for /dev/cpu/0/msr to /dev/cpu/31/msr. |
704 | MSR accesses are directed to a specific CPU on multi-processor | 701 | MSR accesses are directed to a specific CPU on multi-processor |
705 | systems. | 702 | systems. |
706 | 703 | ||
707 | config X86_CPUID | 704 | config X86_CPUID |
708 | tristate "/dev/cpu/*/cpuid - CPU information support" | 705 | tristate "/dev/cpu/*/cpuid - CPU information support" |
709 | help | 706 | help |
710 | This device gives processes access to the x86 CPUID instruction to | 707 | This device gives processes access to the x86 CPUID instruction to |
711 | be executed on a specific processor. It is a character device | 708 | be executed on a specific processor. It is a character device |
712 | with major 203 and minors 0 to 31 for /dev/cpu/0/cpuid to | 709 | with major 203 and minors 0 to 31 for /dev/cpu/0/cpuid to |
713 | /dev/cpu/31/cpuid. | 710 | /dev/cpu/31/cpuid. |
714 | 711 | ||
715 | choice | 712 | choice |
716 | prompt "High Memory Support" | 713 | prompt "High Memory Support" |
717 | default HIGHMEM4G if !X86_NUMAQ | 714 | default HIGHMEM4G if !X86_NUMAQ |
718 | default HIGHMEM64G if X86_NUMAQ | 715 | default HIGHMEM64G if X86_NUMAQ |
719 | depends on X86_32 | 716 | depends on X86_32 |
720 | 717 | ||
721 | config NOHIGHMEM | 718 | config NOHIGHMEM |
722 | bool "off" | 719 | bool "off" |
723 | depends on !X86_NUMAQ | 720 | depends on !X86_NUMAQ |
724 | ---help--- | 721 | ---help--- |
725 | Linux can use up to 64 Gigabytes of physical memory on x86 systems. | 722 | Linux can use up to 64 Gigabytes of physical memory on x86 systems. |
726 | However, the address space of 32-bit x86 processors is only 4 | 723 | However, the address space of 32-bit x86 processors is only 4 |
727 | Gigabytes large. That means that, if you have a large amount of | 724 | Gigabytes large. That means that, if you have a large amount of |
728 | physical memory, not all of it can be "permanently mapped" by the | 725 | physical memory, not all of it can be "permanently mapped" by the |
729 | kernel. The physical memory that's not permanently mapped is called | 726 | kernel. The physical memory that's not permanently mapped is called |
730 | "high memory". | 727 | "high memory". |
731 | 728 | ||
732 | If you are compiling a kernel which will never run on a machine with | 729 | If you are compiling a kernel which will never run on a machine with |
733 | more than 1 Gigabyte total physical RAM, answer "off" here (default | 730 | more than 1 Gigabyte total physical RAM, answer "off" here (default |
734 | choice and suitable for most users). This will result in a "3GB/1GB" | 731 | choice and suitable for most users). This will result in a "3GB/1GB" |
735 | split: 3GB are mapped so that each process sees a 3GB virtual memory | 732 | split: 3GB are mapped so that each process sees a 3GB virtual memory |
736 | space and the remaining part of the 4GB virtual memory space is used | 733 | space and the remaining part of the 4GB virtual memory space is used |
737 | by the kernel to permanently map as much physical memory as | 734 | by the kernel to permanently map as much physical memory as |
738 | possible. | 735 | possible. |
739 | 736 | ||
740 | If the machine has between 1 and 4 Gigabytes physical RAM, then | 737 | If the machine has between 1 and 4 Gigabytes physical RAM, then |
741 | answer "4GB" here. | 738 | answer "4GB" here. |
742 | 739 | ||
743 | If more than 4 Gigabytes is used then answer "64GB" here. This | 740 | If more than 4 Gigabytes is used then answer "64GB" here. This |
744 | selection turns Intel PAE (Physical Address Extension) mode on. | 741 | selection turns Intel PAE (Physical Address Extension) mode on. |
745 | PAE implements 3-level paging on IA32 processors. PAE is fully | 742 | PAE implements 3-level paging on IA32 processors. PAE is fully |
746 | supported by Linux, PAE mode is implemented on all recent Intel | 743 | supported by Linux, PAE mode is implemented on all recent Intel |
747 | processors (Pentium Pro and better). NOTE: If you say "64GB" here, | 744 | processors (Pentium Pro and better). NOTE: If you say "64GB" here, |
748 | then the kernel will not boot on CPUs that don't support PAE! | 745 | then the kernel will not boot on CPUs that don't support PAE! |
749 | 746 | ||
750 | The actual amount of total physical memory will either be | 747 | The actual amount of total physical memory will either be |
751 | auto detected or can be forced by using a kernel command line option | 748 | auto detected or can be forced by using a kernel command line option |
752 | such as "mem=256M". (Try "man bootparam" or see the documentation of | 749 | such as "mem=256M". (Try "man bootparam" or see the documentation of |
753 | your boot loader (lilo or loadlin) about how to pass options to the | 750 | your boot loader (lilo or loadlin) about how to pass options to the |
754 | kernel at boot time.) | 751 | kernel at boot time.) |
755 | 752 | ||
756 | If unsure, say "off". | 753 | If unsure, say "off". |
757 | 754 | ||
758 | config HIGHMEM4G | 755 | config HIGHMEM4G |
759 | bool "4GB" | 756 | bool "4GB" |
760 | depends on !X86_NUMAQ | 757 | depends on !X86_NUMAQ |
761 | help | 758 | help |
762 | Select this if you have a 32-bit processor and between 1 and 4 | 759 | Select this if you have a 32-bit processor and between 1 and 4 |
763 | gigabytes of physical RAM. | 760 | gigabytes of physical RAM. |
764 | 761 | ||
765 | config HIGHMEM64G | 762 | config HIGHMEM64G |
766 | bool "64GB" | 763 | bool "64GB" |
767 | depends on !M386 && !M486 | 764 | depends on !M386 && !M486 |
768 | select X86_PAE | 765 | select X86_PAE |
769 | help | 766 | help |
770 | Select this if you have a 32-bit processor and more than 4 | 767 | Select this if you have a 32-bit processor and more than 4 |
771 | gigabytes of physical RAM. | 768 | gigabytes of physical RAM. |
772 | 769 | ||
773 | endchoice | 770 | endchoice |
774 | 771 | ||
775 | choice | 772 | choice |
776 | depends on EXPERIMENTAL | 773 | depends on EXPERIMENTAL |
777 | prompt "Memory split" if EMBEDDED | 774 | prompt "Memory split" if EMBEDDED |
778 | default VMSPLIT_3G | 775 | default VMSPLIT_3G |
779 | depends on X86_32 | 776 | depends on X86_32 |
780 | help | 777 | help |
781 | Select the desired split between kernel and user memory. | 778 | Select the desired split between kernel and user memory. |
782 | 779 | ||
783 | If the address range available to the kernel is less than the | 780 | If the address range available to the kernel is less than the |
784 | physical memory installed, the remaining memory will be available | 781 | physical memory installed, the remaining memory will be available |
785 | as "high memory". Accessing high memory is a little more costly | 782 | as "high memory". Accessing high memory is a little more costly |
786 | than low memory, as it needs to be mapped into the kernel first. | 783 | than low memory, as it needs to be mapped into the kernel first. |
787 | Note that increasing the kernel address space limits the range | 784 | Note that increasing the kernel address space limits the range |
788 | available to user programs, making the address space there | 785 | available to user programs, making the address space there |
789 | tighter. Selecting anything other than the default 3G/1G split | 786 | tighter. Selecting anything other than the default 3G/1G split |
790 | will also likely make your kernel incompatible with binary-only | 787 | will also likely make your kernel incompatible with binary-only |
791 | kernel modules. | 788 | kernel modules. |
792 | 789 | ||
793 | If you are not absolutely sure what you are doing, leave this | 790 | If you are not absolutely sure what you are doing, leave this |
794 | option alone! | 791 | option alone! |
795 | 792 | ||
796 | config VMSPLIT_3G | 793 | config VMSPLIT_3G |
797 | bool "3G/1G user/kernel split" | 794 | bool "3G/1G user/kernel split" |
798 | config VMSPLIT_3G_OPT | 795 | config VMSPLIT_3G_OPT |
799 | depends on !X86_PAE | 796 | depends on !X86_PAE |
800 | bool "3G/1G user/kernel split (for full 1G low memory)" | 797 | bool "3G/1G user/kernel split (for full 1G low memory)" |
801 | config VMSPLIT_2G | 798 | config VMSPLIT_2G |
802 | bool "2G/2G user/kernel split" | 799 | bool "2G/2G user/kernel split" |
803 | config VMSPLIT_2G_OPT | 800 | config VMSPLIT_2G_OPT |
804 | depends on !X86_PAE | 801 | depends on !X86_PAE |
805 | bool "2G/2G user/kernel split (for full 2G low memory)" | 802 | bool "2G/2G user/kernel split (for full 2G low memory)" |
806 | config VMSPLIT_1G | 803 | config VMSPLIT_1G |
807 | bool "1G/3G user/kernel split" | 804 | bool "1G/3G user/kernel split" |
808 | endchoice | 805 | endchoice |
809 | 806 | ||
810 | config PAGE_OFFSET | 807 | config PAGE_OFFSET |
811 | hex | 808 | hex |
812 | default 0xB0000000 if VMSPLIT_3G_OPT | 809 | default 0xB0000000 if VMSPLIT_3G_OPT |
813 | default 0x80000000 if VMSPLIT_2G | 810 | default 0x80000000 if VMSPLIT_2G |
814 | default 0x78000000 if VMSPLIT_2G_OPT | 811 | default 0x78000000 if VMSPLIT_2G_OPT |
815 | default 0x40000000 if VMSPLIT_1G | 812 | default 0x40000000 if VMSPLIT_1G |
816 | default 0xC0000000 | 813 | default 0xC0000000 |
817 | depends on X86_32 | 814 | depends on X86_32 |
818 | 815 | ||
819 | config HIGHMEM | 816 | config HIGHMEM |
820 | def_bool y | 817 | def_bool y |
821 | depends on X86_32 && (HIGHMEM64G || HIGHMEM4G) | 818 | depends on X86_32 && (HIGHMEM64G || HIGHMEM4G) |
822 | 819 | ||
823 | config X86_PAE | 820 | config X86_PAE |
824 | def_bool n | 821 | def_bool n |
825 | prompt "PAE (Physical Address Extension) Support" | 822 | prompt "PAE (Physical Address Extension) Support" |
826 | depends on X86_32 && !HIGHMEM4G | 823 | depends on X86_32 && !HIGHMEM4G |
827 | select RESOURCES_64BIT | 824 | select RESOURCES_64BIT |
828 | help | 825 | help |
829 | PAE is required for NX support, and furthermore enables | 826 | PAE is required for NX support, and furthermore enables |
830 | larger swapspace support for non-overcommit purposes. It | 827 | larger swapspace support for non-overcommit purposes. It |
831 | has the cost of more pagetable lookup overhead, and also | 828 | has the cost of more pagetable lookup overhead, and also |
832 | consumes more pagetable space per process. | 829 | consumes more pagetable space per process. |
833 | 830 | ||
834 | # Common NUMA Features | 831 | # Common NUMA Features |
835 | config NUMA | 832 | config NUMA |
836 | bool "Numa Memory Allocation and Scheduler Support (EXPERIMENTAL)" | 833 | bool "Numa Memory Allocation and Scheduler Support (EXPERIMENTAL)" |
837 | depends on SMP | 834 | depends on SMP |
838 | depends on X86_64 || (X86_32 && HIGHMEM64G && (X86_NUMAQ || (X86_SUMMIT || X86_GENERICARCH) && ACPI) && EXPERIMENTAL) | 835 | depends on X86_64 || (X86_32 && HIGHMEM64G && (X86_NUMAQ || (X86_SUMMIT || X86_GENERICARCH) && ACPI) && EXPERIMENTAL) |
839 | default n if X86_PC | 836 | default n if X86_PC |
840 | default y if (X86_NUMAQ || X86_SUMMIT) | 837 | default y if (X86_NUMAQ || X86_SUMMIT) |
841 | help | 838 | help |
842 | Enable NUMA (Non Uniform Memory Access) support. | 839 | Enable NUMA (Non Uniform Memory Access) support. |
843 | The kernel will try to allocate memory used by a CPU on the | 840 | The kernel will try to allocate memory used by a CPU on the |
844 | local memory controller of the CPU and add some more | 841 | local memory controller of the CPU and add some more |
845 | NUMA awareness to the kernel. | 842 | NUMA awareness to the kernel. |
846 | 843 | ||
847 | For i386 this is currently highly experimental and should be only | 844 | For i386 this is currently highly experimental and should be only |
848 | used for kernel development. It might also cause boot failures. | 845 | used for kernel development. It might also cause boot failures. |
849 | For x86_64 this is recommended on all multiprocessor Opteron systems. | 846 | For x86_64 this is recommended on all multiprocessor Opteron systems. |
850 | If the system is EM64T, you should say N unless your system is | 847 | If the system is EM64T, you should say N unless your system is |
851 | EM64T NUMA. | 848 | EM64T NUMA. |
852 | 849 | ||
853 | comment "NUMA (Summit) requires SMP, 64GB highmem support, ACPI" | 850 | comment "NUMA (Summit) requires SMP, 64GB highmem support, ACPI" |
854 | depends on X86_32 && X86_SUMMIT && (!HIGHMEM64G || !ACPI) | 851 | depends on X86_32 && X86_SUMMIT && (!HIGHMEM64G || !ACPI) |
855 | 852 | ||
856 | config K8_NUMA | 853 | config K8_NUMA |
857 | def_bool y | 854 | def_bool y |
858 | prompt "Old style AMD Opteron NUMA detection" | 855 | prompt "Old style AMD Opteron NUMA detection" |
859 | depends on X86_64 && NUMA && PCI | 856 | depends on X86_64 && NUMA && PCI |
860 | help | 857 | help |
861 | Enable K8 NUMA node topology detection. You should say Y here if | 858 | Enable K8 NUMA node topology detection. You should say Y here if |
862 | you have a multi processor AMD K8 system. This uses an old | 859 | you have a multi processor AMD K8 system. This uses an old |
863 | method to read the NUMA configuration directly from the builtin | 860 | method to read the NUMA configuration directly from the builtin |
864 | Northbridge of Opteron. It is recommended to use X86_64_ACPI_NUMA | 861 | Northbridge of Opteron. It is recommended to use X86_64_ACPI_NUMA |
865 | instead, which also takes priority if both are compiled in. | 862 | instead, which also takes priority if both are compiled in. |
866 | 863 | ||
867 | config X86_64_ACPI_NUMA | 864 | config X86_64_ACPI_NUMA |
868 | def_bool y | 865 | def_bool y |
869 | prompt "ACPI NUMA detection" | 866 | prompt "ACPI NUMA detection" |
870 | depends on X86_64 && NUMA && ACPI && PCI | 867 | depends on X86_64 && NUMA && ACPI && PCI |
871 | select ACPI_NUMA | 868 | select ACPI_NUMA |
872 | help | 869 | help |
873 | Enable ACPI SRAT based node topology detection. | 870 | Enable ACPI SRAT based node topology detection. |
874 | 871 | ||
875 | config NUMA_EMU | 872 | config NUMA_EMU |
876 | bool "NUMA emulation" | 873 | bool "NUMA emulation" |
877 | depends on X86_64 && NUMA | 874 | depends on X86_64 && NUMA |
878 | help | 875 | help |
879 | Enable NUMA emulation. A flat machine will be split | 876 | Enable NUMA emulation. A flat machine will be split |
880 | into virtual nodes when booted with "numa=fake=N", where N is the | 877 | into virtual nodes when booted with "numa=fake=N", where N is the |
881 | number of nodes. This is only useful for debugging. | 878 | number of nodes. This is only useful for debugging. |
882 | 879 | ||
883 | config NODES_SHIFT | 880 | config NODES_SHIFT |
884 | int | 881 | int |
885 | range 1 15 if X86_64 | 882 | range 1 15 if X86_64 |
886 | default "6" if X86_64 | 883 | default "6" if X86_64 |
887 | default "4" if X86_NUMAQ | 884 | default "4" if X86_NUMAQ |
888 | default "3" | 885 | default "3" |
889 | depends on NEED_MULTIPLE_NODES | 886 | depends on NEED_MULTIPLE_NODES |
890 | 887 | ||
891 | config HAVE_ARCH_BOOTMEM_NODE | 888 | config HAVE_ARCH_BOOTMEM_NODE |
892 | def_bool y | 889 | def_bool y |
893 | depends on X86_32 && NUMA | 890 | depends on X86_32 && NUMA |
894 | 891 | ||
895 | config ARCH_HAVE_MEMORY_PRESENT | 892 | config ARCH_HAVE_MEMORY_PRESENT |
896 | def_bool y | 893 | def_bool y |
897 | depends on X86_32 && DISCONTIGMEM | 894 | depends on X86_32 && DISCONTIGMEM |
898 | 895 | ||
899 | config NEED_NODE_MEMMAP_SIZE | 896 | config NEED_NODE_MEMMAP_SIZE |
900 | def_bool y | 897 | def_bool y |
901 | depends on X86_32 && (DISCONTIGMEM || SPARSEMEM) | 898 | depends on X86_32 && (DISCONTIGMEM || SPARSEMEM) |
902 | 899 | ||
903 | config HAVE_ARCH_ALLOC_REMAP | 900 | config HAVE_ARCH_ALLOC_REMAP |
904 | def_bool y | 901 | def_bool y |
905 | depends on X86_32 && NUMA | 902 | depends on X86_32 && NUMA |
906 | 903 | ||
907 | config ARCH_FLATMEM_ENABLE | 904 | config ARCH_FLATMEM_ENABLE |
908 | def_bool y | 905 | def_bool y |
909 | depends on X86_32 && ARCH_SELECT_MEMORY_MODEL && X86_PC && !NUMA | 906 | depends on X86_32 && ARCH_SELECT_MEMORY_MODEL && X86_PC && !NUMA |
910 | 907 | ||
911 | config ARCH_DISCONTIGMEM_ENABLE | 908 | config ARCH_DISCONTIGMEM_ENABLE |
912 | def_bool y | 909 | def_bool y |
913 | depends on NUMA && X86_32 | 910 | depends on NUMA && X86_32 |
914 | 911 | ||
915 | config ARCH_DISCONTIGMEM_DEFAULT | 912 | config ARCH_DISCONTIGMEM_DEFAULT |
916 | def_bool y | 913 | def_bool y |
917 | depends on NUMA && X86_32 | 914 | depends on NUMA && X86_32 |
918 | 915 | ||
919 | config ARCH_SPARSEMEM_DEFAULT | 916 | config ARCH_SPARSEMEM_DEFAULT |
920 | def_bool y | 917 | def_bool y |
921 | depends on X86_64 | 918 | depends on X86_64 |
922 | 919 | ||
923 | config ARCH_SPARSEMEM_ENABLE | 920 | config ARCH_SPARSEMEM_ENABLE |
924 | def_bool y | 921 | def_bool y |
925 | depends on X86_64 || NUMA || (EXPERIMENTAL && X86_PC) | 922 | depends on X86_64 || NUMA || (EXPERIMENTAL && X86_PC) |
926 | select SPARSEMEM_STATIC if X86_32 | 923 | select SPARSEMEM_STATIC if X86_32 |
927 | select SPARSEMEM_VMEMMAP_ENABLE if X86_64 | 924 | select SPARSEMEM_VMEMMAP_ENABLE if X86_64 |
928 | 925 | ||
929 | config ARCH_SELECT_MEMORY_MODEL | 926 | config ARCH_SELECT_MEMORY_MODEL |
930 | def_bool y | 927 | def_bool y |
931 | depends on ARCH_SPARSEMEM_ENABLE | 928 | depends on ARCH_SPARSEMEM_ENABLE |
932 | 929 | ||
933 | config ARCH_MEMORY_PROBE | 930 | config ARCH_MEMORY_PROBE |
934 | def_bool X86_64 | 931 | def_bool X86_64 |
935 | depends on MEMORY_HOTPLUG | 932 | depends on MEMORY_HOTPLUG |
936 | 933 | ||
937 | source "mm/Kconfig" | 934 | source "mm/Kconfig" |
938 | 935 | ||
939 | config HIGHPTE | 936 | config HIGHPTE |
940 | bool "Allocate 3rd-level pagetables from highmem" | 937 | bool "Allocate 3rd-level pagetables from highmem" |
941 | depends on X86_32 && (HIGHMEM4G || HIGHMEM64G) | 938 | depends on X86_32 && (HIGHMEM4G || HIGHMEM64G) |
942 | help | 939 | help |
943 | The VM uses one page table entry for each page of physical memory. | 940 | The VM uses one page table entry for each page of physical memory. |
944 | For systems with a lot of RAM, this can be wasteful of precious | 941 | For systems with a lot of RAM, this can be wasteful of precious |
945 | low memory. Setting this option will put user-space page table | 942 | low memory. Setting this option will put user-space page table |
946 | entries in high memory. | 943 | entries in high memory. |
947 | 944 | ||
948 | config MATH_EMULATION | 945 | config MATH_EMULATION |
949 | bool | 946 | bool |
950 | prompt "Math emulation" if X86_32 | 947 | prompt "Math emulation" if X86_32 |
951 | ---help--- | 948 | ---help--- |
952 | Linux can emulate a math coprocessor (used for floating point | 949 | Linux can emulate a math coprocessor (used for floating point |
953 | operations) if you don't have one. 486DX and Pentium processors have | 950 | operations) if you don't have one. 486DX and Pentium processors have |
954 | a math coprocessor built in, 486SX and 386 do not, unless you added | 951 | a math coprocessor built in, 486SX and 386 do not, unless you added |
955 | a 487DX or 387, respectively. (The messages during boot time can | 952 | a 487DX or 387, respectively. (The messages during boot time can |
956 | give you some hints here ["man dmesg"].) Everyone needs either a | 953 | give you some hints here ["man dmesg"].) Everyone needs either a |
957 | coprocessor or this emulation. | 954 | coprocessor or this emulation. |
958 | 955 | ||
959 | If you don't have a math coprocessor, you need to say Y here; if you | 956 | If you don't have a math coprocessor, you need to say Y here; if you |
960 | say Y here even though you have a coprocessor, the coprocessor will | 957 | say Y here even though you have a coprocessor, the coprocessor will |
961 | be used nevertheless. (This behavior can be changed with the kernel | 958 | be used nevertheless. (This behavior can be changed with the kernel |
962 | command line option "no387", which comes handy if your coprocessor | 959 | command line option "no387", which comes handy if your coprocessor |
963 | is broken. Try "man bootparam" or see the documentation of your boot | 960 | is broken. Try "man bootparam" or see the documentation of your boot |
964 | loader (lilo or loadlin) about how to pass options to the kernel at | 961 | loader (lilo or loadlin) about how to pass options to the kernel at |
965 | boot time.) This means that it is a good idea to say Y here if you | 962 | boot time.) This means that it is a good idea to say Y here if you |
966 | intend to use this kernel on different machines. | 963 | intend to use this kernel on different machines. |
967 | 964 | ||
968 | More information about the internals of the Linux math coprocessor | 965 | More information about the internals of the Linux math coprocessor |
969 | emulation can be found in <file:arch/x86/math-emu/README>. | 966 | emulation can be found in <file:arch/x86/math-emu/README>. |
970 | 967 | ||
971 | If you are not sure, say Y; apart from resulting in a 66 KB bigger | 968 | If you are not sure, say Y; apart from resulting in a 66 KB bigger |
972 | kernel, it won't hurt. | 969 | kernel, it won't hurt. |
973 | 970 | ||
974 | config MTRR | 971 | config MTRR |
975 | bool "MTRR (Memory Type Range Register) support" | 972 | bool "MTRR (Memory Type Range Register) support" |
976 | ---help--- | 973 | ---help--- |
977 | On Intel P6 family processors (Pentium Pro, Pentium II and later) | 974 | On Intel P6 family processors (Pentium Pro, Pentium II and later) |
978 | the Memory Type Range Registers (MTRRs) may be used to control | 975 | the Memory Type Range Registers (MTRRs) may be used to control |
979 | processor access to memory ranges. This is most useful if you have | 976 | processor access to memory ranges. This is most useful if you have |
980 | a video (VGA) card on a PCI or AGP bus. Enabling write-combining | 977 | a video (VGA) card on a PCI or AGP bus. Enabling write-combining |
981 | allows bus write transfers to be combined into a larger transfer | 978 | allows bus write transfers to be combined into a larger transfer |
982 | before bursting over the PCI/AGP bus. This can increase performance | 979 | before bursting over the PCI/AGP bus. This can increase performance |
983 | of image write operations 2.5 times or more. Saying Y here creates a | 980 | of image write operations 2.5 times or more. Saying Y here creates a |
984 | /proc/mtrr file which may be used to manipulate your processor's | 981 | /proc/mtrr file which may be used to manipulate your processor's |
985 | MTRRs. Typically the X server should use this. | 982 | MTRRs. Typically the X server should use this. |
986 | 983 | ||
987 | This code has a reasonably generic interface so that similar | 984 | This code has a reasonably generic interface so that similar |
988 | control registers on other processors can be easily supported | 985 | control registers on other processors can be easily supported |
989 | as well: | 986 | as well: |
990 | 987 | ||
991 | The Cyrix 6x86, 6x86MX and M II processors have Address Range | 988 | The Cyrix 6x86, 6x86MX and M II processors have Address Range |
992 | Registers (ARRs) which provide a similar functionality to MTRRs. For | 989 | Registers (ARRs) which provide a similar functionality to MTRRs. For |
993 | these, the ARRs are used to emulate the MTRRs. | 990 | these, the ARRs are used to emulate the MTRRs. |
994 | The AMD K6-2 (stepping 8 and above) and K6-3 processors have two | 991 | The AMD K6-2 (stepping 8 and above) and K6-3 processors have two |
995 | MTRRs. The Centaur C6 (WinChip) has 8 MCRs, allowing | 992 | MTRRs. The Centaur C6 (WinChip) has 8 MCRs, allowing |
996 | write-combining. All of these processors are supported by this code | 993 | write-combining. All of these processors are supported by this code |
997 | and it makes sense to say Y here if you have one of them. | 994 | and it makes sense to say Y here if you have one of them. |
998 | 995 | ||
999 | Saying Y here also fixes a problem with buggy SMP BIOSes which only | 996 | Saying Y here also fixes a problem with buggy SMP BIOSes which only |
1000 | set the MTRRs for the boot CPU and not for the secondary CPUs. This | 997 | set the MTRRs for the boot CPU and not for the secondary CPUs. This |
1001 | can lead to all sorts of problems, so it's good to say Y here. | 998 | can lead to all sorts of problems, so it's good to say Y here. |
1002 | 999 | ||
1003 | You can safely say Y even if your machine doesn't have MTRRs, you'll | 1000 | You can safely say Y even if your machine doesn't have MTRRs, you'll |
1004 | just add about 9 KB to your kernel. | 1001 | just add about 9 KB to your kernel. |
1005 | 1002 | ||
1006 | See <file:Documentation/mtrr.txt> for more information. | 1003 | See <file:Documentation/mtrr.txt> for more information. |
1007 | 1004 | ||
1008 | config EFI | 1005 | config EFI |
1009 | def_bool n | 1006 | def_bool n |
1010 | prompt "EFI runtime service support" | 1007 | prompt "EFI runtime service support" |
1011 | depends on ACPI | 1008 | depends on ACPI |
1012 | ---help--- | 1009 | ---help--- |
1013 | This enables the kernel to use EFI runtime services that are | 1010 | This enables the kernel to use EFI runtime services that are |
1014 | available (such as the EFI variable services). | 1011 | available (such as the EFI variable services). |
1015 | 1012 | ||
1016 | This option is only useful on systems that have EFI firmware. | 1013 | This option is only useful on systems that have EFI firmware. |
1017 | In addition, you should use the latest ELILO loader available | 1014 | In addition, you should use the latest ELILO loader available |
1018 | at <http://elilo.sourceforge.net> in order to take advantage | 1015 | at <http://elilo.sourceforge.net> in order to take advantage |
1019 | of EFI runtime services. However, even with this option, the | 1016 | of EFI runtime services. However, even with this option, the |
1020 | resultant kernel should continue to boot on existing non-EFI | 1017 | resultant kernel should continue to boot on existing non-EFI |
1021 | platforms. | 1018 | platforms. |
1022 | 1019 | ||
1023 | config IRQBALANCE | 1020 | config IRQBALANCE |
1024 | def_bool y | 1021 | def_bool y |
1025 | prompt "Enable kernel irq balancing" | 1022 | prompt "Enable kernel irq balancing" |
1026 | depends on X86_32 && SMP && X86_IO_APIC | 1023 | depends on X86_32 && SMP && X86_IO_APIC |
1027 | help | 1024 | help |
1028 | The default yes will allow the kernel to do irq load balancing. | 1025 | The default yes will allow the kernel to do irq load balancing. |
1029 | Saying no will keep the kernel from doing irq load balancing. | 1026 | Saying no will keep the kernel from doing irq load balancing. |
1030 | 1027 | ||
1031 | config SECCOMP | 1028 | config SECCOMP |
1032 | def_bool y | 1029 | def_bool y |
1033 | prompt "Enable seccomp to safely compute untrusted bytecode" | 1030 | prompt "Enable seccomp to safely compute untrusted bytecode" |
1034 | depends on PROC_FS | 1031 | depends on PROC_FS |
1035 | help | 1032 | help |
1036 | This kernel feature is useful for number crunching applications | 1033 | This kernel feature is useful for number crunching applications |
1037 | that may need to compute untrusted bytecode during their | 1034 | that may need to compute untrusted bytecode during their |
1038 | execution. By using pipes or other transports made available to | 1035 | execution. By using pipes or other transports made available to |
1039 | the process as file descriptors supporting the read/write | 1036 | the process as file descriptors supporting the read/write |
1040 | syscalls, it's possible to isolate those applications in | 1037 | syscalls, it's possible to isolate those applications in |
1041 | their own address space using seccomp. Once seccomp is | 1038 | their own address space using seccomp. Once seccomp is |
1042 | enabled via /proc/<pid>/seccomp, it cannot be disabled | 1039 | enabled via /proc/<pid>/seccomp, it cannot be disabled |
1043 | and the task is only allowed to execute a few safe syscalls | 1040 | and the task is only allowed to execute a few safe syscalls |
1044 | defined by each seccomp mode. | 1041 | defined by each seccomp mode. |
1045 | 1042 | ||
1046 | If unsure, say Y. Only embedded should say N here. | 1043 | If unsure, say Y. Only embedded should say N here. |
1047 | 1044 | ||
1048 | config CC_STACKPROTECTOR | 1045 | config CC_STACKPROTECTOR |
1049 | bool "Enable -fstack-protector buffer overflow detection (EXPERIMENTAL)" | 1046 | bool "Enable -fstack-protector buffer overflow detection (EXPERIMENTAL)" |
1050 | depends on X86_64 && EXPERIMENTAL | 1047 | depends on X86_64 && EXPERIMENTAL |
1051 | help | 1048 | help |
1052 | This option turns on the -fstack-protector GCC feature. This | 1049 | This option turns on the -fstack-protector GCC feature. This |
1053 | feature puts, at the beginning of critical functions, a canary | 1050 | feature puts, at the beginning of critical functions, a canary |
1054 | value on the stack just before the return address, and validates | 1051 | value on the stack just before the return address, and validates |
1055 | the value just before actually returning. Stack based buffer | 1052 | the value just before actually returning. Stack based buffer |
1056 | overflows (that need to overwrite this return address) now also | 1053 | overflows (that need to overwrite this return address) now also |
1057 | overwrite the canary, which gets detected and the attack is then | 1054 | overwrite the canary, which gets detected and the attack is then |
1058 | neutralized via a kernel panic. | 1055 | neutralized via a kernel panic. |
1059 | 1056 | ||
1060 | This feature requires gcc version 4.2 or above, or a distribution | 1057 | This feature requires gcc version 4.2 or above, or a distribution |
1061 | gcc with the feature backported. Older versions are automatically | 1058 | gcc with the feature backported. Older versions are automatically |
1062 | detected and for those versions, this configuration option is ignored. | 1059 | detected and for those versions, this configuration option is ignored. |
1063 | 1060 | ||
1064 | config CC_STACKPROTECTOR_ALL | 1061 | config CC_STACKPROTECTOR_ALL |
1065 | bool "Use stack-protector for all functions" | 1062 | bool "Use stack-protector for all functions" |
1066 | depends on CC_STACKPROTECTOR | 1063 | depends on CC_STACKPROTECTOR |
1067 | help | 1064 | help |
1068 | Normally, GCC only inserts the canary value protection for | 1065 | Normally, GCC only inserts the canary value protection for |
1069 | functions that use large-ish on-stack buffers. By enabling | 1066 | functions that use large-ish on-stack buffers. By enabling |
1070 | this option, GCC will be asked to do this for ALL functions. | 1067 | this option, GCC will be asked to do this for ALL functions. |
1071 | 1068 | ||
1072 | source kernel/Kconfig.hz | 1069 | source kernel/Kconfig.hz |
1073 | 1070 | ||
1074 | config KEXEC | 1071 | config KEXEC |
1075 | bool "kexec system call" | 1072 | bool "kexec system call" |
1076 | help | 1073 | help |
1077 | kexec is a system call that implements the ability to shutdown your | 1074 | kexec is a system call that implements the ability to shutdown your |
1078 | current kernel, and to start another kernel. It is like a reboot | 1075 | current kernel, and to start another kernel. It is like a reboot |
1079 | but it is independent of the system firmware. And like a reboot | 1076 | but it is independent of the system firmware. And like a reboot |
1080 | you can start any kernel with it, not just Linux. | 1077 | you can start any kernel with it, not just Linux. |
1081 | 1078 | ||
1082 | The name comes from the similarity to the exec system call. | 1079 | The name comes from the similarity to the exec system call. |
1083 | 1080 | ||
1084 | It is an ongoing process to be certain the hardware in a machine | 1081 | It is an ongoing process to be certain the hardware in a machine |
1085 | is properly shutdown, so do not be surprised if this code does not | 1082 | is properly shutdown, so do not be surprised if this code does not |
1086 | initially work for you. It may help to enable device hotplugging | 1083 | initially work for you. It may help to enable device hotplugging |
1087 | support. As of this writing the exact hardware interface is | 1084 | support. As of this writing the exact hardware interface is |
1088 | strongly in flux, so no good recommendation can be made. | 1085 | strongly in flux, so no good recommendation can be made. |
1089 | 1086 | ||
1090 | config CRASH_DUMP | 1087 | config CRASH_DUMP |
1091 | bool "kernel crash dumps (EXPERIMENTAL)" | 1088 | bool "kernel crash dumps (EXPERIMENTAL)" |
1092 | depends on EXPERIMENTAL | 1089 | depends on EXPERIMENTAL |
1093 | depends on X86_64 || (X86_32 && HIGHMEM) | 1090 | depends on X86_64 || (X86_32 && HIGHMEM) |
1094 | help | 1091 | help |
1095 | Generate crash dump after being started by kexec. | 1092 | Generate crash dump after being started by kexec. |
1096 | This should be normally only set in special crash dump kernels | 1093 | This should be normally only set in special crash dump kernels |
1097 | which are loaded in the main kernel with kexec-tools into | 1094 | which are loaded in the main kernel with kexec-tools into |
1098 | a specially reserved region and then later executed after | 1095 | a specially reserved region and then later executed after |
1099 | a crash by kdump/kexec. The crash dump kernel must be compiled | 1096 | a crash by kdump/kexec. The crash dump kernel must be compiled |
1100 | to a memory address not used by the main kernel or BIOS using | 1097 | to a memory address not used by the main kernel or BIOS using |
1101 | PHYSICAL_START, or it must be built as a relocatable image | 1098 | PHYSICAL_START, or it must be built as a relocatable image |
1102 | (CONFIG_RELOCATABLE=y). | 1099 | (CONFIG_RELOCATABLE=y). |
1103 | For more details see Documentation/kdump/kdump.txt | 1100 | For more details see Documentation/kdump/kdump.txt |
1104 | 1101 | ||
1105 | config PHYSICAL_START | 1102 | config PHYSICAL_START |
1106 | hex "Physical address where the kernel is loaded" if (EMBEDDED || CRASH_DUMP) | 1103 | hex "Physical address where the kernel is loaded" if (EMBEDDED || CRASH_DUMP) |
1107 | default "0x1000000" if X86_NUMAQ | 1104 | default "0x1000000" if X86_NUMAQ |
1108 | default "0x200000" if X86_64 | 1105 | default "0x200000" if X86_64 |
1109 | default "0x100000" | 1106 | default "0x100000" |
1110 | help | 1107 | help |
1111 | This gives the physical address where the kernel is loaded. | 1108 | This gives the physical address where the kernel is loaded. |
1112 | 1109 | ||
1113 | If kernel is a not relocatable (CONFIG_RELOCATABLE=n) then | 1110 | If kernel is a not relocatable (CONFIG_RELOCATABLE=n) then |
1114 | bzImage will decompress itself to above physical address and | 1111 | bzImage will decompress itself to above physical address and |
1115 | run from there. Otherwise, bzImage will run from the address where | 1112 | run from there. Otherwise, bzImage will run from the address where |
1116 | it has been loaded by the boot loader and will ignore above physical | 1113 | it has been loaded by the boot loader and will ignore above physical |
1117 | address. | 1114 | address. |
1118 | 1115 | ||
1119 | In normal kdump cases one does not have to set/change this option | 1116 | In normal kdump cases one does not have to set/change this option |
1120 | as now bzImage can be compiled as a completely relocatable image | 1117 | as now bzImage can be compiled as a completely relocatable image |
1121 | (CONFIG_RELOCATABLE=y) and be used to load and run from a different | 1118 | (CONFIG_RELOCATABLE=y) and be used to load and run from a different |
1122 | address. This option is mainly useful for the folks who don't want | 1119 | address. This option is mainly useful for the folks who don't want |
1123 | to use a bzImage for capturing the crash dump and want to use a | 1120 | to use a bzImage for capturing the crash dump and want to use a |
1124 | vmlinux instead. vmlinux is not relocatable hence a kernel needs | 1121 | vmlinux instead. vmlinux is not relocatable hence a kernel needs |
1125 | to be specifically compiled to run from a specific memory area | 1122 | to be specifically compiled to run from a specific memory area |
1126 | (normally a reserved region) and this option comes handy. | 1123 | (normally a reserved region) and this option comes handy. |
1127 | 1124 | ||
1128 | So if you are using bzImage for capturing the crash dump, leave | 1125 | So if you are using bzImage for capturing the crash dump, leave |
1129 | the value here unchanged to 0x100000 and set CONFIG_RELOCATABLE=y. | 1126 | the value here unchanged to 0x100000 and set CONFIG_RELOCATABLE=y. |
1130 | Otherwise if you plan to use vmlinux for capturing the crash dump | 1127 | Otherwise if you plan to use vmlinux for capturing the crash dump |
1131 | change this value to start of the reserved region (Typically 16MB | 1128 | change this value to start of the reserved region (Typically 16MB |
1132 | 0x1000000). In other words, it can be set based on the "X" value as | 1129 | 0x1000000). In other words, it can be set based on the "X" value as |
1133 | specified in the "crashkernel=YM@XM" command line boot parameter | 1130 | specified in the "crashkernel=YM@XM" command line boot parameter |
1134 | passed to the panic-ed kernel. Typically this parameter is set as | 1131 | passed to the panic-ed kernel. Typically this parameter is set as |
1135 | crashkernel=64M@16M. Please take a look at | 1132 | crashkernel=64M@16M. Please take a look at |
1136 | Documentation/kdump/kdump.txt for more details about crash dumps. | 1133 | Documentation/kdump/kdump.txt for more details about crash dumps. |
1137 | 1134 | ||
1138 | Usage of bzImage for capturing the crash dump is recommended as | 1135 | Usage of bzImage for capturing the crash dump is recommended as |
1139 | one does not have to build two kernels. Same kernel can be used | 1136 | one does not have to build two kernels. Same kernel can be used |
1140 | as production kernel and capture kernel. Above option should have | 1137 | as production kernel and capture kernel. Above option should have |
1141 | gone away after relocatable bzImage support is introduced. But it | 1138 | gone away after relocatable bzImage support is introduced. But it |
1142 | is present because there are users out there who continue to use | 1139 | is present because there are users out there who continue to use |
1143 | vmlinux for dump capture. This option should go away down the | 1140 | vmlinux for dump capture. This option should go away down the |
1144 | line. | 1141 | line. |
1145 | 1142 | ||
1146 | Don't change this unless you know what you are doing. | 1143 | Don't change this unless you know what you are doing. |
1147 | 1144 | ||
1148 | config RELOCATABLE | 1145 | config RELOCATABLE |
1149 | bool "Build a relocatable kernel (EXPERIMENTAL)" | 1146 | bool "Build a relocatable kernel (EXPERIMENTAL)" |
1150 | depends on EXPERIMENTAL | 1147 | depends on EXPERIMENTAL |
1151 | help | 1148 | help |
1152 | This builds a kernel image that retains relocation information | 1149 | This builds a kernel image that retains relocation information |
1153 | so it can be loaded someplace besides the default 1MB. | 1150 | so it can be loaded someplace besides the default 1MB. |
1154 | The relocations tend to make the kernel binary about 10% larger, | 1151 | The relocations tend to make the kernel binary about 10% larger, |
1155 | but are discarded at runtime. | 1152 | but are discarded at runtime. |
1156 | 1153 | ||
1157 | One use is for the kexec on panic case where the recovery kernel | 1154 | One use is for the kexec on panic case where the recovery kernel |
1158 | must live at a different physical address than the primary | 1155 | must live at a different physical address than the primary |
1159 | kernel. | 1156 | kernel. |
1160 | 1157 | ||
1161 | Note: If CONFIG_RELOCATABLE=y, then the kernel runs from the address | 1158 | Note: If CONFIG_RELOCATABLE=y, then the kernel runs from the address |
1162 | it has been loaded at and the compile time physical address | 1159 | it has been loaded at and the compile time physical address |
1163 | (CONFIG_PHYSICAL_START) is ignored. | 1160 | (CONFIG_PHYSICAL_START) is ignored. |
1164 | 1161 | ||
1165 | config PHYSICAL_ALIGN | 1162 | config PHYSICAL_ALIGN |
1166 | hex | 1163 | hex |
1167 | prompt "Alignment value to which kernel should be aligned" if X86_32 | 1164 | prompt "Alignment value to which kernel should be aligned" if X86_32 |
1168 | default "0x100000" if X86_32 | 1165 | default "0x100000" if X86_32 |
1169 | default "0x200000" if X86_64 | 1166 | default "0x200000" if X86_64 |
1170 | range 0x2000 0x400000 | 1167 | range 0x2000 0x400000 |
1171 | help | 1168 | help |
1172 | This value puts the alignment restrictions on physical address | 1169 | This value puts the alignment restrictions on physical address |
1173 | where kernel is loaded and run from. Kernel is compiled for an | 1170 | where kernel is loaded and run from. Kernel is compiled for an |
1174 | address which meets above alignment restriction. | 1171 | address which meets above alignment restriction. |
1175 | 1172 | ||
1176 | If bootloader loads the kernel at a non-aligned address and | 1173 | If bootloader loads the kernel at a non-aligned address and |
1177 | CONFIG_RELOCATABLE is set, kernel will move itself to nearest | 1174 | CONFIG_RELOCATABLE is set, kernel will move itself to nearest |
1178 | address aligned to above value and run from there. | 1175 | address aligned to above value and run from there. |
1179 | 1176 | ||
1180 | If bootloader loads the kernel at a non-aligned address and | 1177 | If bootloader loads the kernel at a non-aligned address and |
1181 | CONFIG_RELOCATABLE is not set, kernel will ignore the run time | 1178 | CONFIG_RELOCATABLE is not set, kernel will ignore the run time |
1182 | load address and decompress itself to the address it has been | 1179 | load address and decompress itself to the address it has been |
1183 | compiled for and run from there. The address for which kernel is | 1180 | compiled for and run from there. The address for which kernel is |
1184 | compiled already meets above alignment restrictions. Hence the | 1181 | compiled already meets above alignment restrictions. Hence the |
1185 | end result is that kernel runs from a physical address meeting | 1182 | end result is that kernel runs from a physical address meeting |
1186 | above alignment restrictions. | 1183 | above alignment restrictions. |
1187 | 1184 | ||
1188 | Don't change this unless you know what you are doing. | 1185 | Don't change this unless you know what you are doing. |
1189 | 1186 | ||
1190 | config HOTPLUG_CPU | 1187 | config HOTPLUG_CPU |
1191 | bool "Support for suspend on SMP and hot-pluggable CPUs (EXPERIMENTAL)" | 1188 | bool "Support for suspend on SMP and hot-pluggable CPUs (EXPERIMENTAL)" |
1192 | depends on SMP && HOTPLUG && EXPERIMENTAL && !X86_VOYAGER | 1189 | depends on SMP && HOTPLUG && EXPERIMENTAL && !X86_VOYAGER |
1193 | ---help--- | 1190 | ---help--- |
1194 | Say Y here to experiment with turning CPUs off and on, and to | 1191 | Say Y here to experiment with turning CPUs off and on, and to |
1195 | enable suspend on SMP systems. CPUs can be controlled through | 1192 | enable suspend on SMP systems. CPUs can be controlled through |
1196 | /sys/devices/system/cpu. | 1193 | /sys/devices/system/cpu. |
1197 | Say N if you want to disable CPU hotplug and don't need to | 1194 | Say N if you want to disable CPU hotplug and don't need to |
1198 | suspend. | 1195 | suspend. |
1199 | 1196 | ||
1200 | config COMPAT_VDSO | 1197 | config COMPAT_VDSO |
1201 | def_bool y | 1198 | def_bool y |
1202 | prompt "Compat VDSO support" | 1199 | prompt "Compat VDSO support" |
1203 | depends on X86_32 || IA32_EMULATION | 1200 | depends on X86_32 || IA32_EMULATION |
1204 | help | 1201 | help |
1205 | Map the 32-bit VDSO to the predictable old-style address too. | 1202 | Map the 32-bit VDSO to the predictable old-style address too. |
1206 | ---help--- | 1203 | ---help--- |
1207 | Say N here if you are running a sufficiently recent glibc | 1204 | Say N here if you are running a sufficiently recent glibc |
1208 | version (2.3.3 or later), to remove the high-mapped | 1205 | version (2.3.3 or later), to remove the high-mapped |
1209 | VDSO mapping and to exclusively use the randomized VDSO. | 1206 | VDSO mapping and to exclusively use the randomized VDSO. |
1210 | 1207 | ||
1211 | If unsure, say Y. | 1208 | If unsure, say Y. |
1212 | 1209 | ||
1213 | endmenu | 1210 | endmenu |
1214 | 1211 | ||
1215 | config ARCH_ENABLE_MEMORY_HOTPLUG | 1212 | config ARCH_ENABLE_MEMORY_HOTPLUG |
1216 | def_bool y | 1213 | def_bool y |
1217 | depends on X86_64 || (X86_32 && HIGHMEM) | 1214 | depends on X86_64 || (X86_32 && HIGHMEM) |
1218 | 1215 | ||
1219 | config HAVE_ARCH_EARLY_PFN_TO_NID | 1216 | config HAVE_ARCH_EARLY_PFN_TO_NID |
1220 | def_bool X86_64 | 1217 | def_bool X86_64 |
1221 | depends on NUMA | 1218 | depends on NUMA |
1222 | 1219 | ||
1223 | menu "Power management options" | 1220 | menu "Power management options" |
1224 | depends on !X86_VOYAGER | 1221 | depends on !X86_VOYAGER |
1225 | 1222 | ||
1226 | config ARCH_HIBERNATION_HEADER | 1223 | config ARCH_HIBERNATION_HEADER |
1227 | def_bool y | 1224 | def_bool y |
1228 | depends on X86_64 && HIBERNATION | 1225 | depends on X86_64 && HIBERNATION |
1229 | 1226 | ||
1230 | source "kernel/power/Kconfig" | 1227 | source "kernel/power/Kconfig" |
1231 | 1228 | ||
1232 | source "drivers/acpi/Kconfig" | 1229 | source "drivers/acpi/Kconfig" |
1233 | 1230 | ||
1234 | config X86_APM_BOOT | 1231 | config X86_APM_BOOT |
1235 | bool | 1232 | bool |
1236 | default y | 1233 | default y |
1237 | depends on APM || APM_MODULE | 1234 | depends on APM || APM_MODULE |
1238 | 1235 | ||
1239 | menuconfig APM | 1236 | menuconfig APM |
1240 | tristate "APM (Advanced Power Management) BIOS support" | 1237 | tristate "APM (Advanced Power Management) BIOS support" |
1241 | depends on X86_32 && PM_SLEEP && !X86_VISWS | 1238 | depends on X86_32 && PM_SLEEP && !X86_VISWS |
1242 | ---help--- | 1239 | ---help--- |
1243 | APM is a BIOS specification for saving power using several different | 1240 | APM is a BIOS specification for saving power using several different |
1244 | techniques. This is mostly useful for battery powered laptops with | 1241 | techniques. This is mostly useful for battery powered laptops with |
1245 | APM compliant BIOSes. If you say Y here, the system time will be | 1242 | APM compliant BIOSes. If you say Y here, the system time will be |
1246 | reset after a RESUME operation, the /proc/apm device will provide | 1243 | reset after a RESUME operation, the /proc/apm device will provide |
1247 | battery status information, and user-space programs will receive | 1244 | battery status information, and user-space programs will receive |
1248 | notification of APM "events" (e.g. battery status change). | 1245 | notification of APM "events" (e.g. battery status change). |
1249 | 1246 | ||
1250 | If you select "Y" here, you can disable actual use of the APM | 1247 | If you select "Y" here, you can disable actual use of the APM |
1251 | BIOS by passing the "apm=off" option to the kernel at boot time. | 1248 | BIOS by passing the "apm=off" option to the kernel at boot time. |
1252 | 1249 | ||
1253 | Note that the APM support is almost completely disabled for | 1250 | Note that the APM support is almost completely disabled for |
1254 | machines with more than one CPU. | 1251 | machines with more than one CPU. |
1255 | 1252 | ||
1256 | In order to use APM, you will need supporting software. For location | 1253 | In order to use APM, you will need supporting software. For location |
1257 | and more information, read <file:Documentation/pm.txt> and the | 1254 | and more information, read <file:Documentation/pm.txt> and the |
1258 | Battery Powered Linux mini-HOWTO, available from | 1255 | Battery Powered Linux mini-HOWTO, available from |
1259 | <http://www.tldp.org/docs.html#howto>. | 1256 | <http://www.tldp.org/docs.html#howto>. |
1260 | 1257 | ||
1261 | This driver does not spin down disk drives (see the hdparm(8) | 1258 | This driver does not spin down disk drives (see the hdparm(8) |
1262 | manpage ("man 8 hdparm") for that), and it doesn't turn off | 1259 | manpage ("man 8 hdparm") for that), and it doesn't turn off |
1263 | VESA-compliant "green" monitors. | 1260 | VESA-compliant "green" monitors. |
1264 | 1261 | ||
1265 | This driver does not support the TI 4000M TravelMate and the ACER | 1262 | This driver does not support the TI 4000M TravelMate and the ACER |
1266 | 486/DX4/75 because they don't have compliant BIOSes. Many "green" | 1263 | 486/DX4/75 because they don't have compliant BIOSes. Many "green" |
1267 | desktop machines also don't have compliant BIOSes, and this driver | 1264 | desktop machines also don't have compliant BIOSes, and this driver |
1268 | may cause those machines to panic during the boot phase. | 1265 | may cause those machines to panic during the boot phase. |
1269 | 1266 | ||
1270 | Generally, if you don't have a battery in your machine, there isn't | 1267 | Generally, if you don't have a battery in your machine, there isn't |
1271 | much point in using this driver and you should say N. If you get | 1268 | much point in using this driver and you should say N. If you get |
1272 | random kernel OOPSes or reboots that don't seem to be related to | 1269 | random kernel OOPSes or reboots that don't seem to be related to |
1273 | anything, try disabling/enabling this option (or disabling/enabling | 1270 | anything, try disabling/enabling this option (or disabling/enabling |
1274 | APM in your BIOS). | 1271 | APM in your BIOS). |
1275 | 1272 | ||
1276 | Some other things you should try when experiencing seemingly random, | 1273 | Some other things you should try when experiencing seemingly random, |
1277 | "weird" problems: | 1274 | "weird" problems: |
1278 | 1275 | ||
1279 | 1) make sure that you have enough swap space and that it is | 1276 | 1) make sure that you have enough swap space and that it is |
1280 | enabled. | 1277 | enabled. |
1281 | 2) pass the "no-hlt" option to the kernel | 1278 | 2) pass the "no-hlt" option to the kernel |
1282 | 3) switch on floating point emulation in the kernel and pass | 1279 | 3) switch on floating point emulation in the kernel and pass |
1283 | the "no387" option to the kernel | 1280 | the "no387" option to the kernel |
1284 | 4) pass the "floppy=nodma" option to the kernel | 1281 | 4) pass the "floppy=nodma" option to the kernel |
1285 | 5) pass the "mem=4M" option to the kernel (thereby disabling | 1282 | 5) pass the "mem=4M" option to the kernel (thereby disabling |
1286 | all but the first 4 MB of RAM) | 1283 | all but the first 4 MB of RAM) |
1287 | 6) make sure that the CPU is not over clocked. | 1284 | 6) make sure that the CPU is not over clocked. |
1288 | 7) read the sig11 FAQ at <http://www.bitwizard.nl/sig11/> | 1285 | 7) read the sig11 FAQ at <http://www.bitwizard.nl/sig11/> |
1289 | 8) disable the cache from your BIOS settings | 1286 | 8) disable the cache from your BIOS settings |
1290 | 9) install a fan for the video card or exchange video RAM | 1287 | 9) install a fan for the video card or exchange video RAM |
1291 | 10) install a better fan for the CPU | 1288 | 10) install a better fan for the CPU |
1292 | 11) exchange RAM chips | 1289 | 11) exchange RAM chips |
1293 | 12) exchange the motherboard. | 1290 | 12) exchange the motherboard. |
1294 | 1291 | ||
1295 | To compile this driver as a module, choose M here: the | 1292 | To compile this driver as a module, choose M here: the |
1296 | module will be called apm. | 1293 | module will be called apm. |
1297 | 1294 | ||
1298 | if APM | 1295 | if APM |
1299 | 1296 | ||
1300 | config APM_IGNORE_USER_SUSPEND | 1297 | config APM_IGNORE_USER_SUSPEND |
1301 | bool "Ignore USER SUSPEND" | 1298 | bool "Ignore USER SUSPEND" |
1302 | help | 1299 | help |
1303 | This option will ignore USER SUSPEND requests. On machines with a | 1300 | This option will ignore USER SUSPEND requests. On machines with a |
1304 | compliant APM BIOS, you want to say N. However, on the NEC Versa M | 1301 | compliant APM BIOS, you want to say N. However, on the NEC Versa M |
1305 | series notebooks, it is necessary to say Y because of a BIOS bug. | 1302 | series notebooks, it is necessary to say Y because of a BIOS bug. |
1306 | 1303 | ||
1307 | config APM_DO_ENABLE | 1304 | config APM_DO_ENABLE |
1308 | bool "Enable PM at boot time" | 1305 | bool "Enable PM at boot time" |
1309 | ---help--- | 1306 | ---help--- |
1310 | Enable APM features at boot time. From page 36 of the APM BIOS | 1307 | Enable APM features at boot time. From page 36 of the APM BIOS |
1311 | specification: "When disabled, the APM BIOS does not automatically | 1308 | specification: "When disabled, the APM BIOS does not automatically |
1312 | power manage devices, enter the Standby State, enter the Suspend | 1309 | power manage devices, enter the Standby State, enter the Suspend |
1313 | State, or take power saving steps in response to CPU Idle calls." | 1310 | State, or take power saving steps in response to CPU Idle calls." |
1314 | This driver will make CPU Idle calls when Linux is idle (unless this | 1311 | This driver will make CPU Idle calls when Linux is idle (unless this |
1315 | feature is turned off -- see "Do CPU IDLE calls", below). This | 1312 | feature is turned off -- see "Do CPU IDLE calls", below). This |
1316 | should always save battery power, but more complicated APM features | 1313 | should always save battery power, but more complicated APM features |
1317 | will be dependent on your BIOS implementation. You may need to turn | 1314 | will be dependent on your BIOS implementation. You may need to turn |
1318 | this option off if your computer hangs at boot time when using APM | 1315 | this option off if your computer hangs at boot time when using APM |
1319 | support, or if it beeps continuously instead of suspending. Turn | 1316 | support, or if it beeps continuously instead of suspending. Turn |
1320 | this off if you have a NEC UltraLite Versa 33/C or a Toshiba | 1317 | this off if you have a NEC UltraLite Versa 33/C or a Toshiba |
1321 | T400CDT. This is off by default since most machines do fine without | 1318 | T400CDT. This is off by default since most machines do fine without |
1322 | this feature. | 1319 | this feature. |
1323 | 1320 | ||
1324 | config APM_CPU_IDLE | 1321 | config APM_CPU_IDLE |
1325 | bool "Make CPU Idle calls when idle" | 1322 | bool "Make CPU Idle calls when idle" |
1326 | help | 1323 | help |
1327 | Enable calls to APM CPU Idle/CPU Busy inside the kernel's idle loop. | 1324 | Enable calls to APM CPU Idle/CPU Busy inside the kernel's idle loop. |
1328 | On some machines, this can activate improved power savings, such as | 1325 | On some machines, this can activate improved power savings, such as |
1329 | a slowed CPU clock rate, when the machine is idle. These idle calls | 1326 | a slowed CPU clock rate, when the machine is idle. These idle calls |
1330 | are made after the idle loop has run for some length of time (e.g., | 1327 | are made after the idle loop has run for some length of time (e.g., |
1331 | 333 mS). On some machines, this will cause a hang at boot time or | 1328 | 333 mS). On some machines, this will cause a hang at boot time or |
1332 | whenever the CPU becomes idle. (On machines with more than one CPU, | 1329 | whenever the CPU becomes idle. (On machines with more than one CPU, |
1333 | this option does nothing.) | 1330 | this option does nothing.) |
1334 | 1331 | ||
1335 | config APM_DISPLAY_BLANK | 1332 | config APM_DISPLAY_BLANK |
1336 | bool "Enable console blanking using APM" | 1333 | bool "Enable console blanking using APM" |
1337 | help | 1334 | help |
1338 | Enable console blanking using the APM. Some laptops can use this to | 1335 | Enable console blanking using the APM. Some laptops can use this to |
1339 | turn off the LCD backlight when the screen blanker of the Linux | 1336 | turn off the LCD backlight when the screen blanker of the Linux |
1340 | virtual console blanks the screen. Note that this is only used by | 1337 | virtual console blanks the screen. Note that this is only used by |
1341 | the virtual console screen blanker, and won't turn off the backlight | 1338 | the virtual console screen blanker, and won't turn off the backlight |
1342 | when using the X Window system. This also doesn't have anything to | 1339 | when using the X Window system. This also doesn't have anything to |
1343 | do with your VESA-compliant power-saving monitor. Further, this | 1340 | do with your VESA-compliant power-saving monitor. Further, this |
1344 | option doesn't work for all laptops -- it might not turn off your | 1341 | option doesn't work for all laptops -- it might not turn off your |
1345 | backlight at all, or it might print a lot of errors to the console, | 1342 | backlight at all, or it might print a lot of errors to the console, |
1346 | especially if you are using gpm. | 1343 | especially if you are using gpm. |
1347 | 1344 | ||
1348 | config APM_ALLOW_INTS | 1345 | config APM_ALLOW_INTS |
1349 | bool "Allow interrupts during APM BIOS calls" | 1346 | bool "Allow interrupts during APM BIOS calls" |
1350 | help | 1347 | help |
1351 | Normally we disable external interrupts while we are making calls to | 1348 | Normally we disable external interrupts while we are making calls to |
1352 | the APM BIOS as a measure to lessen the effects of a badly behaving | 1349 | the APM BIOS as a measure to lessen the effects of a badly behaving |
1353 | BIOS implementation. The BIOS should reenable interrupts if it | 1350 | BIOS implementation. The BIOS should reenable interrupts if it |
1354 | needs to. Unfortunately, some BIOSes do not -- especially those in | 1351 | needs to. Unfortunately, some BIOSes do not -- especially those in |
1355 | many of the newer IBM Thinkpads. If you experience hangs when you | 1352 | many of the newer IBM Thinkpads. If you experience hangs when you |
1356 | suspend, try setting this to Y. Otherwise, say N. | 1353 | suspend, try setting this to Y. Otherwise, say N. |
1357 | 1354 | ||
1358 | config APM_REAL_MODE_POWER_OFF | 1355 | config APM_REAL_MODE_POWER_OFF |
1359 | bool "Use real mode APM BIOS call to power off" | 1356 | bool "Use real mode APM BIOS call to power off" |
1360 | help | 1357 | help |
1361 | Use real mode APM BIOS calls to switch off the computer. This is | 1358 | Use real mode APM BIOS calls to switch off the computer. This is |
1362 | a work-around for a number of buggy BIOSes. Switch this option on if | 1359 | a work-around for a number of buggy BIOSes. Switch this option on if |
1363 | your computer crashes instead of powering off properly. | 1360 | your computer crashes instead of powering off properly. |
1364 | 1361 | ||
1365 | endif # APM | 1362 | endif # APM |
1366 | 1363 | ||
1367 | source "arch/x86/kernel/cpu/cpufreq/Kconfig" | 1364 | source "arch/x86/kernel/cpu/cpufreq/Kconfig" |
1368 | 1365 | ||
1369 | source "drivers/cpuidle/Kconfig" | 1366 | source "drivers/cpuidle/Kconfig" |
1370 | 1367 | ||
1371 | endmenu | 1368 | endmenu |
1372 | 1369 | ||
1373 | 1370 | ||
1374 | menu "Bus options (PCI etc.)" | 1371 | menu "Bus options (PCI etc.)" |
1375 | 1372 | ||
1376 | config PCI | 1373 | config PCI |
1377 | bool "PCI support" if !X86_VISWS | 1374 | bool "PCI support" if !X86_VISWS |
1378 | depends on !X86_VOYAGER | 1375 | depends on !X86_VOYAGER |
1379 | default y | 1376 | default y |
1380 | select ARCH_SUPPORTS_MSI if (X86_LOCAL_APIC && X86_IO_APIC) | 1377 | select ARCH_SUPPORTS_MSI if (X86_LOCAL_APIC && X86_IO_APIC) |
1381 | help | 1378 | help |
1382 | Find out whether you have a PCI motherboard. PCI is the name of a | 1379 | Find out whether you have a PCI motherboard. PCI is the name of a |
1383 | bus system, i.e. the way the CPU talks to the other stuff inside | 1380 | bus system, i.e. the way the CPU talks to the other stuff inside |
1384 | your box. Other bus systems are ISA, EISA, MicroChannel (MCA) or | 1381 | your box. Other bus systems are ISA, EISA, MicroChannel (MCA) or |
1385 | VESA. If you have PCI, say Y, otherwise N. | 1382 | VESA. If you have PCI, say Y, otherwise N. |
1386 | 1383 | ||
1387 | choice | 1384 | choice |
1388 | prompt "PCI access mode" | 1385 | prompt "PCI access mode" |
1389 | depends on X86_32 && PCI && !X86_VISWS | 1386 | depends on X86_32 && PCI && !X86_VISWS |
1390 | default PCI_GOANY | 1387 | default PCI_GOANY |
1391 | ---help--- | 1388 | ---help--- |
1392 | On PCI systems, the BIOS can be used to detect the PCI devices and | 1389 | On PCI systems, the BIOS can be used to detect the PCI devices and |
1393 | determine their configuration. However, some old PCI motherboards | 1390 | determine their configuration. However, some old PCI motherboards |
1394 | have BIOS bugs and may crash if this is done. Also, some embedded | 1391 | have BIOS bugs and may crash if this is done. Also, some embedded |
1395 | PCI-based systems don't have any BIOS at all. Linux can also try to | 1392 | PCI-based systems don't have any BIOS at all. Linux can also try to |
1396 | detect the PCI hardware directly without using the BIOS. | 1393 | detect the PCI hardware directly without using the BIOS. |
1397 | 1394 | ||
1398 | With this option, you can specify how Linux should detect the | 1395 | With this option, you can specify how Linux should detect the |
1399 | PCI devices. If you choose "BIOS", the BIOS will be used, | 1396 | PCI devices. If you choose "BIOS", the BIOS will be used, |
1400 | if you choose "Direct", the BIOS won't be used, and if you | 1397 | if you choose "Direct", the BIOS won't be used, and if you |
1401 | choose "MMConfig", then PCI Express MMCONFIG will be used. | 1398 | choose "MMConfig", then PCI Express MMCONFIG will be used. |
1402 | If you choose "Any", the kernel will try MMCONFIG, then the | 1399 | If you choose "Any", the kernel will try MMCONFIG, then the |
1403 | direct access method and falls back to the BIOS if that doesn't | 1400 | direct access method and falls back to the BIOS if that doesn't |
1404 | work. If unsure, go with the default, which is "Any". | 1401 | work. If unsure, go with the default, which is "Any". |
1405 | 1402 | ||
1406 | config PCI_GOBIOS | 1403 | config PCI_GOBIOS |
1407 | bool "BIOS" | 1404 | bool "BIOS" |
1408 | 1405 | ||
1409 | config PCI_GOMMCONFIG | 1406 | config PCI_GOMMCONFIG |
1410 | bool "MMConfig" | 1407 | bool "MMConfig" |
1411 | 1408 | ||
1412 | config PCI_GODIRECT | 1409 | config PCI_GODIRECT |
1413 | bool "Direct" | 1410 | bool "Direct" |
1414 | 1411 | ||
1415 | config PCI_GOANY | 1412 | config PCI_GOANY |
1416 | bool "Any" | 1413 | bool "Any" |
1417 | 1414 | ||
1418 | endchoice | 1415 | endchoice |
1419 | 1416 | ||
1420 | config PCI_BIOS | 1417 | config PCI_BIOS |
1421 | def_bool y | 1418 | def_bool y |
1422 | depends on X86_32 && !X86_VISWS && PCI && (PCI_GOBIOS || PCI_GOANY) | 1419 | depends on X86_32 && !X86_VISWS && PCI && (PCI_GOBIOS || PCI_GOANY) |
1423 | 1420 | ||
1424 | # x86-64 doesn't support PCI BIOS access from long mode so always go direct. | 1421 | # x86-64 doesn't support PCI BIOS access from long mode so always go direct. |
1425 | config PCI_DIRECT | 1422 | config PCI_DIRECT |
1426 | def_bool y | 1423 | def_bool y |
1427 | depends on PCI && (X86_64 || (PCI_GODIRECT || PCI_GOANY) || X86_VISWS) | 1424 | depends on PCI && (X86_64 || (PCI_GODIRECT || PCI_GOANY) || X86_VISWS) |
1428 | 1425 | ||
1429 | config PCI_MMCONFIG | 1426 | config PCI_MMCONFIG |
1430 | def_bool y | 1427 | def_bool y |
1431 | depends on X86_32 && PCI && ACPI && (PCI_GOMMCONFIG || PCI_GOANY) | 1428 | depends on X86_32 && PCI && ACPI && (PCI_GOMMCONFIG || PCI_GOANY) |
1432 | 1429 | ||
1433 | config PCI_DOMAINS | 1430 | config PCI_DOMAINS |
1434 | def_bool y | 1431 | def_bool y |
1435 | depends on PCI | 1432 | depends on PCI |
1436 | 1433 | ||
1437 | config PCI_MMCONFIG | 1434 | config PCI_MMCONFIG |
1438 | bool "Support mmconfig PCI config space access" | 1435 | bool "Support mmconfig PCI config space access" |
1439 | depends on X86_64 && PCI && ACPI | 1436 | depends on X86_64 && PCI && ACPI |
1440 | 1437 | ||
1441 | config DMAR | 1438 | config DMAR |
1442 | bool "Support for DMA Remapping Devices (EXPERIMENTAL)" | 1439 | bool "Support for DMA Remapping Devices (EXPERIMENTAL)" |
1443 | depends on X86_64 && PCI_MSI && ACPI && EXPERIMENTAL | 1440 | depends on X86_64 && PCI_MSI && ACPI && EXPERIMENTAL |
1444 | help | 1441 | help |
1445 | DMA remapping (DMAR) devices support enables independent address | 1442 | DMA remapping (DMAR) devices support enables independent address |
1446 | translations for Direct Memory Access (DMA) from devices. | 1443 | translations for Direct Memory Access (DMA) from devices. |
1447 | These DMA remapping devices are reported via ACPI tables | 1444 | These DMA remapping devices are reported via ACPI tables |
1448 | and include PCI device scope covered by these DMA | 1445 | and include PCI device scope covered by these DMA |
1449 | remapping devices. | 1446 | remapping devices. |
1450 | 1447 | ||
1451 | config DMAR_GFX_WA | 1448 | config DMAR_GFX_WA |
1452 | def_bool y | 1449 | def_bool y |
1453 | prompt "Support for Graphics workaround" | 1450 | prompt "Support for Graphics workaround" |
1454 | depends on DMAR | 1451 | depends on DMAR |
1455 | help | 1452 | help |
1456 | Current Graphics drivers tend to use physical address | 1453 | Current Graphics drivers tend to use physical address |
1457 | for DMA and avoid using DMA APIs. Setting this config | 1454 | for DMA and avoid using DMA APIs. Setting this config |
1458 | option permits the IOMMU driver to set a unity map for | 1455 | option permits the IOMMU driver to set a unity map for |
1459 | all the OS-visible memory. Hence the driver can continue | 1456 | all the OS-visible memory. Hence the driver can continue |
1460 | to use physical addresses for DMA. | 1457 | to use physical addresses for DMA. |
1461 | 1458 | ||
1462 | config DMAR_FLOPPY_WA | 1459 | config DMAR_FLOPPY_WA |
1463 | def_bool y | 1460 | def_bool y |
1464 | depends on DMAR | 1461 | depends on DMAR |
1465 | help | 1462 | help |
1466 | Floppy disk drivers are know to bypass DMA API calls | 1463 | Floppy disk drivers are know to bypass DMA API calls |
1467 | thereby failing to work when IOMMU is enabled. This | 1464 | thereby failing to work when IOMMU is enabled. This |
1468 | workaround will setup a 1:1 mapping for the first | 1465 | workaround will setup a 1:1 mapping for the first |
1469 | 16M to make floppy (an ISA device) work. | 1466 | 16M to make floppy (an ISA device) work. |
1470 | 1467 | ||
1471 | source "drivers/pci/pcie/Kconfig" | 1468 | source "drivers/pci/pcie/Kconfig" |
1472 | 1469 | ||
1473 | source "drivers/pci/Kconfig" | 1470 | source "drivers/pci/Kconfig" |
1474 | 1471 | ||
1475 | # x86_64 have no ISA slots, but do have ISA-style DMA. | 1472 | # x86_64 have no ISA slots, but do have ISA-style DMA. |
1476 | config ISA_DMA_API | 1473 | config ISA_DMA_API |
1477 | def_bool y | 1474 | def_bool y |
1478 | 1475 | ||
1479 | if X86_32 | 1476 | if X86_32 |
1480 | 1477 | ||
1481 | config ISA | 1478 | config ISA |
1482 | bool "ISA support" | 1479 | bool "ISA support" |
1483 | depends on !(X86_VOYAGER || X86_VISWS) | 1480 | depends on !(X86_VOYAGER || X86_VISWS) |
1484 | help | 1481 | help |
1485 | Find out whether you have ISA slots on your motherboard. ISA is the | 1482 | Find out whether you have ISA slots on your motherboard. ISA is the |
1486 | name of a bus system, i.e. the way the CPU talks to the other stuff | 1483 | name of a bus system, i.e. the way the CPU talks to the other stuff |
1487 | inside your box. Other bus systems are PCI, EISA, MicroChannel | 1484 | inside your box. Other bus systems are PCI, EISA, MicroChannel |
1488 | (MCA) or VESA. ISA is an older system, now being displaced by PCI; | 1485 | (MCA) or VESA. ISA is an older system, now being displaced by PCI; |
1489 | newer boards don't support it. If you have ISA, say Y, otherwise N. | 1486 | newer boards don't support it. If you have ISA, say Y, otherwise N. |
1490 | 1487 | ||
1491 | config EISA | 1488 | config EISA |
1492 | bool "EISA support" | 1489 | bool "EISA support" |
1493 | depends on ISA | 1490 | depends on ISA |
1494 | ---help--- | 1491 | ---help--- |
1495 | The Extended Industry Standard Architecture (EISA) bus was | 1492 | The Extended Industry Standard Architecture (EISA) bus was |
1496 | developed as an open alternative to the IBM MicroChannel bus. | 1493 | developed as an open alternative to the IBM MicroChannel bus. |
1497 | 1494 | ||
1498 | The EISA bus provided some of the features of the IBM MicroChannel | 1495 | The EISA bus provided some of the features of the IBM MicroChannel |
1499 | bus while maintaining backward compatibility with cards made for | 1496 | bus while maintaining backward compatibility with cards made for |
1500 | the older ISA bus. The EISA bus saw limited use between 1988 and | 1497 | the older ISA bus. The EISA bus saw limited use between 1988 and |
1501 | 1995 when it was made obsolete by the PCI bus. | 1498 | 1995 when it was made obsolete by the PCI bus. |
1502 | 1499 | ||
1503 | Say Y here if you are building a kernel for an EISA-based machine. | 1500 | Say Y here if you are building a kernel for an EISA-based machine. |
1504 | 1501 | ||
1505 | Otherwise, say N. | 1502 | Otherwise, say N. |
1506 | 1503 | ||
1507 | source "drivers/eisa/Kconfig" | 1504 | source "drivers/eisa/Kconfig" |
1508 | 1505 | ||
1509 | config MCA | 1506 | config MCA |
1510 | bool "MCA support" if !(X86_VISWS || X86_VOYAGER) | 1507 | bool "MCA support" if !(X86_VISWS || X86_VOYAGER) |
1511 | default y if X86_VOYAGER | 1508 | default y if X86_VOYAGER |
1512 | help | 1509 | help |
1513 | MicroChannel Architecture is found in some IBM PS/2 machines and | 1510 | MicroChannel Architecture is found in some IBM PS/2 machines and |
1514 | laptops. It is a bus system similar to PCI or ISA. See | 1511 | laptops. It is a bus system similar to PCI or ISA. See |
1515 | <file:Documentation/mca.txt> (and especially the web page given | 1512 | <file:Documentation/mca.txt> (and especially the web page given |
1516 | there) before attempting to build an MCA bus kernel. | 1513 | there) before attempting to build an MCA bus kernel. |
1517 | 1514 | ||
1518 | source "drivers/mca/Kconfig" | 1515 | source "drivers/mca/Kconfig" |
1519 | 1516 | ||
1520 | config SCx200 | 1517 | config SCx200 |
1521 | tristate "NatSemi SCx200 support" | 1518 | tristate "NatSemi SCx200 support" |
1522 | depends on !X86_VOYAGER | 1519 | depends on !X86_VOYAGER |
1523 | help | 1520 | help |
1524 | This provides basic support for National Semiconductor's | 1521 | This provides basic support for National Semiconductor's |
1525 | (now AMD's) Geode processors. The driver probes for the | 1522 | (now AMD's) Geode processors. The driver probes for the |
1526 | PCI-IDs of several on-chip devices, so its a good dependency | 1523 | PCI-IDs of several on-chip devices, so its a good dependency |
1527 | for other scx200_* drivers. | 1524 | for other scx200_* drivers. |
1528 | 1525 | ||
1529 | If compiled as a module, the driver is named scx200. | 1526 | If compiled as a module, the driver is named scx200. |
1530 | 1527 | ||
1531 | config SCx200HR_TIMER | 1528 | config SCx200HR_TIMER |
1532 | tristate "NatSemi SCx200 27MHz High-Resolution Timer Support" | 1529 | tristate "NatSemi SCx200 27MHz High-Resolution Timer Support" |
1533 | depends on SCx200 && GENERIC_TIME | 1530 | depends on SCx200 && GENERIC_TIME |
1534 | default y | 1531 | default y |
1535 | help | 1532 | help |
1536 | This driver provides a clocksource built upon the on-chip | 1533 | This driver provides a clocksource built upon the on-chip |
1537 | 27MHz high-resolution timer. Its also a workaround for | 1534 | 27MHz high-resolution timer. Its also a workaround for |
1538 | NSC Geode SC-1100's buggy TSC, which loses time when the | 1535 | NSC Geode SC-1100's buggy TSC, which loses time when the |
1539 | processor goes idle (as is done by the scheduler). The | 1536 | processor goes idle (as is done by the scheduler). The |
1540 | other workaround is idle=poll boot option. | 1537 | other workaround is idle=poll boot option. |
1541 | 1538 | ||
1542 | config GEODE_MFGPT_TIMER | 1539 | config GEODE_MFGPT_TIMER |
1543 | def_bool y | 1540 | def_bool y |
1544 | prompt "Geode Multi-Function General Purpose Timer (MFGPT) events" | 1541 | prompt "Geode Multi-Function General Purpose Timer (MFGPT) events" |
1545 | depends on MGEODE_LX && GENERIC_TIME && GENERIC_CLOCKEVENTS | 1542 | depends on MGEODE_LX && GENERIC_TIME && GENERIC_CLOCKEVENTS |
1546 | help | 1543 | help |
1547 | This driver provides a clock event source based on the MFGPT | 1544 | This driver provides a clock event source based on the MFGPT |
1548 | timer(s) in the CS5535 and CS5536 companion chip for the geode. | 1545 | timer(s) in the CS5535 and CS5536 companion chip for the geode. |
1549 | MFGPTs have a better resolution and max interval than the | 1546 | MFGPTs have a better resolution and max interval than the |
1550 | generic PIT, and are suitable for use as high-res timers. | 1547 | generic PIT, and are suitable for use as high-res timers. |
1551 | 1548 | ||
1552 | endif # X86_32 | 1549 | endif # X86_32 |
1553 | 1550 | ||
1554 | config K8_NB | 1551 | config K8_NB |
1555 | def_bool y | 1552 | def_bool y |
1556 | depends on AGP_AMD64 || (X86_64 && (GART_IOMMU || (PCI && NUMA))) | 1553 | depends on AGP_AMD64 || (X86_64 && (GART_IOMMU || (PCI && NUMA))) |
1557 | 1554 | ||
1558 | source "drivers/pcmcia/Kconfig" | 1555 | source "drivers/pcmcia/Kconfig" |
1559 | 1556 | ||
1560 | source "drivers/pci/hotplug/Kconfig" | 1557 | source "drivers/pci/hotplug/Kconfig" |
1561 | 1558 | ||
1562 | endmenu | 1559 | endmenu |
1563 | 1560 | ||
1564 | 1561 | ||
1565 | menu "Executable file formats / Emulations" | 1562 | menu "Executable file formats / Emulations" |
1566 | 1563 | ||
1567 | source "fs/Kconfig.binfmt" | 1564 | source "fs/Kconfig.binfmt" |
1568 | 1565 | ||
1569 | config IA32_EMULATION | 1566 | config IA32_EMULATION |
1570 | bool "IA32 Emulation" | 1567 | bool "IA32 Emulation" |
1571 | depends on X86_64 | 1568 | depends on X86_64 |
1572 | select COMPAT_BINFMT_ELF | 1569 | select COMPAT_BINFMT_ELF |
1573 | help | 1570 | help |
1574 | Include code to run 32-bit programs under a 64-bit kernel. You should | 1571 | Include code to run 32-bit programs under a 64-bit kernel. You should |
1575 | likely turn this on, unless you're 100% sure that you don't have any | 1572 | likely turn this on, unless you're 100% sure that you don't have any |
1576 | 32-bit programs left. | 1573 | 32-bit programs left. |
1577 | 1574 | ||
1578 | config IA32_AOUT | 1575 | config IA32_AOUT |
1579 | tristate "IA32 a.out support" | 1576 | tristate "IA32 a.out support" |
1580 | depends on IA32_EMULATION | 1577 | depends on IA32_EMULATION |
1581 | help | 1578 | help |
1582 | Support old a.out binaries in the 32bit emulation. | 1579 | Support old a.out binaries in the 32bit emulation. |
1583 | 1580 | ||
1584 | config COMPAT | 1581 | config COMPAT |
1585 | def_bool y | 1582 | def_bool y |
1586 | depends on IA32_EMULATION | 1583 | depends on IA32_EMULATION |
1587 | 1584 | ||
1588 | config COMPAT_FOR_U64_ALIGNMENT | 1585 | config COMPAT_FOR_U64_ALIGNMENT |
1589 | def_bool COMPAT | 1586 | def_bool COMPAT |
1590 | depends on X86_64 | 1587 | depends on X86_64 |
1591 | 1588 | ||
1592 | config SYSVIPC_COMPAT | 1589 | config SYSVIPC_COMPAT |
1593 | def_bool y | 1590 | def_bool y |
1594 | depends on X86_64 && COMPAT && SYSVIPC | 1591 | depends on X86_64 && COMPAT && SYSVIPC |
1595 | 1592 | ||
1596 | endmenu | 1593 | endmenu |
1597 | 1594 | ||
1598 | 1595 | ||
1599 | source "net/Kconfig" | 1596 | source "net/Kconfig" |
1600 | 1597 | ||
1601 | source "drivers/Kconfig" | 1598 | source "drivers/Kconfig" |
1602 | 1599 | ||
1603 | source "drivers/firmware/Kconfig" | 1600 | source "drivers/firmware/Kconfig" |
1604 | 1601 | ||
1605 | source "fs/Kconfig" | 1602 | source "fs/Kconfig" |
1606 | 1603 | ||
1607 | source "arch/x86/Kconfig.debug" | 1604 | source "arch/x86/Kconfig.debug" |
1608 | 1605 | ||
1609 | source "security/Kconfig" | 1606 | source "security/Kconfig" |
1610 | 1607 | ||
1611 | source "crypto/Kconfig" | 1608 | source "crypto/Kconfig" |
1612 | 1609 | ||
1613 | source "arch/x86/kvm/Kconfig" | 1610 | source "arch/x86/kvm/Kconfig" |
1614 | 1611 | ||
1615 | source "lib/Kconfig" | 1612 | source "lib/Kconfig" |
1616 | 1613 |
drivers/cpuidle/cpuidle.c
1 | /* | 1 | /* |
2 | * cpuidle.c - core cpuidle infrastructure | 2 | * cpuidle.c - core cpuidle infrastructure |
3 | * | 3 | * |
4 | * (C) 2006-2007 Venkatesh Pallipadi <venkatesh.pallipadi@intel.com> | 4 | * (C) 2006-2007 Venkatesh Pallipadi <venkatesh.pallipadi@intel.com> |
5 | * Shaohua Li <shaohua.li@intel.com> | 5 | * Shaohua Li <shaohua.li@intel.com> |
6 | * Adam Belay <abelay@novell.com> | 6 | * Adam Belay <abelay@novell.com> |
7 | * | 7 | * |
8 | * This code is licenced under the GPL. | 8 | * This code is licenced under the GPL. |
9 | */ | 9 | */ |
10 | 10 | ||
11 | #include <linux/kernel.h> | 11 | #include <linux/kernel.h> |
12 | #include <linux/mutex.h> | 12 | #include <linux/mutex.h> |
13 | #include <linux/sched.h> | 13 | #include <linux/sched.h> |
14 | #include <linux/notifier.h> | 14 | #include <linux/notifier.h> |
15 | #include <linux/pm_qos_params.h> | 15 | #include <linux/pm_qos_params.h> |
16 | #include <linux/cpu.h> | 16 | #include <linux/cpu.h> |
17 | #include <linux/cpuidle.h> | 17 | #include <linux/cpuidle.h> |
18 | #include <linux/ktime.h> | 18 | #include <linux/ktime.h> |
19 | 19 | ||
20 | #include "cpuidle.h" | 20 | #include "cpuidle.h" |
21 | 21 | ||
22 | DEFINE_PER_CPU(struct cpuidle_device *, cpuidle_devices); | 22 | DEFINE_PER_CPU(struct cpuidle_device *, cpuidle_devices); |
23 | 23 | ||
24 | DEFINE_MUTEX(cpuidle_lock); | 24 | DEFINE_MUTEX(cpuidle_lock); |
25 | LIST_HEAD(cpuidle_detected_devices); | 25 | LIST_HEAD(cpuidle_detected_devices); |
26 | static void (*pm_idle_old)(void); | 26 | static void (*pm_idle_old)(void); |
27 | 27 | ||
28 | static int enabled_devices; | 28 | static int enabled_devices; |
29 | 29 | ||
30 | /** | 30 | /** |
31 | * cpuidle_idle_call - the main idle loop | 31 | * cpuidle_idle_call - the main idle loop |
32 | * | 32 | * |
33 | * NOTE: no locks or semaphores should be used here | 33 | * NOTE: no locks or semaphores should be used here |
34 | */ | 34 | */ |
35 | static void cpuidle_idle_call(void) | 35 | static void cpuidle_idle_call(void) |
36 | { | 36 | { |
37 | struct cpuidle_device *dev = __get_cpu_var(cpuidle_devices); | 37 | struct cpuidle_device *dev = __get_cpu_var(cpuidle_devices); |
38 | struct cpuidle_state *target_state; | 38 | struct cpuidle_state *target_state; |
39 | int next_state; | 39 | int next_state; |
40 | 40 | ||
41 | /* check if the device is ready */ | 41 | /* check if the device is ready */ |
42 | if (!dev || !dev->enabled) { | 42 | if (!dev || !dev->enabled) { |
43 | if (pm_idle_old) | 43 | if (pm_idle_old) |
44 | pm_idle_old(); | 44 | pm_idle_old(); |
45 | else | 45 | else |
46 | local_irq_enable(); | 46 | local_irq_enable(); |
47 | return; | 47 | return; |
48 | } | 48 | } |
49 | 49 | ||
50 | /* ask the governor for the next state */ | 50 | /* ask the governor for the next state */ |
51 | next_state = cpuidle_curr_governor->select(dev); | 51 | next_state = cpuidle_curr_governor->select(dev); |
52 | if (need_resched()) | 52 | if (need_resched()) |
53 | return; | 53 | return; |
54 | target_state = &dev->states[next_state]; | 54 | target_state = &dev->states[next_state]; |
55 | 55 | ||
56 | /* enter the state and update stats */ | 56 | /* enter the state and update stats */ |
57 | dev->last_residency = target_state->enter(dev, target_state); | 57 | dev->last_residency = target_state->enter(dev, target_state); |
58 | dev->last_state = target_state; | 58 | dev->last_state = target_state; |
59 | target_state->time += dev->last_residency; | 59 | target_state->time += dev->last_residency; |
60 | target_state->usage++; | 60 | target_state->usage++; |
61 | 61 | ||
62 | /* give the governor an opportunity to reflect on the outcome */ | 62 | /* give the governor an opportunity to reflect on the outcome */ |
63 | if (cpuidle_curr_governor->reflect) | 63 | if (cpuidle_curr_governor->reflect) |
64 | cpuidle_curr_governor->reflect(dev); | 64 | cpuidle_curr_governor->reflect(dev); |
65 | } | 65 | } |
66 | 66 | ||
67 | /** | 67 | /** |
68 | * cpuidle_install_idle_handler - installs the cpuidle idle loop handler | 68 | * cpuidle_install_idle_handler - installs the cpuidle idle loop handler |
69 | */ | 69 | */ |
70 | void cpuidle_install_idle_handler(void) | 70 | void cpuidle_install_idle_handler(void) |
71 | { | 71 | { |
72 | if (enabled_devices && (pm_idle != cpuidle_idle_call)) { | 72 | if (enabled_devices && (pm_idle != cpuidle_idle_call)) { |
73 | /* Make sure all changes finished before we switch to new idle */ | 73 | /* Make sure all changes finished before we switch to new idle */ |
74 | smp_wmb(); | 74 | smp_wmb(); |
75 | pm_idle = cpuidle_idle_call; | 75 | pm_idle = cpuidle_idle_call; |
76 | } | 76 | } |
77 | } | 77 | } |
78 | 78 | ||
79 | /** | 79 | /** |
80 | * cpuidle_uninstall_idle_handler - uninstalls the cpuidle idle loop handler | 80 | * cpuidle_uninstall_idle_handler - uninstalls the cpuidle idle loop handler |
81 | */ | 81 | */ |
82 | void cpuidle_uninstall_idle_handler(void) | 82 | void cpuidle_uninstall_idle_handler(void) |
83 | { | 83 | { |
84 | if (enabled_devices && (pm_idle != pm_idle_old)) { | 84 | if (enabled_devices && (pm_idle != pm_idle_old)) { |
85 | pm_idle = pm_idle_old; | 85 | pm_idle = pm_idle_old; |
86 | cpuidle_kick_cpus(); | 86 | cpu_idle_wait(); |
87 | } | 87 | } |
88 | } | 88 | } |
89 | 89 | ||
90 | /** | 90 | /** |
91 | * cpuidle_pause_and_lock - temporarily disables CPUIDLE | 91 | * cpuidle_pause_and_lock - temporarily disables CPUIDLE |
92 | */ | 92 | */ |
93 | void cpuidle_pause_and_lock(void) | 93 | void cpuidle_pause_and_lock(void) |
94 | { | 94 | { |
95 | mutex_lock(&cpuidle_lock); | 95 | mutex_lock(&cpuidle_lock); |
96 | cpuidle_uninstall_idle_handler(); | 96 | cpuidle_uninstall_idle_handler(); |
97 | } | 97 | } |
98 | 98 | ||
99 | EXPORT_SYMBOL_GPL(cpuidle_pause_and_lock); | 99 | EXPORT_SYMBOL_GPL(cpuidle_pause_and_lock); |
100 | 100 | ||
101 | /** | 101 | /** |
102 | * cpuidle_resume_and_unlock - resumes CPUIDLE operation | 102 | * cpuidle_resume_and_unlock - resumes CPUIDLE operation |
103 | */ | 103 | */ |
104 | void cpuidle_resume_and_unlock(void) | 104 | void cpuidle_resume_and_unlock(void) |
105 | { | 105 | { |
106 | cpuidle_install_idle_handler(); | 106 | cpuidle_install_idle_handler(); |
107 | mutex_unlock(&cpuidle_lock); | 107 | mutex_unlock(&cpuidle_lock); |
108 | } | 108 | } |
109 | 109 | ||
110 | EXPORT_SYMBOL_GPL(cpuidle_resume_and_unlock); | 110 | EXPORT_SYMBOL_GPL(cpuidle_resume_and_unlock); |
111 | 111 | ||
112 | /** | 112 | /** |
113 | * cpuidle_enable_device - enables idle PM for a CPU | 113 | * cpuidle_enable_device - enables idle PM for a CPU |
114 | * @dev: the CPU | 114 | * @dev: the CPU |
115 | * | 115 | * |
116 | * This function must be called between cpuidle_pause_and_lock and | 116 | * This function must be called between cpuidle_pause_and_lock and |
117 | * cpuidle_resume_and_unlock when used externally. | 117 | * cpuidle_resume_and_unlock when used externally. |
118 | */ | 118 | */ |
119 | int cpuidle_enable_device(struct cpuidle_device *dev) | 119 | int cpuidle_enable_device(struct cpuidle_device *dev) |
120 | { | 120 | { |
121 | int ret, i; | 121 | int ret, i; |
122 | 122 | ||
123 | if (dev->enabled) | 123 | if (dev->enabled) |
124 | return 0; | 124 | return 0; |
125 | if (!cpuidle_curr_driver || !cpuidle_curr_governor) | 125 | if (!cpuidle_curr_driver || !cpuidle_curr_governor) |
126 | return -EIO; | 126 | return -EIO; |
127 | if (!dev->state_count) | 127 | if (!dev->state_count) |
128 | return -EINVAL; | 128 | return -EINVAL; |
129 | 129 | ||
130 | if ((ret = cpuidle_add_state_sysfs(dev))) | 130 | if ((ret = cpuidle_add_state_sysfs(dev))) |
131 | return ret; | 131 | return ret; |
132 | 132 | ||
133 | if (cpuidle_curr_governor->enable && | 133 | if (cpuidle_curr_governor->enable && |
134 | (ret = cpuidle_curr_governor->enable(dev))) | 134 | (ret = cpuidle_curr_governor->enable(dev))) |
135 | goto fail_sysfs; | 135 | goto fail_sysfs; |
136 | 136 | ||
137 | for (i = 0; i < dev->state_count; i++) { | 137 | for (i = 0; i < dev->state_count; i++) { |
138 | dev->states[i].usage = 0; | 138 | dev->states[i].usage = 0; |
139 | dev->states[i].time = 0; | 139 | dev->states[i].time = 0; |
140 | } | 140 | } |
141 | dev->last_residency = 0; | 141 | dev->last_residency = 0; |
142 | dev->last_state = NULL; | 142 | dev->last_state = NULL; |
143 | 143 | ||
144 | smp_wmb(); | 144 | smp_wmb(); |
145 | 145 | ||
146 | dev->enabled = 1; | 146 | dev->enabled = 1; |
147 | 147 | ||
148 | enabled_devices++; | 148 | enabled_devices++; |
149 | return 0; | 149 | return 0; |
150 | 150 | ||
151 | fail_sysfs: | 151 | fail_sysfs: |
152 | cpuidle_remove_state_sysfs(dev); | 152 | cpuidle_remove_state_sysfs(dev); |
153 | 153 | ||
154 | return ret; | 154 | return ret; |
155 | } | 155 | } |
156 | 156 | ||
157 | EXPORT_SYMBOL_GPL(cpuidle_enable_device); | 157 | EXPORT_SYMBOL_GPL(cpuidle_enable_device); |
158 | 158 | ||
159 | /** | 159 | /** |
160 | * cpuidle_disable_device - disables idle PM for a CPU | 160 | * cpuidle_disable_device - disables idle PM for a CPU |
161 | * @dev: the CPU | 161 | * @dev: the CPU |
162 | * | 162 | * |
163 | * This function must be called between cpuidle_pause_and_lock and | 163 | * This function must be called between cpuidle_pause_and_lock and |
164 | * cpuidle_resume_and_unlock when used externally. | 164 | * cpuidle_resume_and_unlock when used externally. |
165 | */ | 165 | */ |
166 | void cpuidle_disable_device(struct cpuidle_device *dev) | 166 | void cpuidle_disable_device(struct cpuidle_device *dev) |
167 | { | 167 | { |
168 | if (!dev->enabled) | 168 | if (!dev->enabled) |
169 | return; | 169 | return; |
170 | if (!cpuidle_curr_driver || !cpuidle_curr_governor) | 170 | if (!cpuidle_curr_driver || !cpuidle_curr_governor) |
171 | return; | 171 | return; |
172 | 172 | ||
173 | dev->enabled = 0; | 173 | dev->enabled = 0; |
174 | 174 | ||
175 | if (cpuidle_curr_governor->disable) | 175 | if (cpuidle_curr_governor->disable) |
176 | cpuidle_curr_governor->disable(dev); | 176 | cpuidle_curr_governor->disable(dev); |
177 | 177 | ||
178 | cpuidle_remove_state_sysfs(dev); | 178 | cpuidle_remove_state_sysfs(dev); |
179 | enabled_devices--; | 179 | enabled_devices--; |
180 | } | 180 | } |
181 | 181 | ||
182 | EXPORT_SYMBOL_GPL(cpuidle_disable_device); | 182 | EXPORT_SYMBOL_GPL(cpuidle_disable_device); |
183 | 183 | ||
184 | #ifdef CONFIG_ARCH_HAS_CPU_RELAX | 184 | #ifdef CONFIG_ARCH_HAS_CPU_RELAX |
185 | static int poll_idle(struct cpuidle_device *dev, struct cpuidle_state *st) | 185 | static int poll_idle(struct cpuidle_device *dev, struct cpuidle_state *st) |
186 | { | 186 | { |
187 | ktime_t t1, t2; | 187 | ktime_t t1, t2; |
188 | s64 diff; | 188 | s64 diff; |
189 | int ret; | 189 | int ret; |
190 | 190 | ||
191 | t1 = ktime_get(); | 191 | t1 = ktime_get(); |
192 | local_irq_enable(); | 192 | local_irq_enable(); |
193 | while (!need_resched()) | 193 | while (!need_resched()) |
194 | cpu_relax(); | 194 | cpu_relax(); |
195 | 195 | ||
196 | t2 = ktime_get(); | 196 | t2 = ktime_get(); |
197 | diff = ktime_to_us(ktime_sub(t2, t1)); | 197 | diff = ktime_to_us(ktime_sub(t2, t1)); |
198 | if (diff > INT_MAX) | 198 | if (diff > INT_MAX) |
199 | diff = INT_MAX; | 199 | diff = INT_MAX; |
200 | 200 | ||
201 | ret = (int) diff; | 201 | ret = (int) diff; |
202 | return ret; | 202 | return ret; |
203 | } | 203 | } |
204 | 204 | ||
205 | static void poll_idle_init(struct cpuidle_device *dev) | 205 | static void poll_idle_init(struct cpuidle_device *dev) |
206 | { | 206 | { |
207 | struct cpuidle_state *state = &dev->states[0]; | 207 | struct cpuidle_state *state = &dev->states[0]; |
208 | 208 | ||
209 | cpuidle_set_statedata(state, NULL); | 209 | cpuidle_set_statedata(state, NULL); |
210 | 210 | ||
211 | snprintf(state->name, CPUIDLE_NAME_LEN, "C0 (poll idle)"); | 211 | snprintf(state->name, CPUIDLE_NAME_LEN, "C0 (poll idle)"); |
212 | state->exit_latency = 0; | 212 | state->exit_latency = 0; |
213 | state->target_residency = 0; | 213 | state->target_residency = 0; |
214 | state->power_usage = -1; | 214 | state->power_usage = -1; |
215 | state->flags = CPUIDLE_FLAG_POLL | CPUIDLE_FLAG_TIME_VALID; | 215 | state->flags = CPUIDLE_FLAG_POLL | CPUIDLE_FLAG_TIME_VALID; |
216 | state->enter = poll_idle; | 216 | state->enter = poll_idle; |
217 | } | 217 | } |
218 | #else | 218 | #else |
219 | static void poll_idle_init(struct cpuidle_device *dev) {} | 219 | static void poll_idle_init(struct cpuidle_device *dev) {} |
220 | #endif /* CONFIG_ARCH_HAS_CPU_RELAX */ | 220 | #endif /* CONFIG_ARCH_HAS_CPU_RELAX */ |
221 | 221 | ||
222 | /** | 222 | /** |
223 | * cpuidle_register_device - registers a CPU's idle PM feature | 223 | * cpuidle_register_device - registers a CPU's idle PM feature |
224 | * @dev: the cpu | 224 | * @dev: the cpu |
225 | */ | 225 | */ |
226 | int cpuidle_register_device(struct cpuidle_device *dev) | 226 | int cpuidle_register_device(struct cpuidle_device *dev) |
227 | { | 227 | { |
228 | int ret; | 228 | int ret; |
229 | struct sys_device *sys_dev = get_cpu_sysdev((unsigned long)dev->cpu); | 229 | struct sys_device *sys_dev = get_cpu_sysdev((unsigned long)dev->cpu); |
230 | 230 | ||
231 | if (!sys_dev) | 231 | if (!sys_dev) |
232 | return -EINVAL; | 232 | return -EINVAL; |
233 | if (!try_module_get(cpuidle_curr_driver->owner)) | 233 | if (!try_module_get(cpuidle_curr_driver->owner)) |
234 | return -EINVAL; | 234 | return -EINVAL; |
235 | 235 | ||
236 | init_completion(&dev->kobj_unregister); | 236 | init_completion(&dev->kobj_unregister); |
237 | 237 | ||
238 | mutex_lock(&cpuidle_lock); | 238 | mutex_lock(&cpuidle_lock); |
239 | 239 | ||
240 | poll_idle_init(dev); | 240 | poll_idle_init(dev); |
241 | 241 | ||
242 | per_cpu(cpuidle_devices, dev->cpu) = dev; | 242 | per_cpu(cpuidle_devices, dev->cpu) = dev; |
243 | list_add(&dev->device_list, &cpuidle_detected_devices); | 243 | list_add(&dev->device_list, &cpuidle_detected_devices); |
244 | if ((ret = cpuidle_add_sysfs(sys_dev))) { | 244 | if ((ret = cpuidle_add_sysfs(sys_dev))) { |
245 | mutex_unlock(&cpuidle_lock); | 245 | mutex_unlock(&cpuidle_lock); |
246 | module_put(cpuidle_curr_driver->owner); | 246 | module_put(cpuidle_curr_driver->owner); |
247 | return ret; | 247 | return ret; |
248 | } | 248 | } |
249 | 249 | ||
250 | cpuidle_enable_device(dev); | 250 | cpuidle_enable_device(dev); |
251 | cpuidle_install_idle_handler(); | 251 | cpuidle_install_idle_handler(); |
252 | 252 | ||
253 | mutex_unlock(&cpuidle_lock); | 253 | mutex_unlock(&cpuidle_lock); |
254 | 254 | ||
255 | return 0; | 255 | return 0; |
256 | 256 | ||
257 | } | 257 | } |
258 | 258 | ||
259 | EXPORT_SYMBOL_GPL(cpuidle_register_device); | 259 | EXPORT_SYMBOL_GPL(cpuidle_register_device); |
260 | 260 | ||
261 | /** | 261 | /** |
262 | * cpuidle_unregister_device - unregisters a CPU's idle PM feature | 262 | * cpuidle_unregister_device - unregisters a CPU's idle PM feature |
263 | * @dev: the cpu | 263 | * @dev: the cpu |
264 | */ | 264 | */ |
265 | void cpuidle_unregister_device(struct cpuidle_device *dev) | 265 | void cpuidle_unregister_device(struct cpuidle_device *dev) |
266 | { | 266 | { |
267 | struct sys_device *sys_dev = get_cpu_sysdev((unsigned long)dev->cpu); | 267 | struct sys_device *sys_dev = get_cpu_sysdev((unsigned long)dev->cpu); |
268 | 268 | ||
269 | cpuidle_pause_and_lock(); | 269 | cpuidle_pause_and_lock(); |
270 | 270 | ||
271 | cpuidle_disable_device(dev); | 271 | cpuidle_disable_device(dev); |
272 | 272 | ||
273 | cpuidle_remove_sysfs(sys_dev); | 273 | cpuidle_remove_sysfs(sys_dev); |
274 | list_del(&dev->device_list); | 274 | list_del(&dev->device_list); |
275 | wait_for_completion(&dev->kobj_unregister); | 275 | wait_for_completion(&dev->kobj_unregister); |
276 | per_cpu(cpuidle_devices, dev->cpu) = NULL; | 276 | per_cpu(cpuidle_devices, dev->cpu) = NULL; |
277 | 277 | ||
278 | cpuidle_resume_and_unlock(); | 278 | cpuidle_resume_and_unlock(); |
279 | 279 | ||
280 | module_put(cpuidle_curr_driver->owner); | 280 | module_put(cpuidle_curr_driver->owner); |
281 | } | 281 | } |
282 | 282 | ||
283 | EXPORT_SYMBOL_GPL(cpuidle_unregister_device); | 283 | EXPORT_SYMBOL_GPL(cpuidle_unregister_device); |
284 | 284 | ||
285 | #ifdef CONFIG_SMP | 285 | #ifdef CONFIG_SMP |
286 | 286 | ||
287 | static void smp_callback(void *v) | 287 | static void smp_callback(void *v) |
288 | { | 288 | { |
289 | /* we already woke the CPU up, nothing more to do */ | 289 | /* we already woke the CPU up, nothing more to do */ |
290 | } | 290 | } |
291 | 291 | ||
292 | /* | 292 | /* |
293 | * This function gets called when a part of the kernel has a new latency | 293 | * This function gets called when a part of the kernel has a new latency |
294 | * requirement. This means we need to get all processors out of their C-state, | 294 | * requirement. This means we need to get all processors out of their C-state, |
295 | * and then recalculate a new suitable C-state. Just do a cross-cpu IPI; that | 295 | * and then recalculate a new suitable C-state. Just do a cross-cpu IPI; that |
296 | * wakes them all right up. | 296 | * wakes them all right up. |
297 | */ | 297 | */ |
298 | static int cpuidle_latency_notify(struct notifier_block *b, | 298 | static int cpuidle_latency_notify(struct notifier_block *b, |
299 | unsigned long l, void *v) | 299 | unsigned long l, void *v) |
300 | { | 300 | { |
301 | smp_call_function(smp_callback, NULL, 0, 1); | 301 | smp_call_function(smp_callback, NULL, 0, 1); |
302 | return NOTIFY_OK; | 302 | return NOTIFY_OK; |
303 | } | 303 | } |
304 | 304 | ||
305 | static struct notifier_block cpuidle_latency_notifier = { | 305 | static struct notifier_block cpuidle_latency_notifier = { |
306 | .notifier_call = cpuidle_latency_notify, | 306 | .notifier_call = cpuidle_latency_notify, |
307 | }; | 307 | }; |
308 | 308 | ||
309 | static inline void latency_notifier_init(struct notifier_block *n) | 309 | static inline void latency_notifier_init(struct notifier_block *n) |
310 | { | 310 | { |
311 | pm_qos_add_notifier(PM_QOS_CPU_DMA_LATENCY, n); | 311 | pm_qos_add_notifier(PM_QOS_CPU_DMA_LATENCY, n); |
312 | } | 312 | } |
313 | 313 | ||
314 | #else /* CONFIG_SMP */ | 314 | #else /* CONFIG_SMP */ |
315 | 315 | ||
316 | #define latency_notifier_init(x) do { } while (0) | 316 | #define latency_notifier_init(x) do { } while (0) |
317 | 317 | ||
318 | #endif /* CONFIG_SMP */ | 318 | #endif /* CONFIG_SMP */ |
319 | 319 | ||
320 | /** | 320 | /** |
321 | * cpuidle_init - core initializer | 321 | * cpuidle_init - core initializer |
322 | */ | 322 | */ |
323 | static int __init cpuidle_init(void) | 323 | static int __init cpuidle_init(void) |
324 | { | 324 | { |
325 | int ret; | 325 | int ret; |
326 | 326 | ||
327 | pm_idle_old = pm_idle; | 327 | pm_idle_old = pm_idle; |
328 | 328 | ||
329 | ret = cpuidle_add_class_sysfs(&cpu_sysdev_class); | 329 | ret = cpuidle_add_class_sysfs(&cpu_sysdev_class); |
330 | if (ret) | 330 | if (ret) |
331 | return ret; | 331 | return ret; |
332 | 332 | ||
333 | latency_notifier_init(&cpuidle_latency_notifier); | 333 | latency_notifier_init(&cpuidle_latency_notifier); |
334 | 334 | ||
335 | return 0; | 335 | return 0; |
336 | } | 336 | } |
337 | 337 | ||
338 | core_initcall(cpuidle_init); | 338 | core_initcall(cpuidle_init); |
339 | 339 |
include/linux/cpuidle.h
1 | /* | 1 | /* |
2 | * cpuidle.h - a generic framework for CPU idle power management | 2 | * cpuidle.h - a generic framework for CPU idle power management |
3 | * | 3 | * |
4 | * (C) 2007 Venkatesh Pallipadi <venkatesh.pallipadi@intel.com> | 4 | * (C) 2007 Venkatesh Pallipadi <venkatesh.pallipadi@intel.com> |
5 | * Shaohua Li <shaohua.li@intel.com> | 5 | * Shaohua Li <shaohua.li@intel.com> |
6 | * Adam Belay <abelay@novell.com> | 6 | * Adam Belay <abelay@novell.com> |
7 | * | 7 | * |
8 | * This code is licenced under the GPL. | 8 | * This code is licenced under the GPL. |
9 | */ | 9 | */ |
10 | 10 | ||
11 | #ifndef _LINUX_CPUIDLE_H | 11 | #ifndef _LINUX_CPUIDLE_H |
12 | #define _LINUX_CPUIDLE_H | 12 | #define _LINUX_CPUIDLE_H |
13 | 13 | ||
14 | #include <linux/percpu.h> | 14 | #include <linux/percpu.h> |
15 | #include <linux/list.h> | 15 | #include <linux/list.h> |
16 | #include <linux/module.h> | 16 | #include <linux/module.h> |
17 | #include <linux/kobject.h> | 17 | #include <linux/kobject.h> |
18 | #include <linux/completion.h> | 18 | #include <linux/completion.h> |
19 | 19 | ||
20 | #define CPUIDLE_STATE_MAX 8 | 20 | #define CPUIDLE_STATE_MAX 8 |
21 | #define CPUIDLE_NAME_LEN 16 | 21 | #define CPUIDLE_NAME_LEN 16 |
22 | 22 | ||
23 | struct cpuidle_device; | 23 | struct cpuidle_device; |
24 | 24 | ||
25 | 25 | ||
26 | /**************************** | 26 | /**************************** |
27 | * CPUIDLE DEVICE INTERFACE * | 27 | * CPUIDLE DEVICE INTERFACE * |
28 | ****************************/ | 28 | ****************************/ |
29 | 29 | ||
30 | struct cpuidle_state { | 30 | struct cpuidle_state { |
31 | char name[CPUIDLE_NAME_LEN]; | 31 | char name[CPUIDLE_NAME_LEN]; |
32 | void *driver_data; | 32 | void *driver_data; |
33 | 33 | ||
34 | unsigned int flags; | 34 | unsigned int flags; |
35 | unsigned int exit_latency; /* in US */ | 35 | unsigned int exit_latency; /* in US */ |
36 | unsigned int power_usage; /* in mW */ | 36 | unsigned int power_usage; /* in mW */ |
37 | unsigned int target_residency; /* in US */ | 37 | unsigned int target_residency; /* in US */ |
38 | 38 | ||
39 | unsigned int usage; | 39 | unsigned int usage; |
40 | unsigned int time; /* in US */ | 40 | unsigned int time; /* in US */ |
41 | 41 | ||
42 | int (*enter) (struct cpuidle_device *dev, | 42 | int (*enter) (struct cpuidle_device *dev, |
43 | struct cpuidle_state *state); | 43 | struct cpuidle_state *state); |
44 | }; | 44 | }; |
45 | 45 | ||
46 | /* Idle State Flags */ | 46 | /* Idle State Flags */ |
47 | #define CPUIDLE_FLAG_TIME_VALID (0x01) /* is residency time measurable? */ | 47 | #define CPUIDLE_FLAG_TIME_VALID (0x01) /* is residency time measurable? */ |
48 | #define CPUIDLE_FLAG_CHECK_BM (0x02) /* BM activity will exit state */ | 48 | #define CPUIDLE_FLAG_CHECK_BM (0x02) /* BM activity will exit state */ |
49 | #define CPUIDLE_FLAG_POLL (0x10) /* no latency, no savings */ | 49 | #define CPUIDLE_FLAG_POLL (0x10) /* no latency, no savings */ |
50 | #define CPUIDLE_FLAG_SHALLOW (0x20) /* low latency, minimal savings */ | 50 | #define CPUIDLE_FLAG_SHALLOW (0x20) /* low latency, minimal savings */ |
51 | #define CPUIDLE_FLAG_BALANCED (0x40) /* medium latency, moderate savings */ | 51 | #define CPUIDLE_FLAG_BALANCED (0x40) /* medium latency, moderate savings */ |
52 | #define CPUIDLE_FLAG_DEEP (0x80) /* high latency, large savings */ | 52 | #define CPUIDLE_FLAG_DEEP (0x80) /* high latency, large savings */ |
53 | 53 | ||
54 | #define CPUIDLE_DRIVER_FLAGS_MASK (0xFFFF0000) | 54 | #define CPUIDLE_DRIVER_FLAGS_MASK (0xFFFF0000) |
55 | 55 | ||
56 | /** | 56 | /** |
57 | * cpuidle_get_statedata - retrieves private driver state data | 57 | * cpuidle_get_statedata - retrieves private driver state data |
58 | * @state: the state | 58 | * @state: the state |
59 | */ | 59 | */ |
60 | static inline void * cpuidle_get_statedata(struct cpuidle_state *state) | 60 | static inline void * cpuidle_get_statedata(struct cpuidle_state *state) |
61 | { | 61 | { |
62 | return state->driver_data; | 62 | return state->driver_data; |
63 | } | 63 | } |
64 | 64 | ||
65 | /** | 65 | /** |
66 | * cpuidle_set_statedata - stores private driver state data | 66 | * cpuidle_set_statedata - stores private driver state data |
67 | * @state: the state | 67 | * @state: the state |
68 | * @data: the private data | 68 | * @data: the private data |
69 | */ | 69 | */ |
70 | static inline void | 70 | static inline void |
71 | cpuidle_set_statedata(struct cpuidle_state *state, void *data) | 71 | cpuidle_set_statedata(struct cpuidle_state *state, void *data) |
72 | { | 72 | { |
73 | state->driver_data = data; | 73 | state->driver_data = data; |
74 | } | 74 | } |
75 | 75 | ||
76 | #ifdef CONFIG_SMP | ||
77 | #ifdef CONFIG_ARCH_HAS_CPU_IDLE_WAIT | ||
78 | static inline void cpuidle_kick_cpus(void) | ||
79 | { | ||
80 | cpu_idle_wait(); | ||
81 | } | ||
82 | #else /* !CONFIG_ARCH_HAS_CPU_IDLE_WAIT */ | ||
83 | #error "Arch needs cpu_idle_wait() equivalent here" | ||
84 | #endif /* !CONFIG_ARCH_HAS_CPU_IDLE_WAIT */ | ||
85 | #else /* !CONFIG_SMP */ | ||
86 | static inline void cpuidle_kick_cpus(void) {} | ||
87 | #endif /* !CONFIG_SMP */ | ||
88 | |||
89 | struct cpuidle_state_kobj { | 76 | struct cpuidle_state_kobj { |
90 | struct cpuidle_state *state; | 77 | struct cpuidle_state *state; |
91 | struct completion kobj_unregister; | 78 | struct completion kobj_unregister; |
92 | struct kobject kobj; | 79 | struct kobject kobj; |
93 | }; | 80 | }; |
94 | 81 | ||
95 | struct cpuidle_device { | 82 | struct cpuidle_device { |
96 | unsigned int enabled:1; | 83 | unsigned int enabled:1; |
97 | unsigned int cpu; | 84 | unsigned int cpu; |
98 | 85 | ||
99 | int last_residency; | 86 | int last_residency; |
100 | int state_count; | 87 | int state_count; |
101 | struct cpuidle_state states[CPUIDLE_STATE_MAX]; | 88 | struct cpuidle_state states[CPUIDLE_STATE_MAX]; |
102 | struct cpuidle_state_kobj *kobjs[CPUIDLE_STATE_MAX]; | 89 | struct cpuidle_state_kobj *kobjs[CPUIDLE_STATE_MAX]; |
103 | struct cpuidle_state *last_state; | 90 | struct cpuidle_state *last_state; |
104 | 91 | ||
105 | struct list_head device_list; | 92 | struct list_head device_list; |
106 | struct kobject kobj; | 93 | struct kobject kobj; |
107 | struct completion kobj_unregister; | 94 | struct completion kobj_unregister; |
108 | void *governor_data; | 95 | void *governor_data; |
109 | struct cpuidle_state *safe_state; | 96 | struct cpuidle_state *safe_state; |
110 | }; | 97 | }; |
111 | 98 | ||
112 | DECLARE_PER_CPU(struct cpuidle_device *, cpuidle_devices); | 99 | DECLARE_PER_CPU(struct cpuidle_device *, cpuidle_devices); |
113 | 100 | ||
114 | /** | 101 | /** |
115 | * cpuidle_get_last_residency - retrieves the last state's residency time | 102 | * cpuidle_get_last_residency - retrieves the last state's residency time |
116 | * @dev: the target CPU | 103 | * @dev: the target CPU |
117 | * | 104 | * |
118 | * NOTE: this value is invalid if CPUIDLE_FLAG_TIME_VALID isn't set | 105 | * NOTE: this value is invalid if CPUIDLE_FLAG_TIME_VALID isn't set |
119 | */ | 106 | */ |
120 | static inline int cpuidle_get_last_residency(struct cpuidle_device *dev) | 107 | static inline int cpuidle_get_last_residency(struct cpuidle_device *dev) |
121 | { | 108 | { |
122 | return dev->last_residency; | 109 | return dev->last_residency; |
123 | } | 110 | } |
124 | 111 | ||
125 | 112 | ||
126 | /**************************** | 113 | /**************************** |
127 | * CPUIDLE DRIVER INTERFACE * | 114 | * CPUIDLE DRIVER INTERFACE * |
128 | ****************************/ | 115 | ****************************/ |
129 | 116 | ||
130 | struct cpuidle_driver { | 117 | struct cpuidle_driver { |
131 | char name[CPUIDLE_NAME_LEN]; | 118 | char name[CPUIDLE_NAME_LEN]; |
132 | struct module *owner; | 119 | struct module *owner; |
133 | }; | 120 | }; |
134 | 121 | ||
135 | #ifdef CONFIG_CPU_IDLE | 122 | #ifdef CONFIG_CPU_IDLE |
136 | 123 | ||
137 | extern int cpuidle_register_driver(struct cpuidle_driver *drv); | 124 | extern int cpuidle_register_driver(struct cpuidle_driver *drv); |
138 | extern void cpuidle_unregister_driver(struct cpuidle_driver *drv); | 125 | extern void cpuidle_unregister_driver(struct cpuidle_driver *drv); |
139 | extern int cpuidle_register_device(struct cpuidle_device *dev); | 126 | extern int cpuidle_register_device(struct cpuidle_device *dev); |
140 | extern void cpuidle_unregister_device(struct cpuidle_device *dev); | 127 | extern void cpuidle_unregister_device(struct cpuidle_device *dev); |
141 | 128 | ||
142 | extern void cpuidle_pause_and_lock(void); | 129 | extern void cpuidle_pause_and_lock(void); |
143 | extern void cpuidle_resume_and_unlock(void); | 130 | extern void cpuidle_resume_and_unlock(void); |
144 | extern int cpuidle_enable_device(struct cpuidle_device *dev); | 131 | extern int cpuidle_enable_device(struct cpuidle_device *dev); |
145 | extern void cpuidle_disable_device(struct cpuidle_device *dev); | 132 | extern void cpuidle_disable_device(struct cpuidle_device *dev); |
146 | 133 | ||
147 | #else | 134 | #else |
148 | 135 | ||
149 | static inline int cpuidle_register_driver(struct cpuidle_driver *drv) | 136 | static inline int cpuidle_register_driver(struct cpuidle_driver *drv) |
150 | {return 0;} | 137 | {return 0;} |
151 | static inline void cpuidle_unregister_driver(struct cpuidle_driver *drv) { } | 138 | static inline void cpuidle_unregister_driver(struct cpuidle_driver *drv) { } |
152 | static inline int cpuidle_register_device(struct cpuidle_device *dev) | 139 | static inline int cpuidle_register_device(struct cpuidle_device *dev) |
153 | {return 0;} | 140 | {return 0;} |
154 | static inline void cpuidle_unregister_device(struct cpuidle_device *dev) { } | 141 | static inline void cpuidle_unregister_device(struct cpuidle_device *dev) { } |
155 | 142 | ||
156 | static inline void cpuidle_pause_and_lock(void) { } | 143 | static inline void cpuidle_pause_and_lock(void) { } |
157 | static inline void cpuidle_resume_and_unlock(void) { } | 144 | static inline void cpuidle_resume_and_unlock(void) { } |
158 | static inline int cpuidle_enable_device(struct cpuidle_device *dev) | 145 | static inline int cpuidle_enable_device(struct cpuidle_device *dev) |
159 | {return 0;} | 146 | {return 0;} |
160 | static inline void cpuidle_disable_device(struct cpuidle_device *dev) { } | 147 | static inline void cpuidle_disable_device(struct cpuidle_device *dev) { } |
161 | 148 | ||
162 | #endif | 149 | #endif |
163 | 150 | ||
164 | /****************************** | 151 | /****************************** |
165 | * CPUIDLE GOVERNOR INTERFACE * | 152 | * CPUIDLE GOVERNOR INTERFACE * |
166 | ******************************/ | 153 | ******************************/ |
167 | 154 | ||
168 | struct cpuidle_governor { | 155 | struct cpuidle_governor { |
169 | char name[CPUIDLE_NAME_LEN]; | 156 | char name[CPUIDLE_NAME_LEN]; |
170 | struct list_head governor_list; | 157 | struct list_head governor_list; |
171 | unsigned int rating; | 158 | unsigned int rating; |
172 | 159 | ||
173 | int (*enable) (struct cpuidle_device *dev); | 160 | int (*enable) (struct cpuidle_device *dev); |
174 | void (*disable) (struct cpuidle_device *dev); | 161 | void (*disable) (struct cpuidle_device *dev); |
175 | 162 | ||
176 | int (*select) (struct cpuidle_device *dev); | 163 | int (*select) (struct cpuidle_device *dev); |
177 | void (*reflect) (struct cpuidle_device *dev); | 164 | void (*reflect) (struct cpuidle_device *dev); |
178 | 165 | ||
179 | struct module *owner; | 166 | struct module *owner; |
180 | }; | 167 | }; |
181 | 168 | ||
182 | #ifdef CONFIG_CPU_IDLE | 169 | #ifdef CONFIG_CPU_IDLE |
183 | 170 | ||
184 | extern int cpuidle_register_governor(struct cpuidle_governor *gov); | 171 | extern int cpuidle_register_governor(struct cpuidle_governor *gov); |
185 | extern void cpuidle_unregister_governor(struct cpuidle_governor *gov); | 172 | extern void cpuidle_unregister_governor(struct cpuidle_governor *gov); |
186 | 173 | ||
187 | #else | 174 | #else |
188 | 175 | ||
189 | static inline int cpuidle_register_governor(struct cpuidle_governor *gov) | 176 | static inline int cpuidle_register_governor(struct cpuidle_governor *gov) |
190 | {return 0;} | 177 | {return 0;} |
191 | static inline void cpuidle_unregister_governor(struct cpuidle_governor *gov) { } | 178 | static inline void cpuidle_unregister_governor(struct cpuidle_governor *gov) { } |
192 | 179 | ||
193 | #endif | 180 | #endif |
194 | 181 | ||
195 | #ifdef CONFIG_ARCH_HAS_CPU_RELAX | 182 | #ifdef CONFIG_ARCH_HAS_CPU_RELAX |
196 | #define CPUIDLE_DRIVER_STATE_START 1 | 183 | #define CPUIDLE_DRIVER_STATE_START 1 |
197 | #else | 184 | #else |
198 | #define CPUIDLE_DRIVER_STATE_START 0 | 185 | #define CPUIDLE_DRIVER_STATE_START 0 |
199 | #endif | 186 | #endif |
200 | 187 | ||
201 | #endif /* _LINUX_CPUIDLE_H */ | 188 | #endif /* _LINUX_CPUIDLE_H */ |
202 | 189 |