Commit 8a9b1585 authored by Tejun Heo's avatar Tejun Heo
Browse files

sched_ext: Merge branch 'for-6.14-fixes' into for-6.15



Pull for-6.14-fixes to receive:

  9360dfe4 ("sched_ext: Validate prev_cpu in scx_bpf_select_cpu_dfl()")

which conflicts with:

  337d1b35 ("sched_ext: Move built-in idle CPU selection policy to a separate file")

Signed-off-by: default avatarTejun Heo <tj@kernel.org>
parents 0f0714a3 9360dfe4
Loading
Loading
Loading
Loading
+10 −7
Original line number Diff line number Diff line
@@ -3250,7 +3250,6 @@ static struct task_struct *pick_task_scx(struct rq *rq)
{
	struct task_struct *prev = rq->curr;
	struct task_struct *p;
	bool prev_on_scx = prev->sched_class == &ext_sched_class;
	bool keep_prev = rq->scx.flags & SCX_RQ_BAL_KEEP;
	bool kick_idle = false;

@@ -3270,14 +3269,18 @@ static struct task_struct *pick_task_scx(struct rq *rq)
	 * if pick_task_scx() is called without preceding balance_scx().
	 */
	if (unlikely(rq->scx.flags & SCX_RQ_BAL_PENDING)) {
		if (prev_on_scx) {
		if (prev->scx.flags & SCX_TASK_QUEUED) {
			keep_prev = true;
		} else {
			keep_prev = false;
			kick_idle = true;
		}
	} else if (unlikely(keep_prev && !prev_on_scx)) {
		/* only allowed during transitions */
	} else if (unlikely(keep_prev &&
			    prev->sched_class != &ext_sched_class)) {
		/*
		 * Can happen while enabling as SCX_RQ_BAL_PENDING assertion is
		 * conditional on scx_enabled() and may have been skipped.
		 */
		WARN_ON_ONCE(scx_ops_enable_state() == SCX_OPS_ENABLED);
		keep_prev = false;
	}
@@ -3544,7 +3547,7 @@ static void task_tick_scx(struct rq *rq, struct task_struct *curr, int queued)
		curr->scx.slice = 0;
		touch_core_sched(rq, curr);
	} else if (SCX_HAS_OP(tick)) {
		SCX_CALL_OP(SCX_KF_REST, tick, curr);
		SCX_CALL_OP_TASK(SCX_KF_REST, tick, curr);
	}

	if (!curr->scx.slice)
@@ -3691,7 +3694,7 @@ static void scx_ops_disable_task(struct task_struct *p)
	WARN_ON_ONCE(scx_get_task_state(p) != SCX_TASK_ENABLED);

	if (SCX_HAS_OP(disable))
		SCX_CALL_OP(SCX_KF_REST, disable, p);
		SCX_CALL_OP_TASK(SCX_KF_REST, disable, p);
	scx_set_task_state(p, SCX_TASK_READY);
}

@@ -3720,7 +3723,7 @@ static void scx_ops_exit_task(struct task_struct *p)
	}

	if (SCX_HAS_OP(exit_task))
		SCX_CALL_OP(SCX_KF_REST, exit_task, p, &args);
		SCX_CALL_OP_TASK(SCX_KF_REST, exit_task, p, &args);
	scx_set_task_state(p, SCX_TASK_NONE);
}

+3 −0
Original line number Diff line number Diff line
@@ -800,6 +800,9 @@ __bpf_kfunc int scx_bpf_cpu_node(s32 cpu)
__bpf_kfunc s32 scx_bpf_select_cpu_dfl(struct task_struct *p, s32 prev_cpu,
				       u64 wake_flags, bool *is_idle)
{
	if (!ops_cpu_valid(prev_cpu, NULL))
		goto prev_cpu;

	if (!check_builtin_idle_enabled())
		goto prev_cpu;

+10 −2
Original line number Diff line number Diff line
@@ -288,8 +288,16 @@ void bpf_obj_drop_impl(void *kptr, void *meta) __ksym;
#define bpf_obj_new(type) ((type *)bpf_obj_new_impl(bpf_core_type_id_local(type), NULL))
#define bpf_obj_drop(kptr) bpf_obj_drop_impl(kptr, NULL)

void bpf_list_push_front(struct bpf_list_head *head, struct bpf_list_node *node) __ksym;
void bpf_list_push_back(struct bpf_list_head *head, struct bpf_list_node *node) __ksym;
int bpf_list_push_front_impl(struct bpf_list_head *head,
				    struct bpf_list_node *node,
				    void *meta, __u64 off) __ksym;
#define bpf_list_push_front(head, node) bpf_list_push_front_impl(head, node, NULL, 0)

int bpf_list_push_back_impl(struct bpf_list_head *head,
				   struct bpf_list_node *node,
				   void *meta, __u64 off) __ksym;
#define bpf_list_push_back(head, node) bpf_list_push_back_impl(head, node, NULL, 0)

struct bpf_list_node *bpf_list_pop_front(struct bpf_list_head *head) __ksym;
struct bpf_list_node *bpf_list_pop_back(struct bpf_list_head *head) __ksym;
struct bpf_rb_node *bpf_rbtree_remove(struct bpf_rb_root *root,
+1 −1
Original line number Diff line number Diff line
@@ -150,7 +150,7 @@ static enum scx_test_status run(void *ctx)

struct scx_test init_enable_count = {
	.name = "init_enable_count",
	.description = "Verify we do the correct amount of counting of init, "
	.description = "Verify we correctly count the occurrences of init, "
		       "enable, etc callbacks.",
	.run = run,
};
+1 −1
Original line number Diff line number Diff line
@@ -43,7 +43,7 @@ static enum scx_test_status run(void *ctx)

struct scx_test maybe_null = {
	.name = "maybe_null",
	.description = "Verify if PTR_MAYBE_NULL work for .dispatch",
	.description = "Verify if PTR_MAYBE_NULL works for .dispatch",
	.run = run,
};
REGISTER_SCX_TEST(&maybe_null)