• Len Brown's avatar
    sched/idle/x86: Restore mwait_idle() to fix boot hangs, to improve power... · 420d57e8
    Len Brown authored
    sched/idle/x86: Restore mwait_idle() to fix boot hangs, to improve power savings and to improve performance
    
    commit b253149b upstream.
    
    In Linux-3.9 we removed the mwait_idle() loop:
    
      69fb3676 ("x86 idle: remove mwait_idle() and "idle=mwait" cmdline param")
    
    The reasoning was that modern machines should be sufficiently
    happy during the boot process using the default_idle() HALT
    loop, until cpuidle loads and either acpi_idle or intel_idle
    invoke the newer MWAIT-with-hints idle loop.
    
    But two machines reported problems:
    
     1. Certain Core2-era machines support MWAIT-C1 and HALT only.
        MWAIT-C1 is preferred for optimal power and performance.
        But if they support just C1, cpuidle never loads and
        so they use the boot-time default idle loop forever.
    
     2. Some laptops will boot-hang if HALT is used,
        but will boot successfully if MWAIT is used.
        This appears to be a hidden assumption in BIOS SMI,
        that is presumably valid on the proprietary OS
        where the BIOS was validated.
    
           https://bugzilla.kernel.org/show_bug.cgi?id=60770
    
    So here we effectively revert the patch above, restoring
    the mwait_idle() loop.  However, we don't bother restoring
    the idle=mwait cmdline parameter, since it appears to add
    no value.
    
    Maintainer notes:
    
      For 3.9, simply revert 69fb3676
      for 3.10, patch -F3 applies, fuzz needed due to __cpuinit use in
      context For 3.11, 3.12, 3.13, this patch applies cleanly
    Tested-by: default avatarMike Galbraith <bitbucket@online.de>
    Signed-off-by: default avatarLen Brown <len.brown@intel.com>
    Acked-by: default avatarMike Galbraith <bitbucket@online.de>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Ian Malone <ibmalone@gmail.com>
    Cc: Josh Boyer <jwboyer@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Mike Galbraith <efault@gmx.de>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Link: http://lkml.kernel.org/r/345254a551eb5a6a866e048d7ab570fd2193aca4.1389763084.git.len.brown@intel.com
    [ Ported to recent kernels. ]
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    Signed-off-by: default avatarMike Galbraith <efault@gmx.de>
    [ luis: backported to 3.16: used Mike's backport to 3.10 and 3.14 ]
    Signed-off-by: default avatarLuis Henriques <luis.henriques@canonical.com>
    420d57e8
process.c 11.6 KB