aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/process.c
diff options
context:
space:
mode:
authorZhao Yakui <yakui.zhao@intel.com>2008-06-24 05:58:53 -0400
committerAndi Kleen <andi@basil.nowhere.org>2008-07-16 17:27:05 -0400
commitc1e3b377ad48febba6f91b8ae42c44ee4d4ab45e (patch)
tree7893e4226f52c4001150066f544415c1b17741f5 /arch/x86/kernel/process.c
parent5b53496a5ad79e91052f72761a7c5516b069bc99 (diff)
ACPI: Create "idle=halt" bootparam
"idle=halt" limits the idle loop to using the halt instruction. No MWAIT, no IO accesses, no C-states deeper than C1. If something is broken in the idle code, "idle=halt" is a less severe workaround than "idle=poll" which disables all power savings. Signed-off-by: Zhao Yakui <yakui.zhao@intel.com> Signed-off-by: Len Brown <len.brown@intel.com> Signed-off-by: Andi Kleen <ak@linux.intel.com>
Diffstat (limited to 'arch/x86/kernel/process.c')
-rw-r--r--arch/x86/kernel/process.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c
index 7dceea947232..7fc729498760 100644
--- a/arch/x86/kernel/process.c
+++ b/arch/x86/kernel/process.c
@@ -7,6 +7,10 @@
7#include <linux/module.h> 7#include <linux/module.h>
8#include <linux/pm.h> 8#include <linux/pm.h>
9#include <linux/clockchips.h> 9#include <linux/clockchips.h>
10#include <asm/system.h>
11
12unsigned long idle_halt;
13EXPORT_SYMBOL(idle_halt);
10 14
11struct kmem_cache *task_xstate_cachep; 15struct kmem_cache *task_xstate_cachep;
12 16
@@ -325,7 +329,18 @@ static int __init idle_setup(char *str)
325 pm_idle = poll_idle; 329 pm_idle = poll_idle;
326 } else if (!strcmp(str, "mwait")) 330 } else if (!strcmp(str, "mwait"))
327 force_mwait = 1; 331 force_mwait = 1;
328 else 332 else if (!strcmp(str, "halt")) {
333 /*
334 * When the boot option of idle=halt is added, halt is
335 * forced to be used for CPU idle. In such case CPU C2/C3
336 * won't be used again.
337 * To continue to load the CPU idle driver, don't touch
338 * the boot_option_idle_override.
339 */
340 pm_idle = default_idle;
341 idle_halt = 1;
342 return 0;
343 } else
329 return -1; 344 return -1;
330 345
331 boot_option_idle_override = 1; 346 boot_option_idle_override = 1;