diff options
-rw-r--r-- | kernel/sched_rt.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/kernel/sched_rt.c b/kernel/sched_rt.c index f8fb3edadcaa..d047f288c411 100644 --- a/kernel/sched_rt.c +++ b/kernel/sched_rt.c | |||
@@ -1218,6 +1218,18 @@ static int pull_rt_task(struct rq *this_rq) | |||
1218 | continue; | 1218 | continue; |
1219 | 1219 | ||
1220 | src_rq = cpu_rq(cpu); | 1220 | src_rq = cpu_rq(cpu); |
1221 | |||
1222 | /* | ||
1223 | * Don't bother taking the src_rq->lock if the next highest | ||
1224 | * task is known to be lower-priority than our current task. | ||
1225 | * This may look racy, but if this value is about to go | ||
1226 | * logically higher, the src_rq will push this task away. | ||
1227 | * And if its going logically lower, we do not care | ||
1228 | */ | ||
1229 | if (src_rq->rt.highest_prio.next >= | ||
1230 | this_rq->rt.highest_prio.curr) | ||
1231 | continue; | ||
1232 | |||
1221 | /* | 1233 | /* |
1222 | * We can potentially drop this_rq's lock in | 1234 | * We can potentially drop this_rq's lock in |
1223 | * double_lock_balance, and another CPU could | 1235 | * double_lock_balance, and another CPU could |