今天最值得读的一条是一次还没落地的架构尝试:DRM 维护者 Maxime Ripard 把 MIPI-DSI 面板的初始化序列做成 BPF 程序,让新屏支持不必再等内核补丁——发出来几小时, Neil Armstrong 和 Rob Herring 就分别从「早期启动显示」和「设备树绑定语义」两头发起了质疑。 另一条,内核第一次可以被编译成只带 IPv6:16 帖把 IPv4 从通用 socket 与传输层里解耦出来。
🎬 今日导读
/ section📊 板块活跃度
/ column
数据截至 09-29 06:23 北京,近 24h 各板块真实计数:net 717 · DRM 404 · mm 304 · media 257 · PCI 173 · fs 149 · Rust 88 · block 83 · LSM 54 · arch 37 · rt 33 · virtio 0。 今天量最大的仍是 net,但最重的一条在 DRM —— 而且是一条还没被接受的设计提案, 不是已合入的改动。
💡 今日头条
/ section把面板的初始化序列搬进 BPF:一个能绕开内核发布周期的面板驱动
panel-mipi-dsi-bpf 作兜底,通用驱动匹配兜底项, 前一项用来决定加载哪个 BPF 程序。六个归一化的 regulator(vcc / iovcc / avdd / avee / elvdd / elvss)覆盖约 95% 的现有 MIPI-DSI 面板。 🔗 原文
社区反应:发出来几小时内就分成了两派。 Neil Armstrong(Linaro)从早期启动切入:BPF 程序只能由用户态加载, 这就依赖了用户态行为——如果 initramfs 因故没起来, 就没有任何途径把错误显示出来;他同时提醒这「对于严肃应用来说太晚了, 除非我们先解决 bootloader 到 Linux 显示引擎的交接」。他还在绑定那帖里直接反对: 「我看不出这怎么能算有效的硬件描述,BPF 是软件实现,跟绑定无关」, 并担心把时序搬进 blob 会变成带闭源许可限制的专有二进制,为了一块屏更快点亮而付出降级代价 (原文)。 Laurent Pinchart 关心的也是同一件事:用户态可用之前,oops 的现场怎么打到屏幕上 (原文)。 HID-BPF 的作者 Benjamin Tissoires 则替这条路辩护:BPF 默认可以要求程序是 GPL 兼容的,闭源许可那条不成立;而且 BPF 目标文件比二进制 blob 容易反汇编得多,一个 pass 就近乎拿到源码 (原文)。 Rob Herring 针对绑定提出更基础的问题:既然一定要有面板专有的第一个 compatible, 那第二个兜底项意义何在?而且总该先挑一块已经在树里的面板转换过去做样例 (原文)。 他的机器人在同一线程里报出了 dt_binding_check 失败:示例节点与既有面板 schema 冲突、 compatible 过长、缺少必需属性。 这条线索的价值不在于结论,而在于它把一个问题摆上台面: 内核的「新硬件支持」是否必须绑定在「改内核」这一条路径上。
CONFIG_IPV4 可以关掉了:把 IPv4 从通用网络栈里解耦出来
CONFIG_IPV4 事实上关不掉。 INDIRECT_CALL_INET 宏做了改造, 在不拖慢双栈快路径的前提下安全跳过 IPv4 函数指针;UDP、RAW、ICMP、Ping 各自做了代码拆分。 depends on IPV4 的 Kconfig 符号做了审计, 区分「真实的链接期硬依赖」与「只是保守起见被门控」的选项——后者可以放开。 🔗 原文
📰 DRM 显示
/ column★ Rockchip Analogix DP 的原生 HPD 检测:14 帖到 v3,RK3576 实测
IRQF_ONESHOT 消除 hardirq 与线程化处理程序之间对中断屏蔽寄存器的读改写竞态, 并用位掩码方案把中断类型检测细化到可按事件控制, 给 Rockchip 平台配上 HOTPLUG_CHG 中断与 2ms HPD 去毛刺。 bridge->next_bridge、 并让下游 bridge 的 HPD 事件(如带 hpd-gpios 的 dp-connector) 走 .hpd_notify 回调。 🔗 原文
★ nova-core 添 NVKV 解码器:Rust 写的 NVIDIA 驱动继续补功能块
🔗 原文
更多动态
○ it6505 桥接芯片 DP 音频支持 + shared-DAI 修复到 v8(14 帖) 〔09-28 07:49〕
○ fbcon / vgacon / vt 抽出共用文本光标 helper,到 v3(5 帖) 〔09-28 16:57〕
○ drm/msm:separate_gpu_kms 默认改为 auto 选择,到 v4 〔09-28 14:59〕
○ drm/qxl:shared-primary 生命周期与 source packing 修复,到 v3(5 帖) 〔09-28 16:43〕
○ drm/vkms:支持更多像素格式,并修 RGB565 回归(5 帖) 〔09-28 16:43〕
📰 media 摄像头
/ column★ GMSL 相机链路进 camss:解串器场景下的 RDI/VFE 修复到 v5
v4l2_get_link_freq() 本来就知道怎么问。 🔗 原文
★ 7 个 sensor 驱动批量修同一个 runtime PM 泄漏,且带 Assisted-by: LLM
remove() 与 runtime PM 的交接处。 以 ov5647 为例:它的 remove() 只调了 pm_runtime_disable(), 而后者只是阻止未来的自动 suspend/resume,并不会强制执行最后一次 suspend。 pm_runtime_disable() 之后,用 pm_runtime_status_suspended() 判断——没挂起才调 *_power_off(), 这样常见的「本来就已挂起」路径不会被重复下电,与同门 imx412.c 的写法一致。 Assisted-by: LLM 标签——AI 辅助产出的补丁正在以这种可追溯的方式进入列表。 🔗 原文
更多动态
○ 三星 S5KJN5 图像传感器驱动到 v5(2 帖) 〔09-28 15:55〕
○ dma-buf 注册进 io_uring 到 v7(13 帖)——上一版是 09-22 的头条,本期继续迭代 〔09-28 21:32〕
○ uvcvideo:OBSBOT Tiny 2 / Tail 2 的云台实时回读,到 v4(4 帖) 〔09-29 05:50〕
○ media: imon:修 display_close 经 dev_dbg 触发的 use-after-free(v2) 〔09-28 20:12〕
○ media: gspca:修 build_isoc_ep_tb() 的栈溢出 〔09-28 19:07〕
📰 mm 内存管理
/ column★ 跨阶大 folio 被截断时会丢数据:修到 v5
truncate_inode_pages_range():文件被打洞或截断时, truncate_inode_partial_folio() 会把一个大 folio 切开, 好让调用方丢掉落在范围内的子 folio、保留范围外的尾部。 min_order 非零时, folio_split() 会停在 min_order 而不是 order 0, 于是按页粒度算出来的边界可能落在一个按 min_order 对齐的子 folio 内部, 截断循环会把整块丢掉——连有效的尾部一起。 修法是让截断边界按 mapping 的最小 folio 阶数向内对齐。 🔗 原文
★ collapse 引擎与调用方正式分家:13 帖重构到 v4
khugepaged.c 同时装着 collapse 引擎和 请求 collapse 的调用方,两者互相伸手——这是 THP (透明大页)相关代码长期难改的根因之一。 cc->is_khugepaged 来判断自己能做什么, 而每一个决定其实在调用方发起请求前就已经定了; collapse_single_pmd() 一次调用里干了两半的活, 中途还放下 mmap_lock,而是哪条路径放的锁调用方看不见, 只能靠返回的 bool 自己记账;MADV_COLLAPSE 的实现 (遍历用户区间、逐 PMD 循环、errno 翻译)也长在守护进程的文件里。 改法是:画出这条线——用一份 policy 表达调用方允许什么, 以锁为界把调用拆成两半,并把系统调用搬到 madvise.c。 🔗 原文
更多动态
○ CRASH_MEMACTION 到 v3(12 帖):向 kdump 内核描述内存页(前身是 CRASH_WIPE_SECRETS) 〔09-29 01:18〕
○ mm/zswap RFC:让 shrinker 回写能与 iocost 协同(4 帖) 〔09-28 16:19〕
○ mm/vmalloc:修 vmalloc_dump_obj 的虚拟地址查找,到 v4(2 帖) 〔09-28 16:16〕
○ mm/hugetlb:修未共享 PMD 上过宽的 MMU notifier,到 v4 〔09-28 10:48〕
📰 net 网络
/ column★ skb 生命周期的门控 tracepoint:不走 skb 扩展,改用 sk_buff 里的一位
skb->active_extensions 里剩下的空闲位配合 skb_ext_reset / put / copy 路径,结果发现方向错了: 「一个不需要在 skb->extensions slab 里分配空间的特殊扩展」 会让逻辑变得更乱。于是退回最简单的方案——直接在 sk_buff 里占一位, 从核心网络代码直接加回调。 🔗 原文
今日动态
○ TCP ROCCET 拥塞控制模块到 v9,仍在列表上迭代 〔09-28 23:12〕
○ netconsole:修 target 使能竞态与 configfs 读取锁(4 帖) 〔09-29 02:01〕
○ hsr:给收发 skb 附加额外信息到 v7(8 帖) 〔09-28 20:39〕
○ r8169:为 RTL8127 增加 RSS 支持,到 v15(7 帖) 〔09-28 15:05〕
○ i40e/ice/iavf:修 netdev lock 改动后的 VF bonding(pull request,3 帖) 〔09-29 06:44〕
○ sock_sendmsg_nosec 里的 BUG_ON EIOCBQUEUED 降级为普通处理 〔09-28 10:04〕
📰 PCI 总线
/ column★ P2PDMA 到 v8(23 帖):补上 ATS 的按设备 / 按映射粒度
🔗 原文
★ SPDM 的 Rust 实现到 v4:22 帖
lib: rspdm: Support SPDM get_certificate 这类按协议命令逐步补齐的补丁。 lib/ 而非只待在驱动层,是这条线值得关注的地方—— 协议栈这类需要严格内存安全与状态机正确性的代码,正是 Rust 的靶心。 🔗 原文
更多动态
○ PCI: rcar-gen4:从链路断开中恢复并路由 Root Port 中断,到 v2(15 帖) 〔09-29 00:53〕
○ PCI/AER:修 ghes_estatus_pool 在错误处理路径上的内存泄漏,到 v5(3 帖) 〔09-29 01:40〕
○ VMD bug:NVMe 控制器复位失败并报「can't derive routing for PCI INT A」 〔09-29 02:58〕
📰 fs / block / Rust / LSM
/ column★ ublk 把请求派发给已被取消的 io 命令:9 帖修 3 条竞态
ublk_queue_rq() 会在 io->cmd 为 NULL 上崩溃。 f7700a4415af 修过 use-after-free、1133b93fc7f6 修过 「首次 start 之前的 io_uring 退出路径」,而这一版覆盖的是 STOP_DEV 后 START_DEV、FETCH 轮次部分完成后任务退出、 以及恢复过程中队列任务先退出的三种情形。 ub->canceling, 使后续取消能再次标记并静默这些队列。 🔗 原文
今日动态
○ iomap:修错误处理回归,到 v3(4 帖) 〔09-28 16:48〕
○ Christoph Hellwig:用 bio_complete_in_task 做 iomap 错误上报 〔09-28 17:11〕
○ nvmet:把命名空间 I/O 计费到 cgroup,到 v6(3 帖) 〔09-28 14:14〕
○ loop:把 queue limits 清理推迟到 workqueue,到 v6 〔09-28 17:35〕
○ rust: pin-init 面向 7.4 的上游同步(3 帖) 〔09-29 01:32〕
○ rust: time:让 Delta 的除法与取余行为一致 〔09-29 02:39〕
○ apparmor:在失败审计之前解析 pivotroot 路径 〔09-29 03:06〕
○ efivarfs:新增 nostatfs 挂载选项以跳过 QueryVariableInfo(),到 v4 〔09-29 04:36〕
📌 机制雷达:3 条跨域大改动
/ sectionpm_runtime_disable() 不等于「强制挂起一次」。 这个坑对所有带 runtime PM 的驱动成立,而它今天在 7 个文件里同时出现, 说明这类缺陷在树里还有存量。 原文 📖 本期概念速查
/ sectionstruct page 描述单个物理页,用 folio 描述「一组连续、被当作一个单位管理的页」。大 folio 能减少管理开销, 但与按页粒度写的旧代码混用时,容易在对齐单位上出分歧。 如果对你有用,点个赞,或留言聊聊你最关心的板块。
数据来源:lore.kernel.org(全内核 13 列表)· 北京时间