找了一圈google后, 有人使用acpi_osi="!Windows 2006" gets workaround, 尝试后无效.
打开cpufreq.debug=7后发现以下日志:
Jul 22 16:18:05 laptop kernel: cpufreq-core: setting new policy for CPU 0: 800000 - 2401000 kHz
Jul 22 16:18:05 laptop kernel: acpi-cpufreq: acpi_cpufreq_verify
Jul 22 16:18:05 laptop kernel: freq-table: request for verification of policy (800000 - 2401000 kHz) for cpu 0
Jul 22 16:18:05 laptop kernel: freq-table: verification lead to (800000 - 2401000 kHz) for cpu 0
Jul 22 16:18:05 laptop kernel: acpi-cpufreq: acpi_cpufreq_verify
Jul 22 16:18:05 laptop kernel: freq-table: request for verification of policy (800000 - 800000 kHz) for cpu 0
Jul 22 16:18:05 laptop kernel: freq-table: verification lead to (800000 - 800000 kHz) for cpu 0
Jul 22 16:18:05 laptop kernel: cpufreq-core: new min and max freqs are 800000 - 800000 kHz
追踪代码至: /usr/src/linux/drivers/cpufreq/cpufreq.c 有 static int __cpufreq_set_policy(struct cpufreq_policy *data, struct cpufreq_policy *policy) 函数
得知它会检查CPU温度来获得一个加权过的值和ACPI P-State的容忍值.
定位在此,写上
dprintk("after CPUFREQ_ADJUST, %u - %u kHz", policy->min, policy->max);
dprintk("after CPUFREQ_INCOMPATIBLE, %u - %u kHz", policy->min, policy->max);
出现
Jul 23 23:39:31 laptop kernel: cpufreq-core: after CPUFREQ_ADJUST, 800000 - 2401000 kHz
Jul 23 23:39:31 laptop kernel: cpufreq-core: after CPUFREQ_INCOMPATIBLE, 800000 - 800000 kHz
comment之,结束



