From 392a0aaadde6584c70df353a01e9676b94c0222a Mon Sep 17 00:00:00 2001 From: Con Kolivas Date: Fri, 31 Mar 2006 02:31:29 -0800 Subject: [PATCH] --- yaml --- r: 24923 b: refs/heads/master c: d425b274ba83ba4e7746a40446ec0ba3267de51f h: refs/heads/master i: 24921: ebf06307a27960652827100548422122fd1b34c0 24919: 335c5272985ee29b9a8cf776c249774696fef1c1 v: v3 --- [refs] | 2 +- trunk/include/linux/sched.h | 1 + trunk/kernel/sched.c | 10 +++++++--- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 5e2726462ccc..fc783ebfa32b 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 7c4bb1f9b3788309e1159961c606ba0bdf7ed382 +refs/heads/master: d425b274ba83ba4e7746a40446ec0ba3267de51f diff --git a/trunk/include/linux/sched.h b/trunk/include/linux/sched.h index c4fd3fcd3feb..78c40dd2e19a 100644 --- a/trunk/include/linux/sched.h +++ b/trunk/include/linux/sched.h @@ -484,6 +484,7 @@ struct signal_struct { #define MAX_PRIO (MAX_RT_PRIO + 40) #define rt_task(p) (unlikely((p)->prio < MAX_RT_PRIO)) +#define batch_task(p) (unlikely((p)->policy == SCHED_BATCH)) /* * Some day this will be a full-fledged user tracking system.. diff --git a/trunk/kernel/sched.c b/trunk/kernel/sched.c index 73bb4d9ef989..dd153d6f8a04 100644 --- a/trunk/kernel/sched.c +++ b/trunk/kernel/sched.c @@ -667,9 +667,13 @@ static int effective_prio(task_t *p) /* * __activate_task - move a task to the runqueue. */ -static inline void __activate_task(task_t *p, runqueue_t *rq) +static void __activate_task(task_t *p, runqueue_t *rq) { - enqueue_task(p, rq->active); + prio_array_t *target = rq->active; + + if (batch_task(p)) + target = rq->expired; + enqueue_task(p, target); rq->nr_running++; } @@ -688,7 +692,7 @@ static int recalc_task_prio(task_t *p, unsigned long long now) unsigned long long __sleep_time = now - p->timestamp; unsigned long sleep_time; - if (unlikely(p->policy == SCHED_BATCH)) + if (batch_task(p)) sleep_time = 0; else { if (__sleep_time > NS_MAX_SLEEP_AVG)