When _PPC changed dynamically the user_policy.max will not be updated, this prevent CPU run on the highest frequency. Signed-off-by: Joe Jin <joe.jin@xxxxxxxxxx> Cc: Rafael J. Wysocki <rjw@xxxxxxx> Cc: Viresh Kumar <viresh.kumar@xxxxxxxxxx> --- drivers/acpi/processor_perflib.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/drivers/acpi/processor_perflib.c b/drivers/acpi/processor_perflib.c index e854582..e01aa7d 100644 --- a/drivers/acpi/processor_perflib.c +++ b/drivers/acpi/processor_perflib.c @@ -180,6 +180,7 @@ static void acpi_processor_ppc_ost(acpi_handle handle, int status) int acpi_processor_ppc_has_changed(struct acpi_processor *pr, int event_flag) { int ret; + unsigned int saved = (unsigned int)pr->performance_platform_limit; if (ignore_ppc) { /* @@ -204,8 +205,22 @@ int acpi_processor_ppc_has_changed(struct acpi_processor *pr, int event_flag) } if (ret < 0) return (ret); - else + else { + unsigned int ppc = (unsigned int)pr->performance_platform_limit; + + if (saved != ppc) { + struct cpufreq_policy *policy; + + policy = cpufreq_cpu_get(pr->id); + if (likely(policy)) + policy->user_policy.max = + pr->performance->states[ppc]. + core_frequency * 1000; + cpufreq_cpu_put(policy); + } + return cpufreq_update_policy(pr->id); + } } int acpi_processor_get_bios_limit(int cpu, unsigned int *limit) -- 1.8.1.4 -- To unsubscribe from this list: send the line "unsubscribe cpufreq" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html