2002-12-21 20:16:30

by Dominik Brodowski

[permalink] [raw]
Subject: [PATCH 2.5] cpufreq: minor cleanups

Get rid of CPUFREQ_ALL_CPUS codepaths not used anymore.

Dominik

diff -ruN linux-original/kernel/cpufreq.c linux/kernel/cpufreq.c
--- linux-original/kernel/cpufreq.c 2002-12-21 21:21:57.000000000 +0100
+++ linux/kernel/cpufreq.c 2002-12-21 21:21:46.000000000 +0100
@@ -365,7 +365,7 @@
{
struct cpufreq_policy policy;
down(&cpufreq_driver_sem);
- if (!cpufreq_driver || !cpu_max_freq) {
+ if (!cpufreq_driver || !cpu_max_freq || (cpu > NR_CPUS)) {
up(&cpufreq_driver_sem);
return -EINVAL;
}
@@ -377,7 +377,20 @@

up(&cpufreq_driver_sem);

- return cpufreq_set_policy(&policy);
+ if (policy.cpu == CPUFREQ_ALL_CPUS)
+ {
+ unsigned int i;
+ unsigned int ret = 0;
+ for (i=0; i<NR_CPUS; i++)
+ {
+ policy.cpu = i;
+ if (cpu_online(i))
+ ret |= cpufreq_set_policy(&policy);
+ }
+ return ret;
+ }
+ else
+ return cpufreq_set_policy(&policy);
}
EXPORT_SYMBOL_GPL(cpufreq_set);

@@ -842,7 +855,6 @@
*/
int cpufreq_set_policy(struct cpufreq_policy *policy)
{
- unsigned int i;
int ret;

down(&cpufreq_driver_sem);
@@ -889,24 +901,12 @@

up(&cpufreq_notifier_sem);

- if (policy->cpu == CPUFREQ_ALL_CPUS) {
- for (i=0;i<NR_CPUS;i++) {
- cpufreq_driver->policy[i].min = policy->min;
- cpufreq_driver->policy[i].max = policy->max;
- cpufreq_driver->policy[i].policy = policy->policy;
- }
- } else {
- cpufreq_driver->policy[policy->cpu].min = policy->min;
- cpufreq_driver->policy[policy->cpu].max = policy->max;
- cpufreq_driver->policy[policy->cpu].policy = policy->policy;
- }
+ cpufreq_driver->policy[policy->cpu].min = policy->min;
+ cpufreq_driver->policy[policy->cpu].max = policy->max;
+ cpufreq_driver->policy[policy->cpu].policy = policy->policy;

#ifdef CONFIG_CPU_FREQ_24_API
- if (policy->cpu == CPUFREQ_ALL_CPUS) {
- for (i=0;i<NR_CPUS;i++)
- cpu_cur_freq[i] = policy->max;
- } else
- cpu_cur_freq[policy->cpu] = policy->max;
+ cpu_cur_freq[policy->cpu] = policy->max;
#endif

ret = cpufreq_driver->setpolicy(policy);
@@ -920,15 +920,6 @@


/*********************************************************************
- * DYNAMIC CPUFREQ SWITCHING *
- *********************************************************************/
-#ifdef CONFIG_CPU_FREQ_DYNAMIC
-/* TBD */
-#endif /* CONFIG_CPU_FREQ_DYNAMIC */
-
-
-
-/*********************************************************************
* EXTERNALLY AFFECTING FREQUENCY CHANGES *
*********************************************************************/

@@ -973,12 +964,7 @@
adjust_jiffies(CPUFREQ_POSTCHANGE, freqs);
notifier_call_chain(&cpufreq_transition_notifier_list, CPUFREQ_POSTCHANGE, freqs);
#ifdef CONFIG_CPU_FREQ_24_API
- if (freqs->cpu == CPUFREQ_ALL_CPUS) {
- int i;
- for (i=0;i<NR_CPUS;i++)
- cpu_cur_freq[i] = freqs->new;
- } else
- cpu_cur_freq[freqs->cpu] = freqs->new;
+ cpu_cur_freq[freqs->cpu] = freqs->new;
#endif
break;
}



2002-12-26 18:52:52

by Pavel Machek

[permalink] [raw]
Subject: Re: [PATCH 2.5] cpufreq: minor cleanups

Hi!

> Get rid of CPUFREQ_ALL_CPUS codepaths not used anymore.

Get rid of? Seems you are adding it.

> Dominik
>
> diff -ruN linux-original/kernel/cpufreq.c linux/kernel/cpufreq.c
> --- linux-original/kernel/cpufreq.c 2002-12-21 21:21:57.000000000 +0100
> +++ linux/kernel/cpufreq.c 2002-12-21 21:21:46.000000000 +0100
> @@ -365,7 +365,7 @@
> {
> struct cpufreq_policy policy;
> down(&cpufreq_driver_sem);
> - if (!cpufreq_driver || !cpu_max_freq) {
> + if (!cpufreq_driver || !cpu_max_freq || (cpu > NR_CPUS)) {
> up(&cpufreq_driver_sem);
> return -EINVAL;
> }
> @@ -377,7 +377,20 @@
>
> up(&cpufreq_driver_sem);
>
> - return cpufreq_set_policy(&policy);
> + if (policy.cpu == CPUFREQ_ALL_CPUS)
> + {
> + unsigned int i;
> + unsigned int ret = 0;
> + for (i=0; i<NR_CPUS; i++)
> + {
> + policy.cpu = i;
> + if (cpu_online(i))
> + ret |= cpufreq_set_policy(&policy);
> + }
> + return ret;
> + }
> + else
> + return cpufreq_set_policy(&policy);
> }
> EXPORT_SYMBOL_GPL(cpufreq_set);
>
> @@ -842,7 +855,6 @@
> */
> int cpufreq_set_policy(struct cpufreq_policy *policy)
> {
> - unsigned int i;
> int ret;
>
> down(&cpufreq_driver_sem);
> @@ -889,24 +901,12 @@
>
> up(&cpufreq_notifier_sem);
>
> - if (policy->cpu == CPUFREQ_ALL_CPUS) {
> - for (i=0;i<NR_CPUS;i++) {
> - cpufreq_driver->policy[i].min = policy->min;
> - cpufreq_driver->policy[i].max = policy->max;
> - cpufreq_driver->policy[i].policy = policy->policy;
> - }
> - } else {
> - cpufreq_driver->policy[policy->cpu].min = policy->min;
> - cpufreq_driver->policy[policy->cpu].max = policy->max;
> - cpufreq_driver->policy[policy->cpu].policy = policy->policy;
> - }
> + cpufreq_driver->policy[policy->cpu].min = policy->min;
> + cpufreq_driver->policy[policy->cpu].max = policy->max;
> + cpufreq_driver->policy[policy->cpu].policy = policy->policy;
>
> #ifdef CONFIG_CPU_FREQ_24_API
> - if (policy->cpu == CPUFREQ_ALL_CPUS) {
> - for (i=0;i<NR_CPUS;i++)
> - cpu_cur_freq[i] = policy->max;
> - } else
> - cpu_cur_freq[policy->cpu] = policy->max;
> + cpu_cur_freq[policy->cpu] = policy->max;
> #endif
>
> ret = cpufreq_driver->setpolicy(policy);
> @@ -920,15 +920,6 @@
>
>
> /*********************************************************************
> - * DYNAMIC CPUFREQ SWITCHING *
> - *********************************************************************/
> -#ifdef CONFIG_CPU_FREQ_DYNAMIC
> -/* TBD */
> -#endif /* CONFIG_CPU_FREQ_DYNAMIC */
> -
> -
> -
> -/*********************************************************************
> * EXTERNALLY AFFECTING FREQUENCY CHANGES *
> *********************************************************************/
>
> @@ -973,12 +964,7 @@
> adjust_jiffies(CPUFREQ_POSTCHANGE, freqs);
> notifier_call_chain(&cpufreq_transition_notifier_list, CPUFREQ_POSTCHANGE, freqs);
> #ifdef CONFIG_CPU_FREQ_24_API
> - if (freqs->cpu == CPUFREQ_ALL_CPUS) {
> - int i;
> - for (i=0;i<NR_CPUS;i++)
> - cpu_cur_freq[i] = freqs->new;
> - } else
> - cpu_cur_freq[freqs->cpu] = freqs->new;
> + cpu_cur_freq[freqs->cpu] = freqs->new;
> #endif
> break;
> }
>
>
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/

--
Worst form of spam? Adding advertisment signatures ala sourceforge.net.
What goes next? Inserting advertisment *into* email?

2002-12-26 22:06:05

by Dominik Brodowski

[permalink] [raw]
Subject: Re: [PATCH 2.5] cpufreq: minor cleanups

On Sun, Dec 22, 2002 at 10:25:59PM +0100, Pavel Machek wrote:
> Hi!
>
> > Get rid of CPUFREQ_ALL_CPUS codepaths not used anymore.
>
> Get rid of? Seems you are adding it.

Only in cpufreq_set(). If that is called with cpu==CPUFREQ_ALL_CPUS, this
value can't be passed to cpufreq_set_policy any more. So the
cpufreq_set_policy call needs to be iterated over all cpus. The reason for
this is that on some architectures, not all CPUs support the same frequency
ranges.
In all other instances, CPUFREQ_ALL_CPUS is removed by that patch you're
commenting on; will re-send it soon for 2.5.53.

Dominik

> > - return cpufreq_set_policy(&policy);
> > + if (policy.cpu == CPUFREQ_ALL_CPUS)
> > + {
> > + unsigned int i;
> > + unsigned int ret = 0;
> > + for (i=0; i<NR_CPUS; i++)
> > + {
> > + policy.cpu = i;
> > + if (cpu_online(i))
> > + ret |= cpufreq_set_policy(&policy);
> > + }
> > + return ret;
> > + }
> > + else
> > + return cpufreq_set_policy(&policy);
> > }
> > EXPORT_SYMBOL_GPL(cpufreq_set);
> >