[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20251109183112.2412147-2-tj@kernel.org>
Date: Sun, 9 Nov 2025 08:31:00 -1000
From: Tejun Heo <tj@...nel.org>
To: David Vernet <void@...ifault.com>,
Andrea Righi <andrea.righi@...ux.dev>,
Changwoo Min <changwoo@...lia.com>
Cc: Dan Schatzberg <schatzberg.dan@...il.com>,
Emil Tsalapatis <etsal@...a.com>,
sched-ext@...ts.linux.dev,
linux-kernel@...r.kernel.org,
Tejun Heo <tj@...nel.org>,
Patrick Lu <patlu@...a.com>
Subject: [PATCH 01/13] sched_ext: Don't set ddsp_dsq_id during select_cpu in bypass mode
In the default CPU selection path used during bypass mode, select_task_rq_scx()
set p->scx.ddsp_dsq_id to SCX_DSQ_LOCAL to emulate direct dispatch. However,
do_enqueue_task() ignores ddsp_dsq_id in bypass mode and queues to the global
DSQ, leaving ddsp_dsq_id dangling. This triggers WARN_ON_ONCE() in
mark_direct_dispatch() if the task later gets direct dispatched.
Don't use direct dispatch from bypass. Just return the selected CPU, which has
the effect of waking up the picked idle CPU. Later patches will implement
per-CPU bypass DSQs to resolve this issue in a more proper way.
Reported-by: Patrick Lu <patlu@...a.com>
Signed-off-by: Tejun Heo <tj@...nel.org>
---
kernel/sched/ext.c | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/kernel/sched/ext.c b/kernel/sched/ext.c
index 652a364e9e4c..cf8d86a2585c 100644
--- a/kernel/sched/ext.c
+++ b/kernel/sched/ext.c
@@ -2521,12 +2521,8 @@ static int select_task_rq_scx(struct task_struct *p, int prev_cpu, int wake_flag
s32 cpu;
cpu = scx_select_cpu_dfl(p, prev_cpu, wake_flags, NULL, 0);
- if (cpu >= 0) {
- refill_task_slice_dfl(sch, p);
- p->scx.ddsp_dsq_id = SCX_DSQ_LOCAL;
- } else {
+ if (cpu < 0)
cpu = prev_cpu;
- }
p->scx.selected_cpu = cpu;
if (rq_bypass)
--
2.51.1
Powered by blists - more mailing lists