Messages in this thread | | | Date | Thu, 15 May 2008 20:22:15 +0530 | From | Srivatsa Vaddagiri <> | Subject | Re: [PATCH] sched: Improve readability in update_cpu_load() code |
| |
On Thu, May 15, 2008 at 06:34:59PM +0530, Gautham R Shenoy wrote: > Author: Gautham R Shenoy <ego@in.ibm.com> > Date: Thu May 15 17:55:49 2008 +0530 > > sched: Improve readability in update_cpu_load() code > > Currently the cpu_load[i] is calculated as: > this_rq->cpu_load[i] = (old_load*(scale-1) + new_load) >> i; > > However, since scale = 2^i, this can be simplified as: > this_rq->cpu_load[i] = old_load + ((new_load - old_load) >> i); > > Makes it easier to read. > Signed-off-by: Gautham R Shenoy <ego@in.ibm.com> > > diff --git a/kernel/sched.c b/kernel/sched.c > index 2d7d8f1..e1a6985 100644 > --- a/kernel/sched.c > +++ b/kernel/sched.c > @@ -2921,7 +2921,7 @@ static void update_cpu_load(struct rq *this_rq) > */ > if (new_load > old_load) > new_load += scale-1; > - this_rq->cpu_load[i] = (old_load*(scale-1) + new_load) >> i; > + this_rq->cpu_load[i] = old_load + ((new_load - old_load) >> i);
This wont work when new_load < old_load ..
For ex: I tried this prog:
#include <stdio.h>
main() { unsigned long old_load = 100, new_load = 90, this_load, this_load1; int i = 1, scale = 2 << i;
this_load = (old_load*(scale-1) + new_load) >> i; this_load1 = old_load + ((new_load - old_load) >> i);
printf ("this_load = %u, this_load1 = %u \n", this_load, this_load1); }
This is what I get:
$ ./a.out this_load = 195, this_load1 = 2147483743 $
-- Regards, vatsa
| |