From: Dominik Brodowski <linux@brodo.de>
To: torvalds@transmeta.com, davej@suse.de
Cc: linux-kernel@vger.kernel.org, cpufreq@www.linux.org.uk
Subject: [PATCH 2.5.53] cpufreq: powernow-k6 cleanup
Date: Sun, 29 Dec 2002 00:14:34 +0100 [thread overview]
Message-ID: <20021228231434.GC1310@brodo.de> (raw)
Clean up searching for best frequency, and add one safety check.
diff -ru linux-original/arch/i386/kernel/cpu/cpufreq/powernow-k6.c linux/arch/i386/kernel/cpu/cpufreq/powernow-k6.c
--- linux-original/arch/i386/kernel/cpu/cpufreq/powernow-k6.c 2002-12-25 17:45:52.000000000 +0100
+++ linux/arch/i386/kernel/cpu/cpufreq/powernow-k6.c 2002-12-27 11:32:21.000000000 +0100
@@ -144,6 +144,9 @@
policy->max = clock_ratio[j] * busfreq;
+ cpufreq_verify_within_limits(policy, (20 * busfreq),
+ (max_multiplier * busfreq));
+
return 0;
}
@@ -156,53 +159,44 @@
*/
static int powernow_k6_setpolicy (struct cpufreq_policy *policy)
{
- unsigned int number_states = 0;
- unsigned int i, j=4;
+ unsigned int i;
+ unsigned int optimal;
- if (!powernow_driver)
+ if (!powernow_driver || !policy || policy->cpu)
return -EINVAL;
- for (i=0; i<8; i++)
- if ((policy->min <= (busfreq * clock_ratio[i])) &&
- (policy->max >= (busfreq * clock_ratio[i])))
- {
- number_states++;
- j = i;
- }
-
- if (number_states == 1) {
- /* if only one state is within the limit borders, it
- is easily detected and set */
- powernow_k6_set_state(j);
- return 0;
- }
-
- /* more than one state within limit */
- switch (policy->policy) {
+ switch(policy->policy) {
case CPUFREQ_POLICY_POWERSAVE:
- j = 6;
- for (i=0; i<8; i++)
- if ((policy->min <= (busfreq * clock_ratio[i])) &&
- (policy->max >= (busfreq * clock_ratio[i])) &&
- (clock_ratio[i] < clock_ratio[j]))
- j = i;
+ optimal = 6;
break;
case CPUFREQ_POLICY_PERFORMANCE:
- j = 4;
- for (i=0; i<8; i++)
- if ((policy->min <= (busfreq * clock_ratio[i])) &&
- (policy->max >= (busfreq * clock_ratio[i])) &&
- (clock_ratio[i] > clock_ratio[j]))
- j = i;
+ optimal = max_multiplier;
break;
default:
return -EINVAL;
}
- if (clock_ratio[i] > max_multiplier)
- return -EINVAL;
+ for (i=0;i<8;i++) {
+ unsigned int freq = busfreq * clock_ratio[i];
+ if (clock_ratio[i] > max_multiplier)
+ continue;
+ if ((freq > policy->max) ||
+ (freq < policy->min))
+ continue;
+ switch(policy->policy) {
+ case CPUFREQ_POLICY_POWERSAVE:
+ if (freq < (clock_ratio[optimal] * busfreq))
+ optimal = i;
+ break;
+ case CPUFREQ_POLICY_PERFORMANCE:
+ if (freq > (clock_ratio[optimal] * busfreq))
+ optimal = i;
+ break;
+ }
+ }
+
+ powernow_k6_set_state(optimal);
- powernow_k6_set_state(j);
return 0;
}
reply other threads:[~2002-12-28 23:07 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20021228231434.GC1310@brodo.de \
--to=linux@brodo.de \
--cc=cpufreq@www.linux.org.uk \
--cc=davej@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@transmeta.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome