Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c7f652e0487a35c16f6cd72707232b6a28647a10
Commit:     c7f652e0487a35c16f6cd72707232b6a28647a10
Parent:     689eba77cbd0cfaaa3687cbe23e8b534f8ae0ebb
Author:     Venki Pallipadi <[EMAIL PROTECTED]>
AuthorDate: Wed Jun 20 14:24:00 2007 -0700
Committer:  Dave Jones <[EMAIL PROTECTED]>
CommitDate: Thu Jun 21 12:57:53 2007 -0400

    [CPUFREQ] Keep userspace governor quiet when it is not being used
    
    Userspace governor registers a frequency change notifier at init time, even
    when no CPU is set to userspace governor. Make it register only when
    atleast one CPU is using userspace.
    
    Signed-off-by: Venkatesh Pallipadi <[EMAIL PROTECTED]>
    Signed-off-by: Dave Jones <[EMAIL PROTECTED]>
---
 drivers/cpufreq/cpufreq_userspace.c |   23 ++++++++++++++++++++---
 1 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/drivers/cpufreq/cpufreq_userspace.c 
b/drivers/cpufreq/cpufreq_userspace.c
index 860345c..b1348ff 100644
--- a/drivers/cpufreq/cpufreq_userspace.c
+++ b/drivers/cpufreq/cpufreq_userspace.c
@@ -37,6 +37,7 @@ static unsigned int   cpu_set_freq[NR_CPUS]; /* CPU freq 
desired by userspace */
 static unsigned int    cpu_is_managed[NR_CPUS];
 
 static DEFINE_MUTEX    (userspace_mutex);
+static int cpus_using_userspace_governor;
 
 #define dprintk(msg...) cpufreq_debug_printk(CPUFREQ_DEBUG_GOVERNOR, 
"userspace", msg)
 
@@ -47,7 +48,11 @@ userspace_cpufreq_notifier(struct notifier_block *nb, 
unsigned long val,
 {
         struct cpufreq_freqs *freq = data;
 
-       dprintk("saving cpu_cur_freq of cpu %u to be %u kHz\n", freq->cpu, 
freq->new);
+       if (!cpu_is_managed[freq->cpu])
+               return 0;
+
+       dprintk("saving cpu_cur_freq of cpu %u to be %u kHz\n",
+                       freq->cpu, freq->new);
        cpu_cur_freq[freq->cpu] = freq->new;
 
         return 0;
@@ -142,6 +147,13 @@ static int cpufreq_governor_userspace(struct 
cpufreq_policy *policy,
                if (rc)
                        goto start_out;
 
+               if (cpus_using_userspace_governor == 0) {
+                       cpufreq_register_notifier(
+                                       &userspace_cpufreq_notifier_block,
+                                       CPUFREQ_TRANSITION_NOTIFIER);
+               }
+               cpus_using_userspace_governor++;
+
                cpu_is_managed[cpu] = 1;
                cpu_min_freq[cpu] = policy->min;
                cpu_max_freq[cpu] = policy->max;
@@ -153,6 +165,13 @@ start_out:
                break;
        case CPUFREQ_GOV_STOP:
                mutex_lock(&userspace_mutex);
+               cpus_using_userspace_governor--;
+               if (cpus_using_userspace_governor == 0) {
+                       cpufreq_unregister_notifier(
+                                       &userspace_cpufreq_notifier_block,
+                                       CPUFREQ_TRANSITION_NOTIFIER);
+               }
+
                cpu_is_managed[cpu] = 0;
                cpu_min_freq[cpu] = 0;
                cpu_max_freq[cpu] = 0;
@@ -198,7 +217,6 @@ EXPORT_SYMBOL(cpufreq_gov_userspace);
 
 static int __init cpufreq_gov_userspace_init(void)
 {
-       cpufreq_register_notifier(&userspace_cpufreq_notifier_block, 
CPUFREQ_TRANSITION_NOTIFIER);
        return cpufreq_register_governor(&cpufreq_gov_userspace);
 }
 
@@ -206,7 +224,6 @@ static int __init cpufreq_gov_userspace_init(void)
 static void __exit cpufreq_gov_userspace_exit(void)
 {
        cpufreq_unregister_governor(&cpufreq_gov_userspace);
-        cpufreq_unregister_notifier(&userspace_cpufreq_notifier_block, 
CPUFREQ_TRANSITION_NOTIFIER);
 }
 
 
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to