2014-04-22 103 views
0

我有一個安裝和工作fine.However一個FPGA卡PCI驅動程序,我們有必要清理我們系統無需重新啓動,其中包括卸載此驅動程序。多裝載和PCI驅動程序卸載使其/ SYS /總線/ PCI /設備/ XXX目錄消失

當再次啓動(無需重新啓動)所述驅動器被重新安裝。我發現,當我多次執行此過程(安裝/卸載)時,在第5次卸載驅動程序時,與設備關聯的目錄就消失了。

lspci命令不再能找到,因爲一個壞的鏈接我的設備。我必須重新啓動才能使設備目錄(/sys/bus/pci/devices/00000:04:00.0)再次顯示。

通過一些實驗並將驅動程序降低到最低限度,我發現如果我沒有在我的pci_probe_method中調用pci_enable_device(..)函數,那麼我可以多次安裝/卸載驅動程序而不會出錯。

當然,我需要調用這個方法之前,我可以做的任何設備,但我想,以確保它是不是其他更復雜的初始化我做的是造成問題的。

我已經驗證了我對pci_disable_device()呼叫被稱爲在pci_remove_method()。我應該能夠無限期地啓用和禁用PCI設備,對吧?任何幫助搞清楚發生了什麼,將不勝感激。

回答

0

實際的解決這個問題是消除外來呼叫我不得不pci_dev_put(..)。提交問題之前我沒有注意到這一點。這是從此驅動程序未使用pci_probe()方法發現此設備時剩餘的。因此,在退出例程中執行此調用會導致此設備的結構在5次調用後消失。所以現在這個問題解決了。