[CPUFREQ] calculate delay after dbs_check_cpu
authorVincent Guittot <vincent.guittot@linaro.org>
Mon, 7 Feb 2011 16:14:25 +0000 (17:14 +0100)
committerDave Jones <davej@redhat.com>
Wed, 16 Mar 2011 21:54:31 +0000 (17:54 -0400)
calculate ondemand delay after dbs_check_cpu call because it can
modify rate_mult value

use freq_lo_jiffies value for the sub sample period of powersave_bias mode

Signed-off-by: Vincent Guittot <vincent.guittot@linaro.org>
Signed-off-by: Dave Jones <davej@redhat.com>
drivers/cpufreq/cpufreq_ondemand.c

index 58aa85e..059179d 100644 (file)
@@ -642,12 +642,7 @@ static void do_dbs_timer(struct work_struct *work)
        unsigned int cpu = dbs_info->cpu;
        int sample_type = dbs_info->sample_type;
 
-       /* We want all CPUs to do sampling nearly on same jiffy */
-       int delay = usecs_to_jiffies(dbs_tuners_ins.sampling_rate
-               * dbs_info->rate_mult);
-
-       if (num_online_cpus() > 1)
-               delay -= jiffies % delay;
+       int delay;
 
        mutex_lock(&dbs_info->timer_mutex);
 
@@ -660,10 +655,20 @@ static void do_dbs_timer(struct work_struct *work)
                        /* Setup timer for SUB_SAMPLE */
                        dbs_info->sample_type = DBS_SUB_SAMPLE;
                        delay = dbs_info->freq_hi_jiffies;
+               } else {
+                       /* We want all CPUs to do sampling nearly on
+                        * same jiffy
+                        */
+                       delay = usecs_to_jiffies(dbs_tuners_ins.sampling_rate
+                               * dbs_info->rate_mult);
+
+                       if (num_online_cpus() > 1)
+                               delay -= jiffies % delay;
                }
        } else {
                __cpufreq_driver_target(dbs_info->cur_policy,
                        dbs_info->freq_lo, CPUFREQ_RELATION_H);
+               delay = dbs_info->freq_lo_jiffies;
        }
        schedule_delayed_work_on(cpu, &dbs_info->work, delay);
        mutex_unlock(&dbs_info->timer_mutex);