1

處理器的上半部分可以完成或需要完成的事情是什麼?我發現中斷首先被禁止,但是當這樣做完成後,在處理當前中斷時不要錯過中斷(在同一個IRQ線路上)?Linux中的並行中斷處理

還是有人跟蹤丟失的中斷,以便在ISR結束時啓用中斷後可以處理這些中斷?

回答

2

關於共享中斷的一句話:共享中斷線應始終使用電平敏感設備,它們應該都是相同的電平(hi和low)。在邊沿觸發中斷的情況下,無法保證在一個器件觸發後,但在恢復到穩態之前,其他器件不會觸發。它變成了一個無法避免的競爭條件。

另一方面,電平觸發的中斷一直處於激活狀態,直到設備上觸發它的標誌被清除。在處理第一個設備時,如果第二個設備觸發,那麼它將等待IRQ線保持激活狀態,直到處理程序再次啓用IRQ線。

1

中斷處理程序應該儘可能小。

並不總是需要禁用中斷。一些體系結構與嵌套中斷一起工作。無論如何,如果你禁用中斷,你應該做一兩個命令,而不是更多。這會造成延遲並可能會中斷中斷。

當我處理中斷時,我通常會做兩件事情。一種是清除導致中斷的標誌。第二種是在之後觸發某些功能(tasklet,workqueue等)

請注意,在可能睡眠的中斷處理程序中不使用任何方法,如printf或獲取mutex

2

您應該正確地確認中斷以避免IRQ風暴。 處理中斷本身 - 如果你有一個大的工作要做,卸載到下半部分。

中斷禁用時會發生什麼情況:在x86上,cli指令禁用當前運行ISR的CPU上的中斷。一個IRQ被緩衝,所以當中斷通過sti被恢復時,它被交付。

當使用API​​C中斷時,緩衝發生在內核本身。內核確認APIC中斷,並在調用enable_irq時再次觸發它。