Commit 0128c850 authored by Andrea Righi's avatar Andrea Righi Committed by Tejun Heo
Browse files

sched_ext: Exit early on hotplug events during attach



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: default avatarAndrea Righi <arighi@nvidia.com>
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
parent 14c1da38
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -4513,7 +4513,7 @@ static struct scx_sched *scx_alloc_and_add_sched(struct sched_ext_ops *ops)
	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();