diff options
author | Anjali Singhai Jain <anjali.singhai@intel.com> | 2014-06-03 21:23:26 -0400 |
---|---|---|
committer | Jeff Kirsher <jeffrey.t.kirsher@intel.com> | 2014-06-24 21:19:20 -0400 |
commit | 327fe04bfb32642eee237e1cc1eaef16d6a4a0f5 (patch) | |
tree | 9f5c035aa3351c0648c671d79187f7486838523e /drivers/net/ethernet/intel | |
parent | 264ccc93b23ae654d3db37c3ebde1da6a2866e31 (diff) |
i40e: Bypass timeout recovery level 0 so as to not cause MDD
When a Tx hang happens, usually the Tx queue disable fails. At
this point if we try to recover by a VSI reinit the HW gets
unhappy and we get a Malicious Driver Detect (MDD) event.
HW expects a PF reset if a queue disable fails, if we don't do a PF
reset and restart the queue we get an MDD. This patch makes sure we
do a PF reset on Tx hang and that way we avoid any MDD because of Tx
queue disable failure.
Change-ID: I665ab6223577c788da857ee2132e733dc9a451e4
Signed-off-by: Anjali Singhai Jain <anjali.singhai@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'drivers/net/ethernet/intel')
-rw-r--r-- | drivers/net/ethernet/intel/i40e/i40e_main.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c index e2dbe0427cdf..50f9ab72c95f 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_main.c +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c | |||
@@ -278,7 +278,7 @@ static void i40e_tx_timeout(struct net_device *netdev) | |||
278 | pf->tx_timeout_count++; | 278 | pf->tx_timeout_count++; |
279 | 279 | ||
280 | if (time_after(jiffies, (pf->tx_timeout_last_recovery + HZ*20))) | 280 | if (time_after(jiffies, (pf->tx_timeout_last_recovery + HZ*20))) |
281 | pf->tx_timeout_recovery_level = 0; | 281 | pf->tx_timeout_recovery_level = 1; |
282 | pf->tx_timeout_last_recovery = jiffies; | 282 | pf->tx_timeout_last_recovery = jiffies; |
283 | netdev_info(netdev, "tx_timeout recovery level %d\n", | 283 | netdev_info(netdev, "tx_timeout recovery level %d\n", |
284 | pf->tx_timeout_recovery_level); | 284 | pf->tx_timeout_recovery_level); |
@@ -6826,6 +6826,8 @@ static int i40e_sw_init(struct i40e_pf *pf) | |||
6826 | pf->irq_pile->num_entries = pf->hw.func_caps.num_msix_vectors; | 6826 | pf->irq_pile->num_entries = pf->hw.func_caps.num_msix_vectors; |
6827 | pf->irq_pile->search_hint = 0; | 6827 | pf->irq_pile->search_hint = 0; |
6828 | 6828 | ||
6829 | pf->tx_timeout_recovery_level = 1; | ||
6830 | |||
6829 | mutex_init(&pf->switch_mutex); | 6831 | mutex_init(&pf->switch_mutex); |
6830 | 6832 | ||
6831 | sw_init_done: | 6833 | sw_init_done: |