sched discussion
[PATCH 6.18 001/396] netfilter: nf_conntrack_expect: restore helper propagation via expectation
LLM 分析
6.18 stable review:跨子系统批量 stable patch
系列概况
- 标题:
[PATCH 6.18 000/396] 6.18.44-rc1 review - 作者:Greg Kroah-Hartman(stable 维护者),具体 patch 作者分布各子系统
- 版本:6.18 stable rc1;规模 396 个 patch,加 cover + 9 封回复合计 406 封邮件
- 修改文件:覆盖 30+ 子系统(netfilter、btrfs、mm/slab、ALSA/ASoC、Bluetooth、drm、hwmon、net、scsi、can、phy、powerpc、s390、hyperv 等)
- 代码统计:每 patch 1–50 行,整系列净增约 1500+ 行
- Message-ID(cover):
20260807143424.272339768@linuxfoundation.org - 完整性:cover letter 完整,大部分 patch 在 lore 上 body 仅余 diff 摘要;9 封回复几乎全部空 body(典型 Tested-by/Acked-by)
补丁目的
本 thread 是 6.18 stable -rc1 拉取请求,把主线积累的 396 个修复回移到 stable 分支。
虽然来源频道为 sched,但仅 PATCH 149/396 sched/deadline: Use revised wakeup rule only for running dl_server 真正属于 scheduler 子系统;其余 395 个分布在其它子系统。
旧流程的问题
旧流程下 stable 维护者需逐个 ack 单 patch,并手工挑选 5/10/15-day-old 修复;节奏慢且需维护者跟踪每个子系统的 -rc 拉取窗口。
新流程
Greg KH 周期性发 mega patch series(单次数百个 patch),订阅者按子系统在 lore 上自助 review;无人反对即一起由 Linus 拉取 tag。
Patch 概览(按子系统聚合)
| 子系统 | 数量 | 代表 |
|---|---|---|
| netfilter | ~10 | helper 传播恢复、SIP NAT delta 改 s32 |
| btrfs | ~5 | remount flag 泄漏、metadata/transaction 死锁 |
| mm/slab | 2 | KMALLOC_NO_OBJ_EXT 防递归、alloc_tag 新接口 |
| ALSA/ASoC | ~25 | usb-audio 越界、max98090/95 mclk IS_ERR |
| Bluetooth | ~15 | ISO socket refcount/UAF、PAST 初始支持 |
| drm | ~30 | vmwgfx 校验、xe OA whitelist 重构 |
| hwmon | ~12 | adt7470 一组修复、ina234 引入 |
| net/wireless | ~25 | ipv6 redirect、af_unix listen 校验 |
| powerpc/s390/riscv | ~10 | s390 zcrypt 长度校验、riscv 热移除 |
| x86/arm64/hyperv | ~9 | Confidential VMBus、KVM VMX memory clobber |
| 其它(can/i2c/phy/spi/gpio) | ~50+ | 1–5 行小修 |
关键实现
聚焦本 series 中与 sched 相关或受关注度最高的 patch。
1. sched/deadline: Use revised wakeup rule only for running dl_server
把 DL "revised wakeup rule" 的判定收敛到 dl_server 实际 running 时才生效,避免对未运行 server 触发错误抢占语义。
if (revised_wakeup_rule_eligible(dl_task) &&
dl_server_is_running(dl_server))
allow_preempt(dl_task, dl_server);
类比:公司门卫只在岗才有权拦人查证件;不在岗时不要去拦访客。
2. mm/slab: prevent unbounded recursion in free path
slub 的 alloc_slab_obj_exts() 此前用 size+1 hack 避开自身 slab。生产环境发现 kmalloc-512 ↔ kmalloc-1k 形成 obj_exts 互引环,__free_slab <-> kfree 递归约 125 层触发栈溢出 oops。
修复新增 KMALLOC_NO_OBJ_EXT 类型,正常 kmalloc 路径强制走无 objext 缓存,从根本打破循环。
old: if (s->object_size == obj_exts_cache->object_size) sz += 1;
new: if (is_kmalloc_normal(s)) gfp |= __GFP_NO_OBJ_EXT;
vec = kmalloc_nolock(sz, __GFP_ZERO | (gfp & __GFP_NO_OBJ_EXT), ...);
类比:把仓库台账从仓库自己存改成放在二楼会计室,仓库不再"自记账",消掉自引用循环。
3. netfilter: nf_conntrack_expect: restore helper propagation
SIP/H323 expectation 机制被 9c42bc9db90a 改坏:exp->helper 语义变成"创建 expectation 的 helper",无法再向新连接注入 helper。新增 assign_helper 字段专门表达"赋给新连接的 helper",sip/h323 改用 exp->assign_helper。
4. hyperv: Confidential VMBus
SynIC message/event page 加 hyp_ 前缀区分 hypervisor 与 paravisor 提供的 SynIC;CoCo guest 按 ms_hyperv.confidential_vmbus_available 启用 paravisor SynIC,ARM64 暂为 false。
Stable review 流程图
Linux 6.18 mainline
|
v
+-----------------------+
| Linus merges fixes |
+-----------------------+
|
v
+-------------------------------+
| Greg KH picks 5/10/15-day-old |
+-------------------------------+
|
v
+-------------------------------+
| 6.18.44-rc1 mega series (396) |
+-------------------------------+
| | | |
v v v v
NF BTRFS MM/SLAB DRM ... (subsystem reviews)
|
v
+-------------------------------+
| Linus pulls 6.18.44 tag |
+-------------------------------+
类比
Greg KH 的 stable review 像周末超市的特价周报:每个 patch 是货架上一件打折商品(5/10/15 天前刚进货),订阅者按商品分区自取试用,不需要逐一过收银台(Linus 单独审核),无人退回就一起结账。
Highlight:风险与注意点
- 覆盖率错觉:lore 抓回的 patch 多数 body 字段为空,无法逐 patch 确认上下文;只看 series_title 容易误判。
- 回归面巨大:单次 merge 396 patch 跨子系统,需跑 -rt/-next/发行版 QA。
- DL 行为变化:PATCH 149 限制 wakeup rule 仅对 running dl_server 生效,旧依赖"server 暂离仍能借调度"的 workload 可能行为差异,建议 perf sched 对照。
- 类型语义扩张:新增 KMALLOC_NO_OBJ_EXT 枚举值,旧仓库 cherry-pick 旧 patch 又吃这个 fix 会留类型不一致。
- CoCo 开关:paravisor SynIC 路径仅
confidential_vmbus_available真时启用,ARM64 现永远 false,跨架构回归需覆盖。 - 回复邮件空 body:翻译必须落到标题/header,不可捏造正文。
版本变化
本 thread 是单次 -rc1 拉取,无 v1/v2 演进;但内部 patch 自身在主线多经多轮(如 mm/slab 系列 20260713-kmalloc-no-objext-v3),6.18 stable 已是多次迭代的最终形态。
一句话总结
本 thread 是 6.18 stable rc1 跨 30+ 子系统的 mega-patch series(396 个),唯一真正属于 scheduler 的 PATCH 149/396 sched/deadline dl_server wakeup rule 限制 DL 抢占语义到 server 实际 running 时,其余多为 netfilter、btrfs、mm/slab、drm、ALSA、Bluetooth 等经典 bugfix 集合。