]> err.no Git - linux-2.6/commitdiff
[CPUFREQ] Only check for transition latency on problematic governors (kconfig fix)
authorThomas Renninger <trenn@suse.de>
Tue, 2 Oct 2007 20:28:13 +0000 (13:28 -0700)
committerDave Jones <davej@redhat.com>
Thu, 4 Oct 2007 22:40:57 +0000 (18:40 -0400)
Cc: Adrian Bunk <bunk@stusta.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Dave Jones <davej@redhat.com>
drivers/cpufreq/cpufreq.c
include/linux/cpufreq.h

index 418522f88f7315d7ffe6ec96ac13e8f2fb67e8c3..65ac58511228907dd6f3197a24d7b698ca4cc751 100644 (file)
@@ -1484,17 +1484,30 @@ static int __cpufreq_governor(struct cpufreq_policy *policy,
                                        unsigned int event)
 {
        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 &&
            policy->cpuinfo.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))
index 9e5f5d0c87f3465afc97a41271f11f3434d94f84..450a841b5892a66db23d08a26661adcfa24cd583 100644 (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
   auto load due latency restrictions
 */
+#ifdef CONFIG_CPU_FREQ_GOV_PERFORMANCE
 extern struct cpufreq_governor cpufreq_gov_performance;
-#define CPUFREQ_PERFORMANCE_GOVERNOR   (&cpufreq_gov_performance)
+#endif
 #ifdef CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE
 #define CPUFREQ_DEFAULT_GOVERNOR       (&cpufreq_gov_performance)
 #elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE)