| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
- From: Martyna Szapar <[email protected]>
- Date: Tue, 7 Aug 2018 17:11:23 -0700
- Subject: [PATCH] i40e: Fix for Tx timeouts when interface is brought up if DCB
- is enabled
- If interface is connected to switch port configured for DCB there are
- TX timeouts when bringing up interface. Problem started appearing after
- adding in i40e driver code mqprio hardware offload mode. In function
- i40e_vsi_configure_bw_alloc was added resetting BW rate which should
- be executing when mqprio qdisc is removed but was also when there was
- no mqprio qdisc added and DCB was enabled. In this patch was added
- additional check for DCB flag so now when DCB is enabled the correct
- DCB configs from before mqprio patch are restored.
- Signed-off-by: Martyna Szapar <[email protected]>
- Tested-by: Andrew Bowers <[email protected]>
- Signed-off-by: Jeff Kirsher <[email protected]>
- Signed-off-by: Thomas Lamprecht <[email protected]>
- ---
- drivers/net/ethernet/intel/i40e/i40e_main.c | 15 ++++++++-------
- 1 file changed, 8 insertions(+), 7 deletions(-)
- diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
- index 08f7bd9001bc..7895a0af37e6 100644
- --- a/drivers/net/ethernet/intel/i40e/i40e_main.c
- +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
- @@ -5219,15 +5219,17 @@ static int i40e_vsi_configure_bw_alloc(struct i40e_vsi *vsi, u8 enabled_tc,
- u8 *bw_share)
- {
- struct i40e_aqc_configure_vsi_tc_bw_data bw_data;
- + struct i40e_pf *pf = vsi->back;
- i40e_status ret;
- int i;
-
- - if (vsi->back->flags & I40E_FLAG_TC_MQPRIO)
- + /* There is no need to reset BW when mqprio mode is on. */
- + if (pf->flags & I40E_FLAG_TC_MQPRIO)
- return 0;
- - if (!vsi->mqprio_qopt.qopt.hw) {
- + if (!vsi->mqprio_qopt.qopt.hw && !(pf->flags & I40E_FLAG_DCB_ENABLED)) {
- ret = i40e_set_bw_limit(vsi, vsi->seid, 0);
- if (ret)
- - dev_info(&vsi->back->pdev->dev,
- + dev_info(&pf->pdev->dev,
- "Failed to reset tx rate for vsi->seid %u\n",
- vsi->seid);
- return ret;
- @@ -5236,12 +5238,11 @@ static int i40e_vsi_configure_bw_alloc(struct i40e_vsi *vsi, u8 enabled_tc,
- for (i = 0; i < I40E_MAX_TRAFFIC_CLASS; i++)
- bw_data.tc_bw_credits[i] = bw_share[i];
-
- - ret = i40e_aq_config_vsi_tc_bw(&vsi->back->hw, vsi->seid, &bw_data,
- - NULL);
- + ret = i40e_aq_config_vsi_tc_bw(&pf->hw, vsi->seid, &bw_data, NULL);
- if (ret) {
- - dev_info(&vsi->back->pdev->dev,
- + dev_info(&pf->pdev->dev,
- "AQ command Config VSI BW allocation per TC failed = %d\n",
- - vsi->back->hw.aq.asq_last_status);
- + pf->hw.aq.asq_last_status);
- return -EINVAL;
- }
-
|