導讀 | 最近,社區在清理?Linux?上的 Intel/AMD x86 CPU 微代碼加載方面做了大量的工作,這些工作現已合并到 Linux 6.7 中。 |
由于在啟動時加載 CPU 微代碼對于減少不斷出現的新 CPU 安全漏洞以及有時解決功能問題非常重要,Thomas Gleixner 最近開始清理 x86 CPU 微代碼加載功能,并在此過程中進行了各種改進。
Linux 6.7 中對 x86 微代碼加載的一些改進包括:在啟用分頁之前不在 32 位上加載微代碼,以避免各種問題;重新修改 CPU 微代碼的后期加載;后期加載的微代碼現在對 CPU 熱插拔操作更友好;以及確定后期微代碼加載何時被認為是安全的最小微代碼版本概念。
x86 處理器/微代碼的亮點總結如下:
– 重組所需的代碼,并在 32 位上添加臨時 initrd 映射,以便加載器可以訪問微碼 Blob。這本身就是為下一個重大改進做準備:
– 在啟用分頁之前,不要在 32 位加載微代碼。在過去,處理這個問題會帶來無盡的麻煩、問題、難看的代碼和不必要的破解。而且從一開始就沒有任何合理的理由這樣做。因此,將 32 位加載改為在啟用分頁后進行,并再次將加載器代碼變得”真正純凈”。
– 在英特爾系統中放棄混合微碼步進加載–在整個系統中加載一個補丁就足夠了
– 重新設計后期加載,跟蹤哪些 CPU 已成功更新微代碼,哪些尚未更新,并采取相應行動
– 將英特爾上的后期微代碼加載移至 NMI 上下文,以確保所有線程上的并發加載
– 使后期加載對 CPU 熱插拔安全,并為更新目的喚醒脫機線程
– 增加對最小修訂版的支持,以確定后期微代碼加載在機器上是否安全,并且微代碼不會更改機器無法使用的軟件可見功能,因為功能檢測已經發生。粗略地說,最小版本號是系統當前必須加載的最小版本號,以便允許后期更新。
– 其他一些很好的清理、修復等。
這些改進已合并到 Linux 6.7 中:
https://lore.kernel.org/lkml/20231103110600.GAZUTUGFjhoLm1KZzE@fat_crate.local/