Lines Matching refs:rt_se

111 #define rt_entity_is_task(rt_se) (!(rt_se)->my_q)  argument
113 static inline struct task_struct *rt_task_of(struct sched_rt_entity *rt_se) in rt_task_of() argument
116 WARN_ON_ONCE(!rt_entity_is_task(rt_se)); in rt_task_of()
118 return container_of(rt_se, struct task_struct, rt); in rt_task_of()
126 static inline struct rt_rq *rt_rq_of_se(struct sched_rt_entity *rt_se) in rt_rq_of_se() argument
128 return rt_se->rt_rq; in rt_rq_of_se()
131 static inline struct rq *rq_of_rt_se(struct sched_rt_entity *rt_se) in rq_of_rt_se() argument
133 struct rt_rq *rt_rq = rt_se->rt_rq; in rq_of_rt_se()
142 if (tg->rt_se) in free_rt_sched_group()
148 if (tg->rt_se) in free_rt_sched_group()
149 kfree(tg->rt_se[i]); in free_rt_sched_group()
153 kfree(tg->rt_se); in free_rt_sched_group()
157 struct sched_rt_entity *rt_se, int cpu, in init_tg_rt_entry() argument
168 tg->rt_se[cpu] = rt_se; in init_tg_rt_entry()
170 if (!rt_se) in init_tg_rt_entry()
174 rt_se->rt_rq = &rq->rt; in init_tg_rt_entry()
176 rt_se->rt_rq = parent->my_q; in init_tg_rt_entry()
178 rt_se->my_q = rt_rq; in init_tg_rt_entry()
179 rt_se->parent = parent; in init_tg_rt_entry()
180 INIT_LIST_HEAD(&rt_se->run_list); in init_tg_rt_entry()
186 struct sched_rt_entity *rt_se; in alloc_rt_sched_group() local
192 tg->rt_se = kcalloc(nr_cpu_ids, sizeof(rt_se), GFP_KERNEL); in alloc_rt_sched_group()
193 if (!tg->rt_se) in alloc_rt_sched_group()
205 rt_se = kzalloc_node(sizeof(struct sched_rt_entity), in alloc_rt_sched_group()
207 if (!rt_se) in alloc_rt_sched_group()
212 init_tg_rt_entry(tg, rt_rq, rt_se, i, parent->rt_se[i]); in alloc_rt_sched_group()
225 #define rt_entity_is_task(rt_se) (1) argument
227 static inline struct task_struct *rt_task_of(struct sched_rt_entity *rt_se) in rt_task_of() argument
229 return container_of(rt_se, struct task_struct, rt); in rt_task_of()
237 static inline struct rq *rq_of_rt_se(struct sched_rt_entity *rt_se) in rq_of_rt_se() argument
239 struct task_struct *p = rt_task_of(rt_se); in rq_of_rt_se()
244 static inline struct rt_rq *rt_rq_of_se(struct sched_rt_entity *rt_se) in rt_rq_of_se() argument
246 struct rq *rq = rq_of_rt_se(rt_se); in rt_rq_of_se()
316 static void inc_rt_migration(struct sched_rt_entity *rt_se, struct rt_rq *rt_rq) in inc_rt_migration() argument
320 if (!rt_entity_is_task(rt_se)) in inc_rt_migration()
323 p = rt_task_of(rt_se); in inc_rt_migration()
333 static void dec_rt_migration(struct sched_rt_entity *rt_se, struct rt_rq *rt_rq) in dec_rt_migration() argument
337 if (!rt_entity_is_task(rt_se)) in dec_rt_migration()
340 p = rt_task_of(rt_se); in dec_rt_migration()
409 void inc_rt_migration(struct sched_rt_entity *rt_se, struct rt_rq *rt_rq) in inc_rt_migration() argument
414 void dec_rt_migration(struct sched_rt_entity *rt_se, struct rt_rq *rt_rq) in dec_rt_migration() argument
435 static inline int on_rt_rq(struct sched_rt_entity *rt_se) in on_rt_rq() argument
437 return rt_se->on_rq; in on_rt_rq()
475 #define for_each_sched_rt_entity(rt_se) \ argument
476 for (; rt_se; rt_se = rt_se->parent)
478 static inline struct rt_rq *group_rt_rq(struct sched_rt_entity *rt_se) in group_rt_rq() argument
480 return rt_se->my_q; in group_rt_rq()
483 static void enqueue_rt_entity(struct sched_rt_entity *rt_se, unsigned int flags);
484 static void dequeue_rt_entity(struct sched_rt_entity *rt_se, unsigned int flags);
490 struct sched_rt_entity *rt_se; in sched_rt_rq_enqueue() local
494 rt_se = rt_rq->tg->rt_se[cpu]; in sched_rt_rq_enqueue()
497 if (!rt_se) in sched_rt_rq_enqueue()
499 else if (!on_rt_rq(rt_se)) in sched_rt_rq_enqueue()
500 enqueue_rt_entity(rt_se, 0); in sched_rt_rq_enqueue()
509 struct sched_rt_entity *rt_se; in sched_rt_rq_dequeue() local
512 rt_se = rt_rq->tg->rt_se[cpu]; in sched_rt_rq_dequeue()
514 if (!rt_se) { in sched_rt_rq_dequeue()
519 else if (on_rt_rq(rt_se)) in sched_rt_rq_dequeue()
520 dequeue_rt_entity(rt_se, 0); in sched_rt_rq_dequeue()
528 static int rt_se_boosted(struct sched_rt_entity *rt_se) in rt_se_boosted() argument
530 struct rt_rq *rt_rq = group_rt_rq(rt_se); in rt_se_boosted()
536 p = rt_task_of(rt_se); in rt_se_boosted()
580 #define for_each_sched_rt_entity(rt_se) \ argument
581 for (; rt_se; rt_se = NULL)
583 static inline struct rt_rq *group_rt_rq(struct sched_rt_entity *rt_se) in group_rt_rq() argument
896 static inline int rt_se_prio(struct sched_rt_entity *rt_se) in rt_se_prio() argument
899 struct rt_rq *rt_rq = group_rt_rq(rt_se); in rt_se_prio()
905 return rt_task_of(rt_se)->prio; in rt_se_prio()
958 struct sched_rt_entity *rt_se = &curr->rt; in update_curr_rt() local
982 for_each_sched_rt_entity(rt_se) { in update_curr_rt()
983 struct rt_rq *rt_rq = rt_rq_of_se(rt_se); in update_curr_rt()
1125 inc_rt_group(struct sched_rt_entity *rt_se, struct rt_rq *rt_rq) in inc_rt_group() argument
1127 if (rt_se_boosted(rt_se)) in inc_rt_group()
1135 dec_rt_group(struct sched_rt_entity *rt_se, struct rt_rq *rt_rq) in dec_rt_group() argument
1137 if (rt_se_boosted(rt_se)) in dec_rt_group()
1146 inc_rt_group(struct sched_rt_entity *rt_se, struct rt_rq *rt_rq) in inc_rt_group() argument
1152 void dec_rt_group(struct sched_rt_entity *rt_se, struct rt_rq *rt_rq) {} in dec_rt_group() argument
1157 unsigned int rt_se_nr_running(struct sched_rt_entity *rt_se) in rt_se_nr_running() argument
1159 struct rt_rq *group_rq = group_rt_rq(rt_se); in rt_se_nr_running()
1168 unsigned int rt_se_rr_nr_running(struct sched_rt_entity *rt_se) in rt_se_rr_nr_running() argument
1170 struct rt_rq *group_rq = group_rt_rq(rt_se); in rt_se_rr_nr_running()
1176 tsk = rt_task_of(rt_se); in rt_se_rr_nr_running()
1182 void inc_rt_tasks(struct sched_rt_entity *rt_se, struct rt_rq *rt_rq) in inc_rt_tasks() argument
1184 int prio = rt_se_prio(rt_se); in inc_rt_tasks()
1187 rt_rq->rt_nr_running += rt_se_nr_running(rt_se); in inc_rt_tasks()
1188 rt_rq->rr_nr_running += rt_se_rr_nr_running(rt_se); in inc_rt_tasks()
1191 inc_rt_migration(rt_se, rt_rq); in inc_rt_tasks()
1192 inc_rt_group(rt_se, rt_rq); in inc_rt_tasks()
1196 void dec_rt_tasks(struct sched_rt_entity *rt_se, struct rt_rq *rt_rq) in dec_rt_tasks() argument
1198 WARN_ON(!rt_prio(rt_se_prio(rt_se))); in dec_rt_tasks()
1200 rt_rq->rt_nr_running -= rt_se_nr_running(rt_se); in dec_rt_tasks()
1201 rt_rq->rr_nr_running -= rt_se_rr_nr_running(rt_se); in dec_rt_tasks()
1203 dec_rt_prio(rt_rq, rt_se_prio(rt_se)); in dec_rt_tasks()
1204 dec_rt_migration(rt_se, rt_rq); in dec_rt_tasks()
1205 dec_rt_group(rt_se, rt_rq); in dec_rt_tasks()
1221 static void __delist_rt_entity(struct sched_rt_entity *rt_se, struct rt_prio_array *array) in __delist_rt_entity() argument
1223 list_del_init(&rt_se->run_list); in __delist_rt_entity()
1225 if (list_empty(array->queue + rt_se_prio(rt_se))) in __delist_rt_entity()
1226 __clear_bit(rt_se_prio(rt_se), array->bitmap); in __delist_rt_entity()
1228 rt_se->on_list = 0; in __delist_rt_entity()
1231 static void __enqueue_rt_entity(struct sched_rt_entity *rt_se, unsigned int flags) in __enqueue_rt_entity() argument
1233 struct rt_rq *rt_rq = rt_rq_of_se(rt_se); in __enqueue_rt_entity()
1235 struct rt_rq *group_rq = group_rt_rq(rt_se); in __enqueue_rt_entity()
1236 struct list_head *queue = array->queue + rt_se_prio(rt_se); in __enqueue_rt_entity()
1245 if (rt_se->on_list) in __enqueue_rt_entity()
1246 __delist_rt_entity(rt_se, array); in __enqueue_rt_entity()
1251 WARN_ON_ONCE(rt_se->on_list); in __enqueue_rt_entity()
1253 list_add(&rt_se->run_list, queue); in __enqueue_rt_entity()
1255 list_add_tail(&rt_se->run_list, queue); in __enqueue_rt_entity()
1257 __set_bit(rt_se_prio(rt_se), array->bitmap); in __enqueue_rt_entity()
1258 rt_se->on_list = 1; in __enqueue_rt_entity()
1260 rt_se->on_rq = 1; in __enqueue_rt_entity()
1262 inc_rt_tasks(rt_se, rt_rq); in __enqueue_rt_entity()
1265 static void __dequeue_rt_entity(struct sched_rt_entity *rt_se, unsigned int flags) in __dequeue_rt_entity() argument
1267 struct rt_rq *rt_rq = rt_rq_of_se(rt_se); in __dequeue_rt_entity()
1271 WARN_ON_ONCE(!rt_se->on_list); in __dequeue_rt_entity()
1272 __delist_rt_entity(rt_se, array); in __dequeue_rt_entity()
1274 rt_se->on_rq = 0; in __dequeue_rt_entity()
1276 dec_rt_tasks(rt_se, rt_rq); in __dequeue_rt_entity()
1283 static void dequeue_rt_stack(struct sched_rt_entity *rt_se, unsigned int flags) in dequeue_rt_stack() argument
1287 for_each_sched_rt_entity(rt_se) { in dequeue_rt_stack()
1288 rt_se->back = back; in dequeue_rt_stack()
1289 back = rt_se; in dequeue_rt_stack()
1294 for (rt_se = back; rt_se; rt_se = rt_se->back) { in dequeue_rt_stack()
1295 if (on_rt_rq(rt_se)) in dequeue_rt_stack()
1296 __dequeue_rt_entity(rt_se, flags); in dequeue_rt_stack()
1300 static void enqueue_rt_entity(struct sched_rt_entity *rt_se, unsigned int flags) in enqueue_rt_entity() argument
1302 struct rq *rq = rq_of_rt_se(rt_se); in enqueue_rt_entity()
1304 dequeue_rt_stack(rt_se, flags); in enqueue_rt_entity()
1305 for_each_sched_rt_entity(rt_se) in enqueue_rt_entity()
1306 __enqueue_rt_entity(rt_se, flags); in enqueue_rt_entity()
1310 static void dequeue_rt_entity(struct sched_rt_entity *rt_se, unsigned int flags) in dequeue_rt_entity() argument
1312 struct rq *rq = rq_of_rt_se(rt_se); in dequeue_rt_entity()
1314 dequeue_rt_stack(rt_se, flags); in dequeue_rt_entity()
1316 for_each_sched_rt_entity(rt_se) { in dequeue_rt_entity()
1317 struct rt_rq *rt_rq = group_rt_rq(rt_se); in dequeue_rt_entity()
1320 __enqueue_rt_entity(rt_se, flags); in dequeue_rt_entity()
1331 struct sched_rt_entity *rt_se = &p->rt; in enqueue_task_rt() local
1334 rt_se->timeout = 0; in enqueue_task_rt()
1336 enqueue_rt_entity(rt_se, flags); in enqueue_task_rt()
1344 struct sched_rt_entity *rt_se = &p->rt; in dequeue_task_rt() local
1347 dequeue_rt_entity(rt_se, flags); in dequeue_task_rt()
1357 requeue_rt_entity(struct rt_rq *rt_rq, struct sched_rt_entity *rt_se, int head) in requeue_rt_entity() argument
1359 if (on_rt_rq(rt_se)) { in requeue_rt_entity()
1361 struct list_head *queue = array->queue + rt_se_prio(rt_se); in requeue_rt_entity()
1364 list_move(&rt_se->run_list, queue); in requeue_rt_entity()
1366 list_move_tail(&rt_se->run_list, queue); in requeue_rt_entity()
1372 struct sched_rt_entity *rt_se = &p->rt; in requeue_task_rt() local
1375 for_each_sched_rt_entity(rt_se) { in requeue_task_rt()
1376 rt_rq = rt_rq_of_se(rt_se); in requeue_task_rt()
1377 requeue_rt_entity(rt_rq, rt_se, head); in requeue_task_rt()
1555 struct sched_rt_entity *rt_se; in _pick_next_task_rt() local
1559 rt_se = pick_next_rt_entity(rq, rt_rq); in _pick_next_task_rt()
1560 BUG_ON(!rt_se); in _pick_next_task_rt()
1561 rt_rq = group_rt_rq(rt_se); in _pick_next_task_rt()
1564 return rt_task_of(rt_se); in _pick_next_task_rt()
2314 struct sched_rt_entity *rt_se = &p->rt; in task_tick_rt() local
2337 for_each_sched_rt_entity(rt_se) { in task_tick_rt()
2338 if (rt_se->run_list.prev != rt_se->run_list.next) { in task_tick_rt()