1
我是新來的Linux設備驅動程序編寫,我試圖做一個處理UART芯片的設備驅動程序。爲此我決定使用工作問題作爲我的下半部分處理,因爲在處理從UART芯片獲得的數據時我必須使用一些信號量。 在中斷之前調度的工作隊列處理程序現在得到執行,並且在執行期間它將睡眠在信號量處。在此期間,再次調用中斷處理程序並調度相同的工作隊列處理程序。工作隊列處理程序在第一次執行完成之前是否會再次執行?Linux工作隊列如何工作?
謝謝。
我是新來的Linux設備驅動程序編寫,我試圖做一個處理UART芯片的設備驅動程序。爲此我決定使用工作問題作爲我的下半部分處理,因爲在處理從UART芯片獲得的數據時我必須使用一些信號量。 在中斷之前調度的工作隊列處理程序現在得到執行,並且在執行期間它將睡眠在信號量處。在此期間,再次調用中斷處理程序並調度相同的工作隊列處理程序。工作隊列處理程序在第一次執行完成之前是否會再次執行?Linux工作隊列如何工作?
謝謝。
工作隊列的默認行爲是允許在不同的CPU上併發執行。有一個標誌WQ_NON_REENTRANT改變了這種行爲。更多信息可以在這個帖子http://lwn.net/Articles/403891/
中查到,但是似乎在最近的內核工作隊列是不可重入默認 - 見 http://lwn.net/Articles/511190