2014-12-02 85 views
0

我們有一個ISR可以在任何可用的內核上執行,並且可能根據內核是忙還是空閒而導致成功或失敗條件。在處理程序中,我們使用queue_work_on()函數對每個核心的工作隊列進行排隊。對於每個核心,queue_work_on()函數將被調用,並且基於queue_work_on()的返回值,我們如何通過ISR返回值IRQ_HANDLED,IRQ_NONE由於多核系統中的調度程序超時導致進程掛起

如何處理queue_work_on函數中的任何一個失敗以及如何返回ISR值。

希望我提供了足夠的上下文來獲得一些觀點。

編輯:

情景更像是: 我們有例如由多個進程消耗的1024個隊列用於由主機驅動程序執行一些卸載功能。在提交卸載後,進程會被wait_for_completion()調用阻塞,理想情況下應該通過完成通知來喚醒進程。在驅動程序卸載的環中排隊並基於卸載成功,isr會通知工作線程使隊列作業出列並觸發完成事件。 現在我們看到更多的完成事件,而不是等待進程導致掛起TASK_UNITERRUPTIBLE狀態的進程導致計劃程序超時。需要一些指針來在多核系統中部署可能的同步

回答

0

當您得到一個實際來自您的設備的中斷請求時,您的一定不能返回IRQ_NONE。其結果是內核認爲你的設備的中斷線卡住了,並且禁用了設備。

如果您不知道在哪個CPU內核上排隊某些工作,請使用queue_work()獲取下一個空閒內核。

+0

感謝您的回覆。我嘗試了這個建議,但沒有什麼區別:( 方案更像是:我們有1024個隊列,這些隊列被多個進程用於執行主驅動程序的卸載功能 – 2014-12-02 15:42:44

+0

感謝您的迴應,我嘗試了這個建議,但沒有任何區別: ( 請參閱編輯後的查詢,詳細瞭解場景和相關問題。 希望能夠幫助您提供更多相關指示,以進一步探索。 – 2014-12-02 15:54:36

相關問題