]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - arch/x86/kernel/process_32.c
x86: use the correct cpuid method to detect MWAIT support for C states
[karo-tx-linux.git] / arch / x86 / kernel / process_32.c
index 69a69c3f43bb4940c6fa9485b0015debb68f432a..9f45a51af968be31679923ea94bf83a9e0c60e88 100644 (file)
@@ -285,9 +285,17 @@ static void mwait_idle(void)
        mwait_idle_with_hints(0, 0);
 }
 
+static int mwait_usable(const struct cpuinfo_x86 *c)
+{
+       if (force_mwait)
+               return 1;
+       /* Any C1 states supported? */
+       return c->cpuid_level >= 5 && ((cpuid_edx(5) >> 4) & 0xf) > 0;
+}
+
 void __cpuinit select_idle_routine(const struct cpuinfo_x86 *c)
 {
-       if (cpu_has(c, X86_FEATURE_MWAIT)) {
+       if (cpu_has(c, X86_FEATURE_MWAIT) && mwait_usable(c)) {
                printk("monitor/mwait feature present.\n");
                /*
                 * Skip, if setup has overridden idle.