rq->avg_idle try to reflect the average idle time between the cpu idle and first wakeup. But in the function, it maybe get a negative value if old avg_idle is too small. Then this negative value will be double counted in next time calculation. Guess that is not the original purpose, so recalibrate it to zero.
Signed-off-by: Alex Shi <alex....@linaro.org> --- kernel/sched/core.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 30eb011..af9121c6 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -1358,6 +1358,9 @@ static void update_avg(u64 *avg, u64 sample) { s64 diff = sample - *avg; *avg += diff >> 3; + + if (*avg < 0) + *avg = 0; } #endif -- 1.8.1.2 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/