Messages in this thread | | | Date | Thu, 15 May 2008 22:41:43 +0530 | From | Gautham R Shenoy <> | Subject | Re: [PATCH] sched: Improve readability in update_cpu_load() code |
| |
On Thu, May 15, 2008 at 08:22:15PM +0530, Srivatsa Vaddagiri wrote: > 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 .. >
Sorry for the noise. I must have read the previous if() condition incorrectly.
> 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
-- Thanks and Regards gautham
| |