0/406 已展开

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~10helper 传播恢复、SIP NAT delta 改 s32
btrfs~5remount flag 泄漏、metadata/transaction 死锁
mm/slab2KMALLOC_NO_OBJ_EXT 防递归、alloc_tag 新接口
ALSA/ASoC~25usb-audio 越界、max98090/95 mclk IS_ERR
Bluetooth~15ISO socket refcount/UAF、PAST 初始支持
drm~30vmwgfx 校验、xe OA whitelist 重构
hwmon~12adt7470 一组修复、ina234 引入
net/wireless~25ipv6 redirect、af_unix listen 校验
powerpc/s390/riscv~10s390 zcrypt 长度校验、riscv 热移除
x86/arm64/hyperv~9Confidential 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:风险与注意点

  1. 覆盖率错觉:lore 抓回的 patch 多数 body 字段为空,无法逐 patch 确认上下文;只看 series_title 容易误判。
  2. 回归面巨大:单次 merge 396 patch 跨子系统,需跑 -rt/-next/发行版 QA。
  3. DL 行为变化:PATCH 149 限制 wakeup rule 仅对 running dl_server 生效,旧依赖"server 暂离仍能借调度"的 workload 可能行为差异,建议 perf sched 对照。
  4. 类型语义扩张:新增 KMALLOC_NO_OBJ_EXT 枚举值,旧仓库 cherry-pick 旧 patch 又吃这个 fix 会留类型不一致。
  5. CoCo 开关:paravisor SynIC 路径仅 confidential_vmbus_available 真时启用,ARM64 现永远 false,跨架构回归需覆盖。
  6. 回复邮件空 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 集合。