mirror of https://gitee.com/openkylin/linux.git
igb: force all queues to interrupt once every 2 seconds
Set the EICS bit for each of the RX queues at least once every 2 seconds to prevent the rx queues from stalling. Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com> Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
This commit is contained in:
parent
a866bbf6aa
commit
7a6ea550f2
|
@ -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 @@ static void igb_watchdog_task(struct work_struct *work)
|
|||
}
|
||||
|
||||
/* 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;
|
||||
|
|
Loading…
Reference in New Issue