Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755863AbcCDCQF (ORCPT ); Thu, 3 Mar 2016 21:16:05 -0500 Received: from mail-lb0-f196.google.com ([209.85.217.196]:33259 "EHLO mail-lb0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750794AbcCDCQC (ORCPT ); Thu, 3 Mar 2016 21:16:02 -0500 MIME-Version: 1.0 In-Reply-To: <20160303060003.GJ2891@vireshk-i7> References: <2495375.dFbdlAZmA6@vostro.rjw.lan> <26020775.9hJG2SHiH2@vostro.rjw.lan> <20160303060003.GJ2891@vireshk-i7> Date: Fri, 4 Mar 2016 03:15:59 +0100 X-Google-Sender-Auth: 28lqEvd9_i7wpPwYaeWDx_vBghI Message-ID: Subject: Re: [PATCH 5/6] cpufreq: Support for fast frequency switching From: "Rafael J. Wysocki" To: Viresh Kumar Cc: "Rafael J. Wysocki" , Linux PM list , Juri Lelli , Steve Muckle , ACPI Devel Maling List , Linux Kernel Mailing List , Peter Zijlstra , Srinivas Pandruvada , Vincent Guittot , Michael Turquette Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2071 Lines: 52 On Thu, Mar 3, 2016 at 7:00 AM, Viresh Kumar wrote: > On 02-03-16, 03:12, Rafael J. Wysocki wrote: >> Index: linux-pm/drivers/cpufreq/cpufreq.c >> =================================================================== >> --- linux-pm.orig/drivers/cpufreq/cpufreq.c >> +++ linux-pm/drivers/cpufreq/cpufreq.c >> @@ -1772,6 +1772,39 @@ EXPORT_SYMBOL(cpufreq_unregister_notifie >> * GOVERNORS * >> *********************************************************************/ >> >> +/** >> + * cpufreq_driver_fast_switch - Carry out a fast CPU frequency switch. >> + * @policy: cpufreq policy to switch the frequency for. >> + * @target_freq: New frequency to set (may be approximate). >> + * @relation: Relation to use for frequency selection. >> + * >> + * Carry out a fast frequency switch from interrupt context. >> + * >> + * This function must not be called if policy->fast_switch_possible is unset. >> + * >> + * Governors calling this function must guarantee that it will never be invoked >> + * twice in parallel for the same policy and that it will never be called in >> + * parallel with either ->target() or ->target_index() for the same policy. >> + * >> + * If CPUFREQ_ENTRY_INVALID is returned by the driver's ->fast_switch() >> + * callback, the hardware configuration must be preserved. >> + */ >> +void cpufreq_driver_fast_switch(struct cpufreq_policy *policy, >> + unsigned int target_freq, unsigned int relation) >> +{ >> + unsigned int freq; >> + >> + if (target_freq == policy->cur) > > Maybe an unlikely() here ? > >> + return; >> + >> + freq = cpufreq_driver->fast_switch(policy, target_freq, relation); >> + if (freq != CPUFREQ_ENTRY_INVALID) { >> + policy->cur = freq; > > Hmm.. What will happen to the code relying on the cpufreq-notifiers > now ? It will have a problem. For that code it's like the CPU changing the frequency and not telling it (which is not unusual for that matter). Thanks, Rafael