合并窗第六天,两堂「收尾课」:Maxime Ripard 的 KMS reset 退役运动打到最后一关——37 个补丁把全树 connector 迁到 atomic_create_state;另一边,RFC 9846 把 TLS 密钥用量上限从建议写成 MUST,kTLS 连夜补课学会在线换密钥。
📊 板块活跃度
/ column
数据截至 10-31 06:23 北京,近 24h 各板块真实计数:net 472 · DRM 441 · mm 252 · fs 159 · media 141 · PCI 99 · Rust 65 · LSM 48 · arch 46 · block 28 · rt 10 · virtio 0。v7.4 合并窗第六天,net 与 DRM 并列双榜首:net 侧 TLS KeyUpdate、mlx5 固件命令减负等机制讨论密集;DRM 由 connector 37 补丁大系列与 msm a8xx 状态捕获 19 补丁撑量;mm 的高计数多为修复评审往来。
🎬 今日导读
/ section 头条 connector 全树告别 reset 钩子——KMS 三大对象迁移收官,37 补丁树级重构
头条 kTLS 学会 KeyUpdate——RFC 9846 把在线换密钥写成 MUST,长连接不再被卡死
板块 media / DRM / Rust / block / fs 五域有亮点
机制 ATOMIC_RESET flag v7、KVM uaccess v4 滚动、rxarray 进 linux-next
速查 connector 与 atomic_create_state、kTLS 与 KeyUpdate、SR-IOV、io_uring opcode
💡 今日头条
/ section KMS reset 退役战收官:connector 全树 37 补丁迁向 atomic_create_state
〔10-30 23:14 北京〕· [PATCH v3 00/37] drm/connector: Convert all drivers to atomic_create_state and remove reset · Maxime Ripard
现状 KMS 对象(connector / plane / CRTC)历来有个 reset 钩子,一身二任:probe 时创建初始软件状态,suspend/resume 时复位硬件与软件状态。
痛点 两个角色的要求根本不同,而 reset 不能返回错误——初始状态分配失败时无处上报,错误处理只能拧着写;且绝大多数实现实际只复位软件状态,名不副实。
方案 37 补丁把全树 connector 驱动从 reset 迁到 atomic_create_state(只分配并初始化一份纯净状态,返回指针或 ERR_PTR),随后从 struct drm_connector_funcs 里彻底删掉 reset 钩子。迁移用 Coccinelle 语义补丁 + 机械替换 + 手工调整三件套完成。
为什么 atomic_create_state 把语义说死:无副作用、允许失败。「隐式复用 reset」换成「显式创建状态」之后,错误路径第一次能写对;plane 和 CRTC 此前已走完同样的迁移,connector 是最后一关。
效益 全树统一后驱动少一个钩子,核心层少一种隐式约定。v3 已修完 dw-hdmi 错误路径、amdgpu KUnit 测试与 nouveau legacy 路径,距进 drm-misc 不远。
下一步 reset 从 KMS 三大对象上彻底消失后,新驱动照 atomic_create_state 写即可;配套的 DRM_MODE_ATOMIC_RESET flag(给用户态显式重置入口)也已到 v7。
一句话点评 机制清理的教科书打法:先把语义说清,再用语义补丁推全树,最后删旧钩子——一步都不省。
🔗 原文
kTLS 赶在标准大限前补课:内核记录层自己处理 TLS 1.3 KeyUpdate
〔10-30 19:18 北京〕· [PATCH RFC net-next v3 0/5] tls: perform TLS 1.3 KeyUpdate in the kernel · Martin Belanger (Dell)
现状 kTLS 把 TLS 记录层(record layer,负责加密分帧的那一层)下沉进内核,用户态库(GnuTLS / OpenSSL)和内核用户(NVMe/TCP、sunrpc)只管收发字节流。
痛点 kTLS 不会处理 TLS 1.3 的 KeyUpdate:从不主动发,收到就把 socket 卡住等应用装新密钥,也不强制密钥用量上限。而 2026 年 7 月发布的 RFC 9846(替代 RFC 8446)把上限写成 MUST:撞限前必须换密钥或断连。长连接小记录场景(NVMe/TCP 一条命令至少一条记录)快则 10 分钟撞限。
方案 5 个补丁让 kTLS 双向处理 KeyUpdate:发送侧到 2^24 记录限自动发,接收侧收到就用已注册的 traffic secret 原地换密钥。socket 注册 secret 后启用新行为,不注册则一切照旧。
为什么 KeyUpdate 只能在记录层做——2^24 是记录计数,只有内核记录层看得清拆分合并后的真实计数(作者实测按 send 次数猜,1MB I/O 下能差 21 倍);且 KeyUpdate 必须嵌在记录流的精确位置:用旧密钥加密,之后的记录立刻换新密钥。
效益 NVMe/TCP、sunrpc 这类没法自己装密钥的内核用户,连接不再被合规对端 stall;GnuTLS / OpenSSL 装 kTLS 密钥时可以顺手注册 secret,tlshd 走 QUIC 同款回调拿到 secret。
下一步 仍是 RFC 阶段,selftests 已带 KeyUpdate 用例;用户态库与握手代理接上注册接口后即可闭环。
一句话点评 标准从 SHOULD 变 MUST 的那天,「能跑」和「合规」就分家了——这个系列补的是合规课。
🔗 原文
📰 media
/ column ★ ★ 高通新 ISP 上游化继续:CAMSS 支持 Hawi 与 Maili 到 v3
〔10-30 20:43 北京〕· [PATCH v3 0/5] Add CAMSS support for Qualcomm Hawi and Maili · Nihal Kumar Gupta (Qualcomm)
定位 高通新一代平台的相机子系统——Hawi(Snapdragon 8 Elite Gen 6)与 Maili 共用同一套 ISP IP,差别只在 CSIPHY(MIPI CSI-2 物理层)数量:6 对 5。
做法 5 补丁按维护者分三组:I2C CCI 绑定、CSIPHY 驱动(qcom-mipi-csi2)、CAMSS 驱动与 DTS。拓扑规模 6x CSIPHY / 3x CSID / 3x VFE(每个 5 路 RDI)外加 2x VFE Lite,依赖 Kaanapali CAMSS v23 系列。
效益 新平台相机链路上游化再下一城;同平台的 VFE 1080 支持与 DT overlay 也在并行评审。
和你相关 和你相关:多 Sensor bring-up 时,CAMSS 的 CSIPHY→CSID→VFE 分层就是最标准的上游参照系。
🔗 原文
★ ★ dma-buf system_heap 补上兄弟们都有的检查:拒绝 MAP_PRIVATE 映射
〔10-31 04:44 北京〕· [PATCH] dma-buf: system_heap: Reject private mappings in system_heap_mmap() · Chris Wiseman (Google)
定位 dma-buf system heap 的 mmap 路径少了一个同类分配器都有的检查——cma_heap、udmabuf、drm shmem、ttm 全都拒绝非共享映射,唯独它漏了。
做法 对不带 VM_SHARED/VM_MAYSHARE 的映射直接返回 -EINVAL。原来的行为是 remap_pfn_range 先成功,之后 CPU 写入走 do_wp_page() 静默复制出匿名私有页——写永远到不了底层 buffer,共享双方看到的数据就此分叉。
效益 修掉一类「写了个寂寞」的静默数据不一致;带 Fixes 标签并 Cc stable,会回移植到稳定树。
和你相关 和你相关:camera 管线跨设备共享 dma-buf 是日常,这类 bug 的典型表现是「偶发整帧旧数据」,极难定位。
🔗 原文
📰 DRM
/ column ★ ★ RK3568 点亮 eDP:Rockchip 显示输出补齐最后一块主流接口
〔10-30 14:49 北京〕· [PATCH v4 0/6] Add eDP support for RK3568 · Damon Ding (Rockchip)
定位 Rockchip RK3568 的显示输出路径——eDP(embedded DisplayPort,笔记本与平板屏的主流接口)此前一直缺席。
做法 6 补丁覆盖 eDP PHY 与控制器绑定、驱动使能和 DTS 节点;已在 RK3568 EVB1 搭配 LG LP079QX1 面板实测点亮,面板挂在 aux-bus 下按标准 edp-panel 绑定描述。
效益 RK3568 在 DSI / HDMI / LVDS 之外补齐 eDP,屏选型面更宽;v4 已过多轮评审,形态接近合入。
和你相关 和你相关:与 RK3588 同族的显示栈,eDP 的 PHY / 控制器 / aux-bus 三段式结构可以直接对照着看。
🔗 原文
📰 Rust
/ column ★ ★ Rust PCI 子系统长出 SR-IOV:token + guard 编码 VF 生命周期
〔10-31 01:13 北京〕· [PATCH v5 0/9] Add Rust PCI SR-IOV support · John Hubbard / Peter Colberg / Zhi Wang (NVIDIA)
定位 Rust 内核绑定的 PCI 层——SR-IOV(单根 I/O 虚拟化,一块物理卡虚拟出多份 VF 分给虚拟机)第一次有了 Rust 抽象。
做法 9 补丁新增 rust/kernel/pci/iov.rs(387 行):驱动实现 sriov_enable / sriov_disable 回调,拿到 pinned 驱动数据与操作 token;enable 返回 guard,后续步骤失败自动回收 VF,成功则由 VfRegistration 持有到底。样例驱动在 QEMU 82576 仿真上演示 PF/VF。
效益 nova-core(NVIDIA 开源 GPU 驱动)是首个目标用户;typed PF registration 设计来自 Danilo Krummrich,v5 按评审意见收尾细节。
和你相关 和你相关:token / guard 这套「用类型系统编码生命周期」的手法是 Rust 进内核的核心卖点,写 C 驱动时也能借鉴这个心智模型。
🔗 原文
📰 block
/ column ★ ★ NVMe passthrough 学会吃 dma-buf:io_uring 全链路零拷贝再进一步
〔10-30 09:45 北京〕· [PATCH v3 0/5] dma-buf backed NVMe passthrough I/O · Anuj Gupta
定位 io_uring uring_cmd → block → NVMe 的缓冲区传递链——passthrough I/O 此前只认普通内存,不认 dma-buf 注册缓冲区。
做法 5 补丁分层推进:io_uring 固定缓冲区导入加 flags、调用方显式 opt-in dma-buf;block 层在 blk_rq_map_user_iov() 学会映射 dma-buf iterator;NVMe 命名空间字符设备启用,并显式拒绝超过 4GiB 的 dma-buf。
效益 GPU 显存直写 NVMe 这类零拷贝通路(GPUDirect Storage 路线)在内核通用路径上又少一个拷贝点;v3 已按 Christoph / Pavel 的评审拆层并补齐错误语义。
和你相关 和你相关:dma-buf 已从图形栈的内部货币变成全内核硬通货——camera、显示、存储都在围着它转。
🔗 原文
📰 fs
/ column ★ ★ io_uring 补 utimensat:复制工具白捡 22%~45%
〔10-30 20:40 北京〕· [RFC PATCH 0/3] io_uring: add IORING_OP_UTIMENSAT · Méven Car (KDE)
定位 io_uring 的 opcode 家族又缺一员——utimensat(2)(设置文件时间戳),复制工具保留元数据的最后一步。
做法 patch 1 把 filename_utimensat() 从 do_utimes_path() 拆出来供复用;patch 2 加 opcode;patch 3 是 RFC 核心:声明 FS_SETATTR_TIMES_NOWAIT 的文件系统走 inline 快速路径(LOOKUP_CACHED + trylock),tmpfs 率先支持,2000 次设置从 19-29ms 降回 6.4-6.8ms,与系统调用持平。
效益 原型实测:16 线程设置元数据,NFS 复制快 22%、SMB 快 45%;一个文件一条 linked chain(WRITE→UTIMENSAT→CLOSE)就能收工。
和你相关 和你相关:ext4 / xfs / btrfs 因 journal 事务无法声明 NOWAIT——日志与快速路径的天然矛盾,值得记住这个反例。
🔗 原文
📌 机制雷达:今天值得记住的 4 条跨域改动
/ section connector reset 删除 见头条——KMS reset 退役三部曲终章,37 补丁树级迁移后删钩子
DRM_MODE_ATOMIC_RESET v7 给用户态一个显式「重置 atomic 状态」的 flag,16 补丁,与 connector 迁移互为表里 · 原文 KVM uaccess v4 10-28 头条的 v4 滚动:23 补丁继续加固 dying VM 的 uaccess 与 memslot 拆除 · 原文 rxarray 进 linux-next Rust 侧 xarray 包装独立成树申请进 next,Rust 数据结构基建再落一子 · 原文
📖 本期概念速查
/ section drm_connector / atomic_create_state connector 是 KMS 里代表「一个显示接口」的对象;atomic_create_state 负责创建它的初始软件状态——无副作用、可失败返回错误,与一身二任的旧 reset 钩子相对
kTLS / KeyUpdate kTLS 把 TLS 记录层放进内核;KeyUpdate 是 TLS 1.3 的在线换密钥机制,RFC 9846 把密钥用量上限从建议变成 MUST,到限必须换密钥或断连
SR-IOV PF / VF 单根 I/O 虚拟化:PF(物理功能)是管理面,负责开出 VF;VF(虚拟功能)是分给虚拟机或容器的轻量设备实例
io_uring opcode io_uring 里每个 opcode 对应一种系统调用的异步形态;UTIMENSAT 补齐后,复制类工具的「写数据→设时间→关文件」可以全在 ring 里完成
如果对你有用,点个赞,或转给需要的朋友。
数据来源:lore.kernel.org(全内核 13 列表)· 北京时间