Keep userspace governor quiet when it is not being used
PATCH 1/1 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]>
drivers/cpufreq/cpufreq_userspace.c +20 -3
@@ -37,6 +37,7 @@ static unsigned int cpu_set_freq[NR_CPUSstatic 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 notifi {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(stif (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_ static void __exit cpufreq_gov_userspace_exit(void) {cpufreq_unregister_governor (&cpufreq_gov_userspace); -cpufreq_unregister_notifier (&userspace_cpufreq_notifier_block,CPUFREQ_TRANSITION_NOTIFIER ); }