2015-03-13 44 views
2

我經歷了以下驅動程序爲什麼在連接ISR之前全局禁用中斷?

/drivers/net/ethernet/smsc/smsc911x.c 

裏面的探測功能的探測功能已經評論說

/* Ensure interrupts are globally disabled before connecting ISR */ 

    smsc911x_disable_irq_chip(dev); 

    retval = request_irq(dev->irq, smsc911x_irqhandler, 
         irq_flags | IRQF_SHARED, dev->name, dev); 

但我不認爲這是真正的每個案件其他設備驅動程序,那麼爲什麼這是特定的網絡驅動程序?

爲什麼中斷在連接ISR之前全局禁用?

+0

我不知道@Miline在說什麼,但是如果你閱讀了代碼,你很容易得到'smsc911x_disable_irq_chip()'在**設備端禁用中斷**這是一個很好的解決方案,如果你不太確定哪個狀態設備在你調用' - > probe()'之前。 – 0andriy 2015-03-13 17:12:16

+1

是的,安迪是正確的,它禁用設備上的中斷,而不是'disable_irq()'整個irq行。由於irq線是共享的,你真的不能'disable_irq()'。 作爲一個共享irq,司機應該準備好立即發生。因此,即使您正在將ISR分配給IRQ,中斷實際上也可能發生,並且在查看屬於您的dev_id「dev」之後,您將不得不爲某個中斷執行某些操作,至少忽略該中斷。 – 2015-03-19 13:03:02

回答

0

該評論指出,全局中斷被禁用;但是在下面的函數調用中,只有smsc驅動程序附加到的設備纔會禁用中斷。這通常是爲了避免在驅動程序準備處理中斷之前避免中斷。由於這是用於以太網驅動程序,所以在接口連接期間很可能會啓用中斷。 有問題的代碼片段在模塊加載期間即在接口啓動之前執行。

相關問題