e1000e驅動的MSI中斷測試

2021-09-10 23:56:33 字數 2443 閱讀 9032

本文主要講述一下e1000e網絡卡驅動的msi中斷測試,以及對通過proc檔案(/proc/irq/目錄)設定的中斷引數所造成的影響。

intel網絡卡e1000e驅動的open函式e1000_open,會測試msi中斷。所以每次在使能網絡卡時,都會進行中斷測試。intel的其它網絡卡如e1000等驅動沒有此項測試功能。由**中的注釋可知,是由於pcie的一些問題導致晶元忽略掉e1000e的msi訊息,才必須進行的測試。

static int e1000_open(struct net_device *netdev)

}

核心測試函式為e1000_test_msi_interrupt。首先清除原有申請的中斷(e1000_free_irq),並且重置msi中斷設定,其次重新申請乙個專門用於測試的中斷(pci_enable_msi),並且註冊乙個測試用中斷處理函式(e1000_intr_msi_test);最後在測試完成之後,申請乙個正常工作所用中斷(e1000_request_irq)。

static int e1000_test_msi_interrupt(struct e1000_adapter *adapter)

else

e1000e_set_interrupt_capability(adapter);

return e1000_request_irq(adapter);

}

msi中斷測試用的標誌為flag_msi_test_failed。在測試開始前置位flag_msi_test_failed,緊接著主動出發乙個e1000_icr_rxseq的接收序列錯誤的中斷,等待100毫秒之後,判斷flag_msi_test_failed標誌是否清除。其標誌在msi測試中斷處理函式e1000_intr_msi_test中清除,所以在正常觸發了中斷處理函式後,此標誌就會被清除。

static irqreturn_t e1000_intr_msi_test(int __always_unused irq, void *data)

}

接下來看一下在此過程中,proc檔案中的中斷配置發生的變化。首先在中斷關閉過程中,e1000_free_irq函式最終呼叫到__free_irq函式,其將刪除proc檔案中的中斷配置目錄,例如中斷號為36,其proc檔案目錄/proc/irq/36/將被刪除,中斷36相關的配置將全部消失,如中斷的cpu核親和性配置smp_affinity等將消失。

static void e1000_free_irq(struct e1000_adapter *adapter)

static struct irqaction *__free_irq(unsigned int irq, void *dev_id)

另外中斷重置函式e1000e_reset_interrupt_capability,將會釋放msi中斷號,關閉msi中斷功能,恢復原傳統的中斷線的中斷號,default_irq變數中儲存著msi開啟之前的中斷號。

void e1000e_reset_interrupt_capability(struct e1000_adapter *adapter)

}void pci_disable_msi(struct pci_dev *dev)

void pci_msi_shutdown(struct pci_dev *dev)

重新註冊中斷處理函式request_irq將會建立全新的中斷proc檔案,具體為/proc/irq/目錄下建立以中斷號為名稱的新目錄,例如中斷號為36,新目錄為/proc/irq/36/。

int request_threaded_irq(unsigned int irq, irq_handler_t handler, irq_handler_t thread_fn, ...)

static int __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)

通過在__setup_irq函式中呼叫register_irq_proc函式實現。此時建立的中斷配置將是系統預設的配置引數。例如smp_affinity引數,預設使用全域性變數irq_default_affinity,其在系統初始化時被設定為所有可用的cpu核。

void register_irq_proc(unsigned int irq, struct irq_desc *desc)

static void __init init_irq_default_affinity(void)

至此結論是,對於e1000e驅動的網絡卡,由於msi中斷測試的存在,如果通過proc檔案改變了中斷的smp_affinity引數,在關閉/重新使能(ifconfig eth0 down/up)網路介面操作後,smp_affinity的配置將丟失。

核心版本:linux-4.15

Linux e1000e網絡卡驅動

目錄 這樣減少了系統中斷的負載並能降低cpu利用率,但是會增加處理報文的延遲。驅動預設是假定interruptthrottlerate的值是8000,綜合來看,這對所有流量型別的報文都是很好的,但是缺乏對小報文的效能和延遲。硬體每秒能處理更多的小報文,由此乙個自適應的中斷調節演算法就應運而生了。驅動...

解決Ubuntu e1000e無法驅動無法上網問題

3 sudo tar zvxf 檔名 4 cd e10001e src 5 make install。筆者第一次執行後,此步會讓找原始碼樹的version.h。經過反覆試驗,發現重新安裝官網系統後成功執行 若執行成功,則可cd lib modules updates drivers net ethe...

crc 校驗錯誤 E2E中的CRC是怎樣計算的

e2e end to end 是autosar規範裡規定的一種用於保證資料傳輸正確的概念,屬於功能安全範疇。下面的例子可以簡單介紹e2e的工作機制,假設汽車內有兩個ecu,a和b,兩個節點之間通過can匯流排進行通訊,a節點要將某一安全相關的資料 比如汽車車速訊號,油門踏板訊號等 傳給b節點,這裡我...