]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
sched_ext: Exit early on hotplug events during attach
authorAndrea Righi <arighi@nvidia.com>
Thu, 4 Sep 2025 05:57:16 +0000 (07:57 +0200)
committerTejun Heo <tj@kernel.org>
Mon, 13 Oct 2025 18:45:01 +0000 (08:45 -1000)
There is no need to complete the entire scx initialization if a
scheduler is failing to be attached due to a hotplug event.

Exit early to avoid unnecessary work and simplify the attach flow.

Signed-off-by: Andrea Righi <arighi@nvidia.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
kernel/sched/ext.c

index c645d47124e72aa40762fc8c38791ff1454b03c5..9b2ab67951e682d86952d43cc4420fad11439d09 100644 (file)
@@ -4513,7 +4513,7 @@ err_free_sch:
        return ERR_PTR(ret);
 }
 
-static void check_hotplug_seq(struct scx_sched *sch,
+static int check_hotplug_seq(struct scx_sched *sch,
                              const struct sched_ext_ops *ops)
 {
        unsigned long long global_hotplug_seq;
@@ -4530,8 +4530,11 @@ static void check_hotplug_seq(struct scx_sched *sch,
                                 SCX_ECODE_ACT_RESTART | SCX_ECODE_RSN_HOTPLUG,
                                 "expected hotplug seq %llu did not match actual %llu",
                                 ops->hotplug_seq, global_hotplug_seq);
+                       return -EBUSY;
                }
        }
+
+       return 0;
 }
 
 static int validate_ops(struct scx_sched *sch, const struct sched_ext_ops *ops)
@@ -4633,7 +4636,11 @@ static int scx_enable(struct sched_ext_ops *ops, struct bpf_link *link)
                if (((void (**)(void))ops)[i])
                        set_bit(i, sch->has_op);
 
-       check_hotplug_seq(sch, ops);
+       ret = check_hotplug_seq(sch, ops);
+       if (ret) {
+               cpus_read_unlock();
+               goto err_disable;
+       }
        scx_idle_update_selcpu_topology(ops);
 
        cpus_read_unlock();