sched: balance RT task resched only on runqueue
[sfrench/cifs-2.6.git] / kernel / sched_rt.c
index 76e828517541b742c960de0b48bd503ea88f99d6..0a6d2e516420516cb1d0c35a5345db1f356f71ab 100644 (file)
@@ -1107,9 +1107,11 @@ static void prio_changed_rt(struct rq *rq, struct task_struct *p,
                        pull_rt_task(rq);
                /*
                 * If there's a higher priority task waiting to run
-                * then reschedule.
+                * then reschedule. Note, the above pull_rt_task
+                * can release the rq lock and p could migrate.
+                * Only reschedule if p is still on the same runqueue.
                 */
-               if (p->prio > rq->rt.highest_prio)
+               if (p->prio > rq->rt.highest_prio && rq->curr == p)
                        resched_task(p);
 #else
                /* For UP simply resched on drop of prio */