For those interested in the native Cx patch: in short, I found that a call to ACPI_ENABLE_IRQS(); , right before return, was missing in the C1 code path.
Begin forwarded message: Date: Sun, 24 Jul 2011 18:02:19 +0900 From: Taku YAMAMOTO <[email protected]> To: Jung-uk Kim <[email protected]> Cc: [email protected] Subject: Follow-up: (Missing) power states of an Atom N455-based netbook On Sat, 23 Jul 2011 04:25:13 +0900 Taku YAMAMOTO <[email protected]> wrote: > I've managed to update my X60 to the r224243 and your acpi_cx_native2.diff > still works nicely. Actually it didn't generally, though it happened to work in a way I usually use. Putting single kenv (like boot_single=YES) was enough to break. And, I finally found a small but fatal bug. We (assuming acpi_cx_native2.patch already applied) have the following code in acpi_cpu_idle(): if (cx_next->type == ACPI_STATE_C1) { AcpiHwRead(&start_time, &AcpiGbl_FADT.XPmTimerBlock); acpi_cpu_idle_cx(cx_next, sc->cpu_cx_native); AcpiHwRead(&end_time, &AcpiGbl_FADT.XPmTimerBlock); end_time = PM_USEC(acpi_TimerDelta(end_time, start_time)); if (curthread->td_critnest == 0) end_time = min(end_time, 500000 / hz); sc->cpu_prev_sleep = (sc->cpu_prev_sleep * 3 + end_time) / 4; return; } In this code, however, interrupts are left disabled after the return when we are using MWAIT. Inserting ACPI_ENABLE_IRQS(); before the return statement is the way to fix. Hope this helps. -- -|-__ YAMAMOTO, Taku | __ < <[email protected]> - A chicken is an egg's way of producing more eggs. - -- -|-__ 山本 拓 / YAMAMOTO, Taku | __ < <[email protected]> - A chicken is an egg's way of producing more eggs. - _______________________________________________ [email protected] mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-acpi To unsubscribe, send any mail to "[email protected]"
