Index: sys/dev/e1000/if_em.c =================================================================== --- sys/dev/e1000/if_em.c +++ sys/dev/e1000/if_em.c @@ -1495,7 +1495,6 @@ { struct adapter *adapter = arg; u32 reg_icr; - bool notlink = false; ++adapter->link_irq; MPASS(adapter->hw.back != NULL); @@ -1506,17 +1505,14 @@ if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) em_handle_link(adapter->ctx); - else - notlink = true; - /* Re-arm for other/spurious interrupts */ - if (notlink && adapter->hw.mac.type >= igb_mac_min) { + /* Re-arm unconditionally */ + if (adapter->hw.mac.type >= igb_mac_min) { E1000_WRITE_REG(&adapter->hw, E1000_IMS, E1000_IMS_LSC); E1000_WRITE_REG(&adapter->hw, E1000_EIMS, adapter->link_mask); } else if (adapter->hw.mac.type == e1000_82574) { - if (notlink) - E1000_WRITE_REG(&adapter->hw, E1000_IMS, E1000_IMS_LSC | - E1000_IMS_OTHER); + E1000_WRITE_REG(&adapter->hw, E1000_IMS, E1000_IMS_LSC | + E1000_IMS_OTHER); /* * Because we must read the ICR for this interrupt it may * clear other causes using autoclear, for this reason we @@ -1524,7 +1520,8 @@ */ if (reg_icr) E1000_WRITE_REG(&adapter->hw, E1000_ICS, adapter->ims); - } + } else + E1000_WRITE_REG(&adapter->hw, E1000_IMS, E1000_IMS_LSC); return (FILTER_HANDLED); } @@ -1873,13 +1870,6 @@ if (hw->mac.type < em_mac_min) lem_smartspeed(adapter); - else if (hw->mac.type >= igb_mac_min && - adapter->intr_type == IFLIB_INTR_MSIX) { - E1000_WRITE_REG(&adapter->hw, E1000_IMS, E1000_IMS_LSC); - E1000_WRITE_REG(&adapter->hw, E1000_EIMS, adapter->link_mask); - } else if (hw->mac.type == e1000_82574 && - adapter->intr_type == IFLIB_INTR_MSIX) - E1000_WRITE_REG(hw, E1000_IMS, E1000_IMS_LSC | E1000_IMS_OTHER); } static void