今天两场改动都动到 API 契约:Linus 把 __get_user/__put_user 从 x86 拿掉,起因是一起 vringh 内核内存泄漏; dma_fence 有人想用自旋锁换掉 RCU,AMD 认为这是 no-go。 硬件侧,Rockchip 的 eDP 与 tyr 驱动都有新版本。
📊 板块活跃度
/ column
数据截至 10-21 06:23 北京,近 24h 各板块真实计数:net 753 · DRM 365 · mm 232 · PCI 175 · media 135 · fs 110 · Rust 109 · LSM 55 · block 40 · rt 31 · arch 2 · virtio 1。net 的高位主要来自 v7.4 合并窗口的 GIT PULL, 机制讨论则集中在 uaccess 原语退场 与 dma_fence 的同步模型。
🎬 今日导读
/ section💡 今日头条
/ sectionLinus 拆掉 __get_user:把正确性从调用者记忆里拿走
get_user()/put_user() 做完整的地址检查与缺页处理;__get_user()/__put_user() 只负责拷贝,地址合法性、页错误禁用都由调用者自己保证。后者长期被当作快路径, 出现在 vhost、vDPA、i915 等大量驱动里。 getu16_iotlb() 把 iotlb_translate() 的结果直接送进 __get_user(),全程没有 access_ok(),在 vDPA 透传场景 可以泄漏内核内存。MST 的修复是改用 get_user();他也指出用户页被换出时 会返回 -EFAULT,需要 worker 重试,而 vdpa_sim 目前没有做。 uaccess-cleanups 分支,目标是把 __get_user()/__put_user() 整个删掉:先完成 x86, 随后补上 alpha、hexagon、32 位 arm、powerpc 中「显然正确」的转换; 需要裸拷贝的地方改为 unsafe_get_user()/unsafe_put_user(), 并用 scoped user access 显式圈定禁页错误的范围。 access_ok()、再 __get_user()、还要选对上下文, 不如让这个容易误用的原语消失。注意分支并不删除所有 access_ok(): Linus 明确说只拿掉两个原语,raw_copy_*_user() 与 fork 的栈检查 等仍会保留。 __get_user(),必须提供 arch_get_kernel_nofault(),否则通用实现会重新引入它。 🔗 原文
📰 DRM 显示
/ column★ dma_fence 想用一把锁换掉 RCU,AMD 说这是 no-go
dma_fence 是 DRM 与 media 共用的同步原语:GPU 命令、显示翻转、 摄像头帧完成都用它串联。当前 fence->ops 由 RCU 保护,回调可以在 RCU 读侧并发执行;驱动释放 fence 前要自己等 synchronize_rcu()。 fence->ops 的 RCU 保护 去掉,改成用 fence 自带的自旋锁保护回调;模块卸载路径与 get_*_name() 回调也一并改为锁保护。目标很直接:让 dma_fence_signal() 之后可以立即 kfree(), 不再需要外部再等一轮 grace period。 is_signaled() 等回调本来就要并行;轮询与中断两条信令路径已经有锁序反转,加锁只会更糟, 他认为应该继续用 RCU 并扩大范围。作者回应说除 set_deadline() 外回调本来就在锁内执行,并请对方给出真正会死锁的内核实例。到今天结束, 双方没有收敛。 🔗 原文
★ tyr 补上 VM/BO ioctl,在 RK3588S 上跑过 panthor IGT
drm/tyr 是面向 CSF 架构 Mali GPU 的新驱动,用户态接口对齐 panthor。v4 加入 VM 与 BO 的 ioctl,是这条 Rust DRM 路线补 uAPI 的一步。 drm-file 系列与 Sami Tolvanen 的 buffer 缓存管理补丁。v4 重做 VmPool 拆除:add() 返回调用者持有的错误, 冲突的 VM 用 EBUSY 杀掉,remove() 先 kill 再复用 ID; 另引入 DmaAttr 描述一致性属性。 🔗 原文
★ RK3568 eDP 补齐:Analogix 控制器加 NaNeng PHY
rockchip,rk3568-edp 绑定;为 NaNeng PHY 新增驱动; 给 analogix_dp bridge 与 rockchip 封装加 RK3568 分支;最后补 eDP 控制器与 PHY 节点。 aux-bus 下的 panel 节点。 🔗 原文
📰 media 视频采集
/ column★ Apple AVD 解码器 v3:用 Cortex-M3 编程的 V4L2 stateless 驱动
🔗 原文
★ Qualcomm CCI:sensor 掉电拉低 I2C 线,控制器从此不再启动传输
🔗 原文
★ VD55G0:能进 STREAMING 却不出帧,问题在两处 VD55G1 遗留
0x0329(映射为 ISL_ENABLE)会直接停帧,而 ST 参考驱动从不写它。 🔗 原文
📰 mm 内存管理
/ column★ memory.reclaim 增加 source=:分层内存终于能指定从哪层开始回收
memory.reclaim 只能表达「从这个 memcg 回收 N 字节」。 在 DRAM 加 CXL/远端 tier 的分层内存上,内核按老化决定降级与回收, 用户态无法指定从哪一层开始施加压力。 source=:只声明回收的源范围(指定 node/tier), 不改变降级目标,也不改变 memory.current 的完成度记账; 不写 source 时行为完全不变。 nodes= 提案被指出把源选择、回收域、降级目标混在一个参数里, 实现也没有覆盖整条回收路径。新方案缩小语义边界,让分层内存的调度器能用 memcg 粒度表达「先压哪一层」。 🔗 原文
★ Live Update 会话可以提前冻结,缩短 kexec 停机窗口
LIVEUPDATE_SESSION_FREEZE ioctl:用户态用完一个会话就冻结, 只拿 per-session mutex;已冻结的会话在 kexec 时跳过自动冻结,若在 kexec 前关闭 则走 unfreeze 回滚文件。 🔗 原文
📰 PCI 总线
/ column★ P2PDMA 上 Intel Xeon:按服务器代际放行设备直连 DMA
CONFIG_X86 的 ifdef 从 cpu_supports_p2pdma() 里移出,并加入 Xeon 服务器代际白名单 (Skylake-SP 到 Diamond Rapids)。VMware/Hyper-V 透传没有 host bridge 设备, 只能靠 CPU 判断。 🔗 原文
📰 net 网络
/ column★ netmem 与 page_pool 引用计数对称化,想赶这次合并窗口
get_netmem 的命名对齐 folio_get 的现代写法。 🔗 原文
📰 fs 文件系统
/ column★ CephFS 子卷隔离 v5:缓存元数据也要有 quarantine cap
q/Q MDS auth cap 的恢复客户端访问。难点在于:隔离期间 哪些缓存路径还能直接用本地缓存。 AUTH_SHARED cap,否则每次操作都问权威 MDS,包括缓存 stat、 目录回复与加密策略/nonce ioctl。快照路径用 MDS 给出的 subvolume ID 判定, 32 位客户端重新校验。 🔗 原文
📰 block 块层
/ column★ O_DIRECT 的对齐契约可以被绕过:两处 iterator 边界错误
iov_iter_extract_bvecs() 在跳过空段或截断后,校验范围与实际取出的段 不一致;bio_iov_iter_get_pages() 拒绝错位 bio 时没有回滚 iterator。 iter->count 界定快路径长度;Andrew Morton 在拒绝路径上 保存并恢复整个 iterator,而不是只减字节数(跳过空段会改变位置但不消耗字节)。 O_DIRECT preadv() 复现:bvec 出现 (1,4095) 与 (0,1), bio 进入 brd 并完成 4096 字节,而不是 -EINVAL;后者在空 iovec 加 10/1015 段的复现里触发 KASAN 越界读,修复后 writev 返回 1025。 🔗 原文
📌 机制雷达:3 条跨域改动
/ sectionops.cpu_acquire/release() 的可靠性 RFC 在 lkml 继续评审。 Tejun 认为追踪「CPU 是否被更高 sched_class 占用」超出 sched_class 的职责, 建议改成 tracepoint 记录每 CPU 当前生效的调度类 · 原文 更多驱动与存储动态
○ [PATCH v5 10/17] PCI: dwc: Free the MSI domain after the host .deinit() callback 〔10-20 11:11〕
○ [PATCH 3/3] media: i2c: ov5675: Add the OVTI5678 RGB-IR variant 〔10-20 09:50〕
○ [PATCH] media: synopsys: dw-mipi-csi2rx: Fix DPHY testclr reset sequence 〔10-20 11:00〕
○ [PATCH net] veth: fix stale peer max_mtu on XDP program replacement 〔10-20 10:02〕
○ [PATCH net 1/3] net: stmmac: honour Rx checksum errors in the AF_XDP zero-copy path 〔10-21 03:03〕
○ [RFC PATCH net-next 0/4] tcp: carry a BPF-chosen identifier in TSval low bits 〔10-21 01:58〕
○ [PATCH] blk-mq: clear stale inactive flag on hctx reuse 〔10-20 20:52〕
○ [PATCH] apparmor: check address length before reading AF_UNSPEC bind address 〔10-20 22:00〕
更多跨域动态
○ [PATCH v3 0/4] workqueue: OwnedQueue and ScopedWork 〔10-20 20:52〕
○ [PATCH v13 0/7] rust: add ww_mutex support 〔10-20 23:31〕
○ [PATCH v4 0/3] KEYS: rhashtable bug fixes 〔10-21 01:43〕
○ [ANNOUNCE] v6.18.57-rt9 〔10-20 18:05〕
○ [PATCH v5 0/2] irqchip/riscv-aplic: fix probing of multiple APLIC instances 〔10-20 23:39〕
○ [RFC PATCH sched_ext/for-7.4 0/5] sched_ext: Make ops.cpu_acquire/release() reliable 〔10-21 03:00〕
○ [PATCH v2 12/15] arm64: drtm: Update the linker script for EFI_STUB_DRTM 〔10-21 06:49〕
○ [PATCH v3 0/2] virtio-blk: Add inline encryption support 〔10-20 11:22〕
📖 本期概念速查
/ section如果对你有用,点个赞,或转给需要的朋友。
数据来源:lore.kernel.org(全内核 13 列表)· 北京时间