Add vserver CPU scheduler fixes as a separate patch
[linux-2.6.git] / linux-2.6-210-vserver-cpu-sched.patch
1 diff -Nurp linux-2.6.22-200/kernel/vserver/sched.c linux-2.6.22-210/kernel/vserver/sched.c
2 --- linux-2.6.22-200/kernel/vserver/sched.c     2008-02-01 10:44:49.000000000 -0500
3 +++ linux-2.6.22-210/kernel/vserver/sched.c     2008-02-01 11:14:33.000000000 -0500
4 @@ -89,6 +89,7 @@ int vx_tokens_recalc(struct _vx_sched_pc
5  #ifdef CONFIG_VSERVER_HARDCPU
6                 delta_min[0] = delta - integral;
7                 vxd_check_range(delta_min[0], 0, sched_pc->interval[0]);
8 +               delta = integral;
9  #endif
10                 /* advance time */
11                 sched_pc->norm_time += delta;
12 @@ -161,10 +162,12 @@ on_hold:
13         /* next interval? */
14         if (!sched_pc->fill_rate[0])
15                 delta_min[0] = HZ;
16 -       else if (tokens > sched_pc->fill_rate[0])
17 -               delta_min[0] += sched_pc->interval[0] *
18 -                       tokens / sched_pc->fill_rate[0];
19 -       else
20 +       else if (tokens > sched_pc->fill_rate[0]) { 
21 +               delta_min[0] = sched_pc->interval[0] * 
22 +                       (tokens / sched_pc->fill_rate[0]) - delta_min[0]; 
23 +               if (tokens % sched_pc->fill_rate[0]) 
24 +                       delta_min[0] += sched_pc->interval[0]; 
25 +       } else 
26                 delta_min[0] = sched_pc->interval[0] - delta_min[0];
27         vxd_check_range(delta_min[0], 0, INT_MAX);
28