Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[cascardo/linux.git] / drivers / cpufreq / cpufreq_conservative.c
index f62d822..25a70d0 100644 (file)
@@ -68,6 +68,9 @@ static void cs_check_cpu(int cpu, unsigned int load)
 
                dbs_info->requested_freq += get_freq_target(cs_tuners, policy);
 
+               if (dbs_info->requested_freq > policy->max)
+                       dbs_info->requested_freq = policy->max;
+
                __cpufreq_driver_target(policy, dbs_info->requested_freq,
                        CPUFREQ_RELATION_H);
                return;
@@ -80,13 +83,18 @@ static void cs_check_cpu(int cpu, unsigned int load)
 
        /* Check for frequency decrease */
        if (load < cs_tuners->down_threshold) {
+               unsigned int freq_target;
                /*
                 * if we cannot reduce the frequency anymore, break out early
                 */
                if (policy->cur == policy->min)
                        return;
 
-               dbs_info->requested_freq -= get_freq_target(cs_tuners, policy);
+               freq_target = get_freq_target(cs_tuners, policy);
+               if (dbs_info->requested_freq > freq_target)
+                       dbs_info->requested_freq -= freq_target;
+               else
+                       dbs_info->requested_freq = policy->min;
 
                __cpufreq_driver_target(policy, dbs_info->requested_freq,
                                CPUFREQ_RELATION_L);