On Fri, Apr 01, 2016 at 03:23:05PM +0200, Frederic Weisbecker wrote: > Ticks can happen in the middle of a nohz frame and
I'm still miffed with that.. And this changelog doesn't even explain why and how. > cpu_load_update_active() doesn't handle these correctly. It forgets the > whole previous tickless load and just records the current tick, ignoring > potentially long idle periods. > > In order to solve this, record the load on nohz frame entry so we know > what to record in case of nohz interruptions, then use this recorded load > to account the tickless load on nohz ticks and nohz frame end. > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c > index f33764d..394f008 100644 > --- a/kernel/sched/fair.c > +++ b/kernel/sched/fair.c > @@ -4527,9 +4527,9 @@ decay_load_missed(unsigned long load, unsigned long > missed_updates, int idx) > * term. See the @active paramter. ^^^^^^^^^^^^^^ What active parameter... you need to update that comment. > */ > static void __cpu_load_update(struct rq *this_rq, unsigned long this_load, > - unsigned long pending_updates, int active) > + unsigned long pending_updates) > { > - unsigned long tickless_load = active ? this_rq->cpu_load[0] : 0; > + unsigned long tickless_load = this_rq->cpu_load[0]; > int i, scale; > > this_rq->nr_load_updates++;