diff --git a/[refs] b/[refs] index 778fd7b2a639..9661dd1b4036 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 810b38179e9e4d4f57b4b733767bb08f8291a965 +refs/heads/master: 6fa46fa526f2cab9ce21fa5e39501553a40d196d diff --git a/trunk/kernel/sched_rt.c b/trunk/kernel/sched_rt.c index 76e828517541..0a6d2e516420 100644 --- a/trunk/kernel/sched_rt.c +++ b/trunk/kernel/sched_rt.c @@ -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 */