kern/114722: [acpi] Nearly duplicate p-state entries reported

Bryan Venteicher mr.kodaik at gmail.com
Thu Jul 19 05:10:02 UTC 2007


>Number:         114722
>Category:       kern
>Synopsis:       [acpi] Nearly duplicate p-state entries reported
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu Jul 19 05:10:01 GMT 2007
>Closed-Date:
>Last-Modified:
>Originator:     Bryan Venteicher
>Release:        7.0-Current
>Organization:
>Environment:
FreeBSD agonize.daemoninthecloset.org 7.0-CURRENT FreeBSD 7.0-CURRENT #1: Tue Jul 17 23:52:52 CDT 2007     bryanv at agonize.daemoninthecloset.org:/usr/obj/usr/src/sys/AGONIZE  amd64

>Description:
I recently purchased a Lenovo T16 laptop with a 2.0GHz Core2Duo (T7300) processor. ACPI reports nearly identical Px states:
dev.est.0.freq_settings: 2001/35000 2000/35000 1600/25000 1200/16000 800/14000

cpufreq then turns the states into the following frequencies:
dev.cpu.0.freq_levels: 2001/35000 2000/35000 1750/30625 1600/25000 1400/21875 1200/16000 1050/14000 900/12000 800/14000 700/12250 600/10500 500/8750 400/7000 300/5250

If powerd attempts to lower the processor frequency when it at the maximum, the change is rejected since the frequencies are so close:
idle time > 90%, decreasing clock speed from 2001 MHz to 2000 MHz
idle time > 90%, decreasing clock speed from 2001 MHz to 2000 MHz
idle time > 90%, decreasing clock speed from 2001 MHz to 2000 MHz
idle time > 90%, decreasing clock speed from 2001 MHz to 2000 MHz
^Z
Suspended

Manually changing the frequency to a lower value allows powerd to do its thing:
agonize# sysctl dev.cpu.0.freq=1600
dev.cpu.0.freq: 2001 -> 1600
agonize# fg
powerd -v
idle time > 90%, decreasing clock speed from 1600 MHz to 1400 MHz
idle time > 90%, decreasing clock speed from 1400 MHz to 1200 MHz
idle time > 90%, decreasing clock speed from 1200 MHz to 1050 MHz
idle time > 90%, decreasing clock speed from 1050 MHz to 900 MHz
idle time > 90%, decreasing clock speed from 900 MHz to 800 MHz
idle time > 90%, decreasing clock speed from 800 MHz to 700 MHz
idle time > 90%, decreasing clock speed from 700 MHz to 600 MHz
idle time > 90%, decreasing clock speed from 600 MHz to 500 MHz
idle time > 90%, decreasing clock speed from 500 MHz to 400 MHz
idle time > 90%, decreasing clock speed from 400 MHz to 300 MHz

>How-To-Repeat:

>Fix:
--- acpi_perf.c.old     2007-07-18 23:49:28.659122750 -0500
+++ acpi_perf.c 2007-07-18 23:48:45.651093335 -0500
@@ -301,8 +301,8 @@
 
                /* Check for duplicate entries */
                if (count > 0 &&
-                   sc->px_states[count - 1].core_freq ==
-                       sc->px_states[count].core_freq)
+                   CPUFREQ_CMP(sc->px_states[count - 1].core_freq,
+                       sc->px_states[count].core_freq))
                        continue;
 
                count++;
@@ -593,4 +593,3 @@
                *type |= CPUFREQ_FLAG_INFO_ONLY;
        return (0);
 }


>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list