cgroup/cpu: Fix tg_has_rt_task() malfunction
PATCH 1/1 cgroup/cpu: Fix tg_has_rt_task() malfunction
Hi,
I am a graduate student of System Software Lab. at Konkuk University
(http://sslab.konkuk.ac.kr).
This patch is to fix the malfunction of tg_has_rt_tasks(). The tg_has_rt_tasks() function is supposed to determine whether a task group includes an "rt task" or not. However, it returns true for "dl task" too. The origin of this problem is that rt_task() called by tg_has_rt_tasks() returns true for dl tasks. Because of this problem, tg_rt_schedulable() that calls tg_has_rt_tasks() returns –EBUSY if we try to initialize an rt task group, while a dl task is running. That is, you cannot run an rt task group when there exists a dl task in the system. Our patch provided in this post simply makes the tg_has_rt_tasks() function return false for dl tasks by calling dl_task() in the conditional statement.
Previously we have provided another patch for rt_task() (more precisely rt_prio()) to resolve this problem as follows:
https://patchwork.kernel.org/patch/9299267/
However, a dependency issue were raised. So, we think that it is better to modify tg_has_rt_tasks() instead of rt_task() itself.
----kernel/sched/core.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
kernel/sched/core.c +1 -1
@@ -7846,7 +7846,7 @@ static inline int tg_has_rt_tasks(struct task_group *tg)return 0 ;for_each_process_thread (g, p) { -if (rt_task (p) &&task_group (p) == tg) +if (rt_task (p) && !dl_task (p) &&task_group (p) == tg)return 1 ; }
Tejun Heo
maintainerQuoted 16 lines · yingooyim
Hi,
I am a graduate student of System Software Lab. at Konkuk University
(http://sslab.konkuk.ac.kr).This patch is to fix the malfunction of
tg_has_rt_tasks(). Thetg_has_rt_tasks()function is supposed to determine whether a task group includes an "rt task" or not. However, it returns true for "dl task" too. The origin of this problem is thatrt_task()called bytg_has_rt_tasks()returns true for dl tasks. Because of this problem,tg_rt_schedulable()that callstg_has_rt_tasks()returns –EBUSY if we try to initialize an rt task group, while a dl task is running. That is, you cannot run an rt task group when there exists a dl task in the system. Our patch provided in this post simply makes thetg_has_rt_tasks()function return false for dl tasks by callingdl_task()in the conditional statement.
Quoted 7 lines
Previously we have provided another patch for
rt_task()(more preciselyrt_prio()) to resolve this problem as follows:
https://patchwork.kernel.org/patch/9299267/
However, a dependency issue were raised. So, we think that it is better to modifytg_has_rt_tasks()instead ofrt_task()itself.Signed-off-by Yin-goo Yim <[email protected]>
Can you please repost with scheduler maintainers cc'd?
Ingo Molnar <[email protected]>
Peter Zijlstra <[email protected]>
Thanks.
Signature · 1 line
tejun