]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
net/mlx5e: Update MPWQE stride size when modifying CQE compress state
authorSaeed Mahameed <saeedm@mellanox.com>
Wed, 22 Feb 2017 15:20:15 +0000 (17:20 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 22 Mar 2017 11:56:54 +0000 (12:56 +0100)
[ Upstream commit 6dc4b54e77282caf17f0ff72aa32dd296037fbc0 ]

When the admin enables/disables cqe compression, updating
mpwqe stride size is required:
    CQE compress ON  ==> stride size = 256B
    CQE compress OFF ==> stride size = 64B

This is already done on driver load via mlx5e_set_rq_type_params, all we
need is just to call it on arbitrary admin changes of cqe compression
state via priv flags or when changing timestamping state
(as it is mutually exclusive with cqe compression).

This bug introduces no functional damage, it only makes cqe compression
occur less often, since in ConnectX4-LX CQE compression is performed
only on packets smaller than stride size.

Tested:
 ethtool --set-priv-flags ethxx rx_cqe_compress on
 pktgen with  64 < pkt size < 256 and netperf TCP_STREAM (IPv4/IPv6)
 verify `ethtool -S ethxx | grep compress` are advancing more often
 (rapidly)

Fixes: 7219ab34f184 ("net/mlx5e: CQE compression")
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
Reviewed-by: Tariq Toukan <tariqt@mellanox.com>
Cc: kernel-team@fb.com
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/net/ethernet/mellanox/mlx5/core/en.h
drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
drivers/net/ethernet/mellanox/mlx5/core/en_main.c
drivers/net/ethernet/mellanox/mlx5/core/en_rx.c

index d5ecb8f53fd43684f185d590c8dc5553a4f25ab4..c69a1f827b65ef41abf237f2540da11868fdd35e 100644 (file)
@@ -803,6 +803,7 @@ int mlx5e_get_max_linkspeed(struct mlx5_core_dev *mdev, u32 *speed);
 
 void mlx5e_set_rx_cq_mode_params(struct mlx5e_params *params,
                                 u8 cq_period_mode);
+void mlx5e_set_rq_type_params(struct mlx5e_priv *priv, u8 rq_type);
 
 static inline void mlx5e_tx_notify_hw(struct mlx5e_sq *sq,
                                      struct mlx5_wqe_ctrl_seg *ctrl, int bf_sz)
index bb67863aa361168a8566349ef356d9a991d411be..6906deae06e06e72eec6bb48b0d960de5c7b5a38 100644 (file)
@@ -1477,6 +1477,7 @@ static int set_pflag_rx_cqe_compress(struct net_device *netdev,
 
        MLX5E_SET_PFLAG(priv, MLX5E_PFLAG_RX_CQE_COMPRESS, enable);
        priv->params.rx_cqe_compress_def = enable;
+       mlx5e_set_rq_type_params(priv, priv->params.rq_wq_type);
 
        if (reset)
                err = mlx5e_open_locked(netdev);
index a2401edc88787e809d68a5116ca64c4ec4a2bb7e..9d9c64927372a3cc6243f7ef6957d065a507b41c 100644 (file)
@@ -78,7 +78,7 @@ static bool mlx5e_check_fragmented_striding_rq_cap(struct mlx5_core_dev *mdev)
                MLX5_CAP_ETH(mdev, reg_umr_sq);
 }
 
-static void mlx5e_set_rq_type_params(struct mlx5e_priv *priv, u8 rq_type)
+void mlx5e_set_rq_type_params(struct mlx5e_priv *priv, u8 rq_type)
 {
        priv->params.rq_wq_type = rq_type;
        priv->params.lro_wqe_sz = MLX5E_PARAMS_DEFAULT_LRO_WQE_SZ;
index 06d5e6fecb0a5ecf255c9d6319ffb285e1a660df..817fa7c9acd1982a8c7f30dff4e96814b1ed16a6 100644 (file)
@@ -172,6 +172,7 @@ void mlx5e_modify_rx_cqe_compression(struct mlx5e_priv *priv, bool val)
                mlx5e_close_locked(priv->netdev);
 
        MLX5E_SET_PFLAG(priv, MLX5E_PFLAG_RX_CQE_COMPRESS, val);
+       mlx5e_set_rq_type_params(priv, priv->params.rq_wq_type);
 
        if (was_opened)
                mlx5e_open_locked(priv->netdev);