2015-12-20 38 views
6

任何機構都可以說明爲什麼MSI中斷不能在linux中共享。爲什麼MSI中斷不共享?

基於PIN的中斷可以被設備共享,但MSI中斷不被設備共享,每個設備都有自己的MSI IRQ編號。爲什麼不能共享MSI中斷?

回答

4

中斷共享是由於資源限制而導致的,比如沒有足夠的物理IRQ線路用於每個需要關注的設備。如果中斷由具有大ID空間的消息表示,爲什麼要這樣做?

「那」意思是:給他們相同的身份,這樣設備就必須被探測出來,以確定哪些碰撞到相同ID的人實際上中斷了。實際上,我們有時希望對一個設備有多箇中斷。例如,如果中斷ID不僅告訴我們哪個設備因爲輸入到達或輸出緩衝器的消耗而中斷了原因,這很有用:如果中斷線是「便宜的」,因爲它們只是帶有許多位的軟件ID,我們可以擁有這些。

5

舊的INTx中斷具有兩個問題的性質:

  1. 每個的INTx信號需要在硬件單獨的信號線;和中斷信號獨立於其他數據信號,並且這是異步發送的。

的後果是

  1. 多個設備和驅動程序需要能夠共享中斷(中斷處理程序需要檢查其設備實際提出的中斷);和
  2. 當驅動程序收到中斷時,它需要讀取一些設備寄存器,以確保設備所做的任何先前的DMA寫入在CPU上可見。

通常情況下,兩種情況都由驅動程序讀取其設備的中斷狀態寄存器來處理。

消息信號中斷不需要單獨的信號線,而是通過數據總線作爲消息發送。這意味着相同的硬件可以支持更多的中斷(因此不需要共享),並且中斷消息會自動與任何DMA訪問同步。因此,中斷處理程序不需要做任何事情;中斷保證來自其設備,並且DMA的數據已經保證已經到達。

如果一些驅動程序被寫入共享一些MSI,中斷處理程序將再次檢查中斷是否實際來自它自己的設備,並且與INTx中斷沒有任何優勢。

MSI的不共享,因爲它不會是可能,但因爲它不是必要


請注意,共享的MSI實際上是可能的:從/proc/interrupts在此摘錄看出,高級錯誤報告,電源管理事件,以及熱插拔驅動器共享一箇中斷:

64:   0   0 PCI-MSI-edge  aerdrv, PCIe PME, pciehp 

這些驅動程序實際上是附着在相同設備,但他們仍然表現類似的INTx驅動程序,即註冊其中斷與IRQF_SHARED和中斷處理程序檢查它是否是他們自己的功能,所提出的中斷。

相關問題