|
@@ -2290,7 +2290,9 @@ static void igb_watchdog_task(struct work_struct *work)
|
|
|
struct igb_ring *tx_ring = adapter->tx_ring;
|
|
|
struct e1000_mac_info *mac = &adapter->hw.mac;
|
|
|
u32 link;
|
|
|
+ u32 eics = 0;
|
|
|
s32 ret_val;
|
|
|
+ int i;
|
|
|
|
|
|
if ((netif_carrier_ok(netdev)) &&
|
|
|
(rd32(E1000_STATUS) & E1000_STATUS_LU))
|
|
@@ -2392,7 +2394,13 @@ link_up:
|
|
|
}
|
|
|
|
|
|
/* Cause software interrupt to ensure rx ring is cleaned */
|
|
|
- wr32(E1000_ICS, E1000_ICS_RXDMT0);
|
|
|
+ if (adapter->msix_entries) {
|
|
|
+ for (i = 0; i < adapter->num_rx_queues; i++)
|
|
|
+ eics |= adapter->rx_ring[i].eims_value;
|
|
|
+ wr32(E1000_EICS, eics);
|
|
|
+ } else {
|
|
|
+ wr32(E1000_ICS, E1000_ICS_RXDMT0);
|
|
|
+ }
|
|
|
|
|
|
/* Force detection of hung controller every watchdog period */
|
|
|
tx_ring->detect_tx_hung = true;
|