diff options
Diffstat (limited to 'kernel/sched.c')
-rw-r--r-- | kernel/sched.c | 15 |
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 |