Skip to content

Commit bbeb53b

Browse files
ayalevin123Saeed Mahameed
authored andcommitted
net/mlx5e: Move RSS params to a dedicated struct
Remove RSS params from params struct under channels, and introduce a new struct with RSS configuration params under priv struct. There is no functional change here. Signed-off-by: Aya Levin <ayal@mellanox.com> Reviewed-by: Tariq Toukan <tariqt@mellanox.com> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
1 parent d930ac7 commit bbeb53b

File tree

6 files changed

+62
-47
lines changed

6 files changed

+62
-47
lines changed

drivers/net/ethernet/mellanox/mlx5/core/en.h

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -244,9 +244,6 @@ struct mlx5e_params {
244244
bool lro_en;
245245
u32 lro_wqe_sz;
246246
u8 tx_min_inline_mode;
247-
u8 rss_hfunc;
248-
u8 toeplitz_hash_key[40];
249-
u32 indirection_rqt[MLX5E_INDIR_RQT_SIZE];
250247
bool vlan_strip_disable;
251248
bool scatter_fcs_en;
252249
bool rx_dim_enabled;
@@ -651,6 +648,12 @@ enum {
651648
MLX5E_NIC_PRIO
652649
};
653650

651+
struct mlx5e_rss_params {
652+
u32 indirection_rqt[MLX5E_INDIR_RQT_SIZE];
653+
u8 toeplitz_hash_key[40];
654+
u8 hfunc;
655+
};
656+
654657
struct mlx5e_priv {
655658
/* priv data path fields - start */
656659
struct mlx5e_txqsq *txq2sq[MLX5E_MAX_NUM_CHANNELS * MLX5E_MAX_NUM_TC];
@@ -671,6 +674,7 @@ struct mlx5e_priv {
671674
struct mlx5e_tir indir_tir[MLX5E_NUM_INDIR_TIRS];
672675
struct mlx5e_tir inner_indir_tir[MLX5E_NUM_INDIR_TIRS];
673676
struct mlx5e_tir direct_tir[MLX5E_MAX_NUM_CHANNELS];
677+
struct mlx5e_rss_params rss_params;
674678
u32 tx_rates[MLX5E_MAX_NUM_SQS];
675679

676680
struct mlx5e_flow_steering fs;
@@ -796,7 +800,7 @@ struct mlx5e_redirect_rqt_param {
796800

797801
int mlx5e_redirect_rqt(struct mlx5e_priv *priv, u32 rqtn, int sz,
798802
struct mlx5e_redirect_rqt_param rrp);
799-
void mlx5e_build_indir_tir_ctx_hash(struct mlx5e_params *params,
803+
void mlx5e_build_indir_tir_ctx_hash(struct mlx5e_rss_params *rss_params,
800804
const struct mlx5e_tirc_config *ttconfig,
801805
void *tirc, bool inner);
802806
void mlx5e_modify_tirs_hash(struct mlx5e_priv *priv, void *in, int inlen);
@@ -982,11 +986,13 @@ int mlx5e_attach_netdev(struct mlx5e_priv *priv);
982986
void mlx5e_detach_netdev(struct mlx5e_priv *priv);
983987
void mlx5e_destroy_netdev(struct mlx5e_priv *priv);
984988
void mlx5e_build_nic_params(struct mlx5_core_dev *mdev,
989+
struct mlx5e_rss_params *rss_params,
985990
struct mlx5e_params *params,
986991
u16 max_channels, u16 mtu);
987992
void mlx5e_build_rq_params(struct mlx5_core_dev *mdev,
988993
struct mlx5e_params *params);
989-
void mlx5e_build_rss_params(struct mlx5e_params *params);
994+
void mlx5e_build_rss_params(struct mlx5e_rss_params *rss_params,
995+
u16 num_channels);
990996
u8 mlx5e_params_calculate_tx_min_inline(struct mlx5_core_dev *mdev);
991997
void mlx5e_rx_dim_work(struct work_struct *work);
992998
void mlx5e_tx_dim_work(struct work_struct *work);

drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ int mlx5e_ethtool_set_channels(struct mlx5e_priv *priv,
353353
new_channels.params = priv->channels.params;
354354
new_channels.params.num_channels = count;
355355
if (!netif_is_rxfh_configured(priv->netdev))
356-
mlx5e_build_default_indir_rqt(new_channels.params.indirection_rqt,
356+
mlx5e_build_default_indir_rqt(priv->rss_params.indirection_rqt,
357357
MLX5E_INDIR_RQT_SIZE, count);
358358

359359
if (!test_bit(MLX5E_STATE_OPENED, &priv->state)) {
@@ -931,7 +931,7 @@ static int mlx5e_set_link_ksettings(struct net_device *netdev,
931931

932932
u32 mlx5e_ethtool_get_rxfh_key_size(struct mlx5e_priv *priv)
933933
{
934-
return sizeof(priv->channels.params.toeplitz_hash_key);
934+
return sizeof(priv->rss_params.toeplitz_hash_key);
935935
}
936936

937937
static u32 mlx5e_get_rxfh_key_size(struct net_device *netdev)
@@ -957,17 +957,18 @@ static int mlx5e_get_rxfh(struct net_device *netdev, u32 *indir, u8 *key,
957957
u8 *hfunc)
958958
{
959959
struct mlx5e_priv *priv = netdev_priv(netdev);
960+
struct mlx5e_rss_params *rss = &priv->rss_params;
960961

961962
if (indir)
962-
memcpy(indir, priv->channels.params.indirection_rqt,
963-
sizeof(priv->channels.params.indirection_rqt));
963+
memcpy(indir, rss->indirection_rqt,
964+
sizeof(rss->indirection_rqt));
964965

965966
if (key)
966-
memcpy(key, priv->channels.params.toeplitz_hash_key,
967-
sizeof(priv->channels.params.toeplitz_hash_key));
967+
memcpy(key, rss->toeplitz_hash_key,
968+
sizeof(rss->toeplitz_hash_key));
968969

969970
if (hfunc)
970-
*hfunc = priv->channels.params.rss_hfunc;
971+
*hfunc = rss->hfunc;
971972

972973
return 0;
973974
}
@@ -976,6 +977,7 @@ static int mlx5e_set_rxfh(struct net_device *dev, const u32 *indir,
976977
const u8 *key, const u8 hfunc)
977978
{
978979
struct mlx5e_priv *priv = netdev_priv(dev);
980+
struct mlx5e_rss_params *rss = &priv->rss_params;
979981
int inlen = MLX5_ST_SZ_BYTES(modify_tir_in);
980982
bool hash_changed = false;
981983
void *in;
@@ -991,23 +993,22 @@ static int mlx5e_set_rxfh(struct net_device *dev, const u32 *indir,
991993

992994
mutex_lock(&priv->state_lock);
993995

994-
if (hfunc != ETH_RSS_HASH_NO_CHANGE &&
995-
hfunc != priv->channels.params.rss_hfunc) {
996-
priv->channels.params.rss_hfunc = hfunc;
996+
if (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != rss->hfunc) {
997+
rss->hfunc = hfunc;
997998
hash_changed = true;
998999
}
9991000

10001001
if (indir) {
1001-
memcpy(priv->channels.params.indirection_rqt, indir,
1002-
sizeof(priv->channels.params.indirection_rqt));
1002+
memcpy(rss->indirection_rqt, indir,
1003+
sizeof(rss->indirection_rqt));
10031004

10041005
if (test_bit(MLX5E_STATE_OPENED, &priv->state)) {
10051006
u32 rqtn = priv->indir_rqt.rqtn;
10061007
struct mlx5e_redirect_rqt_param rrp = {
10071008
.is_rss = true,
10081009
{
10091010
.rss = {
1010-
.hfunc = priv->channels.params.rss_hfunc,
1011+
.hfunc = rss->hfunc,
10111012
.channels = &priv->channels,
10121013
},
10131014
},
@@ -1018,10 +1019,9 @@ static int mlx5e_set_rxfh(struct net_device *dev, const u32 *indir,
10181019
}
10191020

10201021
if (key) {
1021-
memcpy(priv->channels.params.toeplitz_hash_key, key,
1022-
sizeof(priv->channels.params.toeplitz_hash_key));
1023-
hash_changed = hash_changed ||
1024-
priv->channels.params.rss_hfunc == ETH_RSS_HASH_TOP;
1022+
memcpy(rss->toeplitz_hash_key, key,
1023+
sizeof(rss->toeplitz_hash_key));
1024+
hash_changed = hash_changed || rss->hfunc == ETH_RSS_HASH_TOP;
10251025
}
10261026

10271027
if (hash_changed)

drivers/net/ethernet/mellanox/mlx5/core/en_main.c

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2504,7 +2504,7 @@ static void mlx5e_fill_rqt_rqns(struct mlx5e_priv *priv, int sz,
25042504
if (rrp.rss.hfunc == ETH_RSS_HASH_XOR)
25052505
ix = mlx5e_bits_invert(i, ilog2(sz));
25062506

2507-
ix = priv->channels.params.indirection_rqt[ix];
2507+
ix = priv->rss_params.indirection_rqt[ix];
25082508
rqn = rrp.rss.channels->c[ix]->rq.rqn;
25092509
} else {
25102510
rqn = rrp.rqn;
@@ -2587,7 +2587,7 @@ static void mlx5e_redirect_rqts_to_channels(struct mlx5e_priv *priv,
25872587
{
25882588
.rss = {
25892589
.channels = chs,
2590-
.hfunc = chs->params.rss_hfunc,
2590+
.hfunc = priv->rss_params.hfunc,
25912591
}
25922592
},
25932593
};
@@ -2670,22 +2670,22 @@ static void mlx5e_build_tir_ctx_lro(struct mlx5e_params *params, void *tirc)
26702670
MLX5_SET(tirc, tirc, lro_timeout_period_usecs, params->lro_timeout);
26712671
}
26722672

2673-
void mlx5e_build_indir_tir_ctx_hash(struct mlx5e_params *params,
2673+
void mlx5e_build_indir_tir_ctx_hash(struct mlx5e_rss_params *rss_params,
26742674
const struct mlx5e_tirc_config *ttconfig,
26752675
void *tirc, bool inner)
26762676
{
26772677
void *hfso = inner ? MLX5_ADDR_OF(tirc, tirc, rx_hash_field_selector_inner) :
26782678
MLX5_ADDR_OF(tirc, tirc, rx_hash_field_selector_outer);
26792679

2680-
MLX5_SET(tirc, tirc, rx_hash_fn, mlx5e_rx_hash_fn(params->rss_hfunc));
2681-
if (params->rss_hfunc == ETH_RSS_HASH_TOP) {
2680+
MLX5_SET(tirc, tirc, rx_hash_fn, mlx5e_rx_hash_fn(rss_params->hfunc));
2681+
if (rss_params->hfunc == ETH_RSS_HASH_TOP) {
26822682
void *rss_key = MLX5_ADDR_OF(tirc, tirc,
26832683
rx_hash_toeplitz_key);
26842684
size_t len = MLX5_FLD_SZ_BYTES(tirc,
26852685
rx_hash_toeplitz_key);
26862686

26872687
MLX5_SET(tirc, tirc, rx_hash_symmetric, 1);
2688-
memcpy(rss_key, params->toeplitz_hash_key, len);
2688+
memcpy(rss_key, rss_params->toeplitz_hash_key, len);
26892689
}
26902690
MLX5_SET(rx_hash_field_select, hfso, l3_prot_type,
26912691
ttconfig->l3_prot_type);
@@ -2706,7 +2706,7 @@ void mlx5e_modify_tirs_hash(struct mlx5e_priv *priv, void *in, int inlen)
27062706

27072707
for (tt = 0; tt < MLX5E_NUM_INDIR_TIRS; tt++) {
27082708
memset(tirc, 0, ctxlen);
2709-
mlx5e_build_indir_tir_ctx_hash(&priv->channels.params,
2709+
mlx5e_build_indir_tir_ctx_hash(&priv->rss_params,
27102710
&tirc_default_config[tt],
27112711
tirc, false);
27122712
mlx5_core_modify_tir(mdev, priv->indir_tir[tt].tirn, in, inlen);
@@ -2717,7 +2717,7 @@ void mlx5e_modify_tirs_hash(struct mlx5e_priv *priv, void *in, int inlen)
27172717

27182718
for (tt = 0; tt < MLX5E_NUM_INDIR_TIRS; tt++) {
27192719
memset(tirc, 0, ctxlen);
2720-
mlx5e_build_indir_tir_ctx_hash(&priv->channels.params,
2720+
mlx5e_build_indir_tir_ctx_hash(&priv->rss_params,
27212721
&tirc_default_config[tt],
27222722
tirc, true);
27232723
mlx5_core_modify_tir(mdev, priv->inner_indir_tir[tt].tirn, in,
@@ -2778,7 +2778,7 @@ static void mlx5e_build_inner_indir_tir_ctx(struct mlx5e_priv *priv,
27782778
MLX5_SET(tirc, tirc, indirect_table, priv->indir_rqt.rqtn);
27792779
MLX5_SET(tirc, tirc, tunneled_offload_en, 0x1);
27802780

2781-
mlx5e_build_indir_tir_ctx_hash(&priv->channels.params,
2781+
mlx5e_build_indir_tir_ctx_hash(&priv->rss_params,
27822782
&tirc_default_config[tt], tirc, true);
27832783
}
27842784

@@ -3172,7 +3172,7 @@ static void mlx5e_build_indir_tir_ctx(struct mlx5e_priv *priv,
31723172
MLX5_SET(tirc, tirc, disp_type, MLX5_TIRC_DISP_TYPE_INDIRECT);
31733173
MLX5_SET(tirc, tirc, indirect_table, priv->indir_rqt.rqtn);
31743174

3175-
mlx5e_build_indir_tir_ctx_hash(&priv->channels.params,
3175+
mlx5e_build_indir_tir_ctx_hash(&priv->rss_params,
31763176
&tirc_default_config[tt], tirc, false);
31773177
}
31783178

@@ -4511,15 +4511,18 @@ void mlx5e_build_rq_params(struct mlx5_core_dev *mdev,
45114511
mlx5e_init_rq_type_params(mdev, params);
45124512
}
45134513

4514-
void mlx5e_build_rss_params(struct mlx5e_params *params)
4514+
void mlx5e_build_rss_params(struct mlx5e_rss_params *rss_params,
4515+
u16 num_channels)
45154516
{
4516-
params->rss_hfunc = ETH_RSS_HASH_XOR;
4517-
netdev_rss_key_fill(params->toeplitz_hash_key, sizeof(params->toeplitz_hash_key));
4518-
mlx5e_build_default_indir_rqt(params->indirection_rqt,
4519-
MLX5E_INDIR_RQT_SIZE, params->num_channels);
4517+
rss_params->hfunc = ETH_RSS_HASH_XOR;
4518+
netdev_rss_key_fill(rss_params->toeplitz_hash_key,
4519+
sizeof(rss_params->toeplitz_hash_key));
4520+
mlx5e_build_default_indir_rqt(rss_params->indirection_rqt,
4521+
MLX5E_INDIR_RQT_SIZE, num_channels);
45204522
}
45214523

45224524
void mlx5e_build_nic_params(struct mlx5_core_dev *mdev,
4525+
struct mlx5e_rss_params *rss_params,
45234526
struct mlx5e_params *params,
45244527
u16 max_channels, u16 mtu)
45254528
{
@@ -4568,7 +4571,7 @@ void mlx5e_build_nic_params(struct mlx5_core_dev *mdev,
45684571
params->tx_min_inline_mode = mlx5e_params_calculate_tx_min_inline(mdev);
45694572

45704573
/* RSS */
4571-
mlx5e_build_rss_params(params);
4574+
mlx5e_build_rss_params(rss_params, params->num_channels);
45724575
}
45734576

45744577
static void mlx5e_set_netdev_dev_addr(struct net_device *netdev)
@@ -4741,14 +4744,16 @@ static int mlx5e_nic_init(struct mlx5_core_dev *mdev,
47414744
void *ppriv)
47424745
{
47434746
struct mlx5e_priv *priv = netdev_priv(netdev);
4747+
struct mlx5e_rss_params *rss = &priv->rss_params;
47444748
int err;
47454749

47464750
err = mlx5e_netdev_init(netdev, priv, mdev, profile, ppriv);
47474751
if (err)
47484752
return err;
47494753

4750-
mlx5e_build_nic_params(mdev, &priv->channels.params,
4751-
mlx5e_get_netdev_max_channels(netdev), netdev->mtu);
4754+
mlx5e_build_nic_params(mdev, rss, &priv->channels.params,
4755+
mlx5e_get_netdev_max_channels(netdev),
4756+
netdev->mtu);
47524757

47534758
mlx5e_timestamp_init(priv);
47544759

@@ -5023,7 +5028,7 @@ int mlx5e_attach_netdev(struct mlx5e_priv *priv)
50235028
if (priv->channels.params.num_channels > max_nch) {
50245029
mlx5_core_warn(priv->mdev, "MLX5E: Reducing number of channels to %d\n", max_nch);
50255030
priv->channels.params.num_channels = max_nch;
5026-
mlx5e_build_default_indir_rqt(priv->channels.params.indirection_rqt,
5031+
mlx5e_build_default_indir_rqt(priv->rss_params.indirection_rqt,
50275032
MLX5E_INDIR_RQT_SIZE, max_nch);
50285033
}
50295034

drivers/net/ethernet/mellanox/mlx5/core/en_rep.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1012,7 +1012,9 @@ static const struct net_device_ops mlx5e_netdev_ops_rep = {
10121012
};
10131013

10141014
static void mlx5e_build_rep_params(struct mlx5_core_dev *mdev,
1015-
struct mlx5e_params *params, u16 mtu)
1015+
struct mlx5e_params *params,
1016+
struct mlx5e_rss_params *rss_params,
1017+
u16 mtu)
10161018
{
10171019
u8 cq_period_mode = MLX5_CAP_GEN(mdev, cq_period_start_from_cqe) ?
10181020
MLX5_CQ_PERIOD_MODE_START_FROM_CQE :
@@ -1034,7 +1036,7 @@ static void mlx5e_build_rep_params(struct mlx5_core_dev *mdev,
10341036
mlx5_query_min_inline(mdev, &params->tx_min_inline_mode);
10351037

10361038
/* RSS */
1037-
mlx5e_build_rss_params(params);
1039+
mlx5e_build_rss_params(rss_params, params->num_channels);
10381040
}
10391041

10401042
static void mlx5e_build_rep_netdev(struct net_device *netdev)
@@ -1087,7 +1089,8 @@ static int mlx5e_init_rep(struct mlx5_core_dev *mdev,
10871089
priv->channels.params.num_channels =
10881090
mlx5e_get_netdev_max_channels(netdev);
10891091

1090-
mlx5e_build_rep_params(mdev, &priv->channels.params, netdev->mtu);
1092+
mlx5e_build_rep_params(mdev, &priv->channels.params,
1093+
&priv->rss_params, netdev->mtu);
10911094
mlx5e_build_rep_netdev(netdev);
10921095

10931096
mlx5e_timestamp_init(priv);

drivers/net/ethernet/mellanox/mlx5/core/en_tc.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,7 @@ static void mlx5e_hairpin_fill_rqt_rqns(struct mlx5e_hairpin *hp, void *rqtc)
316316

317317
for (i = 0; i < sz; i++) {
318318
ix = i;
319-
if (priv->channels.params.rss_hfunc == ETH_RSS_HASH_XOR)
319+
if (priv->rss_params.hfunc == ETH_RSS_HASH_XOR)
320320
ix = mlx5e_bits_invert(i, ilog2(sz));
321321
ix = indirection_rqt[ix];
322322
rqn = hp->pair->rqn[ix];
@@ -368,7 +368,8 @@ static int mlx5e_hairpin_create_indirect_tirs(struct mlx5e_hairpin *hp)
368368
MLX5_SET(tirc, tirc, transport_domain, hp->tdn);
369369
MLX5_SET(tirc, tirc, disp_type, MLX5_TIRC_DISP_TYPE_INDIRECT);
370370
MLX5_SET(tirc, tirc, indirect_table, hp->indir_rqt.rqtn);
371-
mlx5e_build_indir_tir_ctx_hash(&priv->channels.params, &ttconfig, tirc, false);
371+
mlx5e_build_indir_tir_ctx_hash(&priv->rss_params, &ttconfig, tirc, false);
372+
372373
err = mlx5_core_create_tir(hp->func_mdev, in,
373374
MLX5_ST_SZ_BYTES(create_tir_in), &hp->indir_tirn[tt]);
374375
if (err) {

drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ int mlx5i_init(struct mlx5_core_dev *mdev,
8787
mlx5_query_port_max_mtu(mdev, &max_mtu, 1);
8888
netdev->mtu = max_mtu;
8989

90-
mlx5e_build_nic_params(mdev, &priv->channels.params,
90+
mlx5e_build_nic_params(mdev, &priv->rss_params, &priv->channels.params,
9191
mlx5e_get_netdev_max_channels(netdev),
9292
netdev->mtu);
9393
mlx5i_build_nic_params(mdev, &priv->channels.params);

0 commit comments

Comments
 (0)