---- linux-2.6.22-200/kernel/vserver/sched.c 2008-02-01 10:44:49.000000000 -0500
-+++ linux-2.6.22-210/kernel/vserver/sched.c 2008-02-01 11:14:33.000000000 -0500
-@@ -89,6 +89,7 @@ int vx_tokens_recalc(struct _vx_sched_pc
- #ifdef CONFIG_VSERVER_HARDCPU
- delta_min[0] = delta - integral;
+--- linux-2.6.22-200/kernel/vserver/sched.c 2008-04-24 09:48:57.000000000 -0400
++++ linux-2.6.22-210/kernel/vserver/sched.c 2008-04-24 09:49:00.000000000 -0400
+@@ -18,7 +18,6 @@
+
+ #include <asm/uaccess.h>
+
+-
+ #define vxd_check_range(val, min, max) do { \
+ vxlprintk((val < min) || (val > max), \
+ "check_range(%ld,%ld,%ld)", \
+@@ -78,6 +77,11 @@ int vx_tokens_recalc(struct _vx_sched_pc
+ /* how much time did pass? */
+ delta = *norm_time - sched_pc->norm_time;
+ vxd_check_range(delta, 0, INT_MAX);
++ if (delta < 0) {
++ /* vserver is new or idle for a really long time */
++ sched_pc->norm_time = *norm_time;
++ delta = 0;
++ }
+
+ if (delta >= sched_pc->interval[0]) {
+ long tokens, integral;
+@@ -91,7 +95,7 @@ int vx_tokens_recalc(struct _vx_sched_pc