ここで、ブートチェーンは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
メモ:あなたの回答にコメントを付けようとしましたが、システムは初心者がコメントを追加することを許可していません。 :)