中斷處理程序異步發生,因此不能被其他函數調用。那麼,爲什麼linux內核中的中斷處理程序返回一個值呢?輸入參數如何傳遞給它?Linux內核中的中斷處理程序的返回值
1
A
回答
3
由於幾個原因,中斷處理程序具有返回值。
- 中斷向量可以在多個設備之間共享。通過返回IRQ_NONE/IRQ_HANDLED,中斷處理程序可以指示中斷是否來自它特別感興趣的設備。如果返回IRQ_NONE,則應該調用列表中的下一個處理程序。
- 即使不共享IRQ,中斷處理程序也可以向中斷子系統指出處理中斷時出現了問題,並且應該禁用它以防止系統從irq循環掛起。
1
中斷處理程序不是中斷向量。中斷向量是觸發中斷時處理器跳轉到的代碼。這是一個粗略的簡化,但這裏是它的外觀:
interrupt_vector {
num = check_interrupt_number()
f = get_interrupt_handler_func(num);
d = get_interrupt_handler_data(num);
/* call interrupt handler */
ret = f(d);
}
所以處理程序和數據一起登記,並中斷向量代碼調用registererd處理程序,通過註冊數據,並檢查返回值。 當然,這裏我們只有一級處理程序,但是您可以有多個處理程序,例如所有PCI Irq的處理程序,它們輪流檢查特定PCI irq的註冊處理程序,並最終調用它以傳遞註冊數據等。 ..
當然,真正的代碼往往要複雜得多。您可以嘗試使用lxr link來瀏覽Linux內核源代碼。
0
中斷矢量代碼與多個附接的中斷處理程序(OS特定的)到一個中斷處理程序—可以返回一個值(其通常進入像EAX在x86的寄存器),因此,矢量碼可以管理一連串的處理程序。
相關問題
- 1. PCIe中斷處理linux內核
- 2. Linux分頁和中斷處理程序
- 3. 內核模塊編程(中斷處理程序)
- 4. linux內核中斷劫持
- 5. 如何用Linux內核中的用戶定義處理程序替換缺省處理程序,該處理程序處理生成核心轉儲的異常?
- 6. 映射Linux內核中的DMA中斷
- 7. GPIO引腳linux中的中斷處理程序(arm)
- 8. Linux內核編程:「無法處理內核NULL指針引用」
- 9. Linux中的並行中斷處理
- 10. 在中斷處理程序
- 11. jquery事件處理程序返回值
- 12. 完成處理程序和返回值
- 13. 在Linux內核中跟蹤中斷
- 14. linux的arm中斷處理程序在哪裏?
- 15. 如何從承諾中的事件處理程序返回值?
- 16. 如何從iOS中的TWRequestHandler完成處理程序返回值?
- 17. 在異常處理程序內部創建的Linux內核線程停止
- 18. 在Linux內核中攔截異常處理程序的最佳實踐
- 19. Linux內核進程管理
- 20. 中斷處理Linux和待處理中斷
- 21. 處理SweetAlert2中的AJAX返回值
- 22. linux內核中的單處理器上的信號量
- 23. 在linux中的中斷處理。中斷共享
- 24. Linux內核硬件斷點
- 25. Linux內核中用於信號處理的棧幀
- 26. Linux內核中的系統調用錯誤處理
- 27. Linux內核3.9 KVM for ARM處理器
- 28. 返回值處理
- 29. Linux內核 - kthread_stop總是返回-EINTR?
- 30. Linux內核:udelay()返回得太早?
`IRQ_WAKE_THREAD`也可用於延遲處理更新的Linux內核。也就是說,它表示當前進程可能被中斷以執行中斷的一個*慢*部分。 – 2014-11-19 20:57:27