summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/kern/kern_cpu.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/sys/kern/kern_cpu.c b/sys/kern/kern_cpu.c
index b4ba635..7206c38 100644
--- a/sys/kern/kern_cpu.c
+++ b/sys/kern/kern_cpu.c
@@ -418,7 +418,7 @@ cf_get_method(device_t dev, struct cf_level *level)
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_level *level)
}
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)
OpenPOWER on IntegriCloud