Project

General

Profile

Actions

Bug #2157

closed

ACPI Cx state fix from FreeBSD

Added by Johannes.Hofmann over 12 years ago. Updated over 12 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Category:
-
Target version:
-
Start date:
Due date:
% Done:

0%

Estimated time:

Description

Remove latency checks in apci_cpu_cstate.c (taken from FreeBSD).
This fixes C2 (latency 205) on a Thinkpad T410s with Core i5.
Comment from FreeBSD svn:

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
doesn't
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.

Cheers,
Johannes

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)
sc->cpu_cx_count
+;
continue;
case ACPI_STATE_C2:
- if (cx_ptr->trans_lat > 100) {
- ACPI_DEBUG_PRINT((ACPI_DB_INFO,
- "acpi_cpu%d: C2[%d] not available.\n",
- device_get_unit(sc->cpu_dev), i));
- continue;
- }
sc->cpu_non_c3 = i;
break;
case ACPI_STATE_C3:
default:
- if (cx_ptr->trans_lat > 1000 ||
- (cpu_quirks & CPU_QUIRK_NO_C3) != 0) {
+ if ((cpu_quirks & CPU_QUIRK_NO_C3) != 0) {

ACPI_DEBUG_PRINT((ACPI_DB_INFO,
"acpi_cpu%d: C3[%d] not available.\n",
Actions #1

Updated by swildner over 12 years ago

Thanks Johannes. I've committed it.

Actions

Also available in: Atom PDF