|
@@ -1931,6 +1931,9 @@ static irqreturn_t e1000_intr_msix_tx(int __always_unused irq, void *data)
|
|
|
/* Ring was not completely cleaned, so fire another interrupt */
|
|
|
ew32(ICS, tx_ring->ims_val);
|
|
|
|
|
|
+ if (!test_bit(__E1000_DOWN, &adapter->state))
|
|
|
+ ew32(IMS, adapter->tx_ring->ims_val);
|
|
|
+
|
|
|
return IRQ_HANDLED;
|
|
|
}
|
|
|
|
|
@@ -2020,12 +2023,8 @@ static void e1000_configure_msix(struct e1000_adapter *adapter)
|
|
|
ew32(IVAR, ivar);
|
|
|
|
|
|
/* enable MSI-X PBA support */
|
|
|
- ctrl_ext = er32(CTRL_EXT);
|
|
|
- ctrl_ext |= E1000_CTRL_EXT_PBA_CLR;
|
|
|
-
|
|
|
- /* Auto-Mask Other interrupts upon ICR read */
|
|
|
- ew32(IAM, ~E1000_EIAC_MASK_82574 | E1000_IMS_OTHER);
|
|
|
- ctrl_ext |= E1000_CTRL_EXT_EIAME;
|
|
|
+ ctrl_ext = er32(CTRL_EXT) & ~E1000_CTRL_EXT_IAME;
|
|
|
+ ctrl_ext |= E1000_CTRL_EXT_PBA_CLR | E1000_CTRL_EXT_EIAME;
|
|
|
ew32(CTRL_EXT, ctrl_ext);
|
|
|
e1e_flush();
|
|
|
}
|