次のメッセージの意味を理解しようとしています。
irq N:nobody cared (try booting with the "irqpoll" option)
これは、IRQハンドラーが割り込みを受け取っても応答を処理しないことを意味しますか?または、スケジューラーがirqハンドラーを呼び出せなかったということですか?
これはどのような状態で起こっていますか?
次のメッセージの意味を理解しようとしています。
irq N:nobody cared (try booting with the "irqpoll" option)
これは、IRQハンドラーが割り込みを受け取っても応答を処理しないことを意味しますか?または、スケジューラーがirqハンドラーを呼び出せなかったということですか?
これはどのような状態で起こっていますか?
これは、そのirqにハンドラーが登録されていないか、共有割り込みの場合にirqが(彼がサポートしているハードウェアから)彼のためではなかったことを示すステータスが返されるハンドラーが、おそらく障害のあるHW/FWまたはバグのあるドライバーであることを意味します
理想的には、上記のメッセージの後にスタックトレースが続く必要があります。これは、問題の原因となっているサブシステムを特定するのに役立ちます。このメッセージは、オーバーヘッドが原因で割り込みハンドラがスタックし、戻ってこなかったため、システムがIRQ#Xを無効にしたことを意味します。これは、バグのあるファームウェアの場合に見られます。
このirqpoll
オプションをgrub.confに追加する必要があります。つまり、割り込みが処理されない場合は、既知のすべての割り込みハンドラーで適切なハンドラーを検索し、各タイマー割り込みのすべてのハンドラーをチェックします。これは、ファームウェアが壊れているシステムを実行する場合に役立つことがあります。grub.confのカーネルコマンドラインは次のようになります。
カーネル/vmlinuz-バージョンroroot= / dev/sda1静かなirqpoll
最小限の実行可能なQEMUの例
QEMUには、edu
割り込みを生成するという教育用デバイスがあり、これを探索するのに最適です。
まず、割り込みを正しく処理する最小限のLinuxPCIデバイスドライバーを作成しました。
これで、コメントアウトしてコードからエラーを簡単に生成できrequest_irq
ますfree_irq
。
次に、IRQを生成するユーザーランドプログラムを実行すると、次のようになります。
irq 11: nobody cared (try booting with the "irqpoll" option)
スタックトレースが続きます。
他の人が述べたように:未処理のIRQ。
私の場合、ネットワークカードに短期間に数十億のエラーが発生したため、ドライバをリロードした後です。
modprobe -r ixgbe && modprobe ixgbe
lspciは、「カード」が使用されていた未知のデバイスを示しました
再起動後、カードは消え、二度と表示されなくなりました。
そのため、エラーはハードウェアの障害も示している可能性があります。
ここを参照してください:
static inline int bad_action_ret(irqreturn_t action_ret)
{
if (likely(action_ret <= (IRQ_HANDLED | IRQ_WAKE_THREAD)))
return 0;
return 1;
}