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之前全局禁用?
我不知道@Miline在說什麼,但是如果你閱讀了代碼,你很容易得到'smsc911x_disable_irq_chip()'在**設備端禁用中斷**這是一個很好的解決方案,如果你不太確定哪個狀態設備在你調用' - > probe()'之前。 – 0andriy 2015-03-13 17:12:16
是的,安迪是正確的,它禁用設備上的中斷,而不是'disable_irq()'整個irq行。由於irq線是共享的,你真的不能'disable_irq()'。 作爲一個共享irq,司機應該準備好立即發生。因此,即使您正在將ISR分配給IRQ,中斷實際上也可能發生,並且在查看屬於您的dev_id「dev」之後,您將不得不爲某個中斷執行某些操作,至少忽略該中斷。 – 2015-03-19 13:03:02