Skip to content

Commit db08b19

Browse files
EricccTaiwanhtejun
authored andcommitted
sched_ext: Fix inconsistent NUMA node lookup in scx_select_cpu_dfl()
In the WAKE_SYNC path of scx_select_cpu_dfl(), waker_node was computed with cpu_to_node(), while node (for prev_cpu) was computed with scx_cpu_node_if_enabled(). When scx_builtin_idle_per_node is disabled, idle_cpumask(waker_node) is called with a real node ID even though per-node idle tracking is disabled, resulting in undefined behavior. Fix by using scx_cpu_node_if_enabled() for waker_node as well, ensuring both variables are computed consistently. Fixes: 4884927 ("sched_ext: idle: Per-node idle cpumasks") Cc: [email protected] # v6.15+ Signed-off-by: Cheng-Yang Chou <[email protected]> Reviewed-by: Andrea Righi <[email protected]> Signed-off-by: Tejun Heo <[email protected]>
1 parent 2fcfe59 commit db08b19

1 file changed

Lines changed: 1 addition & 1 deletion

File tree

kernel/sched/ext_idle.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -543,7 +543,7 @@ s32 scx_select_cpu_dfl(struct task_struct *p, s32 prev_cpu, u64 wake_flags,
543543
* piled up on it even if there is an idle core elsewhere on
544544
* the system.
545545
*/
546-
waker_node = cpu_to_node(cpu);
546+
waker_node = scx_cpu_node_if_enabled(cpu);
547547
if (!(current->flags & PF_EXITING) &&
548548
cpu_rq(cpu)->scx.local_dsq.nr == 0 &&
549549
(!(flags & SCX_PICK_IDLE_IN_NODE) || (waker_node == node)) &&

0 commit comments

Comments
 (0)