Messages in this thread Patch in this message | | | From | Youquan Song <> | Subject | [PATCH V2 3/3] x86,idle: Set residency to 0 if target Cstate not really enter | Date | Mon, 17 Sep 2012 21:53:29 -0400 |
| |
When cpuidle governor choose a C-state to enter for idle CPU, but it notice that there is tasks request to be executed. So the idle CPU will not really enter the target C-state and go to run task.
In this situation, it will use the residency of previous really entered target C-states. Obviously, it is not reasonable.
So, this patch fix it by set the target C-state residency to 0.
Signed-off-by: Youquan Song <youquan.song@intel.com> --- drivers/cpuidle/cpuidle.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c index 2f0083a..7992417 100644 --- a/drivers/cpuidle/cpuidle.c +++ b/drivers/cpuidle/cpuidle.c @@ -136,6 +136,10 @@ int cpuidle_idle_call(void) /* ask the governor for the next state */ next_state = cpuidle_curr_governor->select(drv, dev); if (need_resched()) { + dev->last_residency = 0; + /* give the governor an opportunity to reflect on the outcome */ + if (cpuidle_curr_governor->reflect) + cpuidle_curr_governor->reflect(dev, next_state); local_irq_enable(); return 0; }
| |