# Linux-VServer
Patch200: patch-%{rpmversion}-vs%{vsversion}.diff
+Patch210: linux-2.6-210-vserver-cpu-sched.patch
# IP sets
Patch250: linux-2.6-250-ipsets.patch
%ApplyPatch 100
%ApplyPatch 200
+%ApplyPatch 210
%ApplyPatch 250
--- /dev/null
+diff -Nurp linux-2.6.22-200/kernel/vserver/sched.c linux-2.6.22-210/kernel/vserver/sched.c
+--- 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;
+ vxd_check_range(delta_min[0], 0, sched_pc->interval[0]);
++ delta = integral;
+ #endif
+ /* advance time */
+ sched_pc->norm_time += delta;
+@@ -161,10 +162,12 @@ on_hold:
+ /* next interval? */
+ if (!sched_pc->fill_rate[0])
+ delta_min[0] = HZ;
+- else if (tokens > sched_pc->fill_rate[0])
+- delta_min[0] += sched_pc->interval[0] *
+- tokens / sched_pc->fill_rate[0];
+- else
++ else if (tokens > sched_pc->fill_rate[0]) {
++ delta_min[0] = sched_pc->interval[0] *
++ (tokens / sched_pc->fill_rate[0]) - delta_min[0];
++ if (tokens % sched_pc->fill_rate[0])
++ delta_min[0] += sched_pc->interval[0];
++ } else
+ delta_min[0] = sched_pc->interval[0] - delta_min[0];
+ vxd_check_range(delta_min[0], 0, INT_MAX);
+
diff -NurpP --minimal linux-2.6.22.10/kernel/vserver/sched.c linux-2.6.22.10-vs2.3.0.29/kernel/vserver/sched.c
--- linux-2.6.22.10/kernel/vserver/sched.c 1970-01-01 01:00:00 +0100
+++ linux-2.6.22.10-vs2.3.0.29/kernel/vserver/sched.c 2007-08-15 23:32:49 +0200
-@@ -0,0 +1,418 @@
+@@ -0,0 +1,413 @@
+/*
+ * linux/kernel/vserver/sched.c
+ *
+#ifdef CONFIG_VSERVER_HARDCPU
+ delta_min[0] = delta - integral;
+ vxd_check_range(delta_min[0], 0, sched_pc->interval[0]);
-+ delta = integral;
+#endif
+ /* advance time */
+ sched_pc->norm_time += delta;
+ /* next interval? */
+ if (!sched_pc->fill_rate[0])
+ delta_min[0] = HZ;
-+ else if (tokens > sched_pc->fill_rate[0]) {
-+ long integral;
-+ integral = sched_pc->interval[0] *
-+ (tokens / sched_pc->fill_rate[0]);
-+ delta_min[0] = integral - delta_min[0];
-+ if (tokens % sched_pc->fill_rate[0])
-+ delta_min[0] += sched_pc->interval[0];
-+ } else
++ else if (tokens > sched_pc->fill_rate[0])
++ delta_min[0] += sched_pc->interval[0] *
++ tokens / sched_pc->fill_rate[0];
++ else
+ delta_min[0] = sched_pc->interval[0] - delta_min[0];
+ vxd_check_range(delta_min[0], 0, INT_MAX);
+