This was broken when the mwait stuff went in since it executes after the initial idle_setup() has already selected an idle routine and overrides it with default_idle. Signed-off-by: Venkatesh Pallipadi --- linux-2.6.8-rc2//arch/i386/kernel/process.c.org 2004-08-10 19:10:30.000000000 -0700 +++ linux-2.6.8-rc2//arch/i386/kernel/process.c 2004-08-11 16:10:12.000000000 -0700 @@ -218,18 +218,13 @@ void __init select_idle_routine(const st printk("monitor/mwait feature present.\n"); /* * Skip, if setup has overridden idle. - * Also, take care of system with asymmetric CPUs. - * Use, mwait_idle only if all cpus support it. - * If not, we fallback to default_idle() + * One CPU supports mwait => All CPUs supports mwait */ if (!pm_idle) { printk("using mwait in idle threads.\n"); pm_idle = mwait_idle; } - return; } - pm_idle = default_idle; - return; } static int __init idle_setup (char *str) --- linux-2.6.8-rc2//arch/x86_64/kernel/process.c.org 2004-08-10 19:18:48.000000000 -0700 +++ linux-2.6.8-rc2//arch/x86_64/kernel/process.c 2004-08-11 16:10:16.000000000 -0700 @@ -169,9 +169,7 @@ void __init select_idle_routine(const st if (cpu_has(c, X86_FEATURE_MWAIT)) { /* * Skip, if setup has overridden idle. - * Also, take care of system with asymmetric CPUs. - * Use, mwait_idle only if all cpus support it. - * If not, we fallback to default_idle() + * One CPU supports mwait => All CPUs supports mwait */ if (!pm_idle) { if (!printed) { @@ -180,10 +178,7 @@ void __init select_idle_routine(const st } pm_idle = mwait_idle; } - return; } - pm_idle = default_idle; - return; } static int __init idle_setup (char *str)