mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 01:53:29 +02:00
sched_ext: Merge branch 'for-6.14-fixes' into for-6.15
Pull for-6.14-fixes to receive:9360dfe4cb("sched_ext: Validate prev_cpu in scx_bpf_select_cpu_dfl()") which conflicts with:337d1b354a("sched_ext: Move built-in idle CPU selection policy to a separate file") Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
commit
8a9b1585e2
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user