5.4 6.1カーネルでkexecを実行すると、x86のLinuxカーネルにソート例外が発生し、パニックが発生します。

5.4 6.1カーネルでkexecを実行すると、x86のLinuxカーネルにソート例外が発生し、パニックが発生します。

ここで、ブートチェーンはEFIスタブを使用して構築されたUEFI - > 6.1.14カーネルであり、initramfsは5.4.109カーネルをロードして確認してからexecします。 CPUは2コアIntel Atom N6210です。このように起動すると、5.4カーネルは起動時に2番目のCPUを解放するとすぐにソート例外が発生します。 EFIから起動するか、5.4.109カーネルからkexecを介して起動すると、同じカーネルイメージが正常に動作します。

答え1

これが原因であることが判明しました分割ロック検出

6.1カーネルでは、このCPUでIntel分割ロック検出が有効になっています。アトミック操作がキャッシュラインにまたがるたびにソート例外が発生します。最新のカーネル(このカーネルなど)では、これが発生すると、起動時間の設定によって警告、エラー、パニック、または速度が低下します。

これは通過しますkexec。この問題は、以前のカーネルがアクティブであることを知らず、ソートチェック例外ハンドラがパニック状態になり、古いカーネルがまだ分割ロックの使用を削除していないために発生します。

split_lock_detect=off(ブートローダがないため)コンパイルされたコマンドラインに追加(リンクされた記事を参照)しようとしましたが、分割ロック検出を設定するコードがコンパイルされたコマンドラインを導入するコードよりも先に実行されるようです。それにもかかわらず、アクティブなままです。

だから私のアプリケーションの場合arch/x86/kernel/cpu/intel.c

これは奇妙な質問なので、他の人に役立つようにStack Exchangeに投稿したいと思いました。

答え2

私はしばらく前にこの問題を見て、kexecing前にsldを無効にするパッチがあります。

https://github.com/hengchiehhuang/linux/commit/3e49acca98335c8969fa8af438fddbb8335e5b3c

メモ:あなたの回答にコメントを付けようとしましたが、システムは初心者がコメントを追加することを許可していません。 :)

関連情報