diff options
Diffstat (limited to 'kernel/sched_rt.c')
-rw-r--r-- | kernel/sched_rt.c | 19 |
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 | |||
176 | load_balance_rt(struct rq *this_rq, int this_cpu, struct rq *busiest, | 176 | load_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 | } |