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;
        }
_______________________________________________
svn-src-stable-10@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-stable-10
To unsubscribe, send any mail to "svn-src-stable-10-unsubscr...@freebsd.org"

Reply via email to