From: Andy Bavier Date: Fri, 1 Feb 2008 17:16:33 +0000 (+0000) Subject: Add vserver CPU scheduler fixes as a separate patch X-Git-Tag: linux-2.6-22-2~43 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=fc1466b7a1f154241e4745abbceaad75e91b8d8c;p=linux-2.6.git Add vserver CPU scheduler fixes as a separate patch --- diff --git a/kernel-2.6.spec b/kernel-2.6.spec index 81e6fd0e5..867838934 100644 --- a/kernel-2.6.spec +++ b/kernel-2.6.spec @@ -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 index 000000000..fac58b767 --- /dev/null +++ b/linux-2.6-210-vserver-cpu-sched.patch @@ -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); + diff --git a/patch-2.6.22.14-vs2.3.0.29.diff b/patch-2.6.22.14-vs2.3.0.29.diff index 68caf136d..e23d4036e 100644 --- a/patch-2.6.22.14-vs2.3.0.29.diff +++ b/patch-2.6.22.14-vs2.3.0.29.diff @@ -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); +