[CPUFREQ] Only check for transition latency on problematic governors (kconfig fix)

Cc: Adrian Bunk <bunk@stusta.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Dave Jones <davej@redhat.com>
This commit is contained in:
Thomas Renninger 2007-10-02 13:28:13 -07:00 committed by Dave Jones
parent 1c2562459f
commit 6afde10c3f
2 changed files with 22 additions and 8 deletions

View File

@ -1484,17 +1484,30 @@ static int __cpufreq_governor(struct cpufreq_policy *policy,
unsigned int event) unsigned int event)
{ {
int ret; int ret;
struct cpufreq_governor *gov = CPUFREQ_PERFORMANCE_GOVERNOR;
/* Only must be defined when default governor is known to have latency
restrictions, like e.g. conservative or ondemand.
That this is the case is already ensured in Kconfig
*/
#ifdef CONFIG_CPU_FREQ_GOV_PERFORMANCE
struct cpufreq_governor *gov = &cpufreq_gov_performance;
#else
struct cpufreq_governor *gov = NULL;
#endif
if (policy->governor->max_transition_latency && if (policy->governor->max_transition_latency &&
policy->cpuinfo.transition_latency > policy->cpuinfo.transition_latency >
policy->governor->max_transition_latency) { policy->governor->max_transition_latency) {
printk(KERN_WARNING "%s governor failed, too long" if (!gov)
" transition latency of HW, fallback" return -EINVAL;
" to %s governor\n", else {
policy->governor->name, printk(KERN_WARNING "%s governor failed, too long"
gov->name); " transition latency of HW, fallback"
policy->governor = gov; " to %s governor\n",
policy->governor->name,
gov->name);
policy->governor = gov;
}
} }
if (!try_module_get(policy->governor->owner)) if (!try_module_get(policy->governor->owner))

View File

@ -286,8 +286,9 @@ static inline unsigned int cpufreq_quick_get(unsigned int cpu)
Performance governor is fallback governor if any other gov failed to Performance governor is fallback governor if any other gov failed to
auto load due latency restrictions auto load due latency restrictions
*/ */
#ifdef CONFIG_CPU_FREQ_GOV_PERFORMANCE
extern struct cpufreq_governor cpufreq_gov_performance; extern struct cpufreq_governor cpufreq_gov_performance;
#define CPUFREQ_PERFORMANCE_GOVERNOR (&cpufreq_gov_performance) #endif
#ifdef CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE #ifdef CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE
#define CPUFREQ_DEFAULT_GOVERNOR (&cpufreq_gov_performance) #define CPUFREQ_DEFAULT_GOVERNOR (&cpufreq_gov_performance)
#elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE) #elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE)