合并窗第二天,机制级重做扎堆出现——NVidia 把 dma-buf 的 scatterlist 单形态打开成「映射类型协商」, 26 个补丁跨 dma-buf/DRM/vfio/iommufd;Qualcomm 把 drm/panel 从私有 callback 容器整体迁到 atomic state, 35 个补丁一次性扫清六个 SoC 显示驱动的 orientation workaround。
📊 板块活跃度
/ column
数据截至 10-27 06:23 北京,近 24h 各板块真实计数:net 472 · DRM 435 · mm 302 · media 192 · fs 131 · LSM 68 · PCI 66 · Rust 64 · block 19 · arch 18 · rt 8 · virtio 0。v7.4 合并窗持续推进带动 DRM/mm/net 三板块高位运行,media 被高通 camss VFE clock v3、msm DCP 显示支持 v2 23 补丁系列、ov7251 七补丁 Surface Book 2 修缮占据。
🎬 今日导读
/ section 头条 dma-buf 引入映射类型协商——scatterlist 不再是唯一通行证
头条 drm/panel 全量迁 atomic state——Qualcomm 35 补丁一次性扫清
机制 msm VM_BIND 校验迁 Rust、tyr GPU uAPI 到 v5、cells 容器原语 v2
合并窗 Morton 连发 MM/non-MM 两批 pull,f2fs 与 fuse 同批抵达
速查 dma-buf、mapping type、atomic state、panel_bridge
💡 今日头条
/ section dma-buf 学会协商映射类型——scatterlist 不再是唯一通行证
〔10-26 13:36 北京〕· [PATCH 00/26] DMA-buf mapping types · Alistair Popple (NVidia)
现状 dma-buf 自诞生起只认 scatterlist 这一种「地址交换格式」——exporter 把缓冲区描述成一组 dma_addr_t 段,importer 按段拿来映射。整个 GPU/相机/显示/virtio 零拷贝生态都建立在这一假设上。
痛点 scatterlist 的 dma_addr_t 是给 DMA API 用的,但很多新场景根本不走 DMA API——VFIO/IOMMUFD/KVM 之间要交换的是物理地址,scatterlist 表达不了;xe vGPU 需要把 VFIO 那边过来的 dma-buf 翻译成 PF 内部的 VRAM 地址;XGMI/UALink 这类私连协议天生绕开 DMA API;社区还在讨论干脆换掉 scatterlist 的数据结构。这些需求全卡在「只能 scatterlist」这一句话上。
方案 给 dma-buf 引入「映射类型」机制——attach 阶段双方各自声明支持哪些类型并求交集,pin/map 阶段 exporter 在 dma_resv 锁下从交集里选定一个最终类型,此后直到显式 invalidate 都不允许改。核心新文件 dma-buf-mapping.c 加 169 行框架代码,配套 DRM 自研 GEM、vfio/pci 导出端、iommufd 的贯通改造。
为什么 把「最终类型选定」放在 pin/map 而不是 attach,是为了拿到缓冲区的实际 placement 与其它 attachment 信息后再决策;把「不能换类型」写进 dma-buf 核心,是为了防止 remap 时缓冲区位置 ping/pong——这是 NVidia 评审过 Jason Gunthorpe 初版 RFC 后、根据 Christian König 与 Thomas Hellström 的反馈重写的版本。
效益 VFIO→IOMMUFD→KVM 的物理地址通路首次有了规范通道,xe vGPU 的 VRAM 转换、UALink/XGMI 的私连协议、未来 scatterlist 替代数据结构,全都能挂在这套类型协商下,不再需要各驱动自造 hack。
下一步 本系列只落到 SGT 类型,作者明确说手里已经有 PCIe P2P 与 XGMI 拆成独立类型的 PoC——这是接下来最值得盯的两条支线,也是 dma-buf 框架近年最深的一次自我改造。
一句话点评 合并窗期间的 26 补丁机制级重做,动的是整个零拷贝生态的底座;这一改落地之后,dma-buf 才算真正为「不只有 DMA 的世界」做好准备。
🔗 原文
drm/panel 全量迁 atomic state——Qualcomm 35 补丁一次性扫清六个 SoC 驱动
〔10-26 19:10 北京〕· [PATCH 00/35] drm/panel: let the panels use the atomic state
现状 drm/panel 是 KMS 四件套之外的「面板抽象层」——每个 LCD/OLED 面板对应一个 drm_panel 结构,通过 get_modes/get_timings/get_orientation 这类私有 callback 给上游驱动提供参数。atomic state 在 connector/crtc/plane 那层早就落地,panel 这层还停在自己的小世界里。
痛点 每个 host 驱动(exynos/sun4i/tegra/fsl-dcu/logicvc/stm 等)都各自发明一套 orientation/timings workaround——面板横竖屏信息从 panel 传到 connector 的路径有 N 种写法,panel_bridge 结构与 connector_type 字段把 panel 和 bridge 两套抽象缠在一起,新接一个面板要在 host 侧改一坨与面板本身无关的代码。
方案 35 个补丁分四步:先删旧 callback(get_timings、struct panel_bridge);再把 tidss/mxsfb/rcar-du/rz-du/mcde/pl111/rockchip/lvds-codec/ingenic 这一串 SoC 显示驱动统一迁到 devm_drm_panel_bridge_add();然后清理 _typed() 接口与 drm_panel.connector_type 字段;最后把 panel orientation 从各家 host 驱动收进 panel 核心统一读取,bridge 增加 connector_init 回调让 bridge 自己建 connector。
为什么 把 orientation 从「每个 host 驱动各自取」收进 panel 核心,是把「面板固有属性」归还到面板自己手里——host 驱动不需要知道面板是横是竖,只需要从 connector 读结果。bridge 自己建 connector 则让 bridge/panel 这条链的拓扑关系完全由 bridge 层决定,host 驱动不再两边插手。
效益 面板接入路径从「host 驱动 + bridge + panel 三方互相缠绕」简化成「panel 报属性、bridge 建拓扑、host 驱动读结果」的直线——新面板、新 host、新 bridge 三者的开发彼此解耦,修一个面板的 orientation 不再需要动六家 SoC 驱动。
下一步 35 个补丁覆盖面已经铺到六家 SoC + 多个 bridge,剩下要看 vkms、i915、amdgpu 等大驱动是否跟进;panel 进入 atomic state 之后,接下来可能轮到 connector 上跟 panel 相关的属性也统一到 atomic 路径。
一句话点评 DRM 子系统近年来少见的一次性大清理——不是修 bug,是把整个 panel 抽象从「前 atomic 时代」拉到「atomic 时代」,跟 dma-buf mapping types 一样属于合并窗里少见的「框架重做」。
🔗 原文
📰 media
/ column ★ 高通 camss VFE 时钟共享 v3——SM8250 的 VFE/CSID 时钟归属重画
〔10-26 21:37 北京〕· [PATCH v3 0/6] media: qcom: camss: share VFE clock sources on SM8250
定位 V4L2 platform 驱动层,高通 camss(相机子系统)在 SM8250 上的 VFE(视频前端)时钟分配问题。
做法 抽出 VFE 最小时钟约束成公共函数,VFE 核钟不再由 CSID 设,改由 VFE 自己设;多 VFE 实例共享同一时钟源时按最高需求对齐,camera NoC AXI 总线频率也从 VFE 侧统一定。
效益或下一步 多路相机同时开时不再因为 CSID 与 VFE 各自乱设时钟导致带宽不足或功耗浪费,SM8250 平台(骁龙 865 一代)的 ISP 子系统电源管理进入正常态。
和你相关 做高通相机链路的直接相关——这是 camss 驱动从「能点亮」走到「能正常跑多路」的必经之路。
🔗 原文
★ ov7251 七补丁系列:Surface Book 2 的红外 strobe 与控制事件
〔10-26 19:10 北京〕· [PATCH 0/7] media: i2c: ov7251: fixes and infrared strobe for Surface Book 2
定位 V4L2 subdev 驱动层,OmniVision ov7251 全局快门 sensor 在 Surface Book 2 上的支持完善。
做法 修链路频率索引错、帧间隔变化时重置 vblank、补控制事件支持、加 orientation/rotation 控制、把 strobe 寄存器从 mode 表里挪出来、加 strobe output enable 控制、给 Surface Book 2 加 90 度旋转 quirk。
效益或下一步 Surface Book 2 的红外相机(Windows Hello 用)在上游 Linux 下首次具备完整功能;strobe 控制独立出来为其它用 ov7251 的设备(工业相机常用)打好底。
和你相关 sensor 驱动修缮的典型路径——先点亮、再补控制、再处理平台 quirk,这套节奏值得每个 sensor 驱动开发者对照自查。
🔗 原文
media 更多动态
○ [PATCH v2 00/23] drm/msm/dcp: Add Qualcomm DCP display support — 高通 DCP(显示协处理器)全栈 23 补丁 v2 迭代
○ [PATCH] media: iris: Unload the firmware before hibernation — iris 编码器在休眠前卸固件,省得唤醒后状态错位
○ [BUG] media: iris: resolution change handling stops ffmpeg's h264_v4l2m2m decoder — 分辨率切换让 ffmpeg 的 v4l2m2m 解码停摆,等待维护者复现
○ [PATCH 0/2] media: amd: isp4: two fixes found on the ROG Flow Z13 — AMD ISP4 在 ROG Flow Z13 上的两处流启动修复
○ [PATCH v5 0/2] media: ipu-bridge: survive module unload and reuse the software nodes on rebind — ipu-bridge 卸载重载不再泄漏 software node
○ [PATCH v2] media: rkvdec: Handle interrupts without a current context — Rockchip 视频解码在无当前上下文时不再崩
📰 mm
/ column ★ shmem 十六补丁系列——tmpfs/共享内存的连环修缮
〔10-26 17:40 北京〕· [PATCH 00/16] mm/shmem: various (urgent?) fixes
定位 mm/shmem 层(tmpfs 与共享内存的底层), Hugh Dickins 出手的一揽子修复。
做法 16 个补丁扫清 shmem 在 swap、truncate、hole punch、mlock 各路径上积累的一批边角问题——具体每条留待读者深入,重点是「shmem 维护者集中修一轮」这件事本身。
效益或下一步 tmpfs 是容器与 systemd-tmpfiles 的底座,shmem 稳则一大批用户态路径跟着稳;这种「urgent?」的自我调侃往往意味着有真问题被压住没爆。"
和你相关 用 tmpfs、跑容器、调共享内存的都受益——shmem 是那种「平时感觉不到、出问题就全栈倒霉」的基础设施。
🔗 原文
★ memfd 新增 F_SEAL_PUNCH_HOLE——密封文件也能打洞
〔10-27 06:06 北京〕· [PATCH 0/2] mm/memfd: add F_SEAL_PUNCH_HOLE
定位 memfd 密封机制——Android/Chrome 等用 memfd 做共享内存安全分发的路径。
做法 在既有 F_SEAL_SHRINK/F_SEAL_GROW 之外新增 F_SEAL_PUNCH_HOLE,允许持有者对已密封 memfd 打洞释放中间页,同时保留其它密封语义。
效益或下一步 长生命周期 memfd 可以边用边释放不再需要的中间段,对图形栈/浏览器这类大户是直接内存节省;后续要看 Android/Chrome 是否切到这套语义。"
和你相关 做图形栈或浏览器内存的值得关注——memfd 的密封语义每加一条都是真实场景驱动的。
🔗 原文
mm 更多动态
○ [GIT PULL] Additional MM updates for 7.4-rc1 — Morton 合并窗继续,MM 侧补推一批
○ [GIT PULL] non-MM updates for 7.4-rc1 — 非 MM 部分同批抵达
○ [PATCH v2 0/2] mm: don't migrate folios containing hwpoisoned pages — 含坏页的 folio 不再被迁移掩盖故障
○ [PATCH v4] mm: memory: fix truncation removing mapped folios — truncate 误清已映射 folio 的修复到 v4
○ [PATCH v4] khugepaged: fix readahead lock inversion in collapse_file() — khugepaged 锁倒序修复
○ [PATCH v3 00/10] mm/vmalloc: fix up vmap error handling — vmalloc 错误路径十连修
○ [PATCH] kasan: add async reclaim for oversized global quarantine queues — KASAN 隔离区过大时改异步回收
📰 DRM
/ column ★ drm/msm 把 VM_BIND 校验迁到 Rust——GPU uAPI 进入 Rust 时代的第一例
〔10-26 19:40 北京〕· [PATCH RFC] drm/msm: move VM_BIND op validation to Rust
定位 DRM GPU 驱动的 uAPI 校验层——VM_BIND 是用户态管理 GPU 虚拟内存的入口,校验逻辑历来是 C 写的。
做法 把 msm 的 VM_BIND 操作校验函数改写成 Rust,调用方仍是 C 的 ioctl 入口,但参数合法性、地址范围、权限组合这些「容易写错」的检查全搬进 Rust 类型系统。
效益或下一步 这是「Rust 进 GPU uAPI 校验路径」的头一个 RFC——校验代码不涉及热路径性能,但对类型与边界敏感,恰好是 Rust 的主场;如果跑通,其它 GPU 驱动大概率跟进。"
和你相关 关注内核 Rust 化进程的必看——这次不是抽象层,是真实 uAPI 校验逻辑落地。
🔗 原文
★ Tyr GPU 驱动 VM/BO ioctl 到 v5——Arm Mali 新 Rust 驱动 uAPI 趋稳
〔10-27 00:41 北京〕· [PATCH v5 00/11] drm/tyr: add VM and BO ioctl support
定位 DRM 子系统新进驱动 tyr(Arm Mali 新一代 Rust 写的 GPU 驱动,用户态搭 PanVK)。
做法 11 个补丁补齐 tyr 的虚拟内存与缓冲对象 ioctl——VM_CREATE/VM_BIND/VM_DESTROY 与 BO 分配/映射/销毁的全套 uAPI。
效益或下一步 从 v1 到 v5 反复打磨说明 uAPI 评审在认真走;tyr 走到「uAPI 趋稳」就意味着用户态 PanVK 可以开始对齐做真机适配。"
和你相关 Mali 新驱动 + Rust 写 GPU 驱动这两件事的交汇处,做 Arm 图形栈或关心 Rust GPU 驱动的可以追。
🔗 原文
DRM 更多动态
○ [PATCH 0/3] drm/amd: Enable 2x1 tiled display support on Apple 5K iMacs — Apple 5K iMac 双拼屏支持
○ [PATCH v5 00/11] x86/msr: Drop 32-bit MSR interfaces — 32 位 MSR 接口整体下线
○ [PATCH v7 00/15] drm/imx: dc: Use prefetch engine — i.MX 显示控制器启用 prefetch 引擎
○ [PATCH v7 00/20] Enable DP2.1 alpm — Intel DP2.1 ALPM(链路电源管理)20 补丁到 v7
○ [PATCH] gpu: nova-core: make pramin/buddy optional — nova-core 继续拆硬件依赖
○ [PATCH] drm/amdgpu: Harden against potential deadlock — amdgpu 加固潜在死锁路径
📰 net
/ column ★ TLS 1.3 KeyUpdate 进内核——kTLS 第一次能在线换密钥
〔10-26 08:36 北京〕· [PATCH RFC net-next 0/5] tls: perform TLS 1.3 KeyUpdate in the kernel
定位 kTLS(内核 TLS 卸载)的 TLS 1.3 路径——此前 kTLS 只支持 TLS 1.2 风格的密钥,TLS 1.3 引入的在线密钥更新机制完全没覆盖。
做法 5 个补丁让内核接管 TLS 1.3 的 KeyUpdate 握手——连接存续期间可以按协议要求换密钥,不再必须由用户态把数据回捞、换密钥、再重新下推给内核。
效益或下一步 长连接 + 硬件卸载的场景(数据中心内部服务网格、存储加密链路)第一次能在不中断 kTLS 卸载的前提下满足 TLS 1.3 的密钥轮换要求;接下来要看 NIC 厂商的卸载驱动是否跟进支持新语义。"
和你相关 做 kTLS 或网络安全的值得追——TLS 1.3 卸载是这两年的真实需求,这一步补上了协议层的最后一块。
🔗 原文
net 更多动态
○ [PATCH net] net: Fix Hole-196 vulnerability by dropping unicast ARP/IP in L2 BMC — 修复 Hole-196(Wi-Fi 组播经典漏洞的 L2 BMC 变体)
○ [PATCH net v6 0/5] ptp: make virtual clock sampling and teardown failure-safe — PTP 虚拟时钟并发安全
○ [PATCH 0/2] net: atlantic: AQC113: Fix regression on Apple silicon systems — Apple 芯片上网卡驱动回归修复
○ [PATCH bpf-next v5 0/6] bpf: Add syscall common attrs support for xdp link_create — XDP 链路创建走统一属性框架
○ [PATCH RFC v4 0/6] virtio-net: add receive timestamp support — virtio-net 接收时间戳到 v4
○ [PATCH net] net: sched: fix packet reordering on requeue — qdisc requeue 不再乱序
○ [PATCH net 00/10] pull request: batman-adv — batman-adv mesh 协议一批修复
📰 fs
/ column ★ cells 容器原语 v2——「容器即一个内核对象」的提案继续推进
〔10-27 00:05 北京〕· [RFC v2] cells: a container as one kernel object
定位 VFS/命名空间交叉层——Christian Brauner 一直在推的「把容器从『一组分散的 ns + cgroup』抽象成『一个内核对象』」提案。
做法 引入新的 cell 对象作为各种命名空间/cgroup/安全上下文的容器,用户态通过 cell 句柄一次性操纵整组隔离边界,而不是逐个 ns 拼。
效益或下一步 v2 说明作者在按评审意见迭代——这条线如果走通,容器运行时(runc/podman/docker)将来可以少掉一大部分「拼 namespace」的代码,容器创建/销毁也会从「一串系统调用」变成「一个对象操作」。"
和你相关 关注容器运行时与 namespace 抽象的同领域读者必追——这是 Linux 容器原语多年未见的根本性重构提案。
🔗 原文
fs 更多动态
○ [GIT PULL] f2fs for 7.4-rc1 — f2fs 合并窗 pull
○ [GIT PULL] fuse update for 7.4 — fuse 合并窗 pull
○ [PATCH v7 0/6] capabilities: close the ways around the CAP_SETFCAP rule for uid 0 — 关 uid 0 绕 CAP_SETFCAP 的所有侧门(LSM 向)
○ [PATCH 0/4] ext4: assorted fixes related to the buffered iomap conversion — ext4 buffered iomap 转换的连环修
○ [PATCH v2] iomap: only follow dio alignment requirement if specified — iomap DIO 对齐要求改为按声明生效
📰 Rust
/ column ★ Rust SPI 子系统抽象到 v2——驱动框架层继续扩张
〔10-26 18:17 北京〕· [PATCH v2 0/3] Rust abstractions for the SPI driver subsystem
定位 rust-for-linux 框架层——SPI 总线驱动的 Rust 抽象。
做法 把 SPI 驱动注册、传输、设备树绑定这条链封装成安全 Rust API,C 侧 SPI 核心不动,新驱动可以全用 Rust 写。
效益或下一步 SPI 是嵌入式传感器/外设最常见的总线之一,抽象成熟后 Rust 驱动可以覆盖一大批低速外设;v1 到 v2 的间隔仅几小时,说明作者在根据评审快速迭代。"
和你相关 做嵌入式驱动 + 关注 Rust 的开发者值得看——SPI 抽象是「Rust 进嵌入式」的关键一环。
🔗 原文
Rust 更多动态
○ [PATCH 0/2] nova-core: add initial support for gpu timer — nova-core(NV 新 Rust GPU 驱动)加 GPU 定时器
○ [PATCH] rust: io: fix unused Flags::from_raw warning without CONFIG_PCI — 无 PCI 配置下的编译告警清理
⚙️ 机制雷达
/ section dma-buf 26 补丁引入映射类型协商——scatterlist 不再是唯一通行证(见头条)原文 panel 35 补丁把 drm/panel 迁到 atomic state——六家 SoC 驱动一次性扫清(见头条)原文 uaccess RFC 00/10——当 current->mm 为 NULL 时直接拒绝并告警用户态访问,堵一类内核 confusion 错误 原文 resctrl RFC 0/8——arm/x86 支持非对称 L2 缓存分配,Intel 把 resctrl 推到 L2 原文 VMD v9 0/7——Intel VMD 加第二根总线支持,服务器 PCIe 拓扑扩展 原文 RT linux-rt-devel 当日 8 条——NXP STM 时钟事件三连修为主 原文
📖 本期概念速查
/ section dma-buf 内核里跨设备共享缓冲区的框架——exporter 导出、importer 导入,中间用文件描述符传递,是 GPU/相机/显示零拷贝的底座。
mapping type dma-buf 本次新增的概念——描述「这份缓冲区用什么数据结构交换地址」的类型标签,scatterlist 只是其中一种,未来还会有物理地址、VRAM 地址、私连协议地址等。
atomic state DRM/KMS 的「原子状态」模型——显示管道所有对象(connector/crtc/plane)的参数打包成一份状态一次提交,要么全成功要么全失败,避免中间态闪屏。
panel_bridge DRM 里把 panel 包装成 bridge 的兼容层——本次 35 补丁系列把它彻底删掉,让 panel 直接走标准 bridge 接口。
kTLS 内核 TLS 卸载——把 TLS 加解密从用户态搬到内核或网卡,用户态只发明文;TLS 1.3 的 KeyUpdate 进内核意味着长连接也能全程享受卸载。
cell Christian Brauner 提出的新内核对象——把「一个容器」抽象成单个对象,内部打包所有命名空间/cgroup/安全上下文,容器操作从一串系统调用变成一次对象操作。
框架重做日——合并窗不只看数量,更要看哪些补丁在动底座。
Linux内核玩家 · 每日内核日报 · 数据截至 10-27 06:47 北京