From owner-freebsd-bugs@FreeBSD.ORG Mon Sep 6 20:10:07 2010 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9488D10656DE for ; Mon, 6 Sep 2010 20:10:07 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 6D37F8FC15 for ; Mon, 6 Sep 2010 20:10:07 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.4/8.14.4) with ESMTP id o86KA7sV075594 for ; Mon, 6 Sep 2010 20:10:07 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.4/8.14.4/Submit) id o86KA7n8075593; Mon, 6 Sep 2010 20:10:07 GMT (envelope-from gnats) Resent-Date: Mon, 6 Sep 2010 20:10:07 GMT Resent-Message-Id: <201009062010.o86KA7n8075593@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, vermaden Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5042D10656CF for ; Mon, 6 Sep 2010 20:03:46 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (www.freebsd.org [IPv6:2001:4f8:fff6::21]) by mx1.freebsd.org (Postfix) with ESMTP id 3F0FC8FC1A for ; Mon, 6 Sep 2010 20:03:46 +0000 (UTC) Received: from www.freebsd.org (localhost [127.0.0.1]) by www.freebsd.org (8.14.3/8.14.3) with ESMTP id o86K3jtT095478 for ; Mon, 6 Sep 2010 20:03:45 GMT (envelope-from nobody@www.freebsd.org) Received: (from nobody@localhost) by www.freebsd.org (8.14.3/8.14.3/Submit) id o86K3j9d095466; Mon, 6 Sep 2010 20:03:45 GMT (envelope-from nobody) Message-Id: <201009062003.o86K3j9d095466@www.freebsd.org> Date: Mon, 6 Sep 2010 20:03:45 GMT From: vermaden To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.1 Cc: Subject: kern/150335: cpufreq: Incorporate debug.cpufreq.highest into HEAD/STABLE X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Sep 2010 20:10:07 -0000 >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: