net/mlx5e: Create struct mlx5e_rss_params_hash
authorMaxim Mikityanskiy <maximmi@nvidia.com>
Tue, 6 Apr 2021 15:58:30 +0000 (18:58 +0300)
committerSaeed Mahameed <saeedm@nvidia.com>
Mon, 26 Jul 2021 16:50:40 +0000 (09:50 -0700)
This commit introduces a new struct to store RSS hash parameters: hash
function and hash key. The existing usages are changed to use the new
struct.

Signed-off-by: Maxim Mikityanskiy <maximmi@nvidia.com>
Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.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_tc.c

index b56c5de..bdcd0b5 100644 (file)
 
 #define MLX5E_MAX_NUM_CHANNELS (MLX5E_INDIR_RQT_SIZE / 2)
 
+struct mlx5e_rss_params_hash {
+       u8 hfunc;
+       u8 toeplitz_hash_key[40];
+};
+
 struct mlx5e_rss_params {
+       struct mlx5e_rss_params_hash hash;
        struct mlx5e_rss_params_indir indir;
        u32 rx_hash_fields[MLX5E_NUM_INDIR_TIRS];
-       u8 toeplitz_hash_key[40];
-       u8 hfunc;
 };
 
 struct mlx5e_tir {
index 8a75b37..4167f4e 100644 (file)
@@ -1172,7 +1172,7 @@ static int mlx5e_set_link_ksettings(struct net_device *netdev,
 
 u32 mlx5e_ethtool_get_rxfh_key_size(struct mlx5e_priv *priv)
 {
-       return sizeof(priv->rx_res->rss_params.toeplitz_hash_key);
+       return sizeof(priv->rx_res->rss_params.hash.toeplitz_hash_key);
 }
 
 static u32 mlx5e_get_rxfh_key_size(struct net_device *netdev)
@@ -1206,11 +1206,10 @@ int mlx5e_get_rxfh(struct net_device *netdev, u32 *indir, u8 *key,
                memcpy(indir, rss->indir.table, sizeof(rss->indir.table));
 
        if (key)
-               memcpy(key, rss->toeplitz_hash_key,
-                      sizeof(rss->toeplitz_hash_key));
+               memcpy(key, rss->hash.toeplitz_hash_key, sizeof(rss->hash.toeplitz_hash_key));
 
        if (hfunc)
-               *hfunc = rss->hfunc;
+               *hfunc = rss->hash.hfunc;
 
        return 0;
 }
@@ -1238,8 +1237,8 @@ int mlx5e_set_rxfh(struct net_device *dev, const u32 *indir,
 
        rss = &priv->rx_res->rss_params;
 
-       if (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != rss->hfunc) {
-               rss->hfunc = hfunc;
+       if (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != rss->hash.hfunc) {
+               rss->hash.hfunc = hfunc;
                refresh_rqt = true;
                refresh_tirs = true;
        }
@@ -1250,9 +1249,8 @@ int mlx5e_set_rxfh(struct net_device *dev, const u32 *indir,
        }
 
        if (key) {
-               memcpy(rss->toeplitz_hash_key, key,
-                      sizeof(rss->toeplitz_hash_key));
-               refresh_tirs = refresh_tirs || rss->hfunc == ETH_RSS_HASH_TOP;
+               memcpy(rss->hash.toeplitz_hash_key, key, sizeof(rss->hash.toeplitz_hash_key));
+               refresh_tirs = refresh_tirs || rss->hash.hfunc == ETH_RSS_HASH_TOP;
        }
 
        if (refresh_rqt && test_bit(MLX5E_STATE_OPENED, &priv->state)) {
@@ -1267,7 +1265,7 @@ int mlx5e_set_rxfh(struct net_device *dev, const u32 *indir,
 
                        mlx5e_rqt_redirect_indir(&priv->rx_res->indir_rqt, rqns,
                                                 priv->channels.num,
-                                                rss->hfunc, &rss->indir);
+                                                rss->hash.hfunc, &rss->indir);
                        kvfree(rqns);
                }
        }
index 53a51ac..10e6beb 100644 (file)
@@ -2285,7 +2285,7 @@ static void mlx5e_redirect_rqts_to_channels(struct mlx5e_priv *priv,
                        rqns[ix] = chs->c[ix]->rq.rqn;
 
                mlx5e_rqt_redirect_indir(&res->indir_rqt, rqns, chs->num,
-                                        res->rss_params.hfunc,
+                                        res->rss_params.hash.hfunc,
                                         &res->rss_params.indir);
                kvfree(rqns);
        }
@@ -2393,15 +2393,15 @@ void mlx5e_build_indir_tir_ctx_hash(struct mlx5e_rss_params *rss_params,
        void *hfso = inner ? MLX5_ADDR_OF(tirc, tirc, rx_hash_field_selector_inner) :
                             MLX5_ADDR_OF(tirc, tirc, rx_hash_field_selector_outer);
 
-       MLX5_SET(tirc, tirc, rx_hash_fn, mlx5e_rx_hash_fn(rss_params->hfunc));
-       if (rss_params->hfunc == ETH_RSS_HASH_TOP) {
+       MLX5_SET(tirc, tirc, rx_hash_fn, mlx5e_rx_hash_fn(rss_params->hash.hfunc));
+       if (rss_params->hash.hfunc == ETH_RSS_HASH_TOP) {
                void *rss_key = MLX5_ADDR_OF(tirc, tirc,
                                             rx_hash_toeplitz_key);
                size_t len = MLX5_FLD_SZ_BYTES(tirc,
                                               rx_hash_toeplitz_key);
 
                MLX5_SET(tirc, tirc, rx_hash_symmetric, 1);
-               memcpy(rss_key, rss_params->toeplitz_hash_key, len);
+               memcpy(rss_key, rss_params->hash.toeplitz_hash_key, len);
        }
        MLX5_SET(rx_hash_field_select, hfso, l3_prot_type,
                 ttconfig->l3_prot_type);
@@ -4591,9 +4591,9 @@ void mlx5e_build_rss_params(struct mlx5e_rss_params *rss_params,
 {
        enum mlx5e_traffic_types tt;
 
-       rss_params->hfunc = ETH_RSS_HASH_TOP;
-       netdev_rss_key_fill(rss_params->toeplitz_hash_key,
-                           sizeof(rss_params->toeplitz_hash_key));
+       rss_params->hash.hfunc = ETH_RSS_HASH_TOP;
+       netdev_rss_key_fill(rss_params->hash.toeplitz_hash_key,
+                           sizeof(rss_params->hash.toeplitz_hash_key));
        mlx5e_build_default_indir_rqt(rss_params->indir.table,
                                      MLX5E_INDIR_RQT_SIZE, num_channels);
        for (tt = 0; tt < MLX5E_NUM_INDIR_TIRS; tt++)
index dd5546f..b4d58dd 100644 (file)
@@ -507,7 +507,7 @@ static int mlx5e_hairpin_create_indirect_rqt(struct mlx5e_hairpin *hp)
 
        mlx5e_build_default_indir_rqt(indir->table, MLX5E_INDIR_RQT_SIZE, hp->num_channels);
        err = mlx5e_rqt_init_indir(&hp->indir_rqt, mdev, hp->pair->rqn, hp->num_channels,
-                                  priv->rx_res->rss_params.hfunc, indir);
+                                   priv->rx_res->rss_params.hash.hfunc, indir);
 
        kvfree(indir);
        return err;