0/2 已展开

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 时扑空。

旧流程的问题

注释里出现了四处与代码对不上的函数名:

  1. __setschduler_prio() —— 既拼错 scheduler,又沿用了早已改名的旧函数。
  2. __setscheduler_prio() —— 拼写正确,但同样是过期名字。
  3. scx_iter_scx_dsq_new() —— DSQ 迭代器的构造函数并不叫这个名字。
  4. 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_classtask_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