>-----Original Message----- >From: cpufreq-owner@xxxxxxxxxxxxxxx >[mailto:cpufreq-owner@xxxxxxxxxxxxxxx] On Behalf Of Alexander Miller >Sent: Friday, November 06, 2009 8:27 AM >To: linux-kernel@xxxxxxxxxxxxxxx >Cc: cpufreq@xxxxxxxxxxxxxxx; Dave Jones >Subject: [PATCH] cpufreq: fix conservative/ondemand behaviour >with ignore_nice_load > >Remove conversion of nice load to microseconds which caused addition >of times measured in different units and thus unreasonable behaviour >with both governors. Can you describe the "unresonable behavior" you are seeing. Is it with NO_HZ enabled or disabled? I see there can be a problem with this code when NO_HZ is disabled. But, the patch below is not the right solution as it will result in Adding times in different units with NO_HZ enabled. Thanks, Venki > >Signed-off-by: Alexander Miller <Miller@xxxxxxxxxxxxxxxxxxxx> >--- >diff -uprN >linux-2.6.git/drivers/cpufreq/cpufreq_conservative.c >linux/drivers/cpufreq/cpufreq_conservative.c >--- linux-2.6.git/drivers/cpufreq/cpufreq_conservative.c >2009-10-10 15:56:58.010595257 +0200 >+++ linux/drivers/cpufreq/cpufreq_conservative.c >2009-10-10 20:56:52.194598889 +0200 >@@ -400,20 +400,10 @@ static void dbs_check_cpu(struct cpu_dbs > j_dbs_info->prev_cpu_idle = cur_idle_time; > > if (dbs_tuners_ins.ignore_nice) { >- cputime64_t cur_nice; >- unsigned long cur_nice_jiffies; >- >- cur_nice = >cputime64_sub(kstat_cpu(j).cpustat.nice, >+ idle_time += (unsigned int) cputime64_sub( >+ kstat_cpu(j).cpustat.nice, > j_dbs_info->prev_cpu_nice); >- /* >- * Assumption: nice time between >sampling periods will >- * be less than 2^32 jiffies for 32 bit sys >- */ >- cur_nice_jiffies = (unsigned long) >- >cputime64_to_jiffies64(cur_nice); >- > j_dbs_info->prev_cpu_nice = >kstat_cpu(j).cpustat.nice; >- idle_time += jiffies_to_usecs(cur_nice_jiffies); > } > > if (unlikely(!wall_time || wall_time < idle_time)) >diff -uprN linux-2.6.git/drivers/cpufreq/cpufreq_ondemand.c >linux/drivers/cpufreq/cpufreq_ondemand.c >--- linux-2.6.git/drivers/cpufreq/cpufreq_ondemand.c >2009-10-10 16:00:40.380595816 +0200 >+++ linux/drivers/cpufreq/cpufreq_ondemand.c 2009-10-10 >20:56:52.195596654 +0200 >@@ -488,20 +488,10 @@ static void dbs_check_cpu(struct cpu_dbs > j_dbs_info->prev_cpu_idle = cur_idle_time; > > if (dbs_tuners_ins.ignore_nice) { >- cputime64_t cur_nice; >- unsigned long cur_nice_jiffies; >- >- cur_nice = >cputime64_sub(kstat_cpu(j).cpustat.nice, >+ idle_time += (unsigned int) cputime64_sub( >+ kstat_cpu(j).cpustat.nice, > j_dbs_info->prev_cpu_nice); >- /* >- * Assumption: nice time between >sampling periods will >- * be less than 2^32 jiffies for 32 bit sys >- */ >- cur_nice_jiffies = (unsigned long) >- >cputime64_to_jiffies64(cur_nice); >- > j_dbs_info->prev_cpu_nice = >kstat_cpu(j).cpustat.nice; >- idle_time += jiffies_to_usecs(cur_nice_jiffies); > } > > if (unlikely(!wall_time || wall_time < idle_time)) >-- >To unsubscribe from this list: send the line "unsubscribe cpufreq" in >the body of a message to majordomo@xxxxxxxxxxxxxxx >More majordomo info at http://vger.kernel.org/majordomo-info.html >-- To unsubscribe from this list: send the line "unsubscribe cpufreq" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html