Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ede3d0fb authored by Con Kolivas's avatar Con Kolivas Committed by Linus Torvalds
Browse files

[PATCH] sched: consider migration thread with smp nice



The intermittent scheduling of the migration thread at ultra high priority
makes the smp nice handling see that runqueue as being heavily loaded.  The
migration thread itself actually handles the balancing so its influence on
priority balancing should be ignored.

Signed-off-by: default avatarCon Kolivas <kernel@kolivas.org>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Nick Piggin <nickpiggin@yahoo.com.au>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 6dd4a85b
Loading
Loading
Loading
Loading
+26 −9
Original line number Diff line number Diff line
@@ -670,6 +670,31 @@ static inline void dec_prio_bias(runqueue_t *rq, int prio)
{
	rq->prio_bias -= MAX_PRIO - prio;
}

static inline void inc_nr_running(task_t *p, runqueue_t *rq)
{
	rq->nr_running++;
	if (rt_task(p)) {
		if (p != rq->migration_thread)
			/*
			 * The migration thread does the actual balancing. Do
			 * not bias by its priority as the ultra high priority
			 * will skew balancing adversely.
			 */
			inc_prio_bias(rq, p->prio);
	} else
		inc_prio_bias(rq, p->static_prio);
}

static inline void dec_nr_running(task_t *p, runqueue_t *rq)
{
	rq->nr_running--;
	if (rt_task(p)) {
		if (p != rq->migration_thread)
			dec_prio_bias(rq, p->prio);
	} else
		dec_prio_bias(rq, p->static_prio);
}
#else
static inline void inc_prio_bias(runqueue_t *rq, int prio)
{
@@ -678,25 +703,17 @@ static inline void inc_prio_bias(runqueue_t *rq, int prio)
static inline void dec_prio_bias(runqueue_t *rq, int prio)
{
}
#endif

static inline void inc_nr_running(task_t *p, runqueue_t *rq)
{
	rq->nr_running++;
	if (rt_task(p))
		inc_prio_bias(rq, p->prio);
	else
		inc_prio_bias(rq, p->static_prio);
}

static inline void dec_nr_running(task_t *p, runqueue_t *rq)
{
	rq->nr_running--;
	if (rt_task(p))
		dec_prio_bias(rq, p->prio);
	else
		dec_prio_bias(rq, p->static_prio);
}
#endif

/*
 * __activate_task - move a task to the runqueue.