the ACPI-enabled kernel calls "halt" in the idle loop for C1, but it never calls "monitor/mwait", which if available would save more power.
OK. Will come up with a patch for this. To summarize, ideal idle should be Default Rules: non monitor-mwait machines: halt_idle monitor-mwait machines: mwait_idle Acpi + non monitor-mwait machines: acpi_idle C1(halt)/C2/C3 Acpi + monitor-mwait machines: acpi_idle C1(mwait_idle)/C2/C3 User can override this with - halt_idle, poll_idle or mwait_idle(if processor supports it). Then, ignore the above default rules.
Created attachment 2390 [details] simple patch to properly select the idle routine
Created attachment 2391 [details] simple patch to properly select the idle routine
Created attachment 3891 [details] proper C1 state support Attached is the new patch (against 2.6.9). Fixes the following: - We should enable C-states in processor driver only when user hasn't specified his own idle routine. - For C1, we should be using what system would have used when C-state support is not there and not safe_halt(). Say, if system supports monitor/mwait, we have to use that instead of halt, for C1.
applied patch in comment #4
shipped in Linux 2.6.10-rc2 - closed.