Add vserver CPU scheduler fixes as a separate patch
authorAndy Bavier <acb@cs.princeton.edu>
Fri, 1 Feb 2008 17:16:33 +0000 (17:16 +0000)
committerAndy Bavier <acb@cs.princeton.edu>
Fri, 1 Feb 2008 17:16:33 +0000 (17:16 +0000)
kernel-2.6.spec
linux-2.6-210-vserver-cpu-sched.patch [new file with mode: 0644]
patch-2.6.22.14-vs2.3.0.29.diff

index 81e6fd0..8678389 100644 (file)
@@ -147,6 +147,7 @@ Patch100: linux-2.6-100-build-nonintconfig.patch
 
 # 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
@@ -334,6 +335,7 @@ KERNEL_PREVIOUS=vanilla
 %ApplyPatch 100
 
 %ApplyPatch 200
+%ApplyPatch 210
 
 %ApplyPatch 250
 
diff --git a/linux-2.6-210-vserver-cpu-sched.patch b/linux-2.6-210-vserver-cpu-sched.patch
new file mode 100644 (file)
index 0000000..fac58b7
--- /dev/null
@@ -0,0 +1,28 @@
+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);
index 68caf13..e23d403 100644 (file)
@@ -26062,7 +26062,7 @@ diff -NurpP --minimal linux-2.6.22.10/kernel/vserver/proc.c linux-2.6.22.10-vs2.
 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
 + *
@@ -26154,7 +26154,6 @@ diff -NurpP --minimal linux-2.6.22.10/kernel/vserver/sched.c linux-2.6.22.10-vs2
 +#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;
@@ -26227,14 +26226,10 @@ diff -NurpP --minimal linux-2.6.22.10/kernel/vserver/sched.c linux-2.6.22.10-vs2
 +      /* 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);
 +