summaryrefslogtreecommitdiff
BranchCommit messageAuthorAge
follownameLost in the mergeTobias Klauser15 years
masterDynamically allocate inotify read bufferTobias Klauser13 years
pipeRevert "inotail.c: Decrement n_units before calling tail_pipe_from_begin"Tobias Klauser16 years
 
TagDownloadAuthorAge
v0.5commit a9b1b5e00a...Tobias Klauser17 years
v0.4commit 30282557d1...Tobias Klauser17 years
v0.3commit aa67658f45...Tobias Klauser17 years
v0.2commit 5d87c405cc...Tobias Klauser17 years
v0.1commit d5433918e5...Tobias Klauser18 years
h>parentfd7c3c29f9abab50a84fd4fd6811129641c53b2f (diff)
cpuidle: Fix cpuidle_state_is_coupled() argument in cpuidle_enter()
Commit 0b89e9aa2856 (cpuidle: delay enabling interrupts until all coupled CPUs leave idle) rightfully fixed a regression by letting the coupled idle state framework to handle local interrupt enabling when the CPU is exiting an idle state. The current code checks if the idle state is coupled and, if so, it will let the coupled code to enable interrupts. This way, it can decrement the ready-count before handling the interrupt. This mechanism prevents the other CPUs from waiting for a CPU which is handling interrupts. But the check is done against the state index returned by the back end driver's ->enter functions which could be different from the initial index passed as parameter to the cpuidle_enter_state() function. entered_state = target_state->enter(dev, drv, index); [ ... ] if (!cpuidle_state_is_coupled(drv, entered_state)) local_irq_enable(); [ ... ] If the 'index' is referring to a coupled idle state but the 'entered_state' is *not* coupled, then the interrupts are enabled again. All CPUs blocked on the sync barrier may busy loop longer if the CPU has interrupts to handle before decrementing the ready-count. That's consuming more energy than saving. Fixes: 0b89e9aa2856 (cpuidle: delay enabling interrupts until all coupled CPUs leave idle) Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org> Cc: 3.15+ <stable@vger.kernel.org> # 3.15+ [ rjw: Subject & changelog ] Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'Documentation')