diff --git a/[refs] b/[refs] index 1f88f892fde3..bce25d99d91b 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 3c93717cfa51316e4dbb471e7c0f9d243359d5f8 +refs/heads/master: 0d98bb2656e9bd2dfda2d089db1fe1dbdab41504 diff --git a/trunk/kernel/sched.c b/trunk/kernel/sched.c index 6c9e7c8735bf..a24d6d5d83f6 100644 --- a/trunk/kernel/sched.c +++ b/trunk/kernel/sched.c @@ -1254,6 +1254,12 @@ static void sched_avg_update(struct rq *rq) s64 period = sched_avg_period(); while ((s64)(rq->clock - rq->age_stamp) > period) { + /* + * Inline assembly required to prevent the compiler + * optimising this loop into a divmod call. + * See __iter_div_u64_rem() for another example of this. + */ + asm("" : "+rm" (rq->age_stamp)); rq->age_stamp += period; rq->rt_avg /= 2; }