| From 10db390cadda977081a7a34f60b8ce62557521c9 Mon Sep 17 00:00:00 2001 |
| From: stable-bot for Steven Rostedt <srostedt@redhat.com> |
| Date: Thu, 10 Feb 2011 10:21:08 +0100 |
| Subject: sched: Give CPU bound RT tasks preference |
| |
| From:: Steven Rostedt <srostedt@redhat.com> |
| |
| Commit: b3bc211cfe7d5fe94b310480d78e00bea96fbf2a upstream |
| |
| If a high priority task is waking up on a CPU that is running a |
| lower priority task that is bound to a CPU, see if we can move the |
| high RT task to another CPU first. Note, if all other CPUs are |
| running higher priority tasks than the CPU bounded current task, |
| then it will be preempted regardless. |
| |
| Signed-off-by: Steven Rostedt <rostedt@goodmis.org> |
| Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> |
| Cc: Gregory Haskins <ghaskins@novell.com> |
| LKML-Reference: <20100921024138.888922071@goodmis.org> |
| Signed-off-by: Ingo Molnar <mingo@elte.hu> |
| Signed-off-by: Mike Galbraith <efault@gmx.de> |
| Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| --- |
| kernel/sched_rt.c | 8 +++++--- |
| 1 file changed, 5 insertions(+), 3 deletions(-) |
| |
| --- a/kernel/sched_rt.c |
| +++ b/kernel/sched_rt.c |
| @@ -965,7 +965,8 @@ select_task_rq_rt(struct rq *rq, struct |
| * For equal prio tasks, we just let the scheduler sort it out. |
| */ |
| if (unlikely(rt_task(rq->curr)) && |
| - rq->curr->prio < p->prio && |
| + (rq->curr->rt.nr_cpus_allowed < 2 || |
| + rq->curr->prio < p->prio) && |
| (p->rt.nr_cpus_allowed > 1)) { |
| int cpu = find_lowest_rq(p); |
| |
| @@ -1493,9 +1494,10 @@ static void task_woken_rt(struct rq *rq, |
| if (!task_running(rq, p) && |
| !test_tsk_need_resched(rq->curr) && |
| has_pushable_tasks(rq) && |
| + p->rt.nr_cpus_allowed > 1 && |
| rt_task(rq->curr) && |
| - rq->curr->prio < p->prio && |
| - p->rt.nr_cpus_allowed > 1) |
| + (rq->curr->rt.nr_cpus_allowed < 2 || |
| + rq->curr->prio < p->prio)) |
| push_rt_tasks(rq); |
| } |
| |