summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_cpu.c
diff options
context:
space:
mode:
authornjl <njl@FreeBSD.org>2005-09-02 16:32:43 +0000
committernjl <njl@FreeBSD.org>2005-09-02 16:32:43 +0000
commitb0c4bd3081aff87eafdfc9348387938b1f9acc1b (patch)
tree0d1bdee8172f13de61b0392ffa8beb4a76bc4a1b /sys/kern/kern_cpu.c
parent6dfa271942b9c3d88bd20f34c0a4313e4dd59ac6 (diff)
downloadFreeBSD-src-b0c4bd3081aff87eafdfc9348387938b1f9acc1b.zip
FreeBSD-src-b0c4bd3081aff87eafdfc9348387938b1f9acc1b.tar.gz
Break out the checks for duplicates and absolute settings being too high
instead of trying to do them all at once. This should fix the level sorting problems from the previous revision. Testing help: ume
Diffstat (limited to 'sys/kern/kern_cpu.c')
-rw-r--r--sys/kern/kern_cpu.c25
1 files changed, 17 insertions, 8 deletions
diff --git a/sys/kern/kern_cpu.c b/sys/kern/kern_cpu.c
index f69a943..450af2c 100644
--- a/sys/kern/kern_cpu.c
+++ b/sys/kern/kern_cpu.c
@@ -760,14 +760,23 @@ cpufreq_dup_set(struct cpufreq_softc *sc, struct cf_level *dup,
KASSERT(!TAILQ_EMPTY(list), ("all levels list empty in dup set"));
TAILQ_FOREACH_REVERSE(itr, list, cf_level_lst, link) {
itr_set = &itr->total_set;
- if (fill_set->freq < itr_set->freq &&
- !CPUFREQ_CMP(fill_set->freq, itr_set->freq) &&
- fill->abs_set.freq <= itr->abs_set.freq) {
- CF_DEBUG(
- "dup done, inserting new level %d after %d\n",
- fill_set->freq, itr_set->freq);
- TAILQ_INSERT_AFTER(list, itr, fill, link);
- sc->all_count++;
+ if (CPUFREQ_CMP(fill_set->freq, itr_set->freq)) {
+ CF_DEBUG("dup set rejecting %d (dupe)\n",
+ fill_set->freq);
+ itr = NULL;
+ break;
+ } else if (fill_set->freq < itr_set->freq) {
+ if (fill->abs_set.freq <= itr->abs_set.freq) {
+ CF_DEBUG(
+ "dup done, inserting new level %d after %d\n",
+ fill_set->freq, itr_set->freq);
+ TAILQ_INSERT_AFTER(list, itr, fill, link);
+ sc->all_count++;
+ } else {
+ CF_DEBUG("dup set rejecting %d (abs too big)\n",
+ fill_set->freq);
+ itr = NULL;
+ }
break;
}
}
OpenPOWER on IntegriCloud