今天值得花 3 分钟看三件事:设备内存开始直接当 I/O 缓冲区——同一个作者 一天之内把它从文件系统的 iomap 铺到 nvme 的命令通路;XFS 核心维护者 Darrick J. Wong 宣布离开内核,23 年,一封 6 行的邮件;还有 RK3588 的 ISP 驱动被搬到 RV1126 上实机跑了一遍,逐条评出哪些假设只对 3.0 成立。

封面 · 10月17日 · 设备内存直接当 I/O 缓冲区

📊 板块活跃度

/ column
板块活跃度条形图 · 近 24h · 全 12 列表

数据截至 10-17 06:23 北京,近 24h 各板块真实计数:net 596 · mm 251 · DRM 221 · media 156 · fs 140 · PCI 117 · block 77 · Rust 66 · rt 48 · arch 36 · LSM 25 · virtio 2。net 与 mm 量最大,但今天真正成体系的设计讨论落在三处:fs 与 block 的 dma-buf 通路、 media 的 Rockchip ISP、以及 LSM 里把 1724 行专用数据结构删掉 的那次替换。

💡 今日头条

/ section

设备内存直接当 I/O 缓冲区:dma-buf 一天补齐 fs 与 nvme 两端

〔10-16 17:19 北京〕· [RFC 0/4] fs: support dma-buf backed direct I/O(Anuj Gupta,Samsung)

现状 内核里的 I/O 缓冲区分两个世界。主机内存这边是页:page cache 或用户态 地址,文件系统的 direct I/O 把它们组织成 bio 交给块层;设备内存这边是 dma-buf——显存、加速器内存、相机与编码器产出,被导出成一个可跨驱动传递 的句柄。两个世界长期靠拷贝连接:设备写完了,先拷回主机内存,再走普通读写。
痛点 可数据本来就产生在设备内存里。GPU 渲染完一帧、NPU 推理出一批结果、编码器产出一段码流, 要落盘就得先整个搬回主机内存。blk_rq_map_user_iov() 面对非页的迭代器, 默认路径是 bounce copy(先拷进内核临时缓冲再发给硬件)——一次读写两趟搬运。
方案 四封 RFC 让应用可以把一个 dma-buf 注册到某个文件上( dma_buf_io_ctx),此后该文件上的读写直接生成 dma-buf backed bio: 数据从设备内存直连块设备。block/bio.c 拆出 bdev_init_dma_buf_io_ctx();bdev 侧拒绝「这块缓冲没在这个磁盘上 注册过」的 bio;fs/iomap/direct-io.c 加注册 helper 与守卫;XFS 接第一批。
为什么 它不重造块层的 dma-buf 通路——那部分建立在 Pavel Begunkov 的 dma-buf block 支持 v11 之上, 已经进了 Jens Axboe 的 for-7.4/io_uring-dmabuf 分支。这一系列补的是 文件系统侧怎么认这块缓冲:注册、校验归属、把 bio 组装起来。同一天, 同一个作者还发了 nvme/io_uring 那一半——把 dma-buf 注册到 NVMe 命名空间字符 设备,作为 fixed uring_cmd 的数据缓冲,并让 blk_rq_map_user_iov() 对 dma-buf 迭代器直接映射,因为它没法退回 bounce copy。
效益 少一次全量拷贝,且路径上不留临时内核缓冲。版图也清楚了:fs 的 direct I/O、块层的 bio、 io_uring 的固定缓冲、NVMe 的 passthrough,四处在同一天被同一套抽象串起来。
下一步 RFC,7 个文件、98 行新增,只有 XFS 开了头。要成为通用能力,iomap 覆盖的其它文件系统得逐个 跟上;注册制本身也意味着不能拿任意 dma-buf 往任意磁盘写——这条安全边界 是系列里专门一封信在守。
一句话点评 「缓冲区的类型在扩张」是 I/O 栈这几年的主线之一:从页,到 iov,到 iovec,现在到 dma-buf。这条线这次走得保守——先要显式注册,再拒绝未注册的组合,宁可多一道检查也不放开默认路径。

🕯️ 社区

/ column
After 14 years at Oracle and 23 years working on Linux, I've decided to take an extended break. Today, October 16th, 2026, is my last day. … I have very much enjoyed working with you all, and I'm proud of what we've accomplished together. Good luck!

XFS 文件系统的核心维护者 Darrick J. Wong(djwong@kernel.org)用一封六行的 邮件宣布离开。邮件里没有说交接安排,只留了 djwong@kernel.org 的转发地址——「最终 由系统管理员决定」。当天 linux-fsdevel 上多封回复都在道别;而 XFS 相关的技术讨论并没有停: write streams v6 的往返在同一时间线里继续。对一个靠个人长期投入维持 review 带宽的子系统来说, 这类离开带来的空缺通常要几个月才显形。

(本条为社区动态,非技术补丁。原文:Farewell!)

📰 media 视频采集

/ column

★ RK3588 的 ISP 驱动被搬到 RV1126 上跑了一遍,问题逐条列出

〔10-17 00:06 北京〕· Re: [PATCH v3 0/5] media: rockchip: rkisp2: Add driver for ISP on RK3588(Jacopo Mondi 评审)

定位 ISP 是相机链路里把 Bayer 原始数据变成可用图像的那一层,位置在 sensor 与采集端之间。rkisp2 是新写的驱动,目标是覆盖 Rockchip 2.x / 3.x 两代 ISP,第一个目标是 RK3588(3.0 版)。v3 共五封:驱动本体、params 输出节点、statistics 采集节点、media 控制器、 以及 RK3588 的设备树节点。
做法 评审者没有 RK3588,但有 RV1126(ISP 2.0)。他把整个系列跑在 RV1126 + IMX415 + libcamera 上,然后给出逐补丁意见和一整份「2.0 需要什么」的清单:CR 平面基址从未写入(三平面 格式的第三平面写到没编程的地址);4:2:0 采集格式挂的 media bus code 是 ISP 源 pad 根本没提供的 YUYV8_1_5X8,link validation 直接失败;MPFBC 格式表里 NV21M 出现两次、缺 NV12M 与 YUV420;params 缓冲在流启动时被消费后不还给用户态;stats 表把 HIST_BIG1 列了两次,HIST_BIG2 丢失。他自己还补了 12 条 2.0 专属改动:多读 24 行、时钟寄存器布局不同、读回缓冲要在 ISP 帧完成 中断而不是主路径帧结束才交还,等等。
效益 这是一次罕见的「用另一个硬件版本反查驱动假设」的评审。清单明确区分了三类:只对 2.0 成立的、 可能同时影响 3.0 的、以及纯属代码写错的。对做 Rockchip 相机链路的人来说,这就是一份 现成的对照表。
和你相关 今天离 RK3588 相机链路最近的一条。它也说明新 ISP 驱动进主线慢的真正原因——不是没人写,是没有足够多的硬件版本被真正跑过。

★ OV13858 上 Snapdragon:一整个白天在 sensor 与设备树之间来回

〔10-17 05:02 北京〕· [PATCH v4] media: i2c: ov13858: add regulator, clock and reset GPIO handling

定位 ov13858 是 OmniVision 的一颗 1300 万像素 sensor 驱动。它此前只有基础 支持,没有设备树描述。目标是 Surface Pro 11(Snapdragon)上的那颗。
做法 这一线今天在 dt-bindings 与驱动之间来回多轮:先是新增 OmniVision OV13858 的 bindings, 再补 dongwoon,dw9719 的 DW9714VA 对焦线圈文档,驱动侧加到 v4 收敛为 regulator / clock / reset GPIO 三件套。
效益 sensor 要能被 probe,供电、时钟、复位缺一不可。这类驱动从「能编过」到「能真正点起来」, 差的往往就是这三样——而它们在设备树里的写法每次都要被 bindings 评审来回磨。
和你相关 sensor 驱动的常规工作量就在这里:没有机制创新,但每个平台都要重来一遍,而错一个 GPIO 极性就是一片黑屏。

★ Rockchip VICAP 与 Synopsys CSI2RX 补上灰度格式 Y8 与 Y10

〔10-16 21:47 北京〕· [PATCH 0/3] media: support Y8/GREY and Y10 bus/pixel formats for Rockchip VICAP and Synopsys CSI2RX

定位 V4L2 用两层描述数据:media bus code 说「线上传的是什么」,pixel format 说「内存里怎么放」。两者要对得上,链路才能协商成功。
做法 三封信同时给采集端(Rockchip VICAP)和接收端(Synopsys CSI2RX)加上 Y8 / GREY(8 位灰度)与 Y10(10 位灰度)两族格式。 两端一起补,是因为只补一端仍然协商不起来。
效益 不少工业相机与近红外 sensor 输出的是灰度。此前这类 sensor 接到 Rockchip 链路上,格式对不上 就直接卡在协商阶段。相机链路里「少一格格式」和「少一层 PHY」一样,是硬缺口。
和你相关 和昨天头条的 C-PHY 是同一种补法——链路缺的往往不是算法,是某一格描述没被定义。

📰 DRM 显示

/ column

★ Rust 的 DRM JobQueue 到 RFC v6:四封信都在修 DmaFence 的生命周期

〔10-16 16:57 北京〕· [RFC PATCH v6 0/5] rust: Add drm::JobQueue

定位 JobQueue 是把「提交一批 GPU 工作、跟踪它做完」这个模型带进 Rust 侧的 抽象。它要跟 DmaFence(dma-buf 的完成信号,可以跨驱动、跨进程传递) 配合。
做法 v6 五封信里有四封在改 DmaFence:去掉 static 生命周期、给 FenceContext 实现 Deref、明确「信号发出后不要 drop」的语义、 把 call_rcu() 换成 synchronize_rcu()。第五封才加 JobQueue 本体。
效益 一个 RFC 磨到第六版,改的全是前置的内存模型。这说明 Rust 抽象真正难的地方不是把 C 接口包一层, 而是把生命周期约束写进类型系统——这些约束在 C 里靠注释和约定,在 Rust 里必须能被编译器检查。
和你相关 对做 DRM 驱动的人,这条值得跟:JobQueue 一旦定型,以后写 GPU 调度相关代码的方式会跟着变。

★ fbcon 旋转字体缓冲,第三版才把时机改对

〔10-16 15:36 北京〕· [PATCH v3 0/3] fbcon: fix rotated font buffer handling on font change

定位 fbcon 是 framebuffer 控制台。DRM 时代它仍然承担启动阶段和崩溃之后的 文本输出,屏幕旋转时要把字体位图按旋转角度重建缓冲。
做法 v3 三封信,标题从 v2 的 on font change 到 v3 仍是同一件事,但改动收敛到 字体变更时旋转缓冲的重建时机。
效益 旋转屏幕上换字体不再用错位的字体缓冲。属于平时看不到、一错就整屏花的一类——恰恰因为它出现在 启动和 panic 之后,用户几乎没有别的通道可看。
和你相关 fbcon 是「图形栈全挂之后你还能看到字」的那条兜底路径。它很少改,改的多半是这类时序问题。

★ fbdev 热插拔时,别急着把大模式从 connector 里删掉

〔10-16 15:35 北京〕· [PATCH 0/2] drm/client: Keep larger modes in connector->modes on fbdev hotplug

定位 drm/client 是 DRM 给 fbdev 兼容层用的模式选择逻辑。显示器热插拔后, 它要把当前模式重新对齐到新接上的设备。
做法 两封信让 drm_client 在 fbdev 热插拔时保留 connector->modes 里 更大的模式,而不是顺手裁到当前 fbdev 的分辨率。
效益 热插拔后还能切回高分模式。讨论里有 Intel 侧的意见往返——模式列表一旦被裁剪,上层再想恢复就得 重新探测。
和你相关 「上层只想要一个够用的值,下层却把整个列表改小了」是内核里反复出现的边界问题,和昨天 mm 那批 VMA 语义收敛是同一类。

📰 mm 内存管理

/ column

★ zswap 开始按批压缩:大页切成 8 页一组

〔10-17 05:48 北京〕· [PATCH v1 0/8] Batched zswap_store() with compression batching(讨论)

定位 zswap 是 swap 前面的压缩缓存层:页面在真正写进 swap 设备之前先被压缩 留在内存里。它的 zswap_store() 长期是一次一个 folio 地调用 压缩器。
做法 八封信把批处理引入 zswap_store():对软件压缩器,把一个大 folio 切成 ZSWAP_MAX_BATCH_SIZE(8 页)一批逐批存储;同时在 crypto/acomp 侧加通用的批量接口。这一版是 2026-01 那个带 IAA 加速器驱动的 v14 系列里拆出来的通用部分, 作者换邮箱与公司之后重启。
效益 大 folio 不必再一页一页走压缩器,硬件加速器与软件压缩器都能按批吃。今天的讨论很密(十条往返, 涉及 Yosry Ahmed、Barry Song、Herbert Xu 等),焦点在批大小怎么定、以及 acomp 的批量 API 该长什么样。
和你相关 「把逐项操作改成批量」是 mm 里的高频套路,但每换一层就要重新谈 API 形状——zsmalloc 今天也在做同一件事。

★ guest_memfd 的内存可以有多个来源了

〔10-16 18:58 北京〕· [RFC PATCH v2 00/11] mm: Memory providers for guest_memfd and iommufd(讨论)

定位 guest_memfd 是机密计算(TDX / SEV 这类)给客户机用的、宿主看不见的内存。 它此前只能来自匿名页这一种来源。
做法 十一封信引入内存提供者(memory provider)抽象,让 guest_memfd 的内存 可以由不同后端提供;配套那一封让 iommufd 用大 IOMMU 页做映射,而不是 一页一页建表。
效益 机密虚机的内存来源与映射效率同时被打开。这是机密计算那条线上比较靠底层的一次抽象——而且 guest_memfd 正好也是 dma-buf 导出的常见来源,两条线在同一个方向汇合。
和你相关 和今天的头条是同一片水域:一旦内存可以来自设备或固件,Linux 里的「一页就是一段匿名内存」这个默认假设就要一层层被拆开。

★ kdump 到 v8:同时缩小 vmcore 体积与抓取时间

〔10-16 14:16 北京〕· [PATCH v8 0/8] kdump: reduce vmcore size and capture time

定位 kdump 是内核崩溃后用第二个内核把现场内存导出成 vmcore 的机制。vmcore 的体积和抓取时间,直接决定线上崩溃后能不能及时留下证据。
做法 八封信同时压缩体积与时间。今天先发了一版 RESEND、随后又发了 v8——同一天两次投递,通常意味着 维护者那边催过。
效益 机器内存越大,vmcore 越夸张。这类改动不产生新功能,但决定了大机器崩溃后是「三分钟拿到现场」 还是「半小时还在转」。
和你相关 和 mm 的 memory-failure 那六封(毒页不进下一次 kexec)是同一条线上的两端:一个负责留住现场,一个负责别把坏页带到下一次启动。

📰 net 网络

/ column

★ 本地出向的 TX headroom 变成可配置项

〔10-16 07:54 北京〕· [RFC net-next 0/6] net: configurable extra TX headroom for local egress

定位 skb 在发送前要为各层头部预留空间(headroom):隧道封装、硬件标签、 各种 offload 都要往里塞东西。当前这个预留量是按最大需求写死的。
做法 六封信加 tx_extra_headroom 与 LL_ALLOC_SPACE(),通过 rtnetlink 的 IFLA_TX_EXTRA_HEADROOM 让管理员配置本地出向额外预留多少。
效益 按需预留,而不是所有场景一律按最坏情况留。讨论里有来自 Amazon、NVIDIA、Mellanox 侧的意见, 其中一派主张用 skb 元数据而不是全局配置来表达——这条线的形状还没定。
和你相关 「为最坏情况预留」和「按需分配」是网络栈里反复出现的取舍,headroom 只是最新一处。

★ AF_XDP 零拷贝的 skb head 算错了,越界写 48 字节

〔10-16 19:12 北京〕· [RFC net-next 01/15] xdp: Size zero-copy skb heads by their contents(讨论)

定位 AF_XDP 零拷贝路径把网络帧直接构建在用户态的 UMEM 页上。 xdp_build_skb_from_zc() 决定 skb 的 head 区多大——那里要放 skb_shared_info 等元数据。
做法 原来的代码按 XSK 帧大小来定 head 区,于是 2 KiB 的 chunk 里一个 1514 字节的帧会把 skb_shared_info 覆盖掉 48 字节。修复方案是按 headroom + 数据实际内容定尺寸、精确拷贝、并丢弃 head 放不进一页的帧。 作者在 QEMU 里用 fbnic 复现,并新增 XDP_PASS_FULL_FRAME 测试覆盖。
效益 一个真正的越界写被拦下。值得一提的是它的来源:由 AI 代码审查代理发现, 修复后配了可复现的测试。
和你相关 内核里「按最坏情况算尺寸」和「按实际内容算尺寸」的差别,在这里直接变成了内存安全问题——和今天头条里块层拒绝未注册 dma-buf 是同一类边界思维。

📰 fs 文件系统

/ column

★ exfat 的 valid_size 竞态到第三版

〔10-16 11:34 北京〕· [PATCH v3 0/8] exfat: fix valid_size update races

定位 exfat 是 SD 卡与 U 盘上最常见的文件系统。它用 valid_size 记录一个目录项里已经初始化了多少字节——查找路径和写入路径都会读写它。
做法 八封信修 valid_size 更新过程中的竞态,磨到第三版。
效益 可移动介质上并发访问与突然拔卡最容易暴露这类问题。修好了,目录项不会因为「一半写着、一半读着」而错乱。
和你相关 exfat 是拔插最频繁的介质上的文件系统,这类竞态的代价直接是用户数据。

★ writeback 切换 wb 时的时间戳与脏状态

〔10-16 19:52 北京〕· [PATCH 0/2] writeback: fix timestamp and dirty-state handling in wb switches

定位 writeback 是后台回写:wb 结构代表一条回写上下文 (每个块设备、每个 cgroup 都有自己的),页面在它们之间会转移。
做法 两封信修 wb 切换时的时间戳与脏状态处理。
效益 切 cgroup 或切设备之后,脏页不会因为归属换了而漏回写或被重复计时。
和你相关 「状态跟着对象走」是内核里最容易漏的一类记账——和 exfat 那条一样,错的是账本,不是算法。

📰 LSM 安全

/ column

★ keyring 丢掉了自己的专用数据结构,删掉 1724 行

〔10-17 05:53 北京〕· [RFC PATCH 0/6] KEYS: From assoc_array to rhashtable migration(Jarkko Sakkinen)

定位 assoc_array 是一个只在内核 keyring 子系统里使用的关联数组实现,专门为 key 的层级结构设计。它维护成本高、只在一位维护者手里,长期被视为技术债。
做法 六封信把它换成通用的 rhashtable:先修几个配额与身份校验的边角问题,再加 struct keyring_index 与 keyring_is_empty(),最后从 lib/ 里删掉 assoc_array.c(1724 行)及其文档。
效益 内核少一份「只有一个用户、只有一个人懂」的基础设施。作者在封面信里直说动机: 「As a constant source of LLM attention this must be done.」
和你相关 这条还有一层值得注意:作者写明系列的起点是别人用 LLM 生成的代码,他花一天把它整理成规范补丁,并用另一个模型去找越界 bug。加上今天 AF_XDP 那条由 AI 审查代理发现的越界写——同一天里 AI 在内核开发流程里出现了两次,位置都在「辅助审查」而不是「替代判断」。

📰 block 块层

/ column

★ CVE-2026-64017:blk-mq 缓存请求的修复回移植到 6.6.y

〔10-17 02:47 北京〕· [PATCH 6.6.y 0/2] CVE-2026-64017: backport fix series

定位 blk-mq 的请求缓存:空闲请求被放进 per-CPU 缓存,复用时先尝试从缓存里 弹一个出来。
做法 两封信分别修「弹出缓存请求时判断是否可用」和「把缓存请求放回链表」,作为 CVE-2026-64017 的修复回移植到 6.6.y 长期稳定分支。
效益 这是会被分发到大量在跑设备上的一条。看到系列名带 CVE 编号 + 具体 stable 版本,就意味着 上游认定它有安全影响。
和你相关 长稳分支的回移植是内核维护里最容易被忽视、却离真实部署最近的一环——你手上的板子跑的很可能就是 6.6.y。

★ iocost 的成本模型可以被 BPF 接管,到 RFC v10

〔10-17 01:49 北京〕· [RFC PATCH v10 0/4] blk-iocost: add BPF struct_ops cost model support(讨论)

定位 iocost 是块层的 I/O 成本控制器:给每个 cgroup 分配「预算」,按各设备 的模型决定一次 I/O 要花多少预算。
做法 四封信用 BPF struct_ops 让成本模型可以由 BPF 程序提供,并加了一个 per-period 汇总的 tracepoint 与 selftest。已经磨到第十版。
效益 成本模型从内核写死变成可替换策略。这类「把策略从内核搬到 BPF」的改动这几年在多个子系统出现, 代价是接口一旦发布就得长期兼容。
和你相关 和 sched_ext 是同一条思路的两个落点。留意它们公布的接口形状——那是会被锁死的部分。

📰 arch 架构

/ column

★ 带超时的条件加载到 v16:一次铺到七个地方

〔10-16 15:09 北京〕· [PATCH v16 00/16] barrier: Add smp_cond_load_{relaxed,acquire}_timeout()

定位 smp_cond_load_*() 是内核的「自旋等待某个内存位置变成期望值」原语,配合 WFE(ARM 的等待事件指令)能让 CPU 在等待时不空转。它没有超时—— 等不到就一直等。
做法 十六封信给它加上 _timeout() 变体,并把改动铺开到七个地方: asm-generic 的屏障、arm64 的 WFET 支持与 usecs_to_cycles()、locking/atomic 的脚本生成的 atomic_cond_read_*_timeout()、bpf 的 rqspinlock、sched 的定时等待接口、 cpuidle 的 poll 状态,以及一套针对超时有效性的测试。
效益 自旋等待终于可以说「等到什么时候为止」。已经磨到第 16 版,说明争议不在能不能做,而在 接口该怎么长——这种基础原语一旦发布,全内核都会依赖它。
和你相关 内核里加原语比加驱动谨慎得多。看一个原语从 v1 磨到 v16 改了哪些地方,就是在看维护者的顾虑清单。

★ arm64 的 DRTM 启动部分到 v2

〔10-17 00:51 北京〕· [PATCH v2 00/15] arm64: DRTM, boot portion(讨论)

定位 DRTM(动态可信度量根)是在系统已经启动之后,再建立一次「可信起点」的 机制:把 CPU 拉进一个受控环境,度量一段固件,然后带着可信记录回到正常世界。
做法 十五封信实现 arm64 侧的启动部分,包括在 EFI stub 里实现 ARM64 DRTM。
效益 arm64 服务器上「启动链的可信起点」多了一条动态路径——对不信任固件的场景,它是可选答案之一。
和你相关 和 mm 的 guest_memfd 一起看:两条线都在处理「哪些内存与代码是可以被信任的」,只是一个从启动链切入,一个从虚机内存切入。

📰 PCI 总线

/ column

★ ASPM 加了一个「强制打开链路省电」的 API

〔10-17 06:09 北京〕· [PATCH v3 0/8] PCI/ASPM: Add pci_force_enable_link_state() API and convert Atheros drivers

定位 ASPM 是 PCIe 的链路省电状态管理:让链路在不传数据时进入低功耗状态。 某些设备会有「必须强制打开某个链路状态,否则功能异常」的怪癖。
做法 八封信加 pci_force_enable_link_state() API,并把 Atheros 相关驱动从 各自写的私有开关转过来用它。
效益 驱动里的硬件怪癖处理从各写各的,变成走一个统一的、由 PCI 核心负责记录的接口。Bjorn Helgaas 今天有回复——这条已经到了维护者逐条看的阶段。
和你相关 「把驱动里的私有 workaround 收进核心」是 PCI 子系统一直在做的事,收得动的前提是怪癖确实能被抽象成一个 API。

📰 Rust 与 virtio

/ column

★ Rust serdev 重构到 v4;顺带把 IIO 的 Rust 抽象推进一步

〔10-17 02:00 北京〕· [PATCH v4 0/4] rust: serdev: Refactor

定位 serdev 是串口设备总线:给挂在 UART 上的设备(蓝牙、GNSS、传感器) 提供设备模型。Rust 侧的绑定此前用一把互斥锁加一个 active 标志控制回调。
做法 v4 四封信把它换掉:先在 tty 侧导出暂停 receive_buf 回调的函数,再用 「暂停接收」替代 active 互斥锁,最后简化回调签名。同一天还有另一条线: [RFC PATCH v6 0/4] iio: position: add Rust driver for ams AS5600——为 Rust 加最小 IIO 子系统抽象,并写一个 AS5600 磁编码器驱动。
效益 Rust 这边正在从「能写驱动」走向「有子系统抽象可用」。IIO 是继平台设备、PCI、USB 之后 又一个被 Rust 碰到的子系统。
和你相关 对做相机/传感器链路的人,IIO 的 Rust 抽象值得盯——环境光、位置、温湿度这类配套传感器都走 IIO。

★ virtio-blk 的 inline 加密还在磨

〔10-15 23:46 北京〕· [PATCH v3 0/2] virtio-blk: Add inline encryption support(讨论)

定位 inline 加密指加密动作由存储设备自己完成,密钥通过标准接口下发,内核 不做加解密。对虚拟磁盘来说,这意味着要有一条 virtio 侧的通路把密钥交给后端。
做法 v3 两封信加 inline 加密支持与配套的控制 virtqueue。讨论从 10-09 一直延续到今天, Qualcomm、NVIDIA、Red Hat 几方在来回。
效益 虚机里的加密盘可以不占宿主机 CPU。virtio-dev 是低频列表,今天只抓到 2 条——所以这里 出现跨周的长讨论,通常意味着规范层面还没谈拢。
和你相关 virtio 的规范一旦定下就很难改。这类跨厂商拉锯值得作为「规范怎么长出来」的样本看。

📰 rt 实时

/ column

★ RCU CPU stall 警告要报得更清楚,Paul McKenney 亲自来回

〔10-17 01:40 北京〕· Possible enhancement to RCU CPU stall warning messages(讨论)

定位 RCU CPU stall 是「某个 CPU 在 RCU 宽限期里卡住太久」的警告。它出现时 往往已经系统级异常,但消息本身给出的线索有限。
做法 讨论围绕给这条警告补充信息:谁在跑、卡在哪、和什么有关。Paul McKenney 与 Red Hat 侧 来回多轮。
效益 警告信息的价值在于「不用再接调试器就能定位」。RT 场景下 stall 的成因和普通内核不同, 消息里多一两个字段,排查可能就少几个小时。
和你相关 这条本身不产代码,但它展示了内核的一种常见改进方式——先把现场描述清楚,再谈修不修。

更多动态

○ media:C-PHY 继续推进,Qualcomm CSI2 PHY 到 v3(昨天头条那条线的新版本) 〔10-16 22:56〕

○ media:imx681 的 C-PHY 支持讨论继续,sensor 侧也要认 C-PHY 〔10-17 06:25〕

○ DRM:nova-core(Rust 写的 NVIDIA 驱动)加 NVKV 键值编解码,到 v4 〔10-16 09:54〕

○ DRM:msm/adreno 加 Adreno 620 GPU 支持(4 封) 〔10-16 20:55〕

○ DRM:panel-simple 加 AUO B101UAN01 面板 〔10-16 17:47〕

○ mm:zsmalloc 把对象释放攒成 per-cpu 批,RFC v4 〔10-16 20:10〕

○ mm:memory-failure 让硬件毒页不进入下一次 kexec,v6(7 封) 〔10-16 20:17〕

○ mm:hugetlb 的 PMD 大页支持从 CMA 分配 〔10-16 18:08〕

📌 机制雷达:5 条跨域改动

/ section
缓冲区的类型在扩张 同一个作者一天之内把 dma-buf 从 iomap 铺到 nvme:fs 侧 4 封给 iomap 加注册守卫与 XFS 支持,块侧 1 封让 blk_rq_map_user_iov() 对 dma-buf 迭代器直接映射 · 原文
用通用结构替掉专用实现 KEYS 用 rhashtable 换掉只为 keyring 存在的 assoc_array,lib/assoc_array.c 的 1724 行与其文档一并删除;作者注明起点是别人用 LLM 生成的代码 · 原文
给自旋等待加超时 smp_cond_load_*_timeout() 到 v16,一次铺到 asm-generic / arm64 WFET / locking-atomic 脚本 / bpf rqspinlock / sched / cpuidle 六处,外加一套超时有效性测试 · 原文
把逐项改成批量 zswap 把大 folio 切成 8 页一批压缩并在 crypto/acomp 加批量接口;zsmalloc 把对象释放攒成 per-cpu 批加一个 drain worker —— 内存回收路径同一方向的两次尝试 · 原文
AI 进入内核的辅助位置 同一天两例:KEYS 系列的起点是 Linus 转来的 LLM 生成代码(作者花一天整理成规范补丁);AF_XDP 那个越界写由 AI 代码审查代理发现,修复后配了可复现测试。两处都落在辅助审查,而不是替代判断 · 原文

📖 本期概念速查

/ section
dma-buf 设备内存的跨驱动句柄。显存、加速器内存、相机与编码器产出都通过它传递,谁拿到句柄谁就能映射使用——不需要知道对方用什么硬件。
bounce buffer 中间缓冲。当硬件不能直接读写目标内存(地址或对齐不满足)时,内核先拷进一块能用的缓冲,传完再拷回去。省掉它就是今天头条的全部动机。
headroom skb 里数据前面预留的空间。封装协议、硬件标签、offload 都要往里加头,留多少是「按最坏情况」还是「按需」的经典取舍。
media bus code / pixel format V4L2 的两层描述。前者说线上传输的格式,后者说内存里的排布。链路两端必须都能说同一种,协商才能通过。
ISP / VICAP / params / stats ISP 把 Bayer 原始数据变成图像;VICAP 是 Rockchip 的采集端;params 是用户态下发的参数节点,stats 是 ISP 回传的统计(测光、白平衡)节点。
assoc_array / rhashtable 前者是只为 keyring 写的专用关联数组(1724 行,一个用户),后者是内核通用的可扩展哈希表。今天的替换就是「专用实现回归通用设施」。
smp_cond_load / WFE / WFET 自旋等待内存值变化的原语。ARM 的 WFE 让 CPU 在等待时进入低功耗,WFET 再带一个超时——今天这批补丁就是给它补上超时。
zswap / zsmalloc 都在 swap 路径上。zswap 在写 swap 前先压缩留在内存;zsmalloc 是给压缩页用的分配器,专为「很多大小不一的小对象」设计。
guest_memfd 机密计算给客户机用的内存,宿主不可见。此前只能来自匿名页,今天讨论的「内存提供者」是让它支持多种后端来源。
AF_XDP XDP 的高速通道。把网络帧直接放进用户态预分配的 UMEM 页,做到零拷贝收发——正因为零拷贝,尺寸算错就是直接踩到别人的内存。
iocost / struct_ops iocost 按预算控制每个 cgroup 能用多少 I/O 带宽;struct_ops 是 BPF 替换内核结构体操作集的机制,让「策略」可以从内核搬到 BPF 程序里。
DRTM 动态可信度量根。系统已经起来之后,再建立一次可信起点:把 CPU 拉进受控环境、度量固件、带着可信记录回来。
kdump / vmcore kdump 是崩溃后用第二个内核导出内存现场,产物叫 vmcore。机器内存越大,这份现场越大、导出越慢。

如果对你有用,点个赞,或转给需要的朋友。

数据来源:lore.kernel.org(全内核 13 列表)· 北京时间