From: Cheng-Yang Chou <yphbchou0911@gmail.com>
To: sched-ext@lists.linux.dev, Tejun Heo <tj@kernel.org>,
David Vernet <void@manifault.com>,
Andrea Righi <arighi@nvidia.com>,
Changwoo Min <changwoo@igalia.com>
Cc: Kuba Piecuch <jpiecuch@google.com>,
Ching-Chun Huang <jserv@ccns.ncku.edu.tw>,
Chia-Ping Tsai <chia7712@gmail.com>,
yphbchou0911@gmail.com
Subject: [PATCH v3 sched_ext/for-7.2 0/2] sched_ext: Add dispatch transaction API
Date: Sun, 10 May 2026 03:11:55 +0800 [thread overview]
Message-ID: <20260509191223.168648-1-yphbchou0911@gmail.com> (raw)
scx_bpf_dsq_insert() captures the task's sequence number at insert time,
so any pre-dispatch validity checks a BPF scheduler performs before the
insert fall outside the race detection window.
Patch 1: Introduce a dispatch transaction API with two new kfuncs.
- scx_bpf_dsq_insert_begin() captures the sequence number before any
pre-dispatch checks, opening the transaction.
- scx_bpf_dsq_insert_commit() inserts the task using the early-captured
token, extending the race detection window. If the token has gone stale
(task was dequeued or claimed by another CPU), finish_dispatch()
silently discards the entry. This is intended for schedulers that do
not implement properly synchronized dequeue.
Patch 2: Add a selftest exercising the dispatch transaction API. The BPF
scheduler captures the token in ops.dispatch() and flips CPU affinity on
child tasks to trigger dequeue and re-enqueue, verifying that both
successful and stale-token dispatch paths are exercised.
Test plan:
- Applied this series and ran selftests with vng, all tests pass.
- Confirmed selftest skips on older kernel.
This series is discussed in [1].
[1]: https://lore.kernel.org/r/20260319083518.94673-1-arighi@nvidia.com/
Changes in v3:
- Rename cookie API to dispatch transaction API: rename kfuncs from
scx_bpf_task_get_cookie/scx_bpf_dsq_insert_with_cookie to
scx_bpf_dsq_insert_begin/scx_bpf_dsq_insert_commit (Tejun Heo)
- Rename internal scx_dsq_insert_commit() to scx_dsq_insert_buf() to
avoid collision with the new public kfunc (Tejun Heo)
- Move __ksym __weak declarations in common.bpf.h into the API commit
- Redesign selftest to call insert from ops.dispatch() with CPU affinity
flips to actually exercise the race detection window. v2 called from
ops.enqueue() where the cookie was silently ignored (Tejun Heo)
- Skip selftest on older kernels lacking the dispatch transaction API
- Apply the same fix logic as commit e18002d2c791 to the selftest
- Link to v2:
https://lore.kernel.org/r/20260506160412.522199-1-yphbchou0911@gmail.com/
Changes in v2:
- Reword kdoc for both kfuncs to avoid exposing qseq and ops_state as
implementation details (Kuba Piecuch)
- Add __ksym __weak declarations for new kfuncs in common.bpf.h
- Add dispatch_cookie selftest (Kuba Piecuch)
- Link to v1:
https://lore.kernel.org/r/20260506075925.371138-1-yphbchou0911@gmail.com/
Thanks,
Cheng-Yang
---
Cheng-Yang Chou (2):
sched_ext: Add dispatch transaction API
selftests/sched_ext: Add dispatch_cookie test
kernel/sched/ext.c | 72 ++++++++++++-
tools/sched_ext/include/scx/common.bpf.h | 2 +
tools/testing/selftests/sched_ext/Makefile | 1 +
.../selftests/sched_ext/dispatch_cookie.bpf.c | 102 ++++++++++++++++++
.../selftests/sched_ext/dispatch_cookie.c | 100 +++++++++++++++++
5 files changed, 272 insertions(+), 5 deletions(-)
create mode 100644 tools/testing/selftests/sched_ext/dispatch_cookie.bpf.c
create mode 100644 tools/testing/selftests/sched_ext/dispatch_cookie.c
--
2.48.1
next reply other threads:[~2026-05-09 19:12 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-09 19:11 Cheng-Yang Chou [this message]
2026-05-09 19:11 ` [PATCH v3 1/2] sched_ext: Add dispatch transaction API Cheng-Yang Chou
2026-05-09 19:49 ` sashiko-bot
2026-05-09 21:24 ` Andrea Righi
2026-05-10 14:02 ` Tejun Heo
2026-05-10 14:58 ` Andrea Righi
2026-05-15 14:50 ` Cheng-Yang Chou
2026-05-10 14:06 ` Tejun Heo
2026-05-15 14:36 ` Cheng-Yang Chou
2026-05-09 19:11 ` [PATCH v3 2/2] selftests/sched_ext: Add dispatch_cookie test Cheng-Yang Chou
2026-05-09 20:16 ` sashiko-bot
2026-05-09 21:43 ` Andrea Righi
2026-05-15 13:42 ` Cheng-Yang Chou
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260509191223.168648-1-yphbchou0911@gmail.com \
--to=yphbchou0911@gmail.com \
--cc=arighi@nvidia.com \
--cc=changwoo@igalia.com \
--cc=chia7712@gmail.com \
--cc=jpiecuch@google.com \
--cc=jserv@ccns.ncku.edu.tw \
--cc=sched-ext@lists.linux.dev \
--cc=tj@kernel.org \
--cc=void@manifault.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.