Skip to content

Commit 3cfb33f

Browse files
committed
Merge branch 'net-mlx5-misc-changes-2025-09-28'
Tariq Toukan says: ==================== net/mlx5: misc changes 2025-09-28 This series contains misc enhancements to the mlx5 driver. v1: https://lore.kernel.org/[email protected] ==================== Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
2 parents fd8c821 + a833538 commit 3cfb33f

File tree

14 files changed

+995
-1275
lines changed

14 files changed

+995
-1275
lines changed

drivers/net/ethernet/mellanox/mlx5/core/en/rss.c

Lines changed: 49 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -75,23 +75,22 @@ struct mlx5e_rss {
7575
struct mlx5e_tir *inner_tir[MLX5E_NUM_INDIR_TIRS];
7676
struct mlx5e_rqt rqt;
7777
struct mlx5_core_dev *mdev; /* primary */
78-
u32 drop_rqn;
79-
bool inner_ft_support;
78+
struct mlx5e_rss_params params;
8079
bool enabled;
8180
refcount_t refcnt;
8281
};
8382

8483
bool mlx5e_rss_get_inner_ft_support(struct mlx5e_rss *rss)
8584
{
86-
return rss->inner_ft_support;
85+
return rss->params.inner_ft_support;
8786
}
8887

8988
void mlx5e_rss_params_indir_modify_actual_size(struct mlx5e_rss *rss, u32 num_channels)
9089
{
9190
rss->indir.actual_table_size = mlx5e_rqt_size(rss->mdev, num_channels);
9291
}
9392

94-
int mlx5e_rss_params_indir_init(struct mlx5e_rss_params_indir *indir, struct mlx5_core_dev *mdev,
93+
int mlx5e_rss_params_indir_init(struct mlx5e_rss_params_indir *indir,
9594
u32 actual_table_size, u32 max_table_size)
9695
{
9796
indir->table = kvmalloc_array(max_table_size, sizeof(*indir->table), GFP_KERNEL);
@@ -139,7 +138,8 @@ static struct mlx5e_rss *mlx5e_rss_init_copy(const struct mlx5e_rss *from)
139138
if (!rss)
140139
return ERR_PTR(-ENOMEM);
141140

142-
err = mlx5e_rss_params_indir_init(&rss->indir, from->mdev, from->indir.actual_table_size,
141+
err = mlx5e_rss_params_indir_init(&rss->indir,
142+
from->indir.actual_table_size,
143143
from->indir.max_table_size);
144144
if (err)
145145
goto err_free_rss;
@@ -192,19 +192,20 @@ mlx5e_rss_get_tt_config(struct mlx5e_rss *rss, enum mlx5_traffic_types tt)
192192
return rss_tt;
193193
}
194194

195-
static int mlx5e_rss_create_tir(struct mlx5e_rss *rss,
196-
enum mlx5_traffic_types tt,
197-
const struct mlx5e_packet_merge_param *init_pkt_merge_param,
198-
bool inner)
195+
static int
196+
mlx5e_rss_create_tir(struct mlx5e_rss *rss, enum mlx5_traffic_types tt,
197+
const struct mlx5e_packet_merge_param *pkt_merge_param,
198+
bool inner)
199199
{
200+
bool rss_inner = rss->params.inner_ft_support;
200201
struct mlx5e_rss_params_traffic_type rss_tt;
201202
struct mlx5e_tir_builder *builder;
202203
struct mlx5e_tir **tir_p;
203204
struct mlx5e_tir *tir;
204205
u32 rqtn;
205206
int err;
206207

207-
if (inner && !rss->inner_ft_support) {
208+
if (inner && !rss_inner) {
208209
mlx5e_rss_warn(rss->mdev,
209210
"Cannot create inner indirect TIR[%d], RSS inner FT is not supported.\n",
210211
tt);
@@ -227,8 +228,8 @@ static int mlx5e_rss_create_tir(struct mlx5e_rss *rss,
227228

228229
rqtn = mlx5e_rqt_get_rqtn(&rss->rqt);
229230
mlx5e_tir_builder_build_rqt(builder, rss->mdev->mlx5e_res.hw_objs.td.tdn,
230-
rqtn, rss->inner_ft_support);
231-
mlx5e_tir_builder_build_packet_merge(builder, init_pkt_merge_param);
231+
rqtn, rss_inner);
232+
mlx5e_tir_builder_build_packet_merge(builder, pkt_merge_param);
232233
rss_tt = mlx5e_rss_get_tt_config(rss, tt);
233234
mlx5e_tir_builder_build_rss(builder, &rss->hash, &rss_tt, inner);
234235

@@ -264,15 +265,16 @@ static void mlx5e_rss_destroy_tir(struct mlx5e_rss *rss, enum mlx5_traffic_types
264265
*tir_p = NULL;
265266
}
266267

267-
static int mlx5e_rss_create_tirs(struct mlx5e_rss *rss,
268-
const struct mlx5e_packet_merge_param *init_pkt_merge_param,
269-
bool inner)
268+
static int
269+
mlx5e_rss_create_tirs(struct mlx5e_rss *rss,
270+
const struct mlx5e_packet_merge_param *pkt_merge_param,
271+
bool inner)
270272
{
271273
enum mlx5_traffic_types tt, max_tt;
272274
int err;
273275

274276
for (tt = 0; tt < MLX5E_NUM_INDIR_TIRS; tt++) {
275-
err = mlx5e_rss_create_tir(rss, tt, init_pkt_merge_param, inner);
277+
err = mlx5e_rss_create_tir(rss, tt, pkt_merge_param, inner);
276278
if (err)
277279
goto err_destroy_tirs;
278280
}
@@ -335,7 +337,7 @@ static int mlx5e_rss_update_tirs(struct mlx5e_rss *rss)
335337
tt, err);
336338
}
337339

338-
if (!rss->inner_ft_support)
340+
if (!rss->params.inner_ft_support)
339341
continue;
340342

341343
err = mlx5e_rss_update_tir(rss, tt, true);
@@ -355,44 +357,48 @@ static int mlx5e_rss_init_no_tirs(struct mlx5e_rss *rss)
355357
refcount_set(&rss->refcnt, 1);
356358

357359
return mlx5e_rqt_init_direct(&rss->rqt, rss->mdev, true,
358-
rss->drop_rqn, rss->indir.max_table_size);
360+
rss->params.drop_rqn,
361+
rss->indir.max_table_size);
359362
}
360363

361-
struct mlx5e_rss *mlx5e_rss_init(struct mlx5_core_dev *mdev, bool inner_ft_support, u32 drop_rqn,
362-
const struct mlx5e_packet_merge_param *init_pkt_merge_param,
363-
enum mlx5e_rss_init_type type, unsigned int nch,
364-
unsigned int max_nch)
364+
struct mlx5e_rss *
365+
mlx5e_rss_init(struct mlx5_core_dev *mdev,
366+
const struct mlx5e_rss_params *params,
367+
const struct mlx5e_rss_init_params *init_params)
365368
{
369+
u32 rqt_max_size, rqt_size;
366370
struct mlx5e_rss *rss;
367371
int err;
368372

369373
rss = kvzalloc(sizeof(*rss), GFP_KERNEL);
370374
if (!rss)
371375
return ERR_PTR(-ENOMEM);
372376

373-
err = mlx5e_rss_params_indir_init(&rss->indir, mdev,
374-
mlx5e_rqt_size(mdev, nch),
375-
mlx5e_rqt_size(mdev, max_nch));
377+
rqt_size = mlx5e_rqt_size(mdev, init_params->nch);
378+
rqt_max_size = mlx5e_rqt_size(mdev, init_params->max_nch);
379+
err = mlx5e_rss_params_indir_init(&rss->indir, rqt_size, rqt_max_size);
376380
if (err)
377381
goto err_free_rss;
378382

379383
rss->mdev = mdev;
380-
rss->inner_ft_support = inner_ft_support;
381-
rss->drop_rqn = drop_rqn;
384+
rss->params = *params;
382385

383386
err = mlx5e_rss_init_no_tirs(rss);
384387
if (err)
385388
goto err_free_indir;
386389

387-
if (type == MLX5E_RSS_INIT_NO_TIRS)
390+
if (init_params->type == MLX5E_RSS_INIT_NO_TIRS)
388391
goto out;
389392

390-
err = mlx5e_rss_create_tirs(rss, init_pkt_merge_param, false);
393+
err = mlx5e_rss_create_tirs(rss, init_params->pkt_merge_param,
394+
false);
391395
if (err)
392396
goto err_destroy_rqt;
393397

394-
if (inner_ft_support) {
395-
err = mlx5e_rss_create_tirs(rss, init_pkt_merge_param, true);
398+
if (params->inner_ft_support) {
399+
err = mlx5e_rss_create_tirs(rss,
400+
init_params->pkt_merge_param,
401+
true);
396402
if (err)
397403
goto err_destroy_tirs;
398404
}
@@ -418,7 +424,7 @@ int mlx5e_rss_cleanup(struct mlx5e_rss *rss)
418424

419425
mlx5e_rss_destroy_tirs(rss, false);
420426

421-
if (rss->inner_ft_support)
427+
if (rss->params.inner_ft_support)
422428
mlx5e_rss_destroy_tirs(rss, true);
423429

424430
mlx5e_rqt_destroy(&rss->rqt);
@@ -448,7 +454,7 @@ u32 mlx5e_rss_get_tirn(struct mlx5e_rss *rss, enum mlx5_traffic_types tt,
448454
{
449455
struct mlx5e_tir *tir;
450456

451-
WARN_ON(inner && !rss->inner_ft_support);
457+
WARN_ON(inner && !rss->params.inner_ft_support);
452458
tir = rss_get_tir(rss, tt, inner);
453459
WARN_ON(!tir);
454460

@@ -468,18 +474,18 @@ bool mlx5e_rss_valid_tir(struct mlx5e_rss *rss, enum mlx5_traffic_types tt, bool
468474
/* Fill the "tirn" output parameter.
469475
* Create the requested TIR if it's its first usage.
470476
*/
471-
int mlx5e_rss_obtain_tirn(struct mlx5e_rss *rss,
472-
enum mlx5_traffic_types tt,
473-
const struct mlx5e_packet_merge_param *init_pkt_merge_param,
474-
bool inner, u32 *tirn)
477+
int
478+
mlx5e_rss_obtain_tirn(struct mlx5e_rss *rss, enum mlx5_traffic_types tt,
479+
const struct mlx5e_packet_merge_param *pkt_merge_param,
480+
bool inner, u32 *tirn)
475481
{
476482
struct mlx5e_tir *tir;
477483

478484
tir = rss_get_tir(rss, tt, inner);
479485
if (!tir) { /* TIR doesn't exist, create one */
480486
int err;
481487

482-
err = mlx5e_rss_create_tir(rss, tt, init_pkt_merge_param, inner);
488+
err = mlx5e_rss_create_tir(rss, tt, pkt_merge_param, inner);
483489
if (err)
484490
return err;
485491
tir = rss_get_tir(rss, tt, inner);
@@ -512,10 +518,11 @@ void mlx5e_rss_disable(struct mlx5e_rss *rss)
512518
int err;
513519

514520
rss->enabled = false;
515-
err = mlx5e_rqt_redirect_direct(&rss->rqt, rss->drop_rqn, NULL);
521+
err = mlx5e_rqt_redirect_direct(&rss->rqt, rss->params.drop_rqn, NULL);
516522
if (err)
517523
mlx5e_rss_warn(rss->mdev, "Failed to redirect RQT %#x to drop RQ %#x: err = %d\n",
518-
mlx5e_rqt_get_rqtn(&rss->rqt), rss->drop_rqn, err);
524+
mlx5e_rqt_get_rqtn(&rss->rqt),
525+
rss->params.drop_rqn, err);
519526
}
520527

521528
int mlx5e_rss_packet_merge_set_param(struct mlx5e_rss *rss,
@@ -548,7 +555,7 @@ int mlx5e_rss_packet_merge_set_param(struct mlx5e_rss *rss,
548555
}
549556

550557
inner_tir:
551-
if (!rss->inner_ft_support)
558+
if (!rss->params.inner_ft_support)
552559
continue;
553560

554561
tir = rss_get_tir(rss, tt, true);
@@ -681,7 +688,7 @@ int mlx5e_rss_set_hash_fields(struct mlx5e_rss *rss, enum mlx5_traffic_types tt,
681688
return err;
682689
}
683690

684-
if (!(rss->inner_ft_support))
691+
if (!(rss->params.inner_ft_support))
685692
return 0;
686693

687694
err = mlx5e_rss_update_tir(rss, tt, true);

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

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,31 @@ enum mlx5e_rss_init_type {
1313
MLX5E_RSS_INIT_TIRS
1414
};
1515

16+
struct mlx5e_rss_init_params {
17+
enum mlx5e_rss_init_type type;
18+
const struct mlx5e_packet_merge_param *pkt_merge_param;
19+
unsigned int nch;
20+
unsigned int max_nch;
21+
};
22+
23+
struct mlx5e_rss_params {
24+
bool inner_ft_support;
25+
u32 drop_rqn;
26+
};
27+
1628
struct mlx5e_rss_params_traffic_type
1729
mlx5e_rss_get_default_tt_config(enum mlx5_traffic_types tt);
1830

1931
struct mlx5e_rss;
2032

21-
int mlx5e_rss_params_indir_init(struct mlx5e_rss_params_indir *indir, struct mlx5_core_dev *mdev,
33+
int mlx5e_rss_params_indir_init(struct mlx5e_rss_params_indir *indir,
2234
u32 actual_table_size, u32 max_table_size);
2335
void mlx5e_rss_params_indir_cleanup(struct mlx5e_rss_params_indir *indir);
2436
void mlx5e_rss_params_indir_modify_actual_size(struct mlx5e_rss *rss, u32 num_channels);
25-
struct mlx5e_rss *mlx5e_rss_init(struct mlx5_core_dev *mdev, bool inner_ft_support, u32 drop_rqn,
26-
const struct mlx5e_packet_merge_param *init_pkt_merge_param,
27-
enum mlx5e_rss_init_type type, unsigned int nch,
28-
unsigned int max_nch);
37+
struct mlx5e_rss *
38+
mlx5e_rss_init(struct mlx5_core_dev *mdev,
39+
const struct mlx5e_rss_params *params,
40+
const struct mlx5e_rss_init_params *init_params);
2941
int mlx5e_rss_cleanup(struct mlx5e_rss *rss);
3042

3143
void mlx5e_rss_refcnt_inc(struct mlx5e_rss *rss);
@@ -37,10 +49,10 @@ u32 mlx5e_rss_get_tirn(struct mlx5e_rss *rss, enum mlx5_traffic_types tt,
3749
bool inner);
3850
bool mlx5e_rss_valid_tir(struct mlx5e_rss *rss, enum mlx5_traffic_types tt, bool inner);
3951
u32 mlx5e_rss_get_rqtn(struct mlx5e_rss *rss);
40-
int mlx5e_rss_obtain_tirn(struct mlx5e_rss *rss,
41-
enum mlx5_traffic_types tt,
42-
const struct mlx5e_packet_merge_param *init_pkt_merge_param,
43-
bool inner, u32 *tirn);
52+
int
53+
mlx5e_rss_obtain_tirn(struct mlx5e_rss *rss, enum mlx5_traffic_types tt,
54+
const struct mlx5e_packet_merge_param *pkt_merge_param,
55+
bool inner, u32 *tirn);
4456

4557
void mlx5e_rss_enable(struct mlx5e_rss *rss, u32 *rqns, u32 *vhca_ids, unsigned int num_rqns);
4658
void mlx5e_rss_disable(struct mlx5e_rss *rss);

drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.c

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -54,17 +54,30 @@ static int mlx5e_rx_res_rss_init_def(struct mlx5e_rx_res *res,
5454
unsigned int init_nch)
5555
{
5656
bool inner_ft_support = res->features & MLX5E_RX_RES_FEATURE_INNER_FT;
57+
struct mlx5e_rss_init_params init_params;
58+
struct mlx5e_rss_params rss_params;
5759
struct mlx5e_rss *rss;
5860

5961
if (WARN_ON(res->rss[0]))
6062
return -EINVAL;
6163

62-
rss = mlx5e_rss_init(res->mdev, inner_ft_support, res->drop_rqn,
63-
&res->pkt_merge_param, MLX5E_RSS_INIT_TIRS, init_nch, res->max_nch);
64+
init_params = (struct mlx5e_rss_init_params) {
65+
.type = MLX5E_RSS_INIT_TIRS,
66+
.pkt_merge_param = &res->pkt_merge_param,
67+
.nch = init_nch,
68+
.max_nch = res->max_nch,
69+
};
70+
71+
rss_params = (struct mlx5e_rss_params) {
72+
.inner_ft_support = inner_ft_support,
73+
.drop_rqn = res->drop_rqn,
74+
};
75+
76+
rss = mlx5e_rss_init(res->mdev, &rss_params, &init_params);
6477
if (IS_ERR(rss))
6578
return PTR_ERR(rss);
6679

67-
mlx5e_rss_set_indir_uniform(rss, init_nch);
80+
mlx5e_rss_set_indir_uniform(rss, init_params.nch);
6881

6982
res->rss[0] = rss;
7083

@@ -74,18 +87,30 @@ static int mlx5e_rx_res_rss_init_def(struct mlx5e_rx_res *res,
7487
int mlx5e_rx_res_rss_init(struct mlx5e_rx_res *res, u32 rss_idx, unsigned int init_nch)
7588
{
7689
bool inner_ft_support = res->features & MLX5E_RX_RES_FEATURE_INNER_FT;
90+
struct mlx5e_rss_init_params init_params;
91+
struct mlx5e_rss_params rss_params;
7792
struct mlx5e_rss *rss;
7893

7994
if (WARN_ON_ONCE(res->rss[rss_idx]))
8095
return -ENOSPC;
8196

82-
rss = mlx5e_rss_init(res->mdev, inner_ft_support, res->drop_rqn,
83-
&res->pkt_merge_param, MLX5E_RSS_INIT_NO_TIRS, init_nch,
84-
res->max_nch);
97+
init_params = (struct mlx5e_rss_init_params) {
98+
.type = MLX5E_RSS_INIT_NO_TIRS,
99+
.pkt_merge_param = &res->pkt_merge_param,
100+
.nch = init_nch,
101+
.max_nch = res->max_nch,
102+
};
103+
104+
rss_params = (struct mlx5e_rss_params) {
105+
.inner_ft_support = inner_ft_support,
106+
.drop_rqn = res->drop_rqn,
107+
};
108+
109+
rss = mlx5e_rss_init(res->mdev, &rss_params, &init_params);
85110
if (IS_ERR(rss))
86111
return PTR_ERR(rss);
87112

88-
mlx5e_rss_set_indir_uniform(rss, init_nch);
113+
mlx5e_rss_set_indir_uniform(rss, init_params.nch);
89114
if (res->rss_active) {
90115
u32 *vhca_ids = get_vhca_ids(res, 0);
91116

@@ -438,7 +463,7 @@ static void mlx5e_rx_res_ptp_destroy(struct mlx5e_rx_res *res)
438463
struct mlx5e_rx_res *
439464
mlx5e_rx_res_create(struct mlx5_core_dev *mdev, enum mlx5e_rx_res_features features,
440465
unsigned int max_nch, u32 drop_rqn,
441-
const struct mlx5e_packet_merge_param *init_pkt_merge_param,
466+
const struct mlx5e_packet_merge_param *pkt_merge_param,
442467
unsigned int init_nch)
443468
{
444469
bool multi_vhca = features & MLX5E_RX_RES_FEATURE_MULTI_VHCA;
@@ -454,7 +479,7 @@ mlx5e_rx_res_create(struct mlx5_core_dev *mdev, enum mlx5e_rx_res_features featu
454479
res->max_nch = max_nch;
455480
res->drop_rqn = drop_rqn;
456481

457-
res->pkt_merge_param = *init_pkt_merge_param;
482+
res->pkt_merge_param = *pkt_merge_param;
458483
init_rwsem(&res->pkt_merge_param_sem);
459484

460485
err = mlx5e_rx_res_rss_init_def(res, init_nch);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ enum mlx5e_rx_res_features {
2727
struct mlx5e_rx_res *
2828
mlx5e_rx_res_create(struct mlx5_core_dev *mdev, enum mlx5e_rx_res_features features,
2929
unsigned int max_nch, u32 drop_rqn,
30-
const struct mlx5e_packet_merge_param *init_pkt_merge_param,
30+
const struct mlx5e_packet_merge_param *pkt_merge_param,
3131
unsigned int init_nch);
3232
void mlx5e_rx_res_destroy(struct mlx5e_rx_res *res);
3333

0 commit comments

Comments
 (0)