aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/sched.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/kernel/sched.c b/kernel/sched.c
index 589e55a42214..7b371931114f 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -700,14 +700,19 @@ static int recalc_task_prio(task_t *p, unsigned long long now)
700 if (likely(sleep_time > 0)) { 700 if (likely(sleep_time > 0)) {
701 /* 701 /*
702 * User tasks that sleep a long time are categorised as 702 * User tasks that sleep a long time are categorised as
703 * idle and will get just interactive status to stay active & 703 * idle. They will only have their sleep_avg increased to a
704 * prevent them suddenly becoming cpu hogs and starving 704 * level that makes them just interactive priority to stay
705 * other processes. 705 * active yet prevent them suddenly becoming cpu hogs and
706 * starving other processes.
706 */ 707 */
707 if (p->mm && p->sleep_type != SLEEP_NONINTERACTIVE && 708 if (p->mm && p->sleep_type != SLEEP_NONINTERACTIVE &&
708 sleep_time > INTERACTIVE_SLEEP(p)) { 709 sleep_time > INTERACTIVE_SLEEP(p)) {
709 p->sleep_avg = JIFFIES_TO_NS(MAX_SLEEP_AVG - 710 unsigned long ceiling;
710 DEF_TIMESLICE); 711
712 ceiling = JIFFIES_TO_NS(MAX_SLEEP_AVG -
713 DEF_TIMESLICE);
714 if (p->sleep_avg < ceiling)
715 p->sleep_avg = ceiling;
711 } else { 716 } else {
712 /* 717 /*
713 * Tasks waking from uninterruptible sleep are 718 * Tasks waking from uninterruptible sleep are