Re: [PATCH 5/6] cpufreq: Support for fast frequency switching
From: "Rafael J. Wysocki" <rafael@kernel.org>
Date: 2016-03-04 02:16:05
Also in:
linux-acpi, lkml
On Thu, Mar 3, 2016 at 7:00 AM, Viresh Kumar [off-list ref] wrote:
On 02-03-16, 03:12, Rafael J. Wysocki wrote:quoted
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 ?quoted
+ 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