From 30b5d872df311f7091a1931cb92ae4cb8d02c063 Mon Sep 17 00:00:00 2001 From: Con Kolivas Date: Fri, 31 Mar 2006 02:31:26 -0800 Subject: [PATCH] --- yaml --- r: 24920 b: refs/heads/master c: e72ff0bb2c163eb13014ba113701bd42dab382fe h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/kernel/sched.c | 15 ++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 3bb7f0969e14..c8b5e4f17daf 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e7c38cb49c6cc05bc11f70d9e9889da1c4a0d37f +refs/heads/master: e72ff0bb2c163eb13014ba113701bd42dab382fe diff --git a/trunk/kernel/sched.c b/trunk/kernel/sched.c index 589e55a42214..7b371931114f 100644 --- a/trunk/kernel/sched.c +++ b/trunk/kernel/sched.c @@ -700,14 +700,19 @@ static int recalc_task_prio(task_t *p, unsigned long long now) if (likely(sleep_time > 0)) { /* * User tasks that sleep a long time are categorised as - * idle and will get just interactive status to stay active & - * prevent them suddenly becoming cpu hogs and starving - * other processes. + * idle. They will only have their sleep_avg increased to a + * level that makes them just interactive priority to stay + * active yet prevent them suddenly becoming cpu hogs and + * starving other processes. */ if (p->mm && p->sleep_type != SLEEP_NONINTERACTIVE && sleep_time > INTERACTIVE_SLEEP(p)) { - p->sleep_avg = JIFFIES_TO_NS(MAX_SLEEP_AVG - - DEF_TIMESLICE); + unsigned long ceiling; + + ceiling = JIFFIES_TO_NS(MAX_SLEEP_AVG - + DEF_TIMESLICE); + if (p->sleep_avg < ceiling) + p->sleep_avg = ceiling; } else { /* * Tasks waking from uninterruptible sleep are