[PATCH] sched: fix rt_nr_migratory corruption raised in push_rt_task()

From: Hillf Danton
Date: Mon May 30 2011 - 09:39:56 EST


When pushing, if a pushable task could not be pushed, it is dequeued with no
updating the rt_nr_migratory element of RT run-queue, then rt_nr_migratory is
corrupted, which is fixed by removing the dequeue operation.

Signed-off-by: Hillf Danton <dhillf@xxxxxxxxx>
---
kernel/sched_rt.c | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/kernel/sched_rt.c b/kernel/sched_rt.c
index 88725c9..496e06a 100644
--- a/kernel/sched_rt.c
+++ b/kernel/sched_rt.c
@@ -1378,6 +1378,7 @@ static int push_rt_task(struct rq *rq)
{
struct task_struct *next_task;
struct rq *lowest_rq;
+ int ret = 1;

if (!rq->rt.overloaded)
return 0;
@@ -1425,7 +1426,7 @@ retry:
* since the other cpus will pull from us when they
* are ready.
*/
- dequeue_pushable_task(rq, next_task);
+ ret = 0;
goto out;
}

@@ -1452,7 +1453,7 @@ retry:
out:
put_task_struct(next_task);

- return 1;
+ return ret;
}

static void push_rt_tasks(struct rq *rq)
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/