Message ID | ZnncZcJFbN86-b4Y@slm.duckdns.org (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
Series | [sched_ext/for-6.11] sched, sched_ext: Simplify dl_prio() case handling in sched_fork() | expand |
Context | Check | Description |
---|---|---|
netdev/tree_selection | success | Not a local patch |
On Mon, Jun 24, 2024 at 10:51:49AM -1000, Tejun Heo wrote: > From: Tejun Heo <tj@kernel.org> > > sched_fork() returns with -EAGAIN if dl_prio(@p). a7a9fc549293 ("sched_ext: > Add boilerplate for extensible scheduler class") added scx_pre_fork() call > before it and then scx_cancel_fork() on the exit path. This is silly as the > dl_prio() block can just be moved above the scx_pre_fork() call. > > Move the dl_prio() block above the scx_pre_fork() call and remove the now > unnecessary scx_cancel_fork() invocation. > > Signed-off-by: Tejun Heo <tj@kernel.org> > Suggested-by: Thomas Gleixner <tglx@linutronix.de> > Cc: Ingo Molnar <mingo@redhat.com> > Cc: Peter Zijlstra <peterz@infradead.org> > Cc: David Vernet <void@manifault.com> Applying to sched_ext/for-6.11. Thanks.
--- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -4583,8 +4583,6 @@ late_initcall(sched_core_sysctl_init); */ int sched_fork(unsigned long clone_flags, struct task_struct *p) { - int ret; - __sched_fork(clone_flags, p); /* * We mark the process as NEW here. This guarantees that @@ -4621,12 +4619,12 @@ int sched_fork(unsigned long clone_flags p->sched_reset_on_fork = 0; } + if (dl_prio(p->prio)) + return -EAGAIN; + scx_pre_fork(p); - if (dl_prio(p->prio)) { - ret = -EAGAIN; - goto out_cancel; - } else if (rt_prio(p->prio)) { + if (rt_prio(p->prio)) { p->sched_class = &rt_sched_class; #ifdef CONFIG_SCHED_CLASS_EXT } else if (task_should_scx(p)) { @@ -4652,10 +4650,6 @@ int sched_fork(unsigned long clone_flags RB_CLEAR_NODE(&p->pushable_dl_tasks); #endif return 0; - -out_cancel: - scx_cancel_fork(p); - return ret; } int sched_cgroup_fork(struct task_struct *p, struct kernel_clone_args *kargs)