On Tue, Jun 14, 2016 at 05:28:01PM +0200, Frederic Weisbecker wrote: > diff --git a/kernel/sched/core.c b/kernel/sched/core.c > index 385c947..0c0578a 100644 > --- a/kernel/sched/core.c > +++ b/kernel/sched/core.c > @@ -666,17 +666,17 @@ bool sched_can_stop_tick(struct rq *rq) > void sched_avg_update(struct rq *rq) > { > s64 period = sched_avg_period(); > + s64 delta; > + u64 rem; > + int pending; > > + delta = (s64)(rq_clock(rq) - rq->age_stamp); > + if (delta <= period) > + return; > + > + pending = div64_u64_rem(delta, period, &rem); > + rq->age_stamp += delta - rem; > + rq->rt_avg >>= pending; > }
Blergh, and now do the profile on machine that doesn't have major transistor count dedicated to divisions. Why not add the division to the nohz exit path only?