sched discussion
Linux 5.15.216
LLM 分析
Linux stable: Linux 5.15.216 stable 发布公告
系列概况
- 标题: Linux 5.15.216
- 作者: Greg Kroah-Hartman
- 版本: Linux 5.15.216(stable 5.15.y 分支第 216 个 patch level)
- 规模: 跨多个子系统的稳定分支回炉,包括 ARM/PowerPC/x86 boot 与 KVM、crypto、各类驱动;按 announcement 邮件末尾的 diffstat 列出近 30 个修改文件
- 修改文件: Makefile、arch/arm/mach-npcm/platsmp.c、arch/powerpc/boot/{simpleboot,treeboot-akebono,treeboot-currituck}.c、arch/powerpc/include/asm/cputime.h、arch/powerpc/include/asm/time.h、arch/powerpc/kernel/time.c、arch/powerpc/platforms/{chrp,ps3,}/...、arch/um/drivers/vector_kern.c、arch/x86/boot/compressed/Makefile、arch/x86/kvm/{mmu,vmx}/、crypto/rsa-pkcs1pad.c、drivers/ata/{pata_sl82c105,sata_dwc_460ex}.c、drivers/block/rbd.c、drivers/bluetooth/btqca.c、drivers/cdrom/cdrom.c、drivers/comedi/drivers/comedi_parport.c、drivers/counter/microchip-tcb-capture.c、drivers/cpufreq/powernow-k8.c、drivers/dma/{sh/rz-dmac,sun6i-dma}.c、drivers/firewire/net.c、drivers/firmware/{arm_ffa,arm_scmi,stratix10-svc}/.c、drivers/gpio/gpio-pch.c、drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c 等
- 代码统计: Makefile
SUBLEVEL215→216;arch/powerpc/include/asm/cputime.h 增 30 行;arch/powerpc/kernel/time.c 增 93 行;drivers/dma/sh/rz-dmac.c 减 94 行;arch/x86/kvm/vmx/nested.c 增 11 行;arch/x86/kvm/vmx/vmx_ops.h 增 16 行;其他单行/双行 fix 多处 - Message-ID(首封): 2026081948-scouts-dedicate-e7af@gregkh
- 完整性: 本 thread 共两封邮件——一封 stable release announcement,后跟一封补充 diff 列表的 follow-up(2026081948-unlovable-vacancy-e9d7@gregkh);这是 stable 滚动更新公告而不是单一主题 patch 讨论
补丁目的
把 mainline 或更新 stable 分支上积累、且与 5.15 LTS 兼容的关键修复一次性 cherry-pick 进 5.15.y,打上 5.15.216 这个 tag 并公告升级。涵盖 cputime 累积、SMP boot 的 of_node 引用平衡、DT 节点返回值误判、KVM nested 行为、多个 driver 的稳定性和正确性等。
旧流程的问题
- 5.15.215 在 PowerPC cputime 统计上存在 bug,节点引用(of_node)路径上 secondary CPU boot 有泄漏风险,DT 解析对返回值 0 的处理不正确;
- x86 KVM nested VMX 与部分驱动(rz-dmac、ata、bluetooth qca、rbd、gpio-pch 等)存在稳定分支需要回流但尚未交付的修复。
新流程
打 5.15.216 git tag,并一次性公告给 5.15 系列所有用户升级到 linux-5.15.y;具体代码 diff 列在 follow-up 邮件中。
关键实现
按 announcement 列出的修改挑几个跟调度器路径相关的点展开:
1. SMP boot 节点引用平衡(arch/arm/mach-npcm/platsmp.c)
在 secondary CPU 启动路径与 npcm7xx_smp_prepare_cpus 各自增加 of_node_put(...),释放早前 of_parse_phandle 获取的引用。这条路径对应 CPU hotplug / bringup,调度器 plugged → active 切换时会经过这里。
static int npcm7xx_smp_boot_secondary(unsigned int cpu,
struct task_struct *idle)
{
...
+ of_node_put(gcr_np);
...
}
static void __init npcm7xx_smp_prepare_cpus(unsigned int max_cpus)
{
...
+ of_node_put(scu_np);
...
}
2. PowerPC DT 节点返回值误判
将 if (!node) 改为 if (node < 0)。DT 节点返回值是 int,有效值可以等于 0(DT 起始节点),原先把 0 误判为失败。
- if (!node)
+ if (node < 0)
涉及 arch/powerpc/boot/simpleboot.c、treeboot-akebono.c、treeboot-currituck.c 三个开机入口。
3. PowerPC cputime 调整(合计 100+ 行)
include/asm/cputime.h +30 行、kernel/time.c +93 行、include/asm/time.h +1 行。这一块与调度器 task_cputime_adjusted、cpuacct 路径交互,决定 top/ps/cgroup cpu.stat 的报告值。
4. KVM nested VMX(arch/x86/kvm/vmx/nested.c / vmx_ops.h)
11+16 行的改动,主要是 nested VMX 的某些 entry/exit/control 字段处理。该路径不直接参与 CFS 选择,但宿主 wait_event / wakeup 与 KVM vcpu_blocked、vcpu_wake_up 存在耦合。
5. 驱动修复(节选)
drivers/dma/sh/rz-dmac.c减 94 行:可能是一段被废弃代码的批量删除或 driver 行为重构,需要在升级时单独 review changelog;drivers/cpufreq/powernow-k8.c+1 行:CPU 调频相关,与 scheduler governor 共享频率状态;drivers/firewire/net.c+39 行、ARM SCMI notify / FFA / Stratix10 SVC 等 +9/+6/+2 行:总线/固件通道稳定修复;drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c+2 行:AMD ACP 与音视频子系统小修。
升级矩阵示意
upstream mainline / newer stable
|
| cherry-pick (backport by stable team)
v
linux-5.15.y
|
| tag 5.15.216 (SUBLEVEL 215 -> 216)
v
announcement ------------------+
(2026081948-scouts...) |
| v
| follow-up with
| full diff list
v (2026081948-unlovable...)
lore.kernel.org ML archive
|
v
end users / distros
类比
稳定分支的每次 release 就像城市快速路的"夜间养护 + 重新铺沥青"。平时 mainline 在造新路,stable 团队定期把上游已经修好的坑(fix)回填到老路面,然后重新画车道线(git tag),再公告所有走这段路的司机(5.15 用户)把车开到最新的路面上。司机不需要关心坑具体在哪个桩号,但必须升级 tag 才能开到铺好的新路面。
另一个角度,可以把它想成"银行系统每天的日终批处理":白天可能零散记账,晚上一次性把若干交易按规则入账并打一个 end-of-day 戳,所有下游对账以这个戳为准。stable release tag 就是这个 end-of-day 戳。
Highlight:风险与注意点
- drivers/dma/sh/rz-dmac.c 减 94 行:这种规模删除通常不是单纯 refactor。可能是 driver 重写/移除老旧 IP 支持,要看 changelog 是否同步 cherry-pick 了对应的 fix,避免在 driver 行为变更层漏 ctx。
- PowerPC cputime/time 改动(合计 100+ 行):升级后建议对比升级前后的
/proc/stat、top显示 cputime 与 cgroupcpu.stat,确认没有出现累积漂移或回退。 - ARM npcm SMP boot 节点引用:节点泄漏补丁如果漏 upgrade,secondary CPU 启动失败概率会上升——LTS 升级时把这条 patch 单独核对一次。
- 公告未附 changelog per-fix:stable 公告通常只列文件清单,单条 commit hash 需要用户到 git log 自己查;与发布同步的
linux-stable-5.15.ygit log 是必查项。 - 5.15 属于 LTS,跨子系统的多个 fix 同时进内核,要回归 RBD、bluetooth qca、CIO、amd gpu 等容易回滚的子模块。
- 与调度器强相关的改动落在 PowerPC cputime 累计和 cpufreq/powernow-k8 两条路径,对这两个子模块的 power/性能基线建议在升级前后各跑一次回归。
版本变化
本次输入仅涵盖 SUBLEVEL = 215 → 216 一次 patch bump,没有 vN→vN+1 逐版对比输入。Makefile diff 是唯一版本号变更。
一句话总结
Greg Kroah-Hartman 发布 5.15.216 stable,把跨 PowerPC cputime、SMP boot 节点泄漏、x86 KVM nested 和大量驱动稳定分支的修复一次性回流,要求所有 5.15 用户升级到 linux-5.15.y。