[dpdk-dev] net/i40e: fix dcb configure failure

Message ID 1478238153-92544-1-git-send-email-jingjing.wu@intel.com (mailing list archive)
State Accepted, archived
Headers

Checks

Context Check Description
tmonjalo/checkpatch success coding style OK

Commit Message

Jingjing Wu Nov. 4, 2016, 5:42 a.m. UTC
  Removing stopping LLDP in firmware is a workaround for a
known errata which can cause Rx hang. But the changing will
cause DCB configuration fails. That is because when LLDP is
enabled, the return value of i40e_init_dcb is success. But
following check just considered the case when LLDP agent
is disabled.
This patch fixes this issue.

Fixes: fcbd40d4327b ("net/i40e: fix Rx hang when disable LLDP")
Signed-off-by: Jingjing Wu <jingjing.wu@intel.com>
---
 drivers/net/i40e/i40e_ethdev.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)
  

Comments

Xing, Beilei Nov. 4, 2016, 1:44 p.m. UTC | #1
> -----Original Message-----
> From: Wu, Jingjing
> Sent: Friday, November 4, 2016 1:43 PM
> To: dev@dpdk.org
> Cc: Wu, Jingjing <jingjing.wu@intel.com>; Xing, Beilei <beilei.xing@intel.com>;
> Zhang, Helin <helin.zhang@intel.com>
> Subject: [PATCH] net/i40e: fix dcb configure failure
> 
> Removing stopping LLDP in firmware is a workaround for a known errata which
> can cause Rx hang. But the changing will cause DCB configuration fails. That is
> because when LLDP is enabled, the return value of i40e_init_dcb is success. But
> following check just considered the case when LLDP agent is disabled.
> This patch fixes this issue.
> 
> Fixes: fcbd40d4327b ("net/i40e: fix Rx hang when disable LLDP")
> Signed-off-by: Jingjing Wu <jingjing.wu@intel.com>
Acked-by: Beilei Xing<Beilei.xing@intel.com>
  
Thomas Monjalon Nov. 7, 2016, 4:39 p.m. UTC | #2
> > Removing stopping LLDP in firmware is a workaround for a known errata which
> > can cause Rx hang. But the changing will cause DCB configuration fails. That is
> > because when LLDP is enabled, the return value of i40e_init_dcb is success. But
> > following check just considered the case when LLDP agent is disabled.
> > This patch fixes this issue.
> > 
> > Fixes: fcbd40d4327b ("net/i40e: fix Rx hang when disable LLDP")
> > Signed-off-by: Jingjing Wu <jingjing.wu@intel.com>
> Acked-by: Beilei Xing<Beilei.xing@intel.com>

Applied, thanks
  

Patch

diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
index bb81b15..5afca1e 100644
--- a/drivers/net/i40e/i40e_ethdev.c
+++ b/drivers/net/i40e/i40e_ethdev.c
@@ -9428,12 +9428,12 @@  i40e_dcb_init_configure(struct rte_eth_dev *dev, bool sw_dcb)
 	 */
 	if (sw_dcb == TRUE) {
 		ret = i40e_init_dcb(hw);
-		/* if sw_dcb, lldp agent is stopped, the return from
+		/* If lldp agent is stopped, the return value from
 		 * i40e_init_dcb we expect is failure with I40E_AQ_RC_EPERM
-		 * adminq status.
+		 * adminq status. Otherwise, it should return success.
 		 */
-		if (ret != I40E_SUCCESS &&
-		    hw->aq.asq_last_status == I40E_AQ_RC_EPERM) {
+		if ((ret == I40E_SUCCESS) || (ret != I40E_SUCCESS &&
+		    hw->aq.asq_last_status == I40E_AQ_RC_EPERM)) {
 			memset(&hw->local_dcbx_config, 0,
 				sizeof(struct i40e_dcbx_config));
 			/* set dcb default configuration */
@@ -9462,8 +9462,8 @@  i40e_dcb_init_configure(struct rte_eth_dev *dev, bool sw_dcb)
 				return -ENOSYS;
 			}
 		} else {
-			PMD_INIT_LOG(ERR, "DCBX configuration failed, err = %d,"
-					  " aq_err = %d.", ret,
+			PMD_INIT_LOG(ERR, "DCB initialization in FW fails,"
+					  " err = %d, aq_err = %d.", ret,
 					  hw->aq.asq_last_status);
 			return -ENOTSUP;
 		}