Page MenuHomeFreeBSD

D55614.diff
No OneTemporary

D55614.diff

diff --git a/sys/kern/kern_cpu.c b/sys/kern/kern_cpu.c
--- a/sys/kern/kern_cpu.c
+++ b/sys/kern/kern_cpu.c
@@ -943,13 +943,12 @@
{
struct cpufreq_softc *sc;
struct cf_level *levels;
- int best, count, diff, bdiff, devcount, error, freq, i, n;
- device_t *devs;
+ device_t dev;
+ int best, count, diff, bdiff, error, freq, i;
- devs = NULL;
sc = oidp->oid_arg1;
+ dev = sc->dev;
levels = sc->levels_buf;
-
error = CPUFREQ_GET(sc->dev, &levels[0]);
if (error)
goto out;
@@ -963,33 +962,24 @@
* CPUs have equal levels), we call cpufreq_set() on all CPUs.
* This is needed for some MP systems.
*/
- error = devclass_get_devices(devclass_find("cpufreq"), &devs, &devcount);
- if (error)
+ count = CF_MAX_LEVELS;
+ error = CPUFREQ_LEVELS(dev, levels, &count);
+ if (error) {
+ if (error == E2BIG)
+ printf("cpufreq: need to increase CF_MAX_LEVELS\n");
goto out;
- for (n = 0; n < devcount; n++) {
- count = CF_MAX_LEVELS;
- error = CPUFREQ_LEVELS(devs[n], levels, &count);
- if (error) {
- if (error == E2BIG)
- printf(
- "cpufreq: need to increase CF_MAX_LEVELS\n");
- break;
- }
- best = 0;
- bdiff = 1 << 30;
- for (i = 0; i < count; i++) {
- diff = abs(levels[i].total_set.freq - freq);
- if (diff < bdiff) {
- bdiff = diff;
- best = i;
- }
+ }
+ best = 0;
+ bdiff = 1 << 30;
+ for (i = 0; i < count; i++) {
+ diff = abs(levels[i].total_set.freq - freq);
+ if (diff < bdiff) {
+ bdiff = diff;
+ best = i;
}
- error = CPUFREQ_SET(devs[n], &levels[best], CPUFREQ_PRIO_USER);
}
-
+ error = CPUFREQ_SET(dev, &levels[best], CPUFREQ_PRIO_USER);
out:
- if (devs)
- free(devs, M_TEMP);
return (error);
}

File Metadata

Mime Type
text/plain
Expires
Fri, Jul 24, 1:57 AM (15 h, 10 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
35424474
Default Alt Text
D55614.diff (1 KB)

Event Timeline