From ff26b00b484bd75ac1988c1ffc0b710ccf25d7ac Mon Sep 17 00:00:00 2001 From: Chris Redpath Date: Tue, 23 Oct 2018 17:43:34 +0100 Subject: [PATCH] ANDROID: sched/fair: initialise util_est values to 0 on fork Since "sched/fair: Align PELT windows between cfs_rq and its se" the upstream kernel has initialised the whole content of sched_avg to zero on fork. When util_est was backported, we missed this and so ended up with util_est values copied from the parent task. Add the zero initialisation which is present upstream and ensure that util_est values always start from a known point. Fixes: 700f1172f7a7 ("BACKPORT: sched/fair: Add util_est on top of PELT") Reported-by: Puja Gupta Cc: Dietmar Eggemann Cc: Abhijeet Dharmapurikar Cc: Patrick Bellasi Cc: Todd Kjos Cc: Saravana Kannan Change-Id: I06995e4320d606a52761d0e773baf28fcd1e2680 Signed-off-by: Chris Redpath --- kernel/sched/fair.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 74ba97b51fa8..d87193ef0912 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -736,8 +736,10 @@ void init_entity_runnable_average(struct sched_entity *se) { struct sched_avg *sa = &se->avg; - sa->last_update_time = 0; + memset(sa, 0, sizeof(*sa)); /* + * util_avg is initialized in post_init_entity_util_avg. + * util_est should start from zero. * sched_avg's period_contrib should be strictly less then 1024, so * we give it 1023 to make sure it is almost a period (1024us), and * will definitely be update (after enqueue). @@ -752,11 +754,6 @@ void init_entity_runnable_average(struct sched_entity *se) if (entity_is_task(se)) sa->load_avg = scale_load_down(se->load.weight); sa->load_sum = sa->load_avg * LOAD_AVG_MAX; - /* - * At this point, util_avg won't be used in select_task_rq_fair anyway - */ - sa->util_avg = 0; - sa->util_sum = 0; /* when this task enqueue'ed, it will contribute to its cfs_rq's load_avg */ } -- 2.20.1