围绕原子控制台和线程打印的 Linux 工作仍在进行中。这项工作特别有趣,因为它是实时 “RT “内核支持落地前的最后一个主要障碍。遗憾的是,这项工作还没有为新的 Linux 6.9 周期做好准备,但至少在原子控制台工作中发现的一些打印问题已经得到了解决。
由于围绕线程打印和原子控制台的持续工作,Linux 6.9 中的 printk 代码得到了一些清理,并具有更好的健壮性。SUSE 的 Petr Mladek 在拉取请求中解释说:
6.9 版的 Printk 更改改善了恐慌时的行为。这些问题是在测试引入原子控制台和 printk kthreads 的持续变更时发现的。
– pr_flush()必须等待最后一条保留记录,而不是最后一条最终确定的记录。请注意,当多个 CPU 并行生成记录时,记录的最终处理顺序是随机的。
– 在 panic() 过程中,忽略未最终确定的记录。在 panic-CPU 上打印的信息总是最终确定的。当 CPU 停止运行时,其他 CPU 打印的信息可能永远不会定稿。
– 完全阻止非 panic CPU 上的新 printk() 调用。在进入恐慌模式之前会打印回溯信息。之后的信息只会扰乱由恐慌 CPU 打印的信息。
– 在 console_flush_on_panic() 中完全不使用 console_lock。当调度程序中发生 panic() 时,解锁部分可能会导致死锁。
– 修正 32 位原子操作的 64 位序列号转换。
该 printk 工作已在 Linux 6.9 中合并。希望原子/无阻塞控制台工作能在今年完成,并在 2024 年看到实时内核代码最终进入 Linux 内核主线
转自 Linux 6.9 Cleans Up Printk Code While Preparing For Atomic Consoles – Phoronix