diff options
| -rw-r--r-- | kernel/sched_rt.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/kernel/sched_rt.c b/kernel/sched_rt.c index e7cebdc65f82..f8fcf8297c5f 100644 --- a/kernel/sched_rt.c +++ b/kernel/sched_rt.c | |||
| @@ -183,6 +183,14 @@ static inline u64 sched_rt_period(struct rt_rq *rt_rq) | |||
| 183 | return ktime_to_ns(rt_rq->tg->rt_bandwidth.rt_period); | 183 | return ktime_to_ns(rt_rq->tg->rt_bandwidth.rt_period); |
| 184 | } | 184 | } |
| 185 | 185 | ||
| 186 | typedef struct task_group *rt_rq_iter_t; | ||
| 187 | |||
| 188 | #define for_each_rt_rq(rt_rq, iter, rq) \ | ||
| 189 | for (iter = list_entry_rcu(task_groups.next, typeof(*iter), list); \ | ||
| 190 | (&iter->list != &task_groups) && \ | ||
| 191 | (rt_rq = iter->rt_rq[cpu_of(rq)]); \ | ||
| 192 | iter = list_entry_rcu(iter->list.next, typeof(*iter), list)) | ||
| 193 | |||
| 186 | static inline void list_add_leaf_rt_rq(struct rt_rq *rt_rq) | 194 | static inline void list_add_leaf_rt_rq(struct rt_rq *rt_rq) |
| 187 | { | 195 | { |
| 188 | list_add_rcu(&rt_rq->leaf_rt_rq_list, | 196 | list_add_rcu(&rt_rq->leaf_rt_rq_list, |
| @@ -288,6 +296,11 @@ static inline u64 sched_rt_period(struct rt_rq *rt_rq) | |||
| 288 | return ktime_to_ns(def_rt_bandwidth.rt_period); | 296 | return ktime_to_ns(def_rt_bandwidth.rt_period); |
| 289 | } | 297 | } |
| 290 | 298 | ||
| 299 | typedef struct rt_rq *rt_rq_iter_t; | ||
| 300 | |||
| 301 | #define for_each_rt_rq(rt_rq, iter, rq) \ | ||
| 302 | for ((void) iter, rt_rq = &rq->rt; rt_rq; rt_rq = NULL) | ||
| 303 | |||
| 291 | static inline void list_add_leaf_rt_rq(struct rt_rq *rt_rq) | 304 | static inline void list_add_leaf_rt_rq(struct rt_rq *rt_rq) |
| 292 | { | 305 | { |
| 293 | } | 306 | } |
| @@ -402,12 +415,13 @@ next: | |||
| 402 | static void __disable_runtime(struct rq *rq) | 415 | static void __disable_runtime(struct rq *rq) |
| 403 | { | 416 | { |
| 404 | struct root_domain *rd = rq->rd; | 417 | struct root_domain *rd = rq->rd; |
| 418 | rt_rq_iter_t iter; | ||
| 405 | struct rt_rq *rt_rq; | 419 | struct rt_rq *rt_rq; |
| 406 | 420 | ||
| 407 | if (unlikely(!scheduler_running)) | 421 | if (unlikely(!scheduler_running)) |
| 408 | return; | 422 | return; |
| 409 | 423 | ||
| 410 | for_each_leaf_rt_rq(rt_rq, rq) { | 424 | for_each_rt_rq(rt_rq, iter, rq) { |
| 411 | struct rt_bandwidth *rt_b = sched_rt_bandwidth(rt_rq); | 425 | struct rt_bandwidth *rt_b = sched_rt_bandwidth(rt_rq); |
| 412 | s64 want; | 426 | s64 want; |
| 413 | int i; | 427 | int i; |
| @@ -487,6 +501,7 @@ static void disable_runtime(struct rq *rq) | |||
| 487 | 501 | ||
| 488 | static void __enable_runtime(struct rq *rq) | 502 | static void __enable_runtime(struct rq *rq) |
| 489 | { | 503 | { |
| 504 | rt_rq_iter_t iter; | ||
| 490 | struct rt_rq *rt_rq; | 505 | struct rt_rq *rt_rq; |
| 491 | 506 | ||
| 492 | if (unlikely(!scheduler_running)) | 507 | if (unlikely(!scheduler_running)) |
| @@ -495,7 +510,7 @@ static void __enable_runtime(struct rq *rq) | |||
| 495 | /* | 510 | /* |
| 496 | * Reset each runqueue's bandwidth settings | 511 | * Reset each runqueue's bandwidth settings |
| 497 | */ | 512 | */ |
| 498 | for_each_leaf_rt_rq(rt_rq, rq) { | 513 | for_each_rt_rq(rt_rq, iter, rq) { |
| 499 | struct rt_bandwidth *rt_b = sched_rt_bandwidth(rt_rq); | 514 | struct rt_bandwidth *rt_b = sched_rt_bandwidth(rt_rq); |
| 500 | 515 | ||
| 501 | raw_spin_lock(&rt_b->rt_runtime_lock); | 516 | raw_spin_lock(&rt_b->rt_runtime_lock); |
| @@ -1796,10 +1811,11 @@ extern void print_rt_rq(struct seq_file *m, int cpu, struct rt_rq *rt_rq); | |||
| 1796 | 1811 | ||
| 1797 | static void print_rt_stats(struct seq_file *m, int cpu) | 1812 | static void print_rt_stats(struct seq_file *m, int cpu) |
| 1798 | { | 1813 | { |
| 1814 | rt_rq_iter_t iter; | ||
| 1799 | struct rt_rq *rt_rq; | 1815 | struct rt_rq *rt_rq; |
| 1800 | 1816 | ||
| 1801 | rcu_read_lock(); | 1817 | rcu_read_lock(); |
| 1802 | for_each_leaf_rt_rq(rt_rq, cpu_rq(cpu)) | 1818 | for_each_rt_rq(rt_rq, iter, cpu_rq(cpu)) |
| 1803 | print_rt_rq(m, cpu, rt_rq); | 1819 | print_rt_rq(m, cpu, rt_rq); |
| 1804 | rcu_read_unlock(); | 1820 | rcu_read_unlock(); |
| 1805 | } | 1821 | } |
