kern/150335: cpufreq: Incorporate debug.cpufreq.highest into
HEAD/STABLE
vermaden
vermaden at interia.pl
Mon Sep 6 20:10:07 UTC 2010
>Number: 150335
>Category: kern
>Synopsis: cpufreq: Incorporate debug.cpufreq.highest into HEAD/STABLE
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Mon Sep 06 20:10:06 UTC 2010
>Closed-Date:
>Last-Modified:
>Originator: vermaden
>Release: FreeBSD 8.1-RELEASE / 7.2-RELEASE
>Organization:
>Environment:
Stock FreeBSD 7.2 and 8.1 RELEASE.
>Description:
Hi, some longer time ago I asked at http://lists.freebsd.org if it would be possible to add sysctl OID named _debug.cpufreq.highest_ (as opposite to *.lowest) to have full control of frequencies that powerd(8) would use, I got these patches below from *Boris Kochergin* to achieve that functionality, it works flawlessly both for 7.x and 8.x FreeBSD, propably also for 9-CURRENT.
Can You now incorporate them into STABLE/HEAD as they are now fully tested?
Regards,
vermaden
CPUFREQ | kern_cpu.c.patch
----------------------------------------------------------------------------
--- kern_cpu.c.orig 2008-11-08 13:12:24.000000000 -0500
+++ kern_cpu.c 2008-11-08 10:33:18.000000000 -0500
@@ -131,12 +131,16 @@
DRIVER_MODULE(cpufreq, cpu, cpufreq_driver, cpufreq_dc, 0, 0);
static int cf_lowest_freq;
+static int cf_highest_freq;
static int cf_verbose;
TUNABLE_INT("debug.cpufreq.lowest", &cf_lowest_freq);
+TUNABLE_INT("debug.cpufreq.highest", &cf_highest_freq);
TUNABLE_INT("debug.cpufreq.verbose", &cf_verbose);
SYSCTL_NODE(_debug, OID_AUTO, cpufreq, CTLFLAG_RD, NULL, "cpufreq debugging");
SYSCTL_INT(_debug_cpufreq, OID_AUTO, lowest, CTLFLAG_RW, &cf_lowest_freq, 1,
"Don't provide levels below this frequency.");
+SYSCTL_INT(_debug_cpufreq, OID_AUTO, highest, CTLFLAG_RW, &cf_highest_freq, 1,
+ "Don't provide levels above this frequency.");
SYSCTL_INT(_debug_cpufreq, OID_AUTO, verbose, CTLFLAG_RW, &cf_verbose, 1,
"Print verbose debugging messages");
@@ -295,6 +299,14 @@
goto out;
}
+ /* Reject levels that are above our specified threshold. */
+ if (cf_highest_freq > 0 && level->total_set.freq > cf_highest_freq) {
+ CF_DEBUG("rejecting freq %d, greater than %d limit\n",
+ level->total_set.freq, cf_highest_freq);
+ error = EINVAL;
+ goto out;
+ }
+
/* If already at this level, just return. */
if (CPUFREQ_CMP(sc->curr_level.total_set.freq, level->total_set.freq)) {
CF_DEBUG("skipping freq %d, same as current level %d\n",
@@ -617,8 +629,13 @@
continue;
}
- /* Skip levels that have a frequency that is too low. */
- if (lev->total_set.freq < cf_lowest_freq) {
+ /*
+ * Skip levels that have a frequency that is too low or too
+ * high.
+ */
+ if (lev->total_set.freq < cf_lowest_freq ||
+ (cf_highest_freq > 0 &&
+ lev->total_set.freq > cf_highest_freq)) {
sc->all_count--;
continue;
}
----------------------------------------------------------------------------
MAN PAGE | cpufreq.4.patch
----------------------------------------------------------------------------
--- cpufreq.4.orig 2008-11-08 13:08:19.000000000 -0500
+++ cpufreq.4 2008-11-08 13:08:51.000000000 -0500
@@ -98,6 +98,11 @@
This setting is also accessible via a tunable with the same name.
This can be used to disable very low levels that may be unusable on
some systems.
+.It Va debug.cpufreq.highest
+Highest CPU frequency in MHz to offer to users.
+This setting is also accessible via a tunable with the same name.
+This can be used to disable very high levels that may be unusable on
+some systems.
.It Va debug.cpufreq.verbose
Print verbose messages.
This setting is also accessible via a tunable with the same name.
----------------------------------------------------------------------------
>How-To-Repeat:
>Fix:
Incorporate attached patches into HEAD/STABLE.
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-bugs
mailing list