[PATCHSET sched_ext/for-7.2-fixes] sched_ext: Fix core scheduling
Tejun Heo <[email protected]>
| Newsgroups | dev.linux.lists.sched-ext,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
Hello,
sched_ext's core scheduling support has been broken since 4c95380701f5
("sched/ext: Fold balance_scx() into pick_task_scx()") made dispatch run
from inside ->pick_task(). Dispatching can release the rq lock, which lets
core-wide selections on the same core interleave and corrupt each other's
state - crashing on a cleared rq->core_pick or leaving a dequeued task
running, which wedges the machine:
https://github.com/sched-ext/scx/issues/3715
The main fix (0006) makes the core-sched pick return RETRY_TASK whenever
its dispatch released the rq lock, so that a selection only ever commits
picks made under a continuously held lock. The preceding patches update
the core-sched pick to handle lock-dropping picks (0001-0002) and fix
adjacent breakages from the same fold that core scheduling support needs
(0003-0005).
0001-sched-core-Handle-pick_task-releasing-the-rq-lock.patch
0002-sched-core-Make-core-sched-flips-wait-for-in-flight-.patch
0003-sched_ext-Replace-SCX_RQ_BAL_KEEP-with-a-dispatch-ve.patch
0004-sched_ext-Fix-this_rq-assumptions-in-dispatch-kfuncs.patch
0005-sched_ext-Count-rq-lock-releases-in-rq-scx.lock_drop.patch
0006-sched_ext-Fix-rq-core_pick-corruption-under-core-sch.patch
Based on sched_ext/for-7.2-fixes (d4a00d61a5c2). The patchset is also
available in the following git branch:
git://git.kernel.org/pub/scm/linux/kernel/git/tj/sched_ext.git coresched-fixes
diffstat follows.
kernel/sched/core.c | 49 ++++++--
kernel/sched/ext/ext.c | 302 +++++++++++++++++++++++++++++++++++--------------
kernel/sched/sched.h | 5 +-
3 files changed, 265 insertions(+), 91 deletions(-)
--
tejun