mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-19 08:11:11 -04:00
sched_ext: Documentation: Clarify ops.dispatch() role in task lifecycle
ops.dispatch() is invoked when a CPU becomes available. This can occur
when a task voluntarily yields the CPU, exhausts its time slice, or is
preempted for other reasons.
If the task is still runnable, refilling its time slice in
ops.dispatch() (either by the BPF scheduler or the sched_ext core)
allows it to continue running without triggering ops.stopping().
However, this behavior is not clearly reflected in the current task
lifecycle diagram.
Update the diagram to better represent this interaction.
Fixes: 9465f44d2d ("sched_ext: Documentation: Clarify time slice handling in task lifecycle")
Cc: stable@vger.kernel.org # v6.17+
Signed-off-by: Andrea Righi <arighi@nvidia.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
@@ -433,13 +433,15 @@ by a sched_ext scheduler:
|
||||
ops.dequeue(); /* Exiting BPF scheduler */
|
||||
}
|
||||
ops.running(); /* Task starts running on its assigned CPU */
|
||||
while (task->scx.slice > 0 && task is runnable)
|
||||
ops.tick(); /* Called every 1/HZ seconds */
|
||||
|
||||
while task_is_runnable(p) {
|
||||
while (task->scx.slice > 0 && task_is_runnable(p))
|
||||
ops.tick(); /* Called every 1/HZ seconds */
|
||||
|
||||
ops.dispatch(); /* task->scx.slice can be refilled */
|
||||
}
|
||||
|
||||
ops.stopping(); /* Task stops running (time slice expires or wait) */
|
||||
|
||||
/* Task's CPU becomes available */
|
||||
|
||||
ops.dispatch(); /* task->scx.slice can be refilled */
|
||||
}
|
||||
|
||||
ops.quiescent(); /* Task releases its assigned CPU (wait) */
|
||||
|
||||
Reference in New Issue
Block a user