svn commit: r336477 - head/sys/kern
Emmanuel Vadot
manu at FreeBSD.org
Thu Jul 19 11:28:15 UTC 2018
Author: manu
Date: Thu Jul 19 11:28:14 2018
New Revision: 336477
URL: https://svnweb.freebsd.org/changeset/base/336477
Log:
kern_cpu: When adding abs frequency allow for unordered insertion
Keep the list ordered as some code assume that it is but allow for
unordered cf_settings sets.
Modified:
head/sys/kern/kern_cpu.c
Modified: head/sys/kern/kern_cpu.c
==============================================================================
--- head/sys/kern/kern_cpu.c Thu Jul 19 11:27:11 2018 (r336476)
+++ head/sys/kern/kern_cpu.c Thu Jul 19 11:28:14 2018 (r336477)
@@ -680,7 +680,7 @@ cpufreq_insert_abs(struct cpufreq_softc *sc, struct cf
{
struct cf_level_lst *list;
struct cf_level *level, *search;
- int i;
+ int i, inserted;
CF_MTX_ASSERT(&sc->lock);
@@ -693,6 +693,7 @@ cpufreq_insert_abs(struct cpufreq_softc *sc, struct cf
level->total_set = sets[i];
level->total_set.dev = NULL;
sc->all_count++;
+ inserted = 0;
if (TAILQ_EMPTY(list)) {
CF_DEBUG("adding abs setting %d at head\n",
@@ -701,15 +702,26 @@ cpufreq_insert_abs(struct cpufreq_softc *sc, struct cf
continue;
}
- TAILQ_FOREACH_REVERSE(search, list, cf_level_lst, link) {
+ TAILQ_FOREACH_REVERSE(search, list, cf_level_lst, link)
if (sets[i].freq <= search->total_set.freq) {
CF_DEBUG("adding abs setting %d after %d\n",
sets[i].freq, search->total_set.freq);
TAILQ_INSERT_AFTER(list, search, level, link);
+ inserted = 1;
break;
}
+
+ if (inserted == 0) {
+ TAILQ_FOREACH(search, list, link)
+ if (sets[i].freq >= search->total_set.freq) {
+ CF_DEBUG("adding abs setting %d before %d\n",
+ sets[i].freq, search->total_set.freq);
+ TAILQ_INSERT_BEFORE(search, level, link);
+ break;
+ }
}
}
+
return (0);
}
More information about the svn-src-all
mailing list