sched: use a 2-d bitmap for searching lowest-pri CPU
[safe/jmp/linux-2.6] / kernel / sched_rt.c
1 /*
2  * Real-Time Scheduling Class (mapped to the SCHED_FIFO and SCHED_RR
3  * policies)
4  */
5
6 #ifdef CONFIG_SMP
7
8 static inline int rt_overloaded(struct rq *rq)
9 {
10         return atomic_read(&rq->rd->rto_count);
11 }
12
13 static inline void rt_set_overload(struct rq *rq)
14 {
15         cpu_set(rq->cpu, rq->rd->rto_mask);
16         /*
17          * Make sure the mask is visible before we set
18          * the overload count. That is checked to determine
19          * if we should look at the mask. It would be a shame
20          * if we looked at the mask, but the mask was not
21          * updated yet.
22          */
23         wmb();
24         atomic_inc(&rq->rd->rto_count);
25 }
26
27 static inline void rt_clear_overload(struct rq *rq)
28 {
29         /* the order here really doesn't matter */
30         atomic_dec(&rq->rd->rto_count);
31         cpu_clear(rq->cpu, rq->rd->rto_mask);
32 }
33
34 static void update_rt_migration(struct rq *rq)
35 {
36         if (rq->rt.rt_nr_migratory && (rq->rt.rt_nr_running > 1)) {
37                 if (!rq->rt.overloaded) {
38                         rt_set_overload(rq);
39                         rq->rt.overloaded = 1;
40                 }
41         } else if (rq->rt.overloaded) {
42                 rt_clear_overload(rq);
43                 rq->rt.overloaded = 0;
44         }
45 }
46 #endif /* CONFIG_SMP */
47
48 static inline struct task_struct *rt_task_of(struct sched_rt_entity *rt_se)
49 {
50         return container_of(rt_se, struct task_struct, rt);
51 }
52
53 static inline int on_rt_rq(struct sched_rt_entity *rt_se)
54 {
55         return !list_empty(&rt_se->run_list);
56 }
57
58 #ifdef CONFIG_RT_GROUP_SCHED
59
60 static inline u64 sched_rt_runtime(struct rt_rq *rt_rq)
61 {
62         if (!rt_rq->tg)
63                 return RUNTIME_INF;
64
65         return rt_rq->rt_runtime;
66 }
67
68 static inline u64 sched_rt_period(struct rt_rq *rt_rq)
69 {
70         return ktime_to_ns(rt_rq->tg->rt_bandwidth.rt_period);
71 }
72
73 #define for_each_leaf_rt_rq(rt_rq, rq) \
74         list_for_each_entry(rt_rq, &rq->leaf_rt_rq_list, leaf_rt_rq_list)
75
76 static inline struct rq *rq_of_rt_rq(struct rt_rq *rt_rq)
77 {
78         return rt_rq->rq;
79 }
80
81 static inline struct rt_rq *rt_rq_of_se(struct sched_rt_entity *rt_se)
82 {
83         return rt_se->rt_rq;
84 }
85
86 #define for_each_sched_rt_entity(rt_se) \
87         for (; rt_se; rt_se = rt_se->parent)
88
89 static inline struct rt_rq *group_rt_rq(struct sched_rt_entity *rt_se)
90 {
91         return rt_se->my_q;
92 }
93
94 static void enqueue_rt_entity(struct sched_rt_entity *rt_se);
95 static void dequeue_rt_entity(struct sched_rt_entity *rt_se);
96
97 static void sched_rt_rq_enqueue(struct rt_rq *rt_rq)
98 {
99         struct sched_rt_entity *rt_se = rt_rq->rt_se;
100
101         if (rt_se && !on_rt_rq(rt_se) && rt_rq->rt_nr_running) {
102                 struct task_struct *curr = rq_of_rt_rq(rt_rq)->curr;
103
104                 enqueue_rt_entity(rt_se);
105                 if (rt_rq->highest_prio < curr->prio)
106                         resched_task(curr);
107         }
108 }
109
110 static void sched_rt_rq_dequeue(struct rt_rq *rt_rq)
111 {
112         struct sched_rt_entity *rt_se = rt_rq->rt_se;
113
114         if (rt_se && on_rt_rq(rt_se))
115                 dequeue_rt_entity(rt_se);
116 }
117
118 static inline int rt_rq_throttled(struct rt_rq *rt_rq)
119 {
120         return rt_rq->rt_throttled && !rt_rq->rt_nr_boosted;
121 }
122
123 static int rt_se_boosted(struct sched_rt_entity *rt_se)
124 {
125         struct rt_rq *rt_rq = group_rt_rq(rt_se);
126         struct task_struct *p;
127
128         if (rt_rq)
129                 return !!rt_rq->rt_nr_boosted;
130
131         p = rt_task_of(rt_se);
132         return p->prio != p->normal_prio;
133 }
134
135 #ifdef CONFIG_SMP
136 static inline cpumask_t sched_rt_period_mask(void)
137 {
138         return cpu_rq(smp_processor_id())->rd->span;
139 }
140 #else
141 static inline cpumask_t sched_rt_period_mask(void)
142 {
143         return cpu_online_map;
144 }
145 #endif
146
147 static inline
148 struct rt_rq *sched_rt_period_rt_rq(struct rt_bandwidth *rt_b, int cpu)
149 {
150         return container_of(rt_b, struct task_group, rt_bandwidth)->rt_rq[cpu];
151 }
152
153 static inline struct rt_bandwidth *sched_rt_bandwidth(struct rt_rq *rt_rq)
154 {
155         return &rt_rq->tg->rt_bandwidth;
156 }
157
158 #else
159
160 static inline u64 sched_rt_runtime(struct rt_rq *rt_rq)
161 {
162         return rt_rq->rt_runtime;
163 }
164
165 static inline u64 sched_rt_period(struct rt_rq *rt_rq)
166 {
167         return ktime_to_ns(def_rt_bandwidth.rt_period);
168 }
169
170 #define for_each_leaf_rt_rq(rt_rq, rq) \
171         for (rt_rq = &rq->rt; rt_rq; rt_rq = NULL)
172
173 static inline struct rq *rq_of_rt_rq(struct rt_rq *rt_rq)
174 {
175         return container_of(rt_rq, struct rq, rt);
176 }
177
178 static inline struct rt_rq *rt_rq_of_se(struct sched_rt_entity *rt_se)
179 {
180         struct task_struct *p = rt_task_of(rt_se);
181         struct rq *rq = task_rq(p);
182
183         return &rq->rt;
184 }
185
186 #define for_each_sched_rt_entity(rt_se) \
187         for (; rt_se; rt_se = NULL)
188
189 static inline struct rt_rq *group_rt_rq(struct sched_rt_entity *rt_se)
190 {
191         return NULL;
192 }
193
194 static inline void sched_rt_rq_enqueue(struct rt_rq *rt_rq)
195 {
196 }
197
198 static inline void sched_rt_rq_dequeue(struct rt_rq *rt_rq)
199 {
200 }
201
202 static inline int rt_rq_throttled(struct rt_rq *rt_rq)
203 {
204         return rt_rq->rt_throttled;
205 }
206
207 static inline cpumask_t sched_rt_period_mask(void)
208 {
209         return cpu_online_map;
210 }
211
212 static inline
213 struct rt_rq *sched_rt_period_rt_rq(struct rt_bandwidth *rt_b, int cpu)
214 {
215         return &cpu_rq(cpu)->rt;
216 }
217
218 static inline struct rt_bandwidth *sched_rt_bandwidth(struct rt_rq *rt_rq)
219 {
220         return &def_rt_bandwidth;
221 }
222
223 #endif
224
225 static int do_sched_rt_period_timer(struct rt_bandwidth *rt_b, int overrun)
226 {
227         int i, idle = 1;
228         cpumask_t span;
229
230         if (rt_b->rt_runtime == RUNTIME_INF)
231                 return 1;
232
233         span = sched_rt_period_mask();
234         for_each_cpu_mask(i, span) {
235                 int enqueue = 0;
236                 struct rt_rq *rt_rq = sched_rt_period_rt_rq(rt_b, i);
237                 struct rq *rq = rq_of_rt_rq(rt_rq);
238
239                 spin_lock(&rq->lock);
240                 if (rt_rq->rt_time) {
241                         u64 runtime;
242
243                         spin_lock(&rt_rq->rt_runtime_lock);
244                         runtime = rt_rq->rt_runtime;
245                         rt_rq->rt_time -= min(rt_rq->rt_time, overrun*runtime);
246                         if (rt_rq->rt_throttled && rt_rq->rt_time < runtime) {
247                                 rt_rq->rt_throttled = 0;
248                                 enqueue = 1;
249                         }
250                         if (rt_rq->rt_time || rt_rq->rt_nr_running)
251                                 idle = 0;
252                         spin_unlock(&rt_rq->rt_runtime_lock);
253                 }
254
255                 if (enqueue)
256                         sched_rt_rq_enqueue(rt_rq);
257                 spin_unlock(&rq->lock);
258         }
259
260         return idle;
261 }
262
263 #ifdef CONFIG_SMP
264 static int balance_runtime(struct rt_rq *rt_rq)
265 {
266         struct rt_bandwidth *rt_b = sched_rt_bandwidth(rt_rq);
267         struct root_domain *rd = cpu_rq(smp_processor_id())->rd;
268         int i, weight, more = 0;
269         u64 rt_period;
270
271         weight = cpus_weight(rd->span);
272
273         spin_lock(&rt_b->rt_runtime_lock);
274         rt_period = ktime_to_ns(rt_b->rt_period);
275         for_each_cpu_mask(i, rd->span) {
276                 struct rt_rq *iter = sched_rt_period_rt_rq(rt_b, i);
277                 s64 diff;
278
279                 if (iter == rt_rq)
280                         continue;
281
282                 spin_lock(&iter->rt_runtime_lock);
283                 diff = iter->rt_runtime - iter->rt_time;
284                 if (diff > 0) {
285                         do_div(diff, weight);
286                         if (rt_rq->rt_runtime + diff > rt_period)
287                                 diff = rt_period - rt_rq->rt_runtime;
288                         iter->rt_runtime -= diff;
289                         rt_rq->rt_runtime += diff;
290                         more = 1;
291                         if (rt_rq->rt_runtime == rt_period) {
292                                 spin_unlock(&iter->rt_runtime_lock);
293                                 break;
294                         }
295                 }
296                 spin_unlock(&iter->rt_runtime_lock);
297         }
298         spin_unlock(&rt_b->rt_runtime_lock);
299
300         return more;
301 }
302 #endif
303
304 static inline int rt_se_prio(struct sched_rt_entity *rt_se)
305 {
306 #ifdef CONFIG_RT_GROUP_SCHED
307         struct rt_rq *rt_rq = group_rt_rq(rt_se);
308
309         if (rt_rq)
310                 return rt_rq->highest_prio;
311 #endif
312
313         return rt_task_of(rt_se)->prio;
314 }
315
316 static int sched_rt_runtime_exceeded(struct rt_rq *rt_rq)
317 {
318         u64 runtime = sched_rt_runtime(rt_rq);
319
320         if (runtime == RUNTIME_INF)
321                 return 0;
322
323         if (rt_rq->rt_throttled)
324                 return rt_rq_throttled(rt_rq);
325
326         if (sched_rt_runtime(rt_rq) >= sched_rt_period(rt_rq))
327                 return 0;
328
329 #ifdef CONFIG_SMP
330         if (rt_rq->rt_time > runtime) {
331                 int more;
332
333                 spin_unlock(&rt_rq->rt_runtime_lock);
334                 more = balance_runtime(rt_rq);
335                 spin_lock(&rt_rq->rt_runtime_lock);
336
337                 if (more)
338                         runtime = sched_rt_runtime(rt_rq);
339         }
340 #endif
341
342         if (rt_rq->rt_time > runtime) {
343                 rt_rq->rt_throttled = 1;
344                 if (rt_rq_throttled(rt_rq)) {
345                         sched_rt_rq_dequeue(rt_rq);
346                         return 1;
347                 }
348         }
349
350         return 0;
351 }
352
353 /*
354  * Update the current task's runtime statistics. Skip current tasks that
355  * are not in our scheduling class.
356  */
357 static void update_curr_rt(struct rq *rq)
358 {
359         struct task_struct *curr = rq->curr;
360         struct sched_rt_entity *rt_se = &curr->rt;
361         struct rt_rq *rt_rq = rt_rq_of_se(rt_se);
362         u64 delta_exec;
363
364         if (!task_has_rt_policy(curr))
365                 return;
366
367         delta_exec = rq->clock - curr->se.exec_start;
368         if (unlikely((s64)delta_exec < 0))
369                 delta_exec = 0;
370
371         schedstat_set(curr->se.exec_max, max(curr->se.exec_max, delta_exec));
372
373         curr->se.sum_exec_runtime += delta_exec;
374         curr->se.exec_start = rq->clock;
375         cpuacct_charge(curr, delta_exec);
376
377         for_each_sched_rt_entity(rt_se) {
378                 rt_rq = rt_rq_of_se(rt_se);
379
380                 spin_lock(&rt_rq->rt_runtime_lock);
381                 rt_rq->rt_time += delta_exec;
382                 if (sched_rt_runtime_exceeded(rt_rq))
383                         resched_task(curr);
384                 spin_unlock(&rt_rq->rt_runtime_lock);
385         }
386 }
387
388 static inline
389 void inc_rt_tasks(struct sched_rt_entity *rt_se, struct rt_rq *rt_rq)
390 {
391         WARN_ON(!rt_prio(rt_se_prio(rt_se)));
392         rt_rq->rt_nr_running++;
393 #if defined CONFIG_SMP || defined CONFIG_RT_GROUP_SCHED
394         if (rt_se_prio(rt_se) < rt_rq->highest_prio) {
395                 struct rq *rq = rq_of_rt_rq(rt_rq);
396                 rt_rq->highest_prio = rt_se_prio(rt_se);
397                 cpupri_set(&rq->rd->cpupri, rq->cpu, rt_se_prio(rt_se));
398         }
399 #endif
400 #ifdef CONFIG_SMP
401         if (rt_se->nr_cpus_allowed > 1) {
402                 struct rq *rq = rq_of_rt_rq(rt_rq);
403                 rq->rt.rt_nr_migratory++;
404         }
405
406         update_rt_migration(rq_of_rt_rq(rt_rq));
407 #endif
408 #ifdef CONFIG_RT_GROUP_SCHED
409         if (rt_se_boosted(rt_se))
410                 rt_rq->rt_nr_boosted++;
411
412         if (rt_rq->tg)
413                 start_rt_bandwidth(&rt_rq->tg->rt_bandwidth);
414 #else
415         start_rt_bandwidth(&def_rt_bandwidth);
416 #endif
417 }
418
419 static inline
420 void dec_rt_tasks(struct sched_rt_entity *rt_se, struct rt_rq *rt_rq)
421 {
422 #ifdef CONFIG_SMP
423         int highest_prio = rt_rq->highest_prio;
424 #endif
425
426         WARN_ON(!rt_prio(rt_se_prio(rt_se)));
427         WARN_ON(!rt_rq->rt_nr_running);
428         rt_rq->rt_nr_running--;
429 #if defined CONFIG_SMP || defined CONFIG_RT_GROUP_SCHED
430         if (rt_rq->rt_nr_running) {
431                 struct rt_prio_array *array;
432
433                 WARN_ON(rt_se_prio(rt_se) < rt_rq->highest_prio);
434                 if (rt_se_prio(rt_se) == rt_rq->highest_prio) {
435                         /* recalculate */
436                         array = &rt_rq->active;
437                         rt_rq->highest_prio =
438                                 sched_find_first_bit(array->bitmap);
439                 } /* otherwise leave rq->highest prio alone */
440         } else
441                 rt_rq->highest_prio = MAX_RT_PRIO;
442 #endif
443 #ifdef CONFIG_SMP
444         if (rt_se->nr_cpus_allowed > 1) {
445                 struct rq *rq = rq_of_rt_rq(rt_rq);
446                 rq->rt.rt_nr_migratory--;
447         }
448
449         if (rt_rq->highest_prio != highest_prio) {
450                 struct rq *rq = rq_of_rt_rq(rt_rq);
451                 cpupri_set(&rq->rd->cpupri, rq->cpu, rt_rq->highest_prio);
452         }
453
454         update_rt_migration(rq_of_rt_rq(rt_rq));
455 #endif /* CONFIG_SMP */
456 #ifdef CONFIG_RT_GROUP_SCHED
457         if (rt_se_boosted(rt_se))
458                 rt_rq->rt_nr_boosted--;
459
460         WARN_ON(!rt_rq->rt_nr_running && rt_rq->rt_nr_boosted);
461 #endif
462 }
463
464 static void enqueue_rt_entity(struct sched_rt_entity *rt_se)
465 {
466         struct rt_rq *rt_rq = rt_rq_of_se(rt_se);
467         struct rt_prio_array *array = &rt_rq->active;
468         struct rt_rq *group_rq = group_rt_rq(rt_se);
469
470         if (group_rq && rt_rq_throttled(group_rq))
471                 return;
472
473         if (rt_se->nr_cpus_allowed == 1)
474                 list_add_tail(&rt_se->run_list,
475                               array->xqueue + rt_se_prio(rt_se));
476         else
477                 list_add_tail(&rt_se->run_list,
478                               array->squeue + rt_se_prio(rt_se));
479
480         __set_bit(rt_se_prio(rt_se), array->bitmap);
481
482         inc_rt_tasks(rt_se, rt_rq);
483 }
484
485 static void dequeue_rt_entity(struct sched_rt_entity *rt_se)
486 {
487         struct rt_rq *rt_rq = rt_rq_of_se(rt_se);
488         struct rt_prio_array *array = &rt_rq->active;
489
490         list_del_init(&rt_se->run_list);
491         if (list_empty(array->squeue + rt_se_prio(rt_se))
492             && list_empty(array->xqueue + rt_se_prio(rt_se)))
493                 __clear_bit(rt_se_prio(rt_se), array->bitmap);
494
495         dec_rt_tasks(rt_se, rt_rq);
496 }
497
498 /*
499  * Because the prio of an upper entry depends on the lower
500  * entries, we must remove entries top - down.
501  */
502 static void dequeue_rt_stack(struct task_struct *p)
503 {
504         struct sched_rt_entity *rt_se, *back = NULL;
505
506         rt_se = &p->rt;
507         for_each_sched_rt_entity(rt_se) {
508                 rt_se->back = back;
509                 back = rt_se;
510         }
511
512         for (rt_se = back; rt_se; rt_se = rt_se->back) {
513                 if (on_rt_rq(rt_se))
514                         dequeue_rt_entity(rt_se);
515         }
516 }
517
518 /*
519  * Adding/removing a task to/from a priority array:
520  */
521 static void enqueue_task_rt(struct rq *rq, struct task_struct *p, int wakeup)
522 {
523         struct sched_rt_entity *rt_se = &p->rt;
524
525         if (wakeup)
526                 rt_se->timeout = 0;
527
528         dequeue_rt_stack(p);
529
530         /*
531          * enqueue everybody, bottom - up.
532          */
533         for_each_sched_rt_entity(rt_se)
534                 enqueue_rt_entity(rt_se);
535 }
536
537 static void dequeue_task_rt(struct rq *rq, struct task_struct *p, int sleep)
538 {
539         struct sched_rt_entity *rt_se = &p->rt;
540         struct rt_rq *rt_rq;
541
542         update_curr_rt(rq);
543
544         dequeue_rt_stack(p);
545
546         /*
547          * re-enqueue all non-empty rt_rq entities.
548          */
549         for_each_sched_rt_entity(rt_se) {
550                 rt_rq = group_rt_rq(rt_se);
551                 if (rt_rq && rt_rq->rt_nr_running)
552                         enqueue_rt_entity(rt_se);
553         }
554 }
555
556 /*
557  * Put task to the end of the run list without the overhead of dequeue
558  * followed by enqueue.
559  *
560  * Note: We always enqueue the task to the shared-queue, regardless of its
561  * previous position w.r.t. exclusive vs shared.  This is so that exclusive RR
562  * tasks fairly round-robin with all tasks on the runqueue, not just other
563  * exclusive tasks.
564  */
565 static
566 void requeue_rt_entity(struct rt_rq *rt_rq, struct sched_rt_entity *rt_se)
567 {
568         struct rt_prio_array *array = &rt_rq->active;
569
570         list_del_init(&rt_se->run_list);
571         list_add_tail(&rt_se->run_list, array->squeue + rt_se_prio(rt_se));
572 }
573
574 static void requeue_task_rt(struct rq *rq, struct task_struct *p)
575 {
576         struct sched_rt_entity *rt_se = &p->rt;
577         struct rt_rq *rt_rq;
578
579         for_each_sched_rt_entity(rt_se) {
580                 rt_rq = rt_rq_of_se(rt_se);
581                 requeue_rt_entity(rt_rq, rt_se);
582         }
583 }
584
585 static void yield_task_rt(struct rq *rq)
586 {
587         requeue_task_rt(rq, rq->curr);
588 }
589
590 #ifdef CONFIG_SMP
591 static int find_lowest_rq(struct task_struct *task);
592
593 static int select_task_rq_rt(struct task_struct *p, int sync)
594 {
595         struct rq *rq = task_rq(p);
596
597         /*
598          * If the current task is an RT task, then
599          * try to see if we can wake this RT task up on another
600          * runqueue. Otherwise simply start this RT task
601          * on its current runqueue.
602          *
603          * We want to avoid overloading runqueues. Even if
604          * the RT task is of higher priority than the current RT task.
605          * RT tasks behave differently than other tasks. If
606          * one gets preempted, we try to push it off to another queue.
607          * So trying to keep a preempting RT task on the same
608          * cache hot CPU will force the running RT task to
609          * a cold CPU. So we waste all the cache for the lower
610          * RT task in hopes of saving some of a RT task
611          * that is just being woken and probably will have
612          * cold cache anyway.
613          */
614         if (unlikely(rt_task(rq->curr)) &&
615             (p->rt.nr_cpus_allowed > 1)) {
616                 int cpu = find_lowest_rq(p);
617
618                 return (cpu == -1) ? task_cpu(p) : cpu;
619         }
620
621         /*
622          * Otherwise, just let it ride on the affined RQ and the
623          * post-schedule router will push the preempted task away
624          */
625         return task_cpu(p);
626 }
627 #endif /* CONFIG_SMP */
628
629 static struct sched_rt_entity *pick_next_rt_entity(struct rq *rq,
630                                                    struct rt_rq *rt_rq);
631
632 /*
633  * Preempt the current task with a newly woken task if needed:
634  */
635 static void check_preempt_curr_rt(struct rq *rq, struct task_struct *p)
636 {
637         if (p->prio < rq->curr->prio) {
638                 resched_task(rq->curr);
639                 return;
640         }
641
642 #ifdef CONFIG_SMP
643         /*
644          * If:
645          *
646          * - the newly woken task is of equal priority to the current task
647          * - the newly woken task is non-migratable while current is migratable
648          * - current will be preempted on the next reschedule
649          *
650          * we should check to see if current can readily move to a different
651          * cpu.  If so, we will reschedule to allow the push logic to try
652          * to move current somewhere else, making room for our non-migratable
653          * task.
654          */
655         if((p->prio == rq->curr->prio)
656            && p->rt.nr_cpus_allowed == 1
657            && rq->curr->rt.nr_cpus_allowed != 1
658            && pick_next_rt_entity(rq, &rq->rt) != &rq->curr->rt) {
659                 cpumask_t mask;
660
661                 if (cpupri_find(&rq->rd->cpupri, rq->curr, &mask))
662                         /*
663                          * There appears to be other cpus that can accept
664                          * current, so lets reschedule to try and push it away
665                          */
666                         resched_task(rq->curr);
667         }
668 #endif
669 }
670
671 static struct sched_rt_entity *pick_next_rt_entity(struct rq *rq,
672                                                    struct rt_rq *rt_rq)
673 {
674         struct rt_prio_array *array = &rt_rq->active;
675         struct sched_rt_entity *next = NULL;
676         struct list_head *queue;
677         int idx;
678
679         idx = sched_find_first_bit(array->bitmap);
680         BUG_ON(idx >= MAX_RT_PRIO);
681
682         queue = array->xqueue + idx;
683         if (!list_empty(queue))
684                 next = list_entry(queue->next, struct sched_rt_entity,
685                                   run_list);
686         else {
687                 queue = array->squeue + idx;
688                 next = list_entry(queue->next, struct sched_rt_entity,
689                                   run_list);
690         }
691
692         return next;
693 }
694
695 static struct task_struct *pick_next_task_rt(struct rq *rq)
696 {
697         struct sched_rt_entity *rt_se;
698         struct task_struct *p;
699         struct rt_rq *rt_rq;
700
701         rt_rq = &rq->rt;
702
703         if (unlikely(!rt_rq->rt_nr_running))
704                 return NULL;
705
706         if (rt_rq_throttled(rt_rq))
707                 return NULL;
708
709         do {
710                 rt_se = pick_next_rt_entity(rq, rt_rq);
711                 BUG_ON(!rt_se);
712                 rt_rq = group_rt_rq(rt_se);
713         } while (rt_rq);
714
715         p = rt_task_of(rt_se);
716         p->se.exec_start = rq->clock;
717         return p;
718 }
719
720 static void put_prev_task_rt(struct rq *rq, struct task_struct *p)
721 {
722         update_curr_rt(rq);
723         p->se.exec_start = 0;
724 }
725
726 #ifdef CONFIG_SMP
727
728 /* Only try algorithms three times */
729 #define RT_MAX_TRIES 3
730
731 static int double_lock_balance(struct rq *this_rq, struct rq *busiest);
732 static void deactivate_task(struct rq *rq, struct task_struct *p, int sleep);
733
734 static int pick_rt_task(struct rq *rq, struct task_struct *p, int cpu)
735 {
736         if (!task_running(rq, p) &&
737             (cpu < 0 || cpu_isset(cpu, p->cpus_allowed)) &&
738             (p->rt.nr_cpus_allowed > 1))
739                 return 1;
740         return 0;
741 }
742
743 /* Return the second highest RT task, NULL otherwise */
744 static struct task_struct *pick_next_highest_task_rt(struct rq *rq, int cpu)
745 {
746         struct task_struct *next = NULL;
747         struct sched_rt_entity *rt_se;
748         struct rt_prio_array *array;
749         struct rt_rq *rt_rq;
750         int idx;
751
752         for_each_leaf_rt_rq(rt_rq, rq) {
753                 array = &rt_rq->active;
754                 idx = sched_find_first_bit(array->bitmap);
755  next_idx:
756                 if (idx >= MAX_RT_PRIO)
757                         continue;
758                 if (next && next->prio < idx)
759                         continue;
760                 list_for_each_entry(rt_se, array->squeue + idx, run_list) {
761                         struct task_struct *p = rt_task_of(rt_se);
762                         if (pick_rt_task(rq, p, cpu)) {
763                                 next = p;
764                                 break;
765                         }
766                 }
767                 if (!next) {
768                         idx = find_next_bit(array->bitmap, MAX_RT_PRIO, idx+1);
769                         goto next_idx;
770                 }
771         }
772
773         return next;
774 }
775
776 static DEFINE_PER_CPU(cpumask_t, local_cpu_mask);
777
778 static inline int pick_optimal_cpu(int this_cpu, cpumask_t *mask)
779 {
780         int first;
781
782         /* "this_cpu" is cheaper to preempt than a remote processor */
783         if ((this_cpu != -1) && cpu_isset(this_cpu, *mask))
784                 return this_cpu;
785
786         first = first_cpu(*mask);
787         if (first != NR_CPUS)
788                 return first;
789
790         return -1;
791 }
792
793 static int find_lowest_rq(struct task_struct *task)
794 {
795         struct sched_domain *sd;
796         cpumask_t *lowest_mask = &__get_cpu_var(local_cpu_mask);
797         int this_cpu = smp_processor_id();
798         int cpu      = task_cpu(task);
799
800         if (task->rt.nr_cpus_allowed == 1)
801                 return -1; /* No other targets possible */
802
803         if (!cpupri_find(&task_rq(task)->rd->cpupri, task, lowest_mask))
804                 return -1; /* No targets found */
805
806         /*
807          * At this point we have built a mask of cpus representing the
808          * lowest priority tasks in the system.  Now we want to elect
809          * the best one based on our affinity and topology.
810          *
811          * We prioritize the last cpu that the task executed on since
812          * it is most likely cache-hot in that location.
813          */
814         if (cpu_isset(cpu, *lowest_mask))
815                 return cpu;
816
817         /*
818          * Otherwise, we consult the sched_domains span maps to figure
819          * out which cpu is logically closest to our hot cache data.
820          */
821         if (this_cpu == cpu)
822                 this_cpu = -1; /* Skip this_cpu opt if the same */
823
824         for_each_domain(cpu, sd) {
825                 if (sd->flags & SD_WAKE_AFFINE) {
826                         cpumask_t domain_mask;
827                         int       best_cpu;
828
829                         cpus_and(domain_mask, sd->span, *lowest_mask);
830
831                         best_cpu = pick_optimal_cpu(this_cpu,
832                                                     &domain_mask);
833                         if (best_cpu != -1)
834                                 return best_cpu;
835                 }
836         }
837
838         /*
839          * And finally, if there were no matches within the domains
840          * just give the caller *something* to work with from the compatible
841          * locations.
842          */
843         return pick_optimal_cpu(this_cpu, lowest_mask);
844 }
845
846 /* Will lock the rq it finds */
847 static struct rq *find_lock_lowest_rq(struct task_struct *task, struct rq *rq)
848 {
849         struct rq *lowest_rq = NULL;
850         int tries;
851         int cpu;
852
853         for (tries = 0; tries < RT_MAX_TRIES; tries++) {
854                 cpu = find_lowest_rq(task);
855
856                 if ((cpu == -1) || (cpu == rq->cpu))
857                         break;
858
859                 lowest_rq = cpu_rq(cpu);
860
861                 /* if the prio of this runqueue changed, try again */
862                 if (double_lock_balance(rq, lowest_rq)) {
863                         /*
864                          * We had to unlock the run queue. In
865                          * the mean time, task could have
866                          * migrated already or had its affinity changed.
867                          * Also make sure that it wasn't scheduled on its rq.
868                          */
869                         if (unlikely(task_rq(task) != rq ||
870                                      !cpu_isset(lowest_rq->cpu,
871                                                 task->cpus_allowed) ||
872                                      task_running(rq, task) ||
873                                      !task->se.on_rq)) {
874
875                                 spin_unlock(&lowest_rq->lock);
876                                 lowest_rq = NULL;
877                                 break;
878                         }
879                 }
880
881                 /* If this rq is still suitable use it. */
882                 if (lowest_rq->rt.highest_prio > task->prio)
883                         break;
884
885                 /* try again */
886                 spin_unlock(&lowest_rq->lock);
887                 lowest_rq = NULL;
888         }
889
890         return lowest_rq;
891 }
892
893 /*
894  * If the current CPU has more than one RT task, see if the non
895  * running task can migrate over to a CPU that is running a task
896  * of lesser priority.
897  */
898 static int push_rt_task(struct rq *rq)
899 {
900         struct task_struct *next_task;
901         struct rq *lowest_rq;
902         int ret = 0;
903         int paranoid = RT_MAX_TRIES;
904
905         if (!rq->rt.overloaded)
906                 return 0;
907
908         next_task = pick_next_highest_task_rt(rq, -1);
909         if (!next_task)
910                 return 0;
911
912  retry:
913         if (unlikely(next_task == rq->curr)) {
914                 WARN_ON(1);
915                 return 0;
916         }
917
918         /*
919          * It's possible that the next_task slipped in of
920          * higher priority than current. If that's the case
921          * just reschedule current.
922          */
923         if (unlikely(next_task->prio < rq->curr->prio)) {
924                 resched_task(rq->curr);
925                 return 0;
926         }
927
928         /* We might release rq lock */
929         get_task_struct(next_task);
930
931         /* find_lock_lowest_rq locks the rq if found */
932         lowest_rq = find_lock_lowest_rq(next_task, rq);
933         if (!lowest_rq) {
934                 struct task_struct *task;
935                 /*
936                  * find lock_lowest_rq releases rq->lock
937                  * so it is possible that next_task has changed.
938                  * If it has, then try again.
939                  */
940                 task = pick_next_highest_task_rt(rq, -1);
941                 if (unlikely(task != next_task) && task && paranoid--) {
942                         put_task_struct(next_task);
943                         next_task = task;
944                         goto retry;
945                 }
946                 goto out;
947         }
948
949         deactivate_task(rq, next_task, 0);
950         set_task_cpu(next_task, lowest_rq->cpu);
951         activate_task(lowest_rq, next_task, 0);
952
953         resched_task(lowest_rq->curr);
954
955         spin_unlock(&lowest_rq->lock);
956
957         ret = 1;
958 out:
959         put_task_struct(next_task);
960
961         return ret;
962 }
963
964 /*
965  * TODO: Currently we just use the second highest prio task on
966  *       the queue, and stop when it can't migrate (or there's
967  *       no more RT tasks).  There may be a case where a lower
968  *       priority RT task has a different affinity than the
969  *       higher RT task. In this case the lower RT task could
970  *       possibly be able to migrate where as the higher priority
971  *       RT task could not.  We currently ignore this issue.
972  *       Enhancements are welcome!
973  */
974 static void push_rt_tasks(struct rq *rq)
975 {
976         /* push_rt_task will return true if it moved an RT */
977         while (push_rt_task(rq))
978                 ;
979 }
980
981 static int pull_rt_task(struct rq *this_rq)
982 {
983         int this_cpu = this_rq->cpu, ret = 0, cpu;
984         struct task_struct *p, *next;
985         struct rq *src_rq;
986
987         if (likely(!rt_overloaded(this_rq)))
988                 return 0;
989
990         next = pick_next_task_rt(this_rq);
991
992         for_each_cpu_mask(cpu, this_rq->rd->rto_mask) {
993                 if (this_cpu == cpu)
994                         continue;
995
996                 src_rq = cpu_rq(cpu);
997                 /*
998                  * We can potentially drop this_rq's lock in
999                  * double_lock_balance, and another CPU could
1000                  * steal our next task - hence we must cause
1001                  * the caller to recalculate the next task
1002                  * in that case:
1003                  */
1004                 if (double_lock_balance(this_rq, src_rq)) {
1005                         struct task_struct *old_next = next;
1006
1007                         next = pick_next_task_rt(this_rq);
1008                         if (next != old_next)
1009                                 ret = 1;
1010                 }
1011
1012                 /*
1013                  * Are there still pullable RT tasks?
1014                  */
1015                 if (src_rq->rt.rt_nr_running <= 1)
1016                         goto skip;
1017
1018                 p = pick_next_highest_task_rt(src_rq, this_cpu);
1019
1020                 /*
1021                  * Do we have an RT task that preempts
1022                  * the to-be-scheduled task?
1023                  */
1024                 if (p && (!next || (p->prio < next->prio))) {
1025                         WARN_ON(p == src_rq->curr);
1026                         WARN_ON(!p->se.on_rq);
1027
1028                         /*
1029                          * There's a chance that p is higher in priority
1030                          * than what's currently running on its cpu.
1031                          * This is just that p is wakeing up and hasn't
1032                          * had a chance to schedule. We only pull
1033                          * p if it is lower in priority than the
1034                          * current task on the run queue or
1035                          * this_rq next task is lower in prio than
1036                          * the current task on that rq.
1037                          */
1038                         if (p->prio < src_rq->curr->prio ||
1039                             (next && next->prio < src_rq->curr->prio))
1040                                 goto skip;
1041
1042                         ret = 1;
1043
1044                         deactivate_task(src_rq, p, 0);
1045                         set_task_cpu(p, this_cpu);
1046                         activate_task(this_rq, p, 0);
1047                         /*
1048                          * We continue with the search, just in
1049                          * case there's an even higher prio task
1050                          * in another runqueue. (low likelyhood
1051                          * but possible)
1052                          *
1053                          * Update next so that we won't pick a task
1054                          * on another cpu with a priority lower (or equal)
1055                          * than the one we just picked.
1056                          */
1057                         next = p;
1058
1059                 }
1060  skip:
1061                 spin_unlock(&src_rq->lock);
1062         }
1063
1064         return ret;
1065 }
1066
1067 static void pre_schedule_rt(struct rq *rq, struct task_struct *prev)
1068 {
1069         /* Try to pull RT tasks here if we lower this rq's prio */
1070         if (unlikely(rt_task(prev)) && rq->rt.highest_prio > prev->prio)
1071                 pull_rt_task(rq);
1072 }
1073
1074 static void post_schedule_rt(struct rq *rq)
1075 {
1076         /*
1077          * If we have more than one rt_task queued, then
1078          * see if we can push the other rt_tasks off to other CPUS.
1079          * Note we may release the rq lock, and since
1080          * the lock was owned by prev, we need to release it
1081          * first via finish_lock_switch and then reaquire it here.
1082          */
1083         if (unlikely(rq->rt.overloaded)) {
1084                 spin_lock_irq(&rq->lock);
1085                 push_rt_tasks(rq);
1086                 spin_unlock_irq(&rq->lock);
1087         }
1088 }
1089
1090 /*
1091  * If we are not running and we are not going to reschedule soon, we should
1092  * try to push tasks away now
1093  */
1094 static void task_wake_up_rt(struct rq *rq, struct task_struct *p)
1095 {
1096         if (!task_running(rq, p) &&
1097             !test_tsk_need_resched(rq->curr) &&
1098             rq->rt.overloaded)
1099                 push_rt_tasks(rq);
1100 }
1101
1102 static unsigned long
1103 load_balance_rt(struct rq *this_rq, int this_cpu, struct rq *busiest,
1104                 unsigned long max_load_move,
1105                 struct sched_domain *sd, enum cpu_idle_type idle,
1106                 int *all_pinned, int *this_best_prio)
1107 {
1108         /* don't touch RT tasks */
1109         return 0;
1110 }
1111
1112 static int
1113 move_one_task_rt(struct rq *this_rq, int this_cpu, struct rq *busiest,
1114                  struct sched_domain *sd, enum cpu_idle_type idle)
1115 {
1116         /* don't touch RT tasks */
1117         return 0;
1118 }
1119
1120 static void set_cpus_allowed_rt(struct task_struct *p,
1121                                 const cpumask_t *new_mask)
1122 {
1123         int weight = cpus_weight(*new_mask);
1124
1125         BUG_ON(!rt_task(p));
1126
1127         /*
1128          * Update the migration status of the RQ if we have an RT task
1129          * which is running AND changing its weight value.
1130          */
1131         if (p->se.on_rq && (weight != p->rt.nr_cpus_allowed)) {
1132                 struct rq *rq = task_rq(p);
1133
1134                 if ((p->rt.nr_cpus_allowed <= 1) && (weight > 1)) {
1135                         rq->rt.rt_nr_migratory++;
1136                 } else if ((p->rt.nr_cpus_allowed > 1) && (weight <= 1)) {
1137                         BUG_ON(!rq->rt.rt_nr_migratory);
1138                         rq->rt.rt_nr_migratory--;
1139                 }
1140
1141                 update_rt_migration(rq);
1142
1143                 if (unlikely(weight == 1 || p->rt.nr_cpus_allowed == 1))
1144                         /*
1145                          * If either the new or old weight is a "1", we need
1146                          * to requeue to properly move between shared and
1147                          * exclusive queues.
1148                          */
1149                         requeue_task_rt(rq, p);
1150         }
1151
1152         p->cpus_allowed    = *new_mask;
1153         p->rt.nr_cpus_allowed = weight;
1154 }
1155
1156 /* Assumes rq->lock is held */
1157 static void join_domain_rt(struct rq *rq)
1158 {
1159         if (rq->rt.overloaded)
1160                 rt_set_overload(rq);
1161
1162         cpupri_set(&rq->rd->cpupri, rq->cpu, rq->rt.highest_prio);
1163 }
1164
1165 /* Assumes rq->lock is held */
1166 static void leave_domain_rt(struct rq *rq)
1167 {
1168         if (rq->rt.overloaded)
1169                 rt_clear_overload(rq);
1170
1171         cpupri_set(&rq->rd->cpupri, rq->cpu, CPUPRI_INVALID);
1172 }
1173
1174 /*
1175  * When switch from the rt queue, we bring ourselves to a position
1176  * that we might want to pull RT tasks from other runqueues.
1177  */
1178 static void switched_from_rt(struct rq *rq, struct task_struct *p,
1179                            int running)
1180 {
1181         /*
1182          * If there are other RT tasks then we will reschedule
1183          * and the scheduling of the other RT tasks will handle
1184          * the balancing. But if we are the last RT task
1185          * we may need to handle the pulling of RT tasks
1186          * now.
1187          */
1188         if (!rq->rt.rt_nr_running)
1189                 pull_rt_task(rq);
1190 }
1191 #endif /* CONFIG_SMP */
1192
1193 /*
1194  * When switching a task to RT, we may overload the runqueue
1195  * with RT tasks. In this case we try to push them off to
1196  * other runqueues.
1197  */
1198 static void switched_to_rt(struct rq *rq, struct task_struct *p,
1199                            int running)
1200 {
1201         int check_resched = 1;
1202
1203         /*
1204          * If we are already running, then there's nothing
1205          * that needs to be done. But if we are not running
1206          * we may need to preempt the current running task.
1207          * If that current running task is also an RT task
1208          * then see if we can move to another run queue.
1209          */
1210         if (!running) {
1211 #ifdef CONFIG_SMP
1212                 if (rq->rt.overloaded && push_rt_task(rq) &&
1213                     /* Don't resched if we changed runqueues */
1214                     rq != task_rq(p))
1215                         check_resched = 0;
1216 #endif /* CONFIG_SMP */
1217                 if (check_resched && p->prio < rq->curr->prio)
1218                         resched_task(rq->curr);
1219         }
1220 }
1221
1222 /*
1223  * Priority of the task has changed. This may cause
1224  * us to initiate a push or pull.
1225  */
1226 static void prio_changed_rt(struct rq *rq, struct task_struct *p,
1227                             int oldprio, int running)
1228 {
1229         if (running) {
1230 #ifdef CONFIG_SMP
1231                 /*
1232                  * If our priority decreases while running, we
1233                  * may need to pull tasks to this runqueue.
1234                  */
1235                 if (oldprio < p->prio)
1236                         pull_rt_task(rq);
1237                 /*
1238                  * If there's a higher priority task waiting to run
1239                  * then reschedule. Note, the above pull_rt_task
1240                  * can release the rq lock and p could migrate.
1241                  * Only reschedule if p is still on the same runqueue.
1242                  */
1243                 if (p->prio > rq->rt.highest_prio && rq->curr == p)
1244                         resched_task(p);
1245 #else
1246                 /* For UP simply resched on drop of prio */
1247                 if (oldprio < p->prio)
1248                         resched_task(p);
1249 #endif /* CONFIG_SMP */
1250         } else {
1251                 /*
1252                  * This task is not running, but if it is
1253                  * greater than the current running task
1254                  * then reschedule.
1255                  */
1256                 if (p->prio < rq->curr->prio)
1257                         resched_task(rq->curr);
1258         }
1259 }
1260
1261 static void watchdog(struct rq *rq, struct task_struct *p)
1262 {
1263         unsigned long soft, hard;
1264
1265         if (!p->signal)
1266                 return;
1267
1268         soft = p->signal->rlim[RLIMIT_RTTIME].rlim_cur;
1269         hard = p->signal->rlim[RLIMIT_RTTIME].rlim_max;
1270
1271         if (soft != RLIM_INFINITY) {
1272                 unsigned long next;
1273
1274                 p->rt.timeout++;
1275                 next = DIV_ROUND_UP(min(soft, hard), USEC_PER_SEC/HZ);
1276                 if (p->rt.timeout > next)
1277                         p->it_sched_expires = p->se.sum_exec_runtime;
1278         }
1279 }
1280
1281 static void task_tick_rt(struct rq *rq, struct task_struct *p, int queued)
1282 {
1283         update_curr_rt(rq);
1284
1285         watchdog(rq, p);
1286
1287         /*
1288          * RR tasks need a special form of timeslice management.
1289          * FIFO tasks have no timeslices.
1290          */
1291         if (p->policy != SCHED_RR)
1292                 return;
1293
1294         if (--p->rt.time_slice)
1295                 return;
1296
1297         p->rt.time_slice = DEF_TIMESLICE;
1298
1299         /*
1300          * Requeue to the end of queue if we are not the only element
1301          * on the queue:
1302          */
1303         if (p->rt.run_list.prev != p->rt.run_list.next) {
1304                 requeue_task_rt(rq, p);
1305                 set_tsk_need_resched(p);
1306         }
1307 }
1308
1309 static void set_curr_task_rt(struct rq *rq)
1310 {
1311         struct task_struct *p = rq->curr;
1312
1313         p->se.exec_start = rq->clock;
1314 }
1315
1316 static const struct sched_class rt_sched_class = {
1317         .next                   = &fair_sched_class,
1318         .enqueue_task           = enqueue_task_rt,
1319         .dequeue_task           = dequeue_task_rt,
1320         .yield_task             = yield_task_rt,
1321 #ifdef CONFIG_SMP
1322         .select_task_rq         = select_task_rq_rt,
1323 #endif /* CONFIG_SMP */
1324
1325         .check_preempt_curr     = check_preempt_curr_rt,
1326
1327         .pick_next_task         = pick_next_task_rt,
1328         .put_prev_task          = put_prev_task_rt,
1329
1330 #ifdef CONFIG_SMP
1331         .load_balance           = load_balance_rt,
1332         .move_one_task          = move_one_task_rt,
1333         .set_cpus_allowed       = set_cpus_allowed_rt,
1334         .join_domain            = join_domain_rt,
1335         .leave_domain           = leave_domain_rt,
1336         .pre_schedule           = pre_schedule_rt,
1337         .post_schedule          = post_schedule_rt,
1338         .task_wake_up           = task_wake_up_rt,
1339         .switched_from          = switched_from_rt,
1340 #endif
1341
1342         .set_curr_task          = set_curr_task_rt,
1343         .task_tick              = task_tick_rt,
1344
1345         .prio_changed           = prio_changed_rt,
1346         .switched_to            = switched_to_rt,
1347 };