Browse Source

[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>
Thomas Renninger 17 years ago
parent
commit
6afde10c3f
2 changed files with 22 additions and 8 deletions
  1. 20 7
      drivers/cpufreq/cpufreq.c
  2. 2 1
      include/linux/cpufreq.h

+ 20 - 7
drivers/cpufreq/cpufreq.c

@@ -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"
-		       " transition latency of HW, fallback"
-		       " to %s governor\n",
-		       policy->governor->name,
-		       gov->name);
-		       policy->governor = gov;
+		if (!gov)
+			return -EINVAL;
+		else {
+			printk(KERN_WARNING "%s governor failed, too long"
+			       " transition latency of HW, fallback"
+			       " 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))

+ 2 - 1
include/linux/cpufreq.h

@@ -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)