Skip to content

Commit c5bb173

Browse files
Maor Gottliebdavem330
authored andcommitted
net/mlx5: Refactor mlx5_add_flow_rule
Reduce the set of arguments passed to mlx5_add_flow_rule by introducing flow_spec structure. Signed-off-by: Maor Gottlieb <[email protected]> Signed-off-by: Saeed Mahameed <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 019d0c9 commit c5bb173

File tree

8 files changed

+171
-232
lines changed

8 files changed

+171
-232
lines changed

drivers/infiniband/hw/mlx5/main.c

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1528,41 +1528,39 @@ static struct mlx5_ib_flow_handler *create_flow_rule(struct mlx5_ib_dev *dev,
15281528
{
15291529
struct mlx5_flow_table *ft = ft_prio->flow_table;
15301530
struct mlx5_ib_flow_handler *handler;
1531+
struct mlx5_flow_spec *spec;
15311532
void *ib_flow = flow_attr + 1;
1532-
u8 match_criteria_enable = 0;
15331533
unsigned int spec_index;
1534-
u32 *match_c;
1535-
u32 *match_v;
15361534
u32 action;
15371535
int err = 0;
15381536

15391537
if (!is_valid_attr(flow_attr))
15401538
return ERR_PTR(-EINVAL);
15411539

1542-
match_c = kzalloc(MLX5_ST_SZ_BYTES(fte_match_param), GFP_KERNEL);
1543-
match_v = kzalloc(MLX5_ST_SZ_BYTES(fte_match_param), GFP_KERNEL);
1540+
spec = mlx5_vzalloc(sizeof(*spec));
15441541
handler = kzalloc(sizeof(*handler), GFP_KERNEL);
1545-
if (!handler || !match_c || !match_v) {
1542+
if (!handler || !spec) {
15461543
err = -ENOMEM;
15471544
goto free;
15481545
}
15491546

15501547
INIT_LIST_HEAD(&handler->list);
15511548

15521549
for (spec_index = 0; spec_index < flow_attr->num_of_specs; spec_index++) {
1553-
err = parse_flow_attr(match_c, match_v, ib_flow);
1550+
err = parse_flow_attr(spec->match_criteria,
1551+
spec->match_value, ib_flow);
15541552
if (err < 0)
15551553
goto free;
15561554

15571555
ib_flow += ((union ib_flow_spec *)ib_flow)->size;
15581556
}
15591557

15601558
/* Outer header support only */
1561-
match_criteria_enable = (!outer_header_zero(match_c)) << 0;
1559+
spec->match_criteria_enable = (!outer_header_zero(spec->match_criteria))
1560+
<< 0;
15621561
action = dst ? MLX5_FLOW_CONTEXT_ACTION_FWD_DEST :
15631562
MLX5_FLOW_CONTEXT_ACTION_FWD_NEXT_PRIO;
1564-
handler->rule = mlx5_add_flow_rule(ft, match_criteria_enable,
1565-
match_c, match_v,
1563+
handler->rule = mlx5_add_flow_rule(ft, spec,
15661564
action,
15671565
MLX5_FS_DEFAULT_FLOW_TAG,
15681566
dst);
@@ -1578,8 +1576,7 @@ static struct mlx5_ib_flow_handler *create_flow_rule(struct mlx5_ib_dev *dev,
15781576
free:
15791577
if (err)
15801578
kfree(handler);
1581-
kfree(match_c);
1582-
kfree(match_v);
1579+
kvfree(spec);
15831580
return err ? ERR_PTR(err) : handler;
15841581
}
15851582

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

Lines changed: 29 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -175,15 +175,12 @@ static int arfs_add_default_rule(struct mlx5e_priv *priv,
175175
{
176176
struct arfs_table *arfs_t = &priv->fs.arfs.arfs_tables[type];
177177
struct mlx5_flow_destination dest;
178-
u8 match_criteria_enable = 0;
179178
struct mlx5e_tir *tir = priv->indir_tir;
180-
u32 *match_criteria;
181-
u32 *match_value;
179+
struct mlx5_flow_spec *spec;
182180
int err = 0;
183181

184-
match_value = mlx5_vzalloc(MLX5_ST_SZ_BYTES(fte_match_param));
185-
match_criteria = mlx5_vzalloc(MLX5_ST_SZ_BYTES(fte_match_param));
186-
if (!match_value || !match_criteria) {
182+
spec = mlx5_vzalloc(sizeof(*spec));
183+
if (!spec) {
187184
netdev_err(priv->netdev, "%s: alloc failed\n", __func__);
188185
err = -ENOMEM;
189186
goto out;
@@ -208,8 +205,7 @@ static int arfs_add_default_rule(struct mlx5e_priv *priv,
208205
goto out;
209206
}
210207

211-
arfs_t->default_rule = mlx5_add_flow_rule(arfs_t->ft.t, match_criteria_enable,
212-
match_criteria, match_value,
208+
arfs_t->default_rule = mlx5_add_flow_rule(arfs_t->ft.t, spec,
213209
MLX5_FLOW_CONTEXT_ACTION_FWD_DEST,
214210
MLX5_FS_DEFAULT_FLOW_TAG,
215211
&dest);
@@ -220,8 +216,7 @@ static int arfs_add_default_rule(struct mlx5e_priv *priv,
220216
__func__, type);
221217
}
222218
out:
223-
kvfree(match_criteria);
224-
kvfree(match_value);
219+
kvfree(spec);
225220
return err;
226221
}
227222

@@ -475,23 +470,20 @@ static struct mlx5_flow_rule *arfs_add_rule(struct mlx5e_priv *priv,
475470
struct mlx5_flow_rule *rule = NULL;
476471
struct mlx5_flow_destination dest;
477472
struct arfs_table *arfs_table;
478-
u8 match_criteria_enable = 0;
473+
struct mlx5_flow_spec *spec;
479474
struct mlx5_flow_table *ft;
480-
u32 *match_criteria;
481-
u32 *match_value;
482475
int err = 0;
483476

484-
match_value = mlx5_vzalloc(MLX5_ST_SZ_BYTES(fte_match_param));
485-
match_criteria = mlx5_vzalloc(MLX5_ST_SZ_BYTES(fte_match_param));
486-
if (!match_value || !match_criteria) {
477+
spec = mlx5_vzalloc(sizeof(*spec));
478+
if (!spec) {
487479
netdev_err(priv->netdev, "%s: alloc failed\n", __func__);
488480
err = -ENOMEM;
489481
goto out;
490482
}
491-
match_criteria_enable = MLX5_MATCH_OUTER_HEADERS;
492-
MLX5_SET_TO_ONES(fte_match_param, match_criteria,
483+
spec->match_criteria_enable = MLX5_MATCH_OUTER_HEADERS;
484+
MLX5_SET_TO_ONES(fte_match_param, spec->match_criteria,
493485
outer_headers.ethertype);
494-
MLX5_SET(fte_match_param, match_value, outer_headers.ethertype,
486+
MLX5_SET(fte_match_param, spec->match_value, outer_headers.ethertype,
495487
ntohs(tuple->etype));
496488
arfs_table = arfs_get_table(arfs, tuple->ip_proto, tuple->etype);
497489
if (!arfs_table) {
@@ -501,59 +493,58 @@ static struct mlx5_flow_rule *arfs_add_rule(struct mlx5e_priv *priv,
501493

502494
ft = arfs_table->ft.t;
503495
if (tuple->ip_proto == IPPROTO_TCP) {
504-
MLX5_SET_TO_ONES(fte_match_param, match_criteria,
496+
MLX5_SET_TO_ONES(fte_match_param, spec->match_criteria,
505497
outer_headers.tcp_dport);
506-
MLX5_SET_TO_ONES(fte_match_param, match_criteria,
498+
MLX5_SET_TO_ONES(fte_match_param, spec->match_criteria,
507499
outer_headers.tcp_sport);
508-
MLX5_SET(fte_match_param, match_value, outer_headers.tcp_dport,
500+
MLX5_SET(fte_match_param, spec->match_value, outer_headers.tcp_dport,
509501
ntohs(tuple->dst_port));
510-
MLX5_SET(fte_match_param, match_value, outer_headers.tcp_sport,
502+
MLX5_SET(fte_match_param, spec->match_value, outer_headers.tcp_sport,
511503
ntohs(tuple->src_port));
512504
} else {
513-
MLX5_SET_TO_ONES(fte_match_param, match_criteria,
505+
MLX5_SET_TO_ONES(fte_match_param, spec->match_criteria,
514506
outer_headers.udp_dport);
515-
MLX5_SET_TO_ONES(fte_match_param, match_criteria,
507+
MLX5_SET_TO_ONES(fte_match_param, spec->match_criteria,
516508
outer_headers.udp_sport);
517-
MLX5_SET(fte_match_param, match_value, outer_headers.udp_dport,
509+
MLX5_SET(fte_match_param, spec->match_value, outer_headers.udp_dport,
518510
ntohs(tuple->dst_port));
519-
MLX5_SET(fte_match_param, match_value, outer_headers.udp_sport,
511+
MLX5_SET(fte_match_param, spec->match_value, outer_headers.udp_sport,
520512
ntohs(tuple->src_port));
521513
}
522514
if (tuple->etype == htons(ETH_P_IP)) {
523-
memcpy(MLX5_ADDR_OF(fte_match_param, match_value,
515+
memcpy(MLX5_ADDR_OF(fte_match_param, spec->match_value,
524516
outer_headers.src_ipv4_src_ipv6.ipv4_layout.ipv4),
525517
&tuple->src_ipv4,
526518
4);
527-
memcpy(MLX5_ADDR_OF(fte_match_param, match_value,
519+
memcpy(MLX5_ADDR_OF(fte_match_param, spec->match_value,
528520
outer_headers.dst_ipv4_dst_ipv6.ipv4_layout.ipv4),
529521
&tuple->dst_ipv4,
530522
4);
531-
MLX5_SET_TO_ONES(fte_match_param, match_criteria,
523+
MLX5_SET_TO_ONES(fte_match_param, spec->match_criteria,
532524
outer_headers.src_ipv4_src_ipv6.ipv4_layout.ipv4);
533-
MLX5_SET_TO_ONES(fte_match_param, match_criteria,
525+
MLX5_SET_TO_ONES(fte_match_param, spec->match_criteria,
534526
outer_headers.dst_ipv4_dst_ipv6.ipv4_layout.ipv4);
535527
} else {
536-
memcpy(MLX5_ADDR_OF(fte_match_param, match_value,
528+
memcpy(MLX5_ADDR_OF(fte_match_param, spec->match_value,
537529
outer_headers.src_ipv4_src_ipv6.ipv6_layout.ipv6),
538530
&tuple->src_ipv6,
539531
16);
540-
memcpy(MLX5_ADDR_OF(fte_match_param, match_value,
532+
memcpy(MLX5_ADDR_OF(fte_match_param, spec->match_value,
541533
outer_headers.dst_ipv4_dst_ipv6.ipv6_layout.ipv6),
542534
&tuple->dst_ipv6,
543535
16);
544-
memset(MLX5_ADDR_OF(fte_match_param, match_criteria,
536+
memset(MLX5_ADDR_OF(fte_match_param, spec->match_criteria,
545537
outer_headers.src_ipv4_src_ipv6.ipv6_layout.ipv6),
546538
0xff,
547539
16);
548-
memset(MLX5_ADDR_OF(fte_match_param, match_criteria,
540+
memset(MLX5_ADDR_OF(fte_match_param, spec->match_criteria,
549541
outer_headers.dst_ipv4_dst_ipv6.ipv6_layout.ipv6),
550542
0xff,
551543
16);
552544
}
553545
dest.type = MLX5_FLOW_DESTINATION_TYPE_TIR;
554546
dest.tir_num = priv->direct_tir[arfs_rule->rxq].tirn;
555-
rule = mlx5_add_flow_rule(ft, match_criteria_enable, match_criteria,
556-
match_value, MLX5_FLOW_CONTEXT_ACTION_FWD_DEST,
547+
rule = mlx5_add_flow_rule(ft, spec, MLX5_FLOW_CONTEXT_ACTION_FWD_DEST,
557548
MLX5_FS_DEFAULT_FLOW_TAG,
558549
&dest);
559550
if (IS_ERR(rule)) {
@@ -563,8 +554,7 @@ static struct mlx5_flow_rule *arfs_add_rule(struct mlx5e_priv *priv,
563554
}
564555

565556
out:
566-
kvfree(match_criteria);
567-
kvfree(match_value);
557+
kvfree(spec);
568558
return err ? ERR_PTR(err) : rule;
569559
}
570560

0 commit comments

Comments
 (0)