aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorCon Kolivas <kernel@kolivas.org>2006-03-31 05:31:25 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2006-03-31 15:18:58 -0500
commite7c38cb49c6cc05bc11f70d9e9889da1c4a0d37f (patch)
tree538e26f5ba32d052083dea53536c5366978838c8 /kernel
parent3dee386e14045484a6c41c8f03a263f9d79de740 (diff)
[PATCH] sched: make task_noninteractive use sleep_type
Alterations to the pipe code in the kernel made it possible for relative starvation to occur with tasks that slept waiting on a pipe getting unfair priority bonuses even if they were otherwise fully cpu bound so the TASK_NONINTERACTIVE flag was introduced which prevented any change to sleep_avg while sleeping waiting on a pipe. This change also leads to the converse though, preventing any priority boost from occurring in truly interactive tasks that wait on pipes. Convert the TASK_NONINTERACTIVE flag to set sleep_type to SLEEP_NONINTERACTIVE which will allow a linear bonus to priority based on sleep time thus allowing interactive tasks to get high priority if they sleep enough. Signed-off-by: Con Kolivas <kernel@kolivas.org> Acked-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/sched.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/kernel/sched.c b/kernel/sched.c
index f55ce5adac55..589e55a42214 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -1273,18 +1273,18 @@ out_activate:
1273 * sleep_avg beyond just interactive state. 1273 * sleep_avg beyond just interactive state.
1274 */ 1274 */
1275 p->sleep_type = SLEEP_NONINTERACTIVE; 1275 p->sleep_type = SLEEP_NONINTERACTIVE;
1276 } 1276 } else
1277 1277
1278 /* 1278 /*
1279 * Tasks that have marked their sleep as noninteractive get 1279 * Tasks that have marked their sleep as noninteractive get
1280 * woken up without updating their sleep average. (i.e. their 1280 * woken up with their sleep average not weighted in an
1281 * sleep is handled in a priority-neutral manner, no priority 1281 * interactive way.
1282 * boost and no penalty.)
1283 */ 1282 */
1284 if (old_state & TASK_NONINTERACTIVE) 1283 if (old_state & TASK_NONINTERACTIVE)
1285 __activate_task(p, rq); 1284 p->sleep_type = SLEEP_NONINTERACTIVE;
1286 else 1285
1287 activate_task(p, rq, cpu == this_cpu); 1286
1287 activate_task(p, rq, cpu == this_cpu);
1288 /* 1288 /*
1289 * Sync wakeups (i.e. those types of wakeups where the waker 1289 * Sync wakeups (i.e. those types of wakeups where the waker
1290 * has indicated that it will leave the CPU in short order) 1290 * has indicated that it will leave the CPU in short order)