summaryrefslogtreecommitdiff
path: root/kernel/sched/core.c
diff options
context:
space:
mode:
authorSrivatsa Vaddagiri <vatsa@codeaurora.org>2016-05-13 02:05:32 -0700
committerPavankumar Kondeti <pkondeti@codeaurora.org>2016-12-16 16:50:51 +0530
commitf8c7c6ffdfb366efce72a4df93d124659a246b8c (patch)
treec9a7d3cc5acdf1c70b68482aae03bc6bb38cc2b6 /kernel/sched/core.c
parent3162449f7d245d45f007d4ea3224576ddf1bcc63 (diff)
sched: Track burst length for tasks
Track burst length for tasks as time they ran from wakeup to sleep. This is used to predict average time a task may run when it wakes up and thus avoid waking up idle cpu for "short-burst" tasks. Change-Id: Ie71d3163630fb8aa0db8ee8383768f8748270cf9 Signed-off-by: Srivatsa Vaddagiri <vatsa@codeaurora.org> Signed-off-by: Pavankumar Kondeti <pkondeti@codeaurora.org>
Diffstat (limited to 'kernel/sched/core.c')
-rw-r--r--kernel/sched/core.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index ee708909dc17..1a288e2de50d 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -1708,7 +1708,7 @@ int select_task_rq(struct task_struct *p, int cpu, int sd_flags, int wake_flags)
return cpu;
}
-static void update_avg(u64 *avg, u64 sample)
+void update_avg(u64 *avg, u64 sample)
{
s64 diff = sample - *avg;
*avg += diff >> 3;
@@ -3403,6 +3403,8 @@ static void __sched notrace __schedule(bool preempt)
if (likely(prev != next)) {
update_task_ravg(prev, rq, PUT_PREV_TASK, wallclock, 0);
update_task_ravg(next, rq, PICK_NEXT_TASK, wallclock, 0);
+ if (!is_idle_task(prev) && !prev->on_rq)
+ update_avg_burst(prev);
rq->nr_switches++;
rq->curr = next;