[PATCH 0/2] sched: Fix SCX_ENQ_CPU_SELECTED for queued wakeups
From: Kuba Piecuch
Date: Fri Oct 23 2026 - 10:53:59 EST
SCX_ENQ_CPU_SELECTED is meant to tell ops.enqueue() whether
ops.select_cpu() ran for a wakeup. However, wakeups delivered through
the ttwu wakelist never have the flag set, because sched_ttwu_pending()
drops WF_RQ_SELECTED. Schedulers that set SCX_OPS_ALLOW_QUEUED_WAKEUP
therefore cannot tell whether ops.select_cpu() was skipped, and
SCX_EV_SELECT_CPU_FALLBACK is undercounted.
Patch 1 carries WF_RQ_SELECTED across the wakelist the same way
WF_MIGRATED already is. Patch 2 adds a selftest. In a 4-vCPU VM, without
patch 1 the test reports that all of the roughly 110k queued wakeups in
a 2s run had ops.select_cpu() called but SCX_ENQ_CPU_SELECTED clear.
With patch 1 there are none.
Patch 1 changes kernel/sched/core.c and include/linux/sched.h, but only
sched_ext sees the effect. Peter, Tejun: I'll leave it to you to decide
whether the series goes through tip or the sched_ext tree.
The bug was found, and the series was drafted, with the help of an AI
coding agent.
Kuba Piecuch (2):
sched/core: Preserve WF_RQ_SELECTED across queued wakeups
selftests/sched_ext: Test SCX_ENQ_CPU_SELECTED with queued wakeups
include/linux/sched.h | 6 +-
kernel/sched/core.c | 10 +-
tools/testing/selftests/sched_ext/Makefile | 1 +
.../sched_ext/enq_cpu_selected.bpf.c | 107 +++++++++++++
.../selftests/sched_ext/enq_cpu_selected.c | 149 ++++++++++++++++++
5 files changed, 270 insertions(+), 3 deletions(-)
create mode 100644 tools/testing/selftests/sched_ext/enq_cpu_selected.bpf.c
create mode 100644 tools/testing/selftests/sched_ext/enq_cpu_selected.c
base-commit: 734bef548a96e8774d6eef5dfa2026c6edc4e80b
--
2.56.0.257.gf7497c7d27-goog