Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 27 Jan 2016 15:01:09 +0000 (UTC)
From:      Hans Petter Selasky <hselasky@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r294920 - stable/10/sys/dev/mlx5/mlx5_en
Message-ID:  <201601271501.u0RF19Ts087224@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: hselasky
Date: Wed Jan 27 15:01:08 2016
New Revision: 294920
URL: https://svnweb.freebsd.org/changeset/base/294920

Log:
  MFC r294319:
  Fix an issue where the network adapter could be left in down state
  after changing the HW LRO sysctl when previously in up state.
  
  Sponsored by:	Mellanox Technologies
  Differential Revision:	https://reviews.freebsd.org/D4941

Modified:
  stable/10/sys/dev/mlx5/mlx5_en/mlx5_en_ethtool.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/dev/mlx5/mlx5_en/mlx5_en_ethtool.c
==============================================================================
--- stable/10/sys/dev/mlx5/mlx5_en/mlx5_en_ethtool.c	Wed Jan 27 14:59:22 2016	(r294919)
+++ stable/10/sys/dev/mlx5/mlx5_en/mlx5_en_ethtool.c	Wed Jan 27 15:01:08 2016	(r294920)
@@ -178,23 +178,21 @@ mlx5e_ethtool_handler(SYSCTL_HANDLER_ARG
 	priv->params.tx_cq_moderation_mode = priv->params_ethtool.tx_coalesce_mode;
 
 	/* we always agree to turn off HW LRO - but not always to turn on */
-	if (priv->params_ethtool.hw_lro) {
-		if (priv->params_ethtool.hw_lro != 1) {
-			priv->params_ethtool.hw_lro = priv->params.hw_lro_en;
-			error = EINVAL;
-			goto done;
-		}
-		if (priv->ifp->if_capenable & IFCAP_LRO)
-			priv->params.hw_lro_en = !!MLX5_CAP_ETH(priv->mdev, lro_cap);
-		else {
-			/* set the correct (0) value to params_ethtool.hw_lro, issue a warning and return error */
+	if (priv->params_ethtool.hw_lro != 0) {
+		if ((priv->ifp->if_capenable & IFCAP_LRO) &&
+		    MLX5_CAP_ETH(priv->mdev, lro_cap)) {
+			priv->params.hw_lro_en = 1;
+			priv->params_ethtool.hw_lro = 1;
+		} else {
+			priv->params.hw_lro_en = 0;
 			priv->params_ethtool.hw_lro = 0;
 			error = EINVAL;
-			if_printf(priv->ifp, "Can't set HW_LRO to a device with LRO turned off");
-			goto done;
+
+			if_printf(priv->ifp, "Can't enable HW LRO: "
+			    "The HW or SW LRO feature is disabled");
 		}
 	} else {
-		priv->params.hw_lro_en = false;
+		priv->params.hw_lro_en = 0;
 	}
 
 	if (&priv->params_ethtool.arg[arg2] ==
@@ -208,7 +206,6 @@ mlx5e_ethtool_handler(SYSCTL_HANDLER_ARG
 			priv->params_ethtool.cqe_zipping = 0;
 		}
 	}
-
 	if (was_opened)
 		mlx5e_open_locked(priv->ifp);
 done:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201601271501.u0RF19Ts087224>