在周一 Linux 6.12 内核合并窗口打开之前,鉴于 Linux 内核维护者峰会也将于下周在维也纳举行,因此 printk 更新已提前提交。printk 更新值得注意的是完成了 NBCON 控制台工作,这是实时 (PREEMPT_RT) 支持最终成为主线之前的最后一个主要障碍。
目前尚不清楚将剩余 PREEMPT_RT 补丁上行的时间是否会在 Linux 6.12 合并窗口中发生,或者被推迟到另一个周期中,等等。我们在未来的日子里拭目以待。无论如何,使用 printk 拉取请求,它完成了围绕 NBCON 控制台的长期运行工作。
SUSE 工程师 Petr Mladek 解释了 Linux 6.12 的 printk 工作:
“这是对新 nbcon 控制台支持的’最后’部分。其中 “nbcon” 保留 “No Big console lock CONsoles” 又名不在 console_lock 下。
结构控制台中添加了新的回调:
– write_thread() 用于在任务上下文中刷新 nbcon 控制台。
– write_atomic() 用于在原子上下文中刷新 nbcon 控制台,包括 NMI。
– con->device_lock() 和 device_unlock() 用于获取驱动程序特定的锁,例如 port->lock。
创建了新的 printk 特定的 kthreads:
– 每个控制台的 kthread,负责刷新 nbcon 控制台上的正常优先级消息。
– 线程,负责在启用CONFIG_RT时刷新所有控制台上的正常优先级消息。
新的回调是在 v6.7 中已添加的特殊 per-console 锁下调用的。它允许区分三种严重性:正常、紧急和恐慌。具有较高优先级的上下文可以在安全的情况下接管所有权,即使在处理记录的过程中也是如此。即使 panic 上下文不安全,也可以做到这一点。但只允许在进入无限循环之前的最后一次绝望的刷新。
…
最后,目前还没有 nbcon 控制台。这意味着更改不应修改现有行为。唯一的例外是 CONFIG_RT 它会强制将传统循环(对于正常优先级上下文)卸载到专用 kthread 中。三分之二的更改已经在 6.11 的拉取请求中。用户可见的变化是紧急部分的冲洗不再推迟。在此阶段已经通过使用 printk_get_console_flush_type() 进一步简化了逻辑。
新的三分之一更改添加了 write_thread() 回调,实施了 kthreads,并更新了 procfs 和 sysfs 接口。
通过 printk 拉取请求为感兴趣的人提供更多详细信息。
转自 Printk Changes Submitted For Linux 6.12 Finish NBCON Console Preparations – Phoronix