aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/sched_rt.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/sched_rt.c')
-rw-r--r--kernel/sched_rt.c19
1 files changed, 2 insertions, 17 deletions
diff --git a/kernel/sched_rt.c b/kernel/sched_rt.c
index 2b0626a43cb8..5b559e8c8aa6 100644
--- a/kernel/sched_rt.c
+++ b/kernel/sched_rt.c
@@ -176,26 +176,12 @@ static unsigned long
176load_balance_rt(struct rq *this_rq, int this_cpu, struct rq *busiest, 176load_balance_rt(struct rq *this_rq, int this_cpu, struct rq *busiest,
177 unsigned long max_nr_move, unsigned long max_load_move, 177 unsigned long max_nr_move, unsigned long max_load_move,
178 struct sched_domain *sd, enum cpu_idle_type idle, 178 struct sched_domain *sd, enum cpu_idle_type idle,
179 int *all_pinned) 179 int *all_pinned, int *this_best_prio)
180{ 180{
181 int this_best_prio, best_prio, best_prio_seen = 0;
182 int nr_moved; 181 int nr_moved;
183 struct rq_iterator rt_rq_iterator; 182 struct rq_iterator rt_rq_iterator;
184 unsigned long load_moved; 183 unsigned long load_moved;
185 184
186 best_prio = sched_find_first_bit(busiest->rt.active.bitmap);
187 this_best_prio = sched_find_first_bit(this_rq->rt.active.bitmap);
188
189 /*
190 * Enable handling of the case where there is more than one task
191 * with the best priority. If the current running task is one
192 * of those with prio==best_prio we know it won't be moved
193 * and therefore it's safe to override the skip (based on load)
194 * of any task we find with that prio.
195 */
196 if (busiest->curr->prio == best_prio)
197 best_prio_seen = 1;
198
199 rt_rq_iterator.start = load_balance_start_rt; 185 rt_rq_iterator.start = load_balance_start_rt;
200 rt_rq_iterator.next = load_balance_next_rt; 186 rt_rq_iterator.next = load_balance_next_rt;
201 /* pass 'busiest' rq argument into 187 /* pass 'busiest' rq argument into
@@ -205,8 +191,7 @@ load_balance_rt(struct rq *this_rq, int this_cpu, struct rq *busiest,
205 191
206 nr_moved = balance_tasks(this_rq, this_cpu, busiest, max_nr_move, 192 nr_moved = balance_tasks(this_rq, this_cpu, busiest, max_nr_move,
207 max_load_move, sd, idle, all_pinned, &load_moved, 193 max_load_move, sd, idle, all_pinned, &load_moved,
208 this_best_prio, best_prio, best_prio_seen, 194 this_best_prio, &rt_rq_iterator);
209 &rt_rq_iterator);
210 195
211 return load_moved; 196 return load_moved;
212} 197}