]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
sched: Always initialize rt_rq's task_group
authorMichal Koutný <mkoutny@suse.com>
Mon, 10 Mar 2025 17:04:35 +0000 (18:04 +0100)
committerPeter Zijlstra <peterz@infradead.org>
Tue, 8 Apr 2025 18:55:53 +0000 (20:55 +0200)
rt_rq->tg may be NULL which denotes the root task_group.
Store the pointer to root_task_group directly so that callers may use
rt_rq->tg homogenously.

root_task_group exists always with CONFIG_CGROUPS_SCHED,
CONFIG_RT_GROUP_SCHED depends on that.

This changes root level rt_rq's default limit from infinity to the
value of (originally) global RT throttling.

Signed-off-by: Michal Koutný <mkoutny@suse.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lkml.kernel.org/r/20250310170442.504716-4-mkoutny@suse.com
kernel/sched/rt.c
kernel/sched/sched.h

index 61ec29b11ef452bb9b22134408b0d1164ee3ee80..1af3996ec0fbe690596a0acf2cc888c86e8cea2f 100644 (file)
@@ -89,6 +89,7 @@ void init_rt_rq(struct rt_rq *rt_rq)
        rt_rq->rt_throttled = 0;
        rt_rq->rt_runtime = 0;
        raw_spin_lock_init(&rt_rq->rt_runtime_lock);
+       rt_rq->tg = &root_task_group;
 #endif
 }
 
@@ -482,9 +483,6 @@ static inline bool rt_task_fits_capacity(struct task_struct *p, int cpu)
 
 static inline u64 sched_rt_runtime(struct rt_rq *rt_rq)
 {
-       if (!rt_rq->tg)
-               return RUNTIME_INF;
-
        return rt_rq->rt_runtime;
 }
 
@@ -1154,8 +1152,7 @@ inc_rt_group(struct sched_rt_entity *rt_se, struct rt_rq *rt_rq)
        if (rt_se_boosted(rt_se))
                rt_rq->rt_nr_boosted++;
 
-       if (rt_rq->tg)
-               start_rt_bandwidth(&rt_rq->tg->rt_bandwidth);
+       start_rt_bandwidth(&rt_rq->tg->rt_bandwidth);
 }
 
 static void
index 47972f34ea70144d40446ee7bb6ca922608eed5c..c006348102d9b9d1123b989d232ac81fdf4364fd 100644 (file)
@@ -821,6 +821,8 @@ struct rt_rq {
        unsigned int            rt_nr_boosted;
 
        struct rq               *rq;
+#endif
+#ifdef CONFIG_CGROUP_SCHED
        struct task_group       *tg;
 #endif
 };