mirror of
https://github.com/adulau/aha.git
synced 2024-12-27 19:26:25 +00:00
igbvf: avoid reset storms due to mailbox issues
From: Alexander Duyck <alexander.h.duyck@intel.com> This change makes it so that reset/interrupt storms can be avoided when there are mailbox issues. The new behavior is to only allow the device to trigger mailbox related resets only once every 10 seconds. Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
fef45f4ce2
commit
7227909340
2 changed files with 8 additions and 1 deletions
|
@ -276,6 +276,7 @@ struct igbvf_adapter {
|
||||||
unsigned long led_status;
|
unsigned long led_status;
|
||||||
|
|
||||||
unsigned int flags;
|
unsigned int flags;
|
||||||
|
unsigned long last_reset;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct igbvf_info {
|
struct igbvf_info {
|
||||||
|
|
|
@ -1469,6 +1469,8 @@ static void igbvf_reset(struct igbvf_adapter *adapter)
|
||||||
memcpy(netdev->perm_addr, adapter->hw.mac.addr,
|
memcpy(netdev->perm_addr, adapter->hw.mac.addr,
|
||||||
netdev->addr_len);
|
netdev->addr_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
adapter->last_reset = jiffies;
|
||||||
}
|
}
|
||||||
|
|
||||||
int igbvf_up(struct igbvf_adapter *adapter)
|
int igbvf_up(struct igbvf_adapter *adapter)
|
||||||
|
@ -1812,11 +1814,15 @@ static bool igbvf_has_link(struct igbvf_adapter *adapter)
|
||||||
s32 ret_val = E1000_SUCCESS;
|
s32 ret_val = E1000_SUCCESS;
|
||||||
bool link_active;
|
bool link_active;
|
||||||
|
|
||||||
|
/* If interface is down, stay link down */
|
||||||
|
if (test_bit(__IGBVF_DOWN, &adapter->state))
|
||||||
|
return false;
|
||||||
|
|
||||||
ret_val = hw->mac.ops.check_for_link(hw);
|
ret_val = hw->mac.ops.check_for_link(hw);
|
||||||
link_active = !hw->mac.get_link_status;
|
link_active = !hw->mac.get_link_status;
|
||||||
|
|
||||||
/* if check for link returns error we will need to reset */
|
/* if check for link returns error we will need to reset */
|
||||||
if (ret_val)
|
if (ret_val && time_after(jiffies, adapter->last_reset + (10 * HZ)))
|
||||||
schedule_work(&adapter->reset_task);
|
schedule_work(&adapter->reset_task);
|
||||||
|
|
||||||
return link_active;
|
return link_active;
|
||||||
|
|
Loading…
Reference in a new issue