From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joe Jin Subject: [PATCH] ACPI: update user_policy.max when _PPC updated Date: Wed, 05 Jun 2013 08:52:52 +0800 Message-ID: <51AE8BE4.8050409@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Return-path: Received: from aserp1040.oracle.com ([141.146.126.69]:39072 "EHLO aserp1040.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751307Ab3FEAxA (ORCPT ); Tue, 4 Jun 2013 20:53:00 -0400 Sender: linux-pm-owner@vger.kernel.org List-Id: linux-pm@vger.kernel.org To: "Rafael J. Wysocki" , Viresh Kumar Cc: Neil Gu , cpufreq@vger.kernel.org, linux-pm@vger.kernel.org, "linux-kernel@vger.kernel.org" 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 Cc: Rafael J. Wysocki Cc: Viresh Kumar --- 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