svn commit: r266165 - stable/10/sys/kern

Colin Percival cperciva at FreeBSD.org
Thu May 15 18:07:36 UTC 2014


Author: cperciva
Date: Thu May 15 18:07:35 2014
New Revision: 266165
URL: http://svnweb.freebsd.org/changeset/base/266165

Log:
  MFC r265876:
    In cf_get_method, when we don't already know what clock speed the CPU is
    running at, guess the nearest value instead of looking for a value within
    25 MHz of the observed frequency.
  
    Prior to this change, if a system booted with Intel Turbo Boost enabled,
    the dev.cpu.0.freq sysctl is nonfunctional, since the ACPI-reported
    frequency for Turbo Boost states does not match the actual clock frequency
    (and thus no levels are within 25 MHz of the observed frequency) and the
    current performance level is read before a new level is set.
  
  Relnotes:	Bug fix in power management on CPUs with Intel Turbo Boost

Modified:
  stable/10/sys/kern/kern_cpu.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/kern/kern_cpu.c
==============================================================================
--- stable/10/sys/kern/kern_cpu.c	Thu May 15 18:05:51 2014	(r266164)
+++ stable/10/sys/kern/kern_cpu.c	Thu May 15 18:07:35 2014	(r266165)
@@ -418,7 +418,7 @@ cf_get_method(device_t dev, struct cf_le
 	struct cf_setting *curr_set, set;
 	struct pcpu *pc;
 	device_t *devs;
-	int count, error, i, n, numdevs;
+	int bdiff, count, diff, error, i, n, numdevs;
 	uint64_t rate;
 
 	sc = device_get_softc(dev);
@@ -494,14 +494,15 @@ cf_get_method(device_t dev, struct cf_le
 	}
 	cpu_est_clockrate(pc->pc_cpuid, &rate);
 	rate /= 1000000;
+	bdiff = 1 << 30;
 	for (i = 0; i < count; i++) {
-		if (CPUFREQ_CMP(rate, levels[i].total_set.freq)) {
+		diff = abs(levels[i].total_set.freq - rate);
+		if (diff < bdiff) {
+			bdiff = diff;
 			sc->curr_level = levels[i];
-			CF_DEBUG("get estimated freq %d\n", curr_set->freq);
-			goto out;
 		}
 	}
-	error = ENXIO;
+	CF_DEBUG("get estimated freq %d\n", curr_set->freq);
 
 out:
 	if (error == 0)


More information about the svn-src-all mailing list