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-head mailing list