On Fri, Feb 05, 2010 at 12:45:21PM -0500, Len Brown wrote: > Jeff, > What do you see if you apply just the patch below? > > Also, in addition to "powertop -d" to show what the kernel requests, > please run turbostat to show what the hardware actually did: > > http://userweb.kernel.org/~lenb/acpi/utils/pmtools-latest/turbostat/turbostat.c > > eg. > # turbostat -d -v sleep 5 > > thanks, > -Len Brown, Intel Open Source Technology Center With the patch, powertop reports good C3 residency and wakeups remain very low. Seems to work. :) I attached the powertop & turbostat output with this patch. However, this confuses me. In a previous experiment in the acpi_processor_setup_cpuidle() function, I replaced the pointer to acpi_idle_enter_bm() with a pointer to acpi_idle_enter_simple() even when bm_check is nonzero. With that, I was able to get into C3, but the wakeups ballooned. But the difference between what I did, and what you did, is the difference between acpi_idle_enter_bm() with acpi_idle_bm_check() returning zero and acpi_idle_enter_simple(). Those code paths look almost identical. The bm path calls acpi_unlazy_tlb(), and doesn't appear to call the ACPI_FLUSH_CPU_CACHE(), and they call sched_clock_idle_sleep_event() in different places. I don't understand why any of these differences would have had any significant effect on wakeups. I'm left wondering if it's a problem on my part. I should repeat that previous experiment and see if there really is something significantly different there. BTW, getting a bit off topic, but since the two code paths are almost identical, is there any reason not to unite them? Something like the attached patch might work? Thanks, Jeff