diff options
| author | Tejun Heo <tj@kernel.org> | 2025-11-04 11:42:55 -1000 |
|---|---|---|
| committer | Tejun Heo <tj@kernel.org> | 2025-11-04 11:46:25 -1000 |
| commit | d723f36e014d296d668b577c0c69cc37be75e6d2 (patch) | |
| tree | 0245d93d22c4b4cf56f5814592c2bd9d5c232afc /kernel/sched/ext.c | |
| parent | 023af03caed8c1c7b863b912b661bb76a8c13c24 (diff) | |
sched_ext: Minor cleanups to scx_task_iter
- Use memset() in scx_task_iter_start() instead of zeroing fields individually.
- In scx_task_iter_next(), move __scx_task_iter_maybe_relock() after the batch
check which is simpler.
- Update comment to reflect that tasks are removed from scx_tasks when dead
(commit 7900aa699c34 ("sched_ext: Fix cgroup exit ordering by moving
sched_ext_free() to finish_task_switch()")).
No functional changes.
Signed-off-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'kernel/sched/ext.c')
| -rw-r--r-- | kernel/sched/ext.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/kernel/sched/ext.c b/kernel/sched/ext.c index 5af015891b15..652a364e9e4c 100644 --- a/kernel/sched/ext.c +++ b/kernel/sched/ext.c @@ -470,16 +470,16 @@ struct scx_task_iter { * RCU read lock or obtaining a reference count. * * All tasks which existed when the iteration started are guaranteed to be - * visited as long as they still exist. + * visited as long as they are not dead. */ static void scx_task_iter_start(struct scx_task_iter *iter) { + memset(iter, 0, sizeof(*iter)); + spin_lock_irq(&scx_tasks_lock); iter->cursor = (struct sched_ext_entity){ .flags = SCX_TASK_CURSOR }; list_add(&iter->cursor.tasks_node, &scx_tasks); - iter->locked_task = NULL; - iter->cnt = 0; iter->list_locked = true; } @@ -545,14 +545,13 @@ static struct task_struct *scx_task_iter_next(struct scx_task_iter *iter) struct list_head *cursor = &iter->cursor.tasks_node; struct sched_ext_entity *pos; - __scx_task_iter_maybe_relock(iter); - if (!(++iter->cnt % SCX_TASK_ITER_BATCH)) { scx_task_iter_unlock(iter); cond_resched(); - __scx_task_iter_maybe_relock(iter); } + __scx_task_iter_maybe_relock(iter); + list_for_each_entry(pos, cursor, tasks_node) { if (&pos->tasks_node == &scx_tasks) return NULL; |