Commit 8e92b6605da989c0aa8ff7e33306f36f0efd957c
Committed by
Len Brown
1 parent
8b78cf602f
cpuidle: fix 100% C0 statistics regression
commit 9b12e18cdc1553de62d931e73443c806347cd974 'ACPI: cpuidle: Support C1 idle time accounting' was implicated in a 100% C0 idle regression. http://bugzilla.kernel.org/show_bug.cgi?id=10076 It pointed out a potential problem where the menu governor may get confused by the C-state residency time from poll idle or C1 idle, where this timing info is not accurate. This inaccuracy is due to interrupts being handled before we account for C-state exit. Do not mark TIME_VALID for CO poll state. Mark C1 time as valid only with the MWAIT (CSTATE_FFH) entry method. This makes governors use the timing information only when it is correct and eliminates any wrong policy decisions that may result from invalid timing information. Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com> Signed-off-by: Len Brown <len.brown@intel.com>
Showing 2 changed files with 4 additions and 2 deletions Side-by-side Diff
drivers/acpi/processor_idle.c
... | ... | @@ -1693,7 +1693,9 @@ |
1693 | 1693 | switch (cx->type) { |
1694 | 1694 | case ACPI_STATE_C1: |
1695 | 1695 | state->flags |= CPUIDLE_FLAG_SHALLOW; |
1696 | - state->flags |= CPUIDLE_FLAG_TIME_VALID; | |
1696 | + if (cx->entry_method == ACPI_CSTATE_FFH) | |
1697 | + state->flags |= CPUIDLE_FLAG_TIME_VALID; | |
1698 | + | |
1697 | 1699 | state->enter = acpi_idle_enter_c1; |
1698 | 1700 | dev->safe_state = state; |
1699 | 1701 | break; |
drivers/cpuidle/cpuidle.c