Skip to content

Commit 66958ed

Browse files
hadarhenziondavem330
authored andcommitted
net/mlx5: Support encap id when setting new steering entry
In order to support steering rules which add encapsulation headers, encap_id parameter is needed. Add new mlx5_flow_act struct which holds action related parameter: action, flow_tag and encap_id. Use mlx5_flow_act struct when adding a new steering rule. This patch doesn't change any functionality. Signed-off-by: Hadar Hen Zion <[email protected]> Signed-off-by: Saeed Mahameed <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent c9f1b07 commit 66958ed

File tree

11 files changed

+104
-78
lines changed

11 files changed

+104
-78
lines changed

drivers/infiniband/hw/mlx5/main.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1877,10 +1877,10 @@ static struct mlx5_ib_flow_handler *create_flow_rule(struct mlx5_ib_dev *dev,
18771877
{
18781878
struct mlx5_flow_table *ft = ft_prio->flow_table;
18791879
struct mlx5_ib_flow_handler *handler;
1880+
struct mlx5_flow_act flow_act = {0};
18801881
struct mlx5_flow_spec *spec;
18811882
const void *ib_flow = (const void *)flow_attr + sizeof(*flow_attr);
18821883
unsigned int spec_index;
1883-
u32 action;
18841884
int err = 0;
18851885

18861886
if (!is_valid_attr(flow_attr))
@@ -1905,12 +1905,12 @@ static struct mlx5_ib_flow_handler *create_flow_rule(struct mlx5_ib_dev *dev,
19051905
}
19061906

19071907
spec->match_criteria_enable = get_match_criteria_enable(spec->match_criteria);
1908-
action = dst ? MLX5_FLOW_CONTEXT_ACTION_FWD_DEST :
1908+
flow_act.action = dst ? MLX5_FLOW_CONTEXT_ACTION_FWD_DEST :
19091909
MLX5_FLOW_CONTEXT_ACTION_FWD_NEXT_PRIO;
1910+
flow_act.flow_tag = MLX5_FS_DEFAULT_FLOW_TAG;
19101911
handler->rule = mlx5_add_flow_rules(ft, spec,
1911-
action,
1912-
MLX5_FS_DEFAULT_FLOW_TAG,
1913-
dst, 1);
1912+
&flow_act,
1913+
dst, 1);
19141914

19151915
if (IS_ERR(handler->rule)) {
19161916
err = PTR_ERR(handler->rule);

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

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,11 @@ static int arfs_add_default_rule(struct mlx5e_priv *priv,
174174
enum arfs_type type)
175175
{
176176
struct arfs_table *arfs_t = &priv->fs.arfs.arfs_tables[type];
177+
struct mlx5_flow_act flow_act = {
178+
.action = MLX5_FLOW_CONTEXT_ACTION_FWD_DEST,
179+
.flow_tag = MLX5_FS_DEFAULT_FLOW_TAG,
180+
.encap_id = 0,
181+
};
177182
struct mlx5_flow_destination dest;
178183
struct mlx5e_tir *tir = priv->indir_tir;
179184
struct mlx5_flow_spec *spec;
@@ -206,8 +211,7 @@ static int arfs_add_default_rule(struct mlx5e_priv *priv,
206211
}
207212

208213
arfs_t->default_rule = mlx5_add_flow_rules(arfs_t->ft.t, spec,
209-
MLX5_FLOW_CONTEXT_ACTION_FWD_DEST,
210-
MLX5_FS_DEFAULT_FLOW_TAG,
214+
&flow_act,
211215
&dest, 1);
212216
if (IS_ERR(arfs_t->default_rule)) {
213217
err = PTR_ERR(arfs_t->default_rule);
@@ -465,6 +469,11 @@ static struct arfs_table *arfs_get_table(struct mlx5e_arfs_tables *arfs,
465469
static struct mlx5_flow_handle *arfs_add_rule(struct mlx5e_priv *priv,
466470
struct arfs_rule *arfs_rule)
467471
{
472+
struct mlx5_flow_act flow_act = {
473+
.action = MLX5_FLOW_CONTEXT_ACTION_FWD_DEST,
474+
.flow_tag = MLX5_FS_DEFAULT_FLOW_TAG,
475+
.encap_id = 0,
476+
};
468477
struct mlx5e_arfs_tables *arfs = &priv->fs.arfs;
469478
struct arfs_tuple *tuple = &arfs_rule->tuple;
470479
struct mlx5_flow_handle *rule = NULL;
@@ -544,9 +553,7 @@ static struct mlx5_flow_handle *arfs_add_rule(struct mlx5e_priv *priv,
544553
}
545554
dest.type = MLX5_FLOW_DESTINATION_TYPE_TIR;
546555
dest.tir_num = priv->direct_tir[arfs_rule->rxq].tirn;
547-
rule = mlx5_add_flow_rules(ft, spec, MLX5_FLOW_CONTEXT_ACTION_FWD_DEST,
548-
MLX5_FS_DEFAULT_FLOW_TAG,
549-
&dest, 1);
556+
rule = mlx5_add_flow_rules(ft, spec, &flow_act, &dest, 1);
550557
if (IS_ERR(rule)) {
551558
err = PTR_ERR(rule);
552559
netdev_err(priv->netdev, "%s: add rule(filter id=%d, rq idx=%d) failed, err=%d\n",

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

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,11 @@ static int __mlx5e_add_vlan_rule(struct mlx5e_priv *priv,
158158
enum mlx5e_vlan_rule_type rule_type,
159159
u16 vid, struct mlx5_flow_spec *spec)
160160
{
161+
struct mlx5_flow_act flow_act = {
162+
.action = MLX5_FLOW_CONTEXT_ACTION_FWD_DEST,
163+
.flow_tag = MLX5_FS_DEFAULT_FLOW_TAG,
164+
.encap_id = 0,
165+
};
161166
struct mlx5_flow_table *ft = priv->fs.vlan.ft.t;
162167
struct mlx5_flow_destination dest;
163168
struct mlx5_flow_handle **rule_p;
@@ -187,10 +192,7 @@ static int __mlx5e_add_vlan_rule(struct mlx5e_priv *priv,
187192
break;
188193
}
189194

190-
*rule_p = mlx5_add_flow_rules(ft, spec,
191-
MLX5_FLOW_CONTEXT_ACTION_FWD_DEST,
192-
MLX5_FS_DEFAULT_FLOW_TAG,
193-
&dest, 1);
195+
*rule_p = mlx5_add_flow_rules(ft, spec, &flow_act, &dest, 1);
194196

195197
if (IS_ERR(*rule_p)) {
196198
err = PTR_ERR(*rule_p);
@@ -623,6 +625,11 @@ mlx5e_generate_ttc_rule(struct mlx5e_priv *priv,
623625
u16 etype,
624626
u8 proto)
625627
{
628+
struct mlx5_flow_act flow_act = {
629+
.action = MLX5_FLOW_CONTEXT_ACTION_FWD_DEST,
630+
.flow_tag = MLX5_FS_DEFAULT_FLOW_TAG,
631+
.encap_id = 0,
632+
};
626633
struct mlx5_flow_handle *rule;
627634
struct mlx5_flow_spec *spec;
628635
int err = 0;
@@ -644,10 +651,7 @@ mlx5e_generate_ttc_rule(struct mlx5e_priv *priv,
644651
MLX5_SET(fte_match_param, spec->match_value, outer_headers.ethertype, etype);
645652
}
646653

647-
rule = mlx5_add_flow_rules(ft, spec,
648-
MLX5_FLOW_CONTEXT_ACTION_FWD_DEST,
649-
MLX5_FS_DEFAULT_FLOW_TAG,
650-
dest, 1);
654+
rule = mlx5_add_flow_rules(ft, spec, &flow_act, dest, 1);
651655
if (IS_ERR(rule)) {
652656
err = PTR_ERR(rule);
653657
netdev_err(priv->netdev, "%s: add rule failed\n", __func__);
@@ -810,6 +814,11 @@ static void mlx5e_del_l2_flow_rule(struct mlx5e_priv *priv,
810814
static int mlx5e_add_l2_flow_rule(struct mlx5e_priv *priv,
811815
struct mlx5e_l2_rule *ai, int type)
812816
{
817+
struct mlx5_flow_act flow_act = {
818+
.action = MLX5_FLOW_CONTEXT_ACTION_FWD_DEST,
819+
.flow_tag = MLX5_FS_DEFAULT_FLOW_TAG,
820+
.encap_id = 0,
821+
};
813822
struct mlx5_flow_table *ft = priv->fs.l2.ft.t;
814823
struct mlx5_flow_destination dest;
815824
struct mlx5_flow_spec *spec;
@@ -848,9 +857,7 @@ static int mlx5e_add_l2_flow_rule(struct mlx5e_priv *priv,
848857
break;
849858
}
850859

851-
ai->rule = mlx5_add_flow_rules(ft, spec,
852-
MLX5_FLOW_CONTEXT_ACTION_FWD_DEST,
853-
MLX5_FS_DEFAULT_FLOW_TAG, &dest, 1);
860+
ai->rule = mlx5_add_flow_rules(ft, spec, &flow_act, &dest, 1);
854861
if (IS_ERR(ai->rule)) {
855862
netdev_err(priv->netdev, "%s: add l2 rule(mac:%pM) failed\n",
856863
__func__, mv_dmac);

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -290,10 +290,10 @@ add_ethtool_flow_rule(struct mlx5e_priv *priv,
290290
struct ethtool_rx_flow_spec *fs)
291291
{
292292
struct mlx5_flow_destination *dst = NULL;
293+
struct mlx5_flow_act flow_act = {0};
293294
struct mlx5_flow_spec *spec;
294295
struct mlx5_flow_handle *rule;
295296
int err = 0;
296-
u32 action;
297297

298298
spec = mlx5_vzalloc(sizeof(*spec));
299299
if (!spec)
@@ -304,7 +304,7 @@ add_ethtool_flow_rule(struct mlx5e_priv *priv,
304304
goto free;
305305

306306
if (fs->ring_cookie == RX_CLS_FLOW_DISC) {
307-
action = MLX5_FLOW_CONTEXT_ACTION_DROP;
307+
flow_act.action = MLX5_FLOW_CONTEXT_ACTION_DROP;
308308
} else {
309309
dst = kzalloc(sizeof(*dst), GFP_KERNEL);
310310
if (!dst) {
@@ -314,12 +314,12 @@ add_ethtool_flow_rule(struct mlx5e_priv *priv,
314314

315315
dst->type = MLX5_FLOW_DESTINATION_TYPE_TIR;
316316
dst->tir_num = priv->direct_tir[fs->ring_cookie].tirn;
317-
action = MLX5_FLOW_CONTEXT_ACTION_FWD_DEST;
317+
flow_act.action = MLX5_FLOW_CONTEXT_ACTION_FWD_DEST;
318318
}
319319

320320
spec->match_criteria_enable = (!outer_header_zero(spec->match_criteria));
321-
rule = mlx5_add_flow_rules(ft, spec, action,
322-
MLX5_FS_DEFAULT_FLOW_TAG, dst, 1);
321+
flow_act.flow_tag = MLX5_FS_DEFAULT_FLOW_TAG;
322+
rule = mlx5_add_flow_rules(ft, spec, &flow_act, dst, 1);
323323
if (IS_ERR(rule)) {
324324
err = PTR_ERR(rule);
325325
netdev_err(priv->netdev, "%s: failed to add ethtool steering rule: %d\n",

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,11 @@ mlx5e_tc_add_nic_flow(struct mlx5e_priv *priv,
6161
{
6262
struct mlx5_core_dev *dev = priv->mdev;
6363
struct mlx5_flow_destination dest = { 0 };
64+
struct mlx5_flow_act flow_act = {
65+
.action = action,
66+
.flow_tag = flow_tag,
67+
.encap_id = 0,
68+
};
6469
struct mlx5_fc *counter = NULL;
6570
struct mlx5_flow_handle *rule;
6671
bool table_created = false;
@@ -95,9 +100,7 @@ mlx5e_tc_add_nic_flow(struct mlx5e_priv *priv,
95100
}
96101

97102
spec->match_criteria_enable = MLX5_MATCH_OUTER_HEADERS;
98-
rule = mlx5_add_flow_rules(priv->fs.tc.t, spec,
99-
action, flow_tag,
100-
&dest, 1);
103+
rule = mlx5_add_flow_rules(priv->fs.tc.t, spec, &flow_act, &dest, 1);
101104

102105
if (IS_ERR(rule))
103106
goto err_add_rule;

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

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,7 @@ __esw_fdb_set_vport_rule(struct mlx5_eswitch *esw, u32 vport, bool rx_rule,
244244
int match_header = (is_zero_ether_addr(mac_c) ? 0 :
245245
MLX5_MATCH_OUTER_HEADERS);
246246
struct mlx5_flow_handle *flow_rule = NULL;
247+
struct mlx5_flow_act flow_act = {0};
247248
struct mlx5_flow_destination dest;
248249
struct mlx5_flow_spec *spec;
249250
void *mv_misc = NULL;
@@ -285,10 +286,10 @@ __esw_fdb_set_vport_rule(struct mlx5_eswitch *esw, u32 vport, bool rx_rule,
285286
"\tFDB add rule dmac_v(%pM) dmac_c(%pM) -> vport(%d)\n",
286287
dmac_v, dmac_c, vport);
287288
spec->match_criteria_enable = match_header;
289+
flow_act.action = MLX5_FLOW_CONTEXT_ACTION_FWD_DEST;
288290
flow_rule =
289291
mlx5_add_flow_rules(esw->fdb_table.fdb, spec,
290-
MLX5_FLOW_CONTEXT_ACTION_FWD_DEST,
291-
0, &dest, 1);
292+
&flow_act, &dest, 1);
292293
if (IS_ERR(flow_rule)) {
293294
esw_warn(esw->dev,
294295
"FDB: Failed to add flow rule: dmac_v(%pM) dmac_c(%pM) -> vport(%d), err(%ld)\n",
@@ -1212,6 +1213,7 @@ static void esw_vport_disable_ingress_acl(struct mlx5_eswitch *esw,
12121213
static int esw_vport_ingress_config(struct mlx5_eswitch *esw,
12131214
struct mlx5_vport *vport)
12141215
{
1216+
struct mlx5_flow_act flow_act = {0};
12151217
struct mlx5_flow_spec *spec;
12161218
int err = 0;
12171219
u8 *smac_v;
@@ -1264,10 +1266,10 @@ static int esw_vport_ingress_config(struct mlx5_eswitch *esw,
12641266
}
12651267

12661268
spec->match_criteria_enable = MLX5_MATCH_OUTER_HEADERS;
1269+
flow_act.action = MLX5_FLOW_CONTEXT_ACTION_ALLOW;
12671270
vport->ingress.allow_rule =
12681271
mlx5_add_flow_rules(vport->ingress.acl, spec,
1269-
MLX5_FLOW_CONTEXT_ACTION_ALLOW,
1270-
0, NULL, 0);
1272+
&flow_act, NULL, 0);
12711273
if (IS_ERR(vport->ingress.allow_rule)) {
12721274
err = PTR_ERR(vport->ingress.allow_rule);
12731275
esw_warn(esw->dev,
@@ -1278,10 +1280,10 @@ static int esw_vport_ingress_config(struct mlx5_eswitch *esw,
12781280
}
12791281

12801282
memset(spec, 0, sizeof(*spec));
1283+
flow_act.action = MLX5_FLOW_CONTEXT_ACTION_DROP;
12811284
vport->ingress.drop_rule =
12821285
mlx5_add_flow_rules(vport->ingress.acl, spec,
1283-
MLX5_FLOW_CONTEXT_ACTION_DROP,
1284-
0, NULL, 0);
1286+
&flow_act, NULL, 0);
12851287
if (IS_ERR(vport->ingress.drop_rule)) {
12861288
err = PTR_ERR(vport->ingress.drop_rule);
12871289
esw_warn(esw->dev,
@@ -1301,6 +1303,7 @@ static int esw_vport_ingress_config(struct mlx5_eswitch *esw,
13011303
static int esw_vport_egress_config(struct mlx5_eswitch *esw,
13021304
struct mlx5_vport *vport)
13031305
{
1306+
struct mlx5_flow_act flow_act = {0};
13041307
struct mlx5_flow_spec *spec;
13051308
int err = 0;
13061309

@@ -1338,10 +1341,10 @@ static int esw_vport_egress_config(struct mlx5_eswitch *esw,
13381341
MLX5_SET(fte_match_param, spec->match_value, outer_headers.first_vid, vport->info.vlan);
13391342

13401343
spec->match_criteria_enable = MLX5_MATCH_OUTER_HEADERS;
1344+
flow_act.action = MLX5_FLOW_CONTEXT_ACTION_ALLOW;
13411345
vport->egress.allowed_vlan =
13421346
mlx5_add_flow_rules(vport->egress.acl, spec,
1343-
MLX5_FLOW_CONTEXT_ACTION_ALLOW,
1344-
0, NULL, 0);
1347+
&flow_act, NULL, 0);
13451348
if (IS_ERR(vport->egress.allowed_vlan)) {
13461349
err = PTR_ERR(vport->egress.allowed_vlan);
13471350
esw_warn(esw->dev,
@@ -1353,10 +1356,10 @@ static int esw_vport_egress_config(struct mlx5_eswitch *esw,
13531356

13541357
/* Drop others rule (star rule) */
13551358
memset(spec, 0, sizeof(*spec));
1359+
flow_act.action = MLX5_FLOW_CONTEXT_ACTION_DROP;
13561360
vport->egress.drop_rule =
13571361
mlx5_add_flow_rules(vport->egress.acl, spec,
1358-
MLX5_FLOW_CONTEXT_ACTION_DROP,
1359-
0, NULL, 0);
1362+
&flow_act, NULL, 0);
13601363
if (IS_ERR(vport->egress.drop_rule)) {
13611364
err = PTR_ERR(vport->egress.drop_rule);
13621365
esw_warn(esw->dev,

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

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -49,23 +49,23 @@ mlx5_eswitch_add_offloaded_rule(struct mlx5_eswitch *esw,
4949
struct mlx5_esw_flow_attr *attr)
5050
{
5151
struct mlx5_flow_destination dest[2] = {};
52+
struct mlx5_flow_act flow_act = {0};
5253
struct mlx5_fc *counter = NULL;
5354
struct mlx5_flow_handle *rule;
5455
void *misc;
55-
int action;
5656
int i = 0;
5757

5858
if (esw->mode != SRIOV_OFFLOADS)
5959
return ERR_PTR(-EOPNOTSUPP);
6060

61-
action = attr->action;
61+
flow_act.action = attr->action;
6262

63-
if (action & MLX5_FLOW_CONTEXT_ACTION_FWD_DEST) {
63+
if (flow_act.action & MLX5_FLOW_CONTEXT_ACTION_FWD_DEST) {
6464
dest[i].type = MLX5_FLOW_DESTINATION_TYPE_VPORT;
6565
dest[i].vport_num = attr->out_rep->vport;
6666
i++;
6767
}
68-
if (action & MLX5_FLOW_CONTEXT_ACTION_COUNT) {
68+
if (flow_act.action & MLX5_FLOW_CONTEXT_ACTION_COUNT) {
6969
counter = mlx5_fc_create(esw->dev, true);
7070
if (IS_ERR(counter))
7171
return ERR_CAST(counter);
@@ -84,7 +84,7 @@ mlx5_eswitch_add_offloaded_rule(struct mlx5_eswitch *esw,
8484
MLX5_MATCH_MISC_PARAMETERS;
8585

8686
rule = mlx5_add_flow_rules((struct mlx5_flow_table *)esw->fdb_table.fdb,
87-
spec, action, 0, dest, i);
87+
spec, &flow_act, dest, i);
8888
if (IS_ERR(rule))
8989
mlx5_fc_destroy(esw->dev, counter);
9090

@@ -274,6 +274,7 @@ int mlx5_eswitch_del_vlan_action(struct mlx5_eswitch *esw,
274274
static struct mlx5_flow_handle *
275275
mlx5_eswitch_add_send_to_vport_rule(struct mlx5_eswitch *esw, int vport, u32 sqn)
276276
{
277+
struct mlx5_flow_act flow_act = {0};
277278
struct mlx5_flow_destination dest;
278279
struct mlx5_flow_handle *flow_rule;
279280
struct mlx5_flow_spec *spec;
@@ -297,10 +298,10 @@ mlx5_eswitch_add_send_to_vport_rule(struct mlx5_eswitch *esw, int vport, u32 sqn
297298
spec->match_criteria_enable = MLX5_MATCH_MISC_PARAMETERS;
298299
dest.type = MLX5_FLOW_DESTINATION_TYPE_VPORT;
299300
dest.vport_num = vport;
301+
flow_act.action = MLX5_FLOW_CONTEXT_ACTION_FWD_DEST;
300302

301303
flow_rule = mlx5_add_flow_rules(esw->fdb_table.offloads.fdb, spec,
302-
MLX5_FLOW_CONTEXT_ACTION_FWD_DEST,
303-
0, &dest, 1);
304+
&flow_act, &dest, 1);
304305
if (IS_ERR(flow_rule))
305306
esw_warn(esw->dev, "FDB: Failed to add send to vport rule err %ld\n", PTR_ERR(flow_rule));
306307
out:
@@ -363,6 +364,7 @@ int mlx5_eswitch_sqs2vport_start(struct mlx5_eswitch *esw,
363364

364365
static int esw_add_fdb_miss_rule(struct mlx5_eswitch *esw)
365366
{
367+
struct mlx5_flow_act flow_act = {0};
366368
struct mlx5_flow_destination dest;
367369
struct mlx5_flow_handle *flow_rule = NULL;
368370
struct mlx5_flow_spec *spec;
@@ -377,10 +379,10 @@ static int esw_add_fdb_miss_rule(struct mlx5_eswitch *esw)
377379

378380
dest.type = MLX5_FLOW_DESTINATION_TYPE_VPORT;
379381
dest.vport_num = 0;
382+
flow_act.action = MLX5_FLOW_CONTEXT_ACTION_FWD_DEST;
380383

381384
flow_rule = mlx5_add_flow_rules(esw->fdb_table.offloads.fdb, spec,
382-
MLX5_FLOW_CONTEXT_ACTION_FWD_DEST,
383-
0, &dest, 1);
385+
&flow_act, &dest, 1);
384386
if (IS_ERR(flow_rule)) {
385387
err = PTR_ERR(flow_rule);
386388
esw_warn(esw->dev, "FDB: Failed to add miss flow rule err %d\n", err);
@@ -591,6 +593,7 @@ static void esw_destroy_vport_rx_group(struct mlx5_eswitch *esw)
591593
struct mlx5_flow_handle *
592594
mlx5_eswitch_create_vport_rx_rule(struct mlx5_eswitch *esw, int vport, u32 tirn)
593595
{
596+
struct mlx5_flow_act flow_act = {0};
594597
struct mlx5_flow_destination dest;
595598
struct mlx5_flow_handle *flow_rule;
596599
struct mlx5_flow_spec *spec;
@@ -613,9 +616,9 @@ mlx5_eswitch_create_vport_rx_rule(struct mlx5_eswitch *esw, int vport, u32 tirn)
613616
dest.type = MLX5_FLOW_DESTINATION_TYPE_TIR;
614617
dest.tir_num = tirn;
615618

619+
flow_act.action = MLX5_FLOW_CONTEXT_ACTION_FWD_DEST;
616620
flow_rule = mlx5_add_flow_rules(esw->offloads.ft_offloads, spec,
617-
MLX5_FLOW_CONTEXT_ACTION_FWD_DEST,
618-
0, &dest, 1);
621+
&flow_act, &dest, 1);
619622
if (IS_ERR(flow_rule)) {
620623
esw_warn(esw->dev, "fs offloads: Failed to add vport rx rule err %ld\n", PTR_ERR(flow_rule));
621624
goto out;

0 commit comments

Comments
 (0)