diff options
Diffstat (limited to 'kernel')
| -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 589e55a422..7b37193111 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 |
