mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 01:55:51 +02:00
sched_ext: Reset dsq_vtime and slice when a task leaves SCX
When a task leaves the BPF scheduler's control, p->scx.dsq_vtime and p->scx.slice keep whatever values they last held. The slice value is core-managed and is refilled on the next enqueue, but dsq_vtime is owned by the BPF scheduler and is never cleared by the core, so a task that leaves SCX and later returns carries a stale dsq_vtime across the round-trip. The stale values are also visible to other SCX schedulers that inspect the scx fields of non-SCX tasks. Fix this by resetting both dsq_vtime and slice in scx_disable_task(), after ops.disable(), so the BPF scheduler can still observe the task's final values and non-SCX tasks do not retain stale SCX state. Signed-off-by: Andrea Righi <arighi@nvidia.com> Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
parent
4cd5de72b6
commit
5771e79e46
|
|
@ -3647,6 +3647,13 @@ static void scx_disable_task(struct scx_sched *sch, struct task_struct *p)
|
|||
SCX_CALL_OP_TASK(sch, disable, rq, p);
|
||||
scx_set_task_state(p, SCX_TASK_READY);
|
||||
|
||||
/*
|
||||
* Reset the SCX-managed fields when @p leaves the BPF scheduler's
|
||||
* control, after ops.disable() has observed their final values.
|
||||
*/
|
||||
p->scx.dsq_vtime = 0;
|
||||
p->scx.slice = 0;
|
||||
|
||||
/*
|
||||
* Verify the task is not in BPF scheduler's custody. If flag
|
||||
* transitions are consistent, the flag should always be clear
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user