我正在處理i2c-omap驅動程序的一個奇怪問題。我不確定問題是否在其他時間發生,但是當我嘗試關閉系統時發生了大約5%的問題。 在系統關機期間,我通過I2C寫入PMIC中的某些寄存器。在i2c-omap.c中,我可以看到調用線程正在等待wait_for_completion_timeout,超時值設置爲1秒。我可以看到稱爲「完整」的IRQ(我在完成後添加了printk)。但是,在「完成」被調用之後,wait_for_completion_timeout沒有返回。相反,它在返回之前最多需要5分鐘。 wait_for_completion_timeout的返回值爲正數,表示沒有超時。整個I2C交易成功了。Linux內核的wait_for_completion_timeout未完全喚醒
與此同時,我可以看到來自其他驅動程序的printk消息。串口控制檯仍然可以工作。它在Android上,如果我使用「top」,我可以看到system_server佔用了大約95%的CPU。 kill system_server可以立即返回wait_for_completion_timeout。
所以我的問題是用戶空間應用程序(system_server)可以做什麼來使內核「wait_for_completion_timeout」不被喚醒?
謝謝!
你能粘貼相關的代碼嗎? – Harman
事情是我不知道什麼是「有關」。代碼調用wait_for_completion並且大部分時間完成。這很少發生。 :( –