[issue2180] ACPI Cx state missing

Johannes Hofmann (via DragonFly issue tracker) sinknull at leaf.dragonflybsd.org
Sun Nov 6 09:18:34 PST 2011

New submission from Johannes Hofmann <Johannes.Hofmann at gmx.de>:

On a Thinkpad T410s with Core i5 the C2 state (latency 205)
is skipped due to the latency check in acpi_cpu_cstate.c.
The patch below (taken from FreeBSD) fixes it.
FreeBSD comment:

SVN rev 212549 on 2010-09-13 09:51:24Z by avg

acpi_cpu: do not apply P_LVLx_LAT rules to latencies returned by _CST

ACPI specification sates that if P_LVL2_LAT > 100, then a system
support C2; if P_LVL3_LAT > 1000, then C3 is not supported.
But there are no such rules for Cx state data returned by _CST.  If a
state is not supported it should not be included into the return
package.  In other words, any latency value returned by _CST is valid,
it's up to the OS and/or user to decide whether to use it.

diff --git a/sys/dev/acpica5/acpi_cpu_cstate.c b/sys/dev/acpica5/acpi_cpu_cstate.c
index 500fdd4..209256a 100644
--- a/sys/dev/acpica5/acpi_cpu_cstate.c
+++ b/sys/dev/acpica5/acpi_cpu_cstate.c
@@ -610,18 +610,11 @@ acpi_cpu_cx_cst(struct acpi_cpu_softc *sc)
        case ACPI_STATE_C2:
-           if (cx_ptr->trans_lat > 100) {
-                                "acpi_cpu%d: C2[%d] not available.\n",
-                                device_get_unit(sc->cpu_dev), i));
-               continue;
-           }
            sc->cpu_non_c3 = i;
        case ACPI_STATE_C3:
-           if (cx_ptr->trans_lat > 1000 ||
-               (cpu_quirks & CPU_QUIRK_NO_C3) != 0) {
+           if ((cpu_quirks & CPU_QUIRK_NO_C3) != 0) {

                                 "acpi_cpu%d: C3[%d] not available.\n",

messages: 10269
nosy: Johannes.Hofmann
priority: bug
status: unread
title: ACPI Cx state missing

DragonFly issue tracker <bugs at lists.dragonflybsd.org>

More information about the Bugs mailing list