2

マルチコアシステムでシステムデッドロックを引き起こしているキャラクターデバイスドライバーがあります。書き込み呼び出しには、スピンロック(spin_lock_irqsave)によって保護されたクリティカルセクションがあります。ISRは、タスクを完了するためにもこのロックを取得する必要があります。書き込みが別のコアでクリティカルセクションを実行しているときにISRが1つのコアで呼び出されると、ウォッチドッグタイマーがISRのコアでのハードロックアップを検出したためにパニックが発生します。書き込みプロセスは、実行を終了するために戻ることはありません。書き込みプロセスはそのコアで実行を継続するべきではありません。ロックを解除すると、ISR内の他のコアが実行できるようになりますか?

クリティカルセクションを完了するには、約5usが必要です。ハードロックは5秒後に発生します。

私は何か間違ったことをしていると思いますが、何がわからないのです。

助けに感謝します!

4

1 に答える 1

0

クリティカルセクションがwait_for_completion_timeoutを呼び出していたことが判明しました。タイムアウトがゼロであったとしても、ブロッキングセクションで割り込みが発生した場合、タイムアウトはスリープ状態になり、スピンロックを解放するためにウェイクアップしませんでした。この場合にtry_wait_for_completionを使用すると、問題が解決しました。

ソースを投稿したと思いますが、多くのモジュールにまたがっており、オペレーティングシステム間の移植性のためのアーキテクチャの抽象化があります。混乱していたでしょう。

于 2012-11-01T23:49:33.167 に答える