i2c-omap ドライバーの奇妙な問題に取り組んでいます。問題が他のときに発生するかどうかはわかりませんが、システムの電源を切ろうとしたときに約 5% 発生します。システムの電源オフ時に、I2C 経由で PMIC のいくつかのレジスタに書き込みます。i2c-omap.c では、呼び出しスレッドがタイムアウト値を 1 秒に設定して wait_for_completion_timeout で待機していることがわかります。そして、「完了」と呼ばれる IRQ を確認できます (「完了」の後に printk を追加しました)。ただし、「完了」が呼び出された後、wait_for_completion_timeout が返されませんでした。代わりに、戻るまでに最大 5 分かかります。また、wait_for_completion_timeout の戻り値は正であり、タイムアウトがないことを示します。そして、I2C トランザクション全体が成功しました。
その間、他のドライバーからの printk メッセージを確認できます。また、シリアル コンソールは引き続き動作します。これは Android 上にあり、「top」を使用すると、system_server が CPU の約 95% を使用していることがわかります。system_server を強制終了すると、wait_for_completion_timeout がすぐに戻る可能性があります。
だから私の質問は、カーネル「wait_for_completion_timeout」がウェイクアップしないようにするために、ユーザー空間アプリ (system_server) ができることは何ですか?
ありがとう!