Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 14 Dec 2015 09:59:21 +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: r292191 - stable/10/sys/dev/mlx5/mlx5_en
Message-ID:  <201512140959.tBE9xLGm023772@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: hselasky
Date: Mon Dec 14 09:59:21 2015
New Revision: 292191
URL: https://svnweb.freebsd.org/changeset/base/292191

Log:
  MFC r291932:
  Add support for setting the TX moderation mode via a sysctl entry. TX
  completion events can be moderated in the same way like RX completion
  events. Expose this functionality by a sysctl variable.
  
  Sponsored by:	Mellanox Technologies
  Differential Revision:	https://reviews.freebsd.org/D4409

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

Modified: stable/10/sys/dev/mlx5/mlx5_en/en.h
==============================================================================
--- stable/10/sys/dev/mlx5/mlx5_en/en.h	Mon Dec 14 09:57:42 2015	(r292190)
+++ stable/10/sys/dev/mlx5/mlx5_en/en.h	Mon Dec 14 09:59:21 2015	(r292191)
@@ -356,6 +356,7 @@ struct mlx5e_params {
 	u8	default_vlan_prio;
 	u8	num_tc;
 	u8	rx_cq_moderation_mode;
+	u8	tx_cq_moderation_mode;
 	u16	rx_cq_moderation_usec;
 	u16	rx_cq_moderation_pkts;
 	u16	tx_cq_moderation_usec;
@@ -381,6 +382,7 @@ struct mlx5e_params {
   m(+1, u64 rx_coalesce_mode, "rx_coalesce_mode", "0: EQE mode 1: CQE mode") \
   m(+1, u64 tx_coalesce_usecs, "tx_coalesce_usecs", "Limit in usec for joining tx packets") \
   m(+1, u64 tx_coalesce_pkts, "tx_coalesce_pkts", "Maximum number of tx packets to join") \
+  m(+1, u64 tx_coalesce_mode, "tx_coalesce_mode", "0: EQE mode 1: CQE mode") \
   m(+1, u64 hw_lro, "hw_lro", "set to enable hw_lro")
 
 #define	MLX5E_PARAMS_NUM (0 MLX5E_PARAMS(MLX5E_STATS_COUNT))

Modified: stable/10/sys/dev/mlx5/mlx5_en/mlx5_en_ethtool.c
==============================================================================
--- stable/10/sys/dev/mlx5/mlx5_en/mlx5_en_ethtool.c	Mon Dec 14 09:57:42 2015	(r292190)
+++ stable/10/sys/dev/mlx5/mlx5_en/mlx5_en_ethtool.c	Mon Dec 14 09:59:21 2015	(r292191)
@@ -136,6 +136,11 @@ mlx5e_ethtool_handler(SYSCTL_HANDLER_ARG
 		priv->params_ethtool.rx_coalesce_mode = 1;
 	priv->params.rx_cq_moderation_mode = priv->params_ethtool.rx_coalesce_mode;
 
+	/* import TX mode */
+	if (priv->params_ethtool.tx_coalesce_mode != 0)
+		priv->params_ethtool.tx_coalesce_mode = 1;
+	priv->params.tx_cq_moderation_mode = priv->params_ethtool.tx_coalesce_mode;
+
 	/* import RX coal time */
 	if (priv->params_ethtool.rx_coalesce_usecs < 1)
 		priv->params_ethtool.rx_coalesce_usecs = 0;
@@ -460,6 +465,7 @@ mlx5e_create_ethtool(struct mlx5e_priv *
 	priv->params_ethtool.rx_coalesce_mode = priv->params.rx_cq_moderation_mode;
 	priv->params_ethtool.rx_coalesce_usecs = priv->params.rx_cq_moderation_usec;
 	priv->params_ethtool.rx_coalesce_pkts = priv->params.rx_cq_moderation_pkts;
+	priv->params_ethtool.tx_coalesce_mode = priv->params.tx_cq_moderation_mode;
 	priv->params_ethtool.tx_coalesce_usecs = priv->params.tx_cq_moderation_usec;
 	priv->params_ethtool.tx_coalesce_pkts = priv->params.tx_cq_moderation_pkts;
 	priv->params_ethtool.hw_lro = priv->params.hw_lro_en;

Modified: stable/10/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
==============================================================================
--- stable/10/sys/dev/mlx5/mlx5_en/mlx5_en_main.c	Mon Dec 14 09:57:42 2015	(r292190)
+++ stable/10/sys/dev/mlx5/mlx5_en/mlx5_en_main.c	Mon Dec 14 09:59:21 2015	(r292191)
@@ -1324,13 +1324,25 @@ static int
 mlx5e_open_tx_cqs(struct mlx5e_channel *c,
     struct mlx5e_channel_param *cparam)
 {
+	u8 tx_moderation_mode;
 	int err;
 	int tc;
 
+	switch (c->priv->params.tx_cq_moderation_mode) {
+	case 0:
+		tx_moderation_mode = MLX5_CQ_PERIOD_MODE_START_FROM_EQE;
+		break;
+	default:
+		if (MLX5_CAP_GEN(c->priv->mdev, cq_period_start_from_cqe))
+			tx_moderation_mode = MLX5_CQ_PERIOD_MODE_START_FROM_CQE;
+		else
+			tx_moderation_mode = MLX5_CQ_PERIOD_MODE_START_FROM_EQE;
+		break;
+	}
 	for (tc = 0; tc < c->num_tc; tc++) {
 		/* open completion queue */
 		err = mlx5e_open_cq(c, &cparam->tx_cq, &c->sq[tc].cq,
-		    &mlx5e_tx_cq_comp, MLX5_CQ_PERIOD_MODE_START_FROM_EQE);
+		    &mlx5e_tx_cq_comp, tx_moderation_mode);
 		if (err)
 			goto err_close_tx_cqs;
 	}



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