mirror of
https://github.com/torvalds/linux.git
synced 2026-05-12 16:18:45 +02:00
sched_ext: Pass held rq to SCX_CALL_OP() for core_sched_before
scx_prio_less() runs from core-sched's pick_next_task() path with rq
locked but invokes ops.core_sched_before() with NULL locked_rq, leaving
scx_locked_rq_state NULL. If the BPF callback calls a kfunc that
re-acquires rq based on scx_locked_rq() - e.g. scx_bpf_cpuperf_set(cpu)
- it re-acquires the already-held rq.
Pass task_rq(a).
Fixes: 7b0888b7cc ("sched_ext: Implement core-sched support")
Cc: stable@vger.kernel.org # v6.12+
Reported-by: Chris Mason <clm@meta.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
Reviewed-by: Andrea Righi <arighi@nvidia.com>
This commit is contained in:
parent
207d76a372
commit
4155fb489f
|
|
@ -3198,7 +3198,7 @@ bool scx_prio_less(const struct task_struct *a, const struct task_struct *b,
|
|||
if (sch_a == sch_b && SCX_HAS_OP(sch_a, core_sched_before) &&
|
||||
!scx_bypassing(sch_a, task_cpu(a)))
|
||||
return SCX_CALL_OP_2TASKS_RET(sch_a, core_sched_before,
|
||||
NULL,
|
||||
task_rq(a),
|
||||
(struct task_struct *)a,
|
||||
(struct task_struct *)b);
|
||||
else
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user