sched-ext discussion
[PATCH] sched_ext: Fix several comment issues
LLM 分析
sched_ext:修复若干注释引用错误
系列概况
- 标题: [PATCH] sched_ext: Fix several comment issues
- 作者: Wanwu Li liwanwu@kylinos.cn
- 版本: v1(无 re-spin)
- 规模: 2 个文件,4 insertions(+),4 deletions(-)
- 修改文件:
kernel/sched/ext/ext.c(3 处注释)kernel/sched/ext/internal.h(1 处注释)
- 代码统计: 4 insertions(+), 4 deletions(-)
- Message-ID: 20260827091411.973621-1-liwanwu@kylinos.cn
- 完整性: 完整线程(1 个 patch + 2 个回复,已由 maintainer 合入)
补丁目的
本 patch 的唯一目标是修正 sched_ext 子系统注释里四处与真实代码不一致的函数名引用。
它不改变任何运行时行为,纯粹是把「拼错的 / 过期的」符号名对齐到当前内核里真实存在的函数,避免读者按注释 grep 时扑空。
旧流程的问题
注释里出现了四处与代码对不上的函数名:
__setschduler_prio()—— 既拼错scheduler,又沿用了早已改名的旧函数。__setscheduler_prio()—— 拼写正确,但同样是过期名字。scx_iter_scx_dsq_new()—— DSQ 迭代器的构造函数并不叫这个名字。scx_next_task_scx()—— 旧的任务切换入口名,与现状不符。
读者按这些名字 git grep,只会命中注释自身,从而怀疑是自己对 sched_ext 架构的理解出了问题。
新流程
四处引用统一替换为代码中真实存在的符号:
__setscheduler_class()—— 位于kernel/sched/core.c:7608,确实返回sched_class。bpf_iter_scx_dsq_new()—— BPF DSQ 迭代器真正的构造函数,与bpf_iter_scx_dsq_destroy()成对。set_next_task_scx()—— 真正触发@running回调的入口。
Patch 概览
| 位置 | 旧注释引用 | 新注释引用 |
|---|---|---|
ext.c ~876(scx_task_iter_next_locked 上方) | __setschduler_prio() | __setscheduler_class() |
ext.c ~5514(task_should_scx() 上方) | __setscheduler_prio() | __setscheduler_class() |
ext.c ~9765(bpf_iter_scx_dsq_next 上方) | scx_iter_scx_dsq_new() | bpf_iter_scx_dsq_new() |
internal.h ~442(sched_ext_ops.running 文档) | scx_next_task_scx() | set_next_task_scx() |
old comment names (4 sites) real symbols in tree
-------------------------- --------------------
__setschduler_prio() --+
__setscheduler_prio() --+--> __setscheduler_class() [ext.c x2]
scx_iter_scx_dsq_new() -----> bpf_iter_scx_dsq_new() [ext.c]
scx_next_task_scx() -----> set_next_task_scx() [internal.h]
changelog says 3 renames != diff touches 4 sites
关键实现
本 patch 不改任何执行路径,只做一对一的字符串替换。
/* kernel/sched/ext/ext.c ~876: scx_task_iter_next_locked() 上方注释 */
- * - It's unsafe to use __setschduler_prio() on an init_task to
+ * - It's unsafe to use __setscheduler_class() on an init_task to
/* kernel/sched/ext/ext.c ~5514: task_should_scx() 上方注释 */
- * Used by sched_fork() and __setscheduler_prio() to pick the matching
+ * Used by sched_fork() and __setscheduler_class() to pick the matching
/* kernel/sched/ext/ext.c ~9765: bpf_iter_scx_dsq_next() 上方注释 */
- * Undo scx_iter_scx_dsq_new().
+ * Undo bpf_iter_scx_dsq_new().
/* kernel/sched/ext/internal.h ~442: sched_ext_ops 的 @running 回调文档 */
- * property is changed (i.e., affinity), since scx_next_task_scx(),
+ * property is changed (i.e., affinity), since set_next_task_scx(),
Reviewer Zhan Xusheng 做了正反两个方向的验证:
- 反向:全树 grep 旧拼写,只命中 patch 自己改的这几行,没有遗漏第三处。
- 正向:确认新名字与周边注释语义自洽 ——
__setscheduler_class()在core.c:7608返回sched_class,task_should_scx()分别从 7617 行和sched_fork()路径(4862 行)到达,internal.h:439描述的@running回调正是set_next_task_scx()触发的那个。
据此给出 Reviewed-by。
Wanwu Li Zhan Xusheng Tejun Heo
-------- ------------ ---------
[PATCH] --------> grep old names -> none left
check new names -> consistent
Reviewed-by -------------> rewrap to 80 cols
note: 3 vs 4 sites Applied:
sched_ext/for-7.3-fixes
Tejun Heo 在合入时把 ext.c ~876 那段注释重新折行,使其保持在 80 列以内(三行拆成三行更短的行),然后收进 sched_ext/for-7.3-fixes。
类比
这次改动像是修一本技术书的目录页:正文一个字没动,但目录里写的还是「第七章 图像识别」,而正文早就改名为「第七章 视觉特征提取」。读者按目录翻页找不到对应章节,第一反应往往是怀疑自己看错书,而不是怀疑目录过期。
Reviewer 的工作则像拿着目录逐条核对页码:确认每个新条目都真的能翻到那一页,同时确认旧条目在书里已经没有别处残留。maintainer 最后做的排版则像是排版编辑把过长的目录行重新断行,让它在页面宽度内对齐。
Highlight:风险与注意点
- changelog 与 diff 数量不一致:commit message 列了 3 条 rename,实际改了 4 个 site,因为
__setschduler_prio(拼错)与__setscheduler_prio(拼对)本质上是同一个陈旧名字的两种写法。Zhan Xusheng 明确指出这是 changelog 的问题而非 diff 的问题,理想写法是合并成「统一改正__setscheduler_class()的两种过期拼写」。 - 陈旧注释会污染工具链:文档生成器、
git grep检索脚本、乃至 LLM 辅助阅读都会把注释里的旧名当成还活着的符号;合入前值得再 grep 一遍__setschduler_prio|__setscheduler_prio|scx_iter_scx_dsq_new|scx_next_task_scx确认没有第三处遗漏(reviewer 已代为验证)。 - 80 列排版需自己先处理好:maintainer 手工 rewrap 说明补丁作者改注释时没有重新检查行宽。改动注释中函数名长度变化(
_prio->_class变长)时,应顺手确认整段仍在 80 列内,否则会给 maintainer 增加人工修补成本。 - 纯注释 patch 易被跳过:这类 patch 没有功能风险,容易被 reviewer 忽略,但它是后续阅读与自动化工具的事实依据;越早合入越能避免新 patch 又照抄旧注释中的旧函数名。
版本变化
线程内只有一个 v1 patch,没有 re-spin。唯一「版本差异」发生在合入侧:Tejun Heo 在 apply 时对第一处注释块做了 80 列 rewrap,逻辑与被改的符号名一字未变。
一句话总结
这是 sched_ext 的一次纯注释修正:把四处过期或拼错的函数名统一改为 __setscheduler_class()、bpf_iter_scx_dsq_new() 和 set_next_task_scx(),经 Zhan Xusheng grep 双向验证并指出 changelog 少算一处后,由 Tejun Heo 做 80 列 rewrap 合入 sched_ext/for-7.3-fixes。