diff -NurpP linux-2.6.16-vs2.1.1-rc15/kernel/vserver/sched.c linux-2.6.16-vs2.1.1-rc16/kernel/vserver/sched.c --- linux-2.6.16-vs2.1.1-rc15/kernel/vserver/sched.c 2006-04-02 04:04:11 +0200 +++ linux-2.6.16-vs2.1.1-rc16/kernel/vserver/sched.c 2006-04-12 01:54:01 +0200 @@ -153,27 +158,21 @@ on_hold: BUG_ON(tokens < 0); #ifdef CONFIG_VSERVER_HARDCPU - if (likely(tokens)) - delta_min[0] = sched_pc->interval[0] * - tokens / sched_pc->fill_rate[0] - - delta_min[0]; - else - delta_min[0] = sched_pc->interval[0] - - delta_min[0]; + /* next interval? */ + if (tokens > sched_pc->fill_rate[0]) + delta_min[0] += sched_pc->interval[0] * + tokens / sched_pc->fill_rate[0]; vxd_check_range(delta_min[0], 0, INT_MAX); #ifdef CONFIG_VSERVER_IDLETIME if (!(flags & VXSF_IDLE_TIME)) return -1; - if (likely(tokens)) - delta_min[1] = sched_pc->interval[1] * - tokens / sched_pc->fill_rate[1] - - delta_min[1]; - else - delta_min[1] = sched_pc->interval[1] - - delta_min[1]; - vxd_check_range(delta_min[0], 0, INT_MAX); + /* next interval? */ + if (tokens > sched_pc->fill_rate[1]) + delta_min[1] += sched_pc->interval[1] * + tokens / sched_pc->fill_rate[1]; + vxd_check_range(delta_min[1], 0, INT_MAX); return -2; #else