[PATCH] sched_ext: Fix incorrect SCX_PICK_IDLE_CPU_* flag prefix in kernel-doc
修正 idle.c 中三处 kernel-doc 注释将 %SCX_PICK_IDLE_CPU_* 错写为不存在的枚举前缀,改为与 scx_pick_idle_cpu_flags 成员一致的 %SCX_PICK_IDLE_*。已由 Tejun Heo 合入 sched_ext/for-7.3。
北京时间 2026-06-11 至 2026-09-08
最近同步:2026/09/08 03:19
修正 idle.c 中三处 kernel-doc 注释将 %SCX_PICK_IDLE_CPU_* 错写为不存在的枚举前缀,改为与 scx_pick_idle_cpu_flags 成员一致的 %SCX_PICK_IDLE_*。已由 Tejun Heo 合入 sched_ext/for-7.3。
为 sched_ext 中三类 __rcu 指针的裸读取添加合规标注:cgrp->scx_sched 通过 scx_cgroup_sched() 声明三锁保护,scx_root 通过 scx_root_protected_live/protected() 声明 live 不变式或锁排他,dsq->first_task 用 rcu_access_pointer() 做身份比较。全部无功能变更,已合入 for-7.3。
Andrea Righi 发布 PATCHSET v9,共 14 个补丁,移除 SCHED_PROXY_EXEC 与 SCHED_CLASS_EXT 的构建期互斥。在核心调度器侧把 rq->donor 与 rq->curr 拆开,新增 SCX_OPS_ENQ_BLOCKED 能力位让 BPF scheduler 显式选择是否接管 blocked donor,并同步修复 NOHZ 带宽检查、远端 DSQ 迁移竞态、ops.running/stopping 配对等问题。配套提供 enq_blocked selftest 和 scx_qmap -B 演示选项。
本系列修复两个问题:用户态工具在 exit_req 与 RESTART 同时存在时陷入无限重启循环;sub-scheduler 的 cid-addressed reenq、kick 和 cpuperf 操作缺少权限检查,无 cap 的 sub-sched 可触发他人 CPU 的 IPI 和频率调整。Patch 1 修复 restart 逻辑,Patch 2-3 给 reenq/kick 加 SCX_CAP_BASE 门控并计数拒绝,Patch 4 重构 cpuperf setter,Patch 5 新增 SCX_CAP_PERF 门控 cpuperf 并同步返回结果。
本系列修复 sched_ext 工具在重启等待期忽略 exit_req 导致无限循环的 bug,并堵住子调度器三个权限漏洞:reenq IPI、kick 拒绝和 cidperf cpufreq 操控无 cap 检查。新增 SCX_CAP_PERF 作为独立 cpufreq 权限轴,cidperf_set 通过版本化 v2 kfunc 同步返回拒绝结果。所有拒绝操作均有事件计数器可观测。
补丁修复 kernel/sched/ext/ext.c 中 6 处 kernel-doc 注释缺陷:为 finish_dispatch、scx_rcu_cpu_stall、scx_hardlockup 补齐缺失参数描述,并将 3 个版本化 BPF kfunc 的注释函数名从公开别名改为带 ___v2 后缀的 C 定义名,消除构建警告。Tejun Heo 已合入 sched_ext/for-7.3。
当睡眠任务的 CPU affinity 在睡眠期间被修改后,task_cpu(p) 可能指向已不在 cpus_ptr 中的 CPU,导致 NUMA node 选定后找不到合法 CPU,sched_ext 框架报 "invalid CPU -16" 并使调度器异常退出。补丁在 numa_select_cpu() 中检测 cpumask 不一致时回退 prev_cpu 兜底,Tejun Heo 已 apply 到 for-7.2-fixes。
PATCHSET v8 用 12 个补丁让 CONFIG_SCHED_PROXY_EXEC 与 CONFIG_SCHED_CLASS_EXT 不再互斥,方法是把 rq->donor 与 rq->curr 拆分、由 BPF 通过 SCX_OPS_ENQ_BLOCKED 显式接收 blocked donor,并修复了 set_task_cpu 假告警、consume_remote_task 迁移竞态、NOHZ 带宽核算错、running/stopping 不配对等副作用。John Stultz 已 ack 多处,Tejun Heo 提出用 class callback 替换直接调用、把 GDSQ_...
scx_sub_enable_workfn() 中嵌套深度检查和 cgroup online 检查两条错误路径跳到 err_disable 时未设置 ret,导致 fallback 日志打印 errno=0。补丁分别设置 -EINVAL 和 -ENODEV 使 fallback 报告真实错误码。当前因 scx_error 的 first-error-wins 机制而无害,但 fallback 机制本身是坏的,需要修复。
将 scx_pair 的 ops.cpu_acquire/release() 废弃回调替换为 tp_btf/sched_switch tracepoint 边沿检测,用 p->prio 判断高优先级抢占,消除加载时的废弃警告。idle→高优先级直跳不算 release,sched_setscheduler() 的盲区与旧回调一致。已由 Tejun Heo 合入 sched_ext/for-7.3。