Skip to content

Commit b523f23

Browse files
committed
Merge branch 'mlx5-updates-2024-09-11'
Saeed Mahameed says: ==================== Misc updates to mlx5 driver: 1) Fix HW steering ret value and align with kdoc 2) Flow steering cleanups and add support for no append at software level 3) Support for sync reset using hot reset 4) RX SW counter to cover no-split events in header/data split mode 5) Make affinity of SFs configurable ==================== Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
2 parents f0c7de5 + cc18129 commit b523f23

File tree

22 files changed

+878
-573
lines changed

22 files changed

+878
-573
lines changed

Documentation/networking/device_drivers/ethernet/mellanox/mlx5/counters.rst

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,22 @@ the software port.
218218
[#accel]_.
219219
- Informative
220220

221+
* - `rx[i]_hds_nosplit_packets`
222+
- Number of packets that were not split in header/data split mode. A
223+
packet will not get split when the hardware does not support its
224+
protocol splitting. An example such a protocol is ICMPv4/v6. Currently
225+
TCP and UDP with IPv4/IPv6 are supported for header/data split
226+
[#accel]_.
227+
- Informative
228+
229+
* - `rx[i]_hds_nosplit_bytes`
230+
- Number of bytes for packets that were not split in header/data split
231+
mode. A packet will not get split when the hardware does not support its
232+
protocol splitting. An example such a protocol is ICMPv4/v6. Currently
233+
TCP and UDP with IPv4/IPv6 are supported for header/data split
234+
[#accel]_.
235+
- Informative
236+
221237
* - `rx[i]_lro_packets`
222238
- The number of LRO packets received on ring i [#accel]_.
223239
- Acceleration

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -754,6 +754,8 @@ static const char *cmd_status_str(u8 status)
754754
return "bad resource";
755755
case MLX5_CMD_STAT_RES_BUSY:
756756
return "resource busy";
757+
case MLX5_CMD_STAT_NOT_READY:
758+
return "FW not ready";
757759
case MLX5_CMD_STAT_LIM_ERR:
758760
return "limits exceeded";
759761
case MLX5_CMD_STAT_BAD_RES_STATE_ERR:
@@ -787,6 +789,7 @@ static int cmd_status_to_err(u8 status)
787789
case MLX5_CMD_STAT_BAD_SYS_STATE_ERR: return -EIO;
788790
case MLX5_CMD_STAT_BAD_RES_ERR: return -EINVAL;
789791
case MLX5_CMD_STAT_RES_BUSY: return -EBUSY;
792+
case MLX5_CMD_STAT_NOT_READY: return -EAGAIN;
790793
case MLX5_CMD_STAT_LIM_ERR: return -ENOMEM;
791794
case MLX5_CMD_STAT_BAD_RES_STATE_ERR: return -EINVAL;
792795
case MLX5_CMD_STAT_IX_ERR: return -EINVAL;
@@ -815,14 +818,16 @@ EXPORT_SYMBOL(mlx5_cmd_out_err);
815818
static void cmd_status_print(struct mlx5_core_dev *dev, void *in, void *out)
816819
{
817820
u16 opcode, op_mod;
821+
u8 status;
818822
u16 uid;
819823

820824
opcode = in_to_opcode(in);
821825
op_mod = MLX5_GET(mbox_in, in, op_mod);
822826
uid = MLX5_GET(mbox_in, in, uid);
827+
status = MLX5_GET(mbox_out, out, status);
823828

824829
if (!uid && opcode != MLX5_CMD_OP_DESTROY_MKEY &&
825-
opcode != MLX5_CMD_OP_CREATE_UCTX)
830+
opcode != MLX5_CMD_OP_CREATE_UCTX && status != MLX5_CMD_STAT_NOT_READY)
826831
mlx5_cmd_out_err(dev, opcode, op_mod, out);
827832
}
828833

drivers/net/ethernet/mellanox/mlx5/core/diag/fs_tracepoint.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -203,10 +203,10 @@ TRACE_EVENT(mlx5_fs_set_fte,
203203
fs_get_obj(__entry->fg, fte->node.parent);
204204
__entry->group_index = __entry->fg->id;
205205
__entry->index = fte->index;
206-
__entry->action = fte->action.action;
206+
__entry->action = fte->act_dests.action.action;
207207
__entry->mask_enable = __entry->fg->mask.match_criteria_enable;
208-
__entry->flow_tag = fte->flow_context.flow_tag;
209-
__entry->flow_source = fte->flow_context.flow_source;
208+
__entry->flow_tag = fte->act_dests.flow_context.flow_tag;
209+
__entry->flow_source = fte->act_dests.flow_context.flow_source;
210210
memcpy(__entry->mask_outer,
211211
MLX5_ADDR_OF(fte_match_param,
212212
&__entry->fg->mask.match_criteria,
@@ -284,7 +284,7 @@ TRACE_EVENT(mlx5_fs_add_rule,
284284
TP_fast_assign(
285285
__entry->rule = rule;
286286
fs_get_obj(__entry->fte, rule->node.parent);
287-
__entry->index = __entry->fte->dests_size - 1;
287+
__entry->index = __entry->fte->act_dests.dests_size - 1;
288288
__entry->sw_action = rule->sw_action;
289289
memcpy(__entry->destination,
290290
&rule->dest_attr,

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

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1016,30 +1016,31 @@ static int mlx5e_alloc_rq(struct mlx5e_params *params,
10161016

10171017
static void mlx5e_free_rq(struct mlx5e_rq *rq)
10181018
{
1019-
struct bpf_prog *old_prog;
1020-
1021-
if (xdp_rxq_info_is_reg(&rq->xdp_rxq)) {
1022-
old_prog = rcu_dereference_protected(rq->xdp_prog,
1023-
lockdep_is_held(&rq->priv->state_lock));
1024-
if (old_prog)
1025-
bpf_prog_put(old_prog);
1026-
}
1019+
kvfree(rq->dim);
1020+
page_pool_destroy(rq->page_pool);
10271021

10281022
switch (rq->wq_type) {
10291023
case MLX5_WQ_TYPE_LINKED_LIST_STRIDING_RQ:
1024+
mlx5e_rq_free_shampo(rq);
10301025
kvfree(rq->mpwqe.info);
10311026
mlx5_core_destroy_mkey(rq->mdev, be32_to_cpu(rq->mpwqe.umr_mkey_be));
10321027
mlx5e_free_mpwqe_rq_drop_page(rq);
1033-
mlx5e_rq_free_shampo(rq);
10341028
break;
10351029
default: /* MLX5_WQ_TYPE_CYCLIC */
10361030
mlx5e_free_wqe_alloc_info(rq);
10371031
}
10381032

1039-
kvfree(rq->dim);
1040-
xdp_rxq_info_unreg(&rq->xdp_rxq);
1041-
page_pool_destroy(rq->page_pool);
10421033
mlx5_wq_destroy(&rq->wq_ctrl);
1034+
1035+
if (xdp_rxq_info_is_reg(&rq->xdp_rxq)) {
1036+
struct bpf_prog *old_prog;
1037+
1038+
old_prog = rcu_dereference_protected(rq->xdp_prog,
1039+
lockdep_is_held(&rq->priv->state_lock));
1040+
if (old_prog)
1041+
bpf_prog_put(old_prog);
1042+
}
1043+
xdp_rxq_info_unreg(&rq->xdp_rxq);
10431044
}
10441045

10451046
int mlx5e_create_rq(struct mlx5e_rq *rq, struct mlx5e_rq_param *param, u16 q_counter)

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2346,6 +2346,9 @@ static void mlx5e_handle_rx_cqe_mpwrq_shampo(struct mlx5e_rq *rq, struct mlx5_cq
23462346
stats->hds_nodata_packets++;
23472347
stats->hds_nodata_bytes += head_size;
23482348
}
2349+
} else {
2350+
stats->hds_nosplit_packets++;
2351+
stats->hds_nosplit_bytes += data_bcnt;
23492352
}
23502353

23512354
mlx5e_shampo_complete_rx_cqe(rq, cqe, cqe_bcnt, *skb);

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,8 @@ static const struct counter_desc sw_stats_desc[] = {
144144
{ MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_gro_large_hds) },
145145
{ MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_hds_nodata_packets) },
146146
{ MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_hds_nodata_bytes) },
147+
{ MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_hds_nosplit_packets) },
148+
{ MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_hds_nosplit_bytes) },
147149
{ MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_ecn_mark) },
148150
{ MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_removed_vlan_packets) },
149151
{ MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_csum_unnecessary) },
@@ -347,6 +349,8 @@ static void mlx5e_stats_grp_sw_update_stats_rq_stats(struct mlx5e_sw_stats *s,
347349
s->rx_gro_large_hds += rq_stats->gro_large_hds;
348350
s->rx_hds_nodata_packets += rq_stats->hds_nodata_packets;
349351
s->rx_hds_nodata_bytes += rq_stats->hds_nodata_bytes;
352+
s->rx_hds_nosplit_packets += rq_stats->hds_nosplit_packets;
353+
s->rx_hds_nosplit_bytes += rq_stats->hds_nosplit_bytes;
350354
s->rx_ecn_mark += rq_stats->ecn_mark;
351355
s->rx_removed_vlan_packets += rq_stats->removed_vlan_packets;
352356
s->rx_csum_none += rq_stats->csum_none;
@@ -2062,6 +2066,8 @@ static const struct counter_desc rq_stats_desc[] = {
20622066
{ MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, gro_large_hds) },
20632067
{ MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, hds_nodata_packets) },
20642068
{ MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, hds_nodata_bytes) },
2069+
{ MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, hds_nosplit_packets) },
2070+
{ MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, hds_nosplit_bytes) },
20652071
{ MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, ecn_mark) },
20662072
{ MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, removed_vlan_packets) },
20672073
{ MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, wqe_err) },

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,8 @@ struct mlx5e_sw_stats {
156156
u64 rx_gro_large_hds;
157157
u64 rx_hds_nodata_packets;
158158
u64 rx_hds_nodata_bytes;
159+
u64 rx_hds_nosplit_packets;
160+
u64 rx_hds_nosplit_bytes;
159161
u64 rx_mcast_packets;
160162
u64 rx_ecn_mark;
161163
u64 rx_removed_vlan_packets;
@@ -356,6 +358,8 @@ struct mlx5e_rq_stats {
356358
u64 gro_large_hds;
357359
u64 hds_nodata_packets;
358360
u64 hds_nodata_bytes;
361+
u64 hds_nosplit_packets;
362+
u64 hds_nosplit_bytes;
359363
u64 mcast_packets;
360364
u64 ecn_mark;
361365
u64 removed_vlan_packets;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -896,7 +896,7 @@ static int comp_irq_request_sf(struct mlx5_core_dev *dev, u16 vecidx)
896896
if (!mlx5_irq_pool_is_sf_pool(pool))
897897
return comp_irq_request_pci(dev, vecidx);
898898

899-
af_desc.is_managed = 1;
899+
af_desc.is_managed = false;
900900
cpumask_copy(&af_desc.mask, cpu_online_mask);
901901
cpumask_andnot(&af_desc.mask, &af_desc.mask, &table->used_cpus);
902902
irq = mlx5_irq_affinity_request(dev, pool, &af_desc);

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

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,7 @@ static int mlx5_set_extended_dest(struct mlx5_core_dev *dev,
463463
int num_encap = 0;
464464

465465
*extended_dest = false;
466-
if (!(fte->action.action & MLX5_FLOW_CONTEXT_ACTION_FWD_DEST))
466+
if (!(fte->act_dests.action.action & MLX5_FLOW_CONTEXT_ACTION_FWD_DEST))
467467
return 0;
468468

469469
list_for_each_entry(dst, &fte->node.children, node.list) {
@@ -502,17 +502,17 @@ mlx5_cmd_set_fte_flow_meter(struct fs_fte *fte, void *in_flow_context)
502502
execute_aso[0]);
503503
MLX5_SET(execute_aso, execute_aso, valid, 1);
504504
MLX5_SET(execute_aso, execute_aso, aso_object_id,
505-
fte->action.exe_aso.object_id);
505+
fte->act_dests.action.exe_aso.object_id);
506506

507507
exe_aso_ctrl = MLX5_ADDR_OF(execute_aso, execute_aso, exe_aso_ctrl);
508508
MLX5_SET(exe_aso_ctrl_flow_meter, exe_aso_ctrl, return_reg_id,
509-
fte->action.exe_aso.return_reg_id);
509+
fte->act_dests.action.exe_aso.return_reg_id);
510510
MLX5_SET(exe_aso_ctrl_flow_meter, exe_aso_ctrl, aso_type,
511-
fte->action.exe_aso.type);
511+
fte->act_dests.action.exe_aso.type);
512512
MLX5_SET(exe_aso_ctrl_flow_meter, exe_aso_ctrl, init_color,
513-
fte->action.exe_aso.flow_meter.init_color);
513+
fte->act_dests.action.exe_aso.flow_meter.init_color);
514514
MLX5_SET(exe_aso_ctrl_flow_meter, exe_aso_ctrl, meter_id,
515-
fte->action.exe_aso.flow_meter.meter_idx);
515+
fte->act_dests.action.exe_aso.flow_meter.meter_idx);
516516
}
517517

518518
static int mlx5_cmd_set_fte(struct mlx5_core_dev *dev,
@@ -541,7 +541,7 @@ static int mlx5_cmd_set_fte(struct mlx5_core_dev *dev,
541541
else
542542
dst_cnt_size = MLX5_ST_SZ_BYTES(extended_dest_format);
543543

544-
inlen = MLX5_ST_SZ_BYTES(set_fte_in) + fte->dests_size * dst_cnt_size;
544+
inlen = MLX5_ST_SZ_BYTES(set_fte_in) + fte->act_dests.dests_size * dst_cnt_size;
545545
in = kvzalloc(inlen, GFP_KERNEL);
546546
if (!in)
547547
return -ENOMEM;
@@ -553,7 +553,7 @@ static int mlx5_cmd_set_fte(struct mlx5_core_dev *dev,
553553
MLX5_SET(set_fte_in, in, table_id, ft->id);
554554
MLX5_SET(set_fte_in, in, flow_index, fte->index);
555555
MLX5_SET(set_fte_in, in, ignore_flow_level,
556-
!!(fte->action.flags & FLOW_ACT_IGNORE_FLOW_LEVEL));
556+
!!(fte->act_dests.action.flags & FLOW_ACT_IGNORE_FLOW_LEVEL));
557557

558558
MLX5_SET(set_fte_in, in, vport_number, ft->vport);
559559
MLX5_SET(set_fte_in, in, other_vport,
@@ -563,23 +563,23 @@ static int mlx5_cmd_set_fte(struct mlx5_core_dev *dev,
563563
MLX5_SET(flow_context, in_flow_context, group_id, group_id);
564564

565565
MLX5_SET(flow_context, in_flow_context, flow_tag,
566-
fte->flow_context.flow_tag);
566+
fte->act_dests.flow_context.flow_tag);
567567
MLX5_SET(flow_context, in_flow_context, flow_source,
568-
fte->flow_context.flow_source);
568+
fte->act_dests.flow_context.flow_source);
569569
MLX5_SET(flow_context, in_flow_context, uplink_hairpin_en,
570-
!!(fte->flow_context.flags & FLOW_CONTEXT_UPLINK_HAIRPIN_EN));
570+
!!(fte->act_dests.flow_context.flags & FLOW_CONTEXT_UPLINK_HAIRPIN_EN));
571571

572572
MLX5_SET(flow_context, in_flow_context, extended_destination,
573573
extended_dest);
574574

575-
action = fte->action.action;
575+
action = fte->act_dests.action.action;
576576
if (extended_dest)
577577
action &= ~MLX5_FLOW_CONTEXT_ACTION_PACKET_REFORMAT;
578578

579579
MLX5_SET(flow_context, in_flow_context, action, action);
580580

581-
if (!extended_dest && fte->action.pkt_reformat) {
582-
struct mlx5_pkt_reformat *pkt_reformat = fte->action.pkt_reformat;
581+
if (!extended_dest && fte->act_dests.action.pkt_reformat) {
582+
struct mlx5_pkt_reformat *pkt_reformat = fte->act_dests.action.pkt_reformat;
583583

584584
if (pkt_reformat->owner == MLX5_FLOW_RESOURCE_OWNER_SW) {
585585
reformat_id = mlx5_fs_dr_action_get_pkt_reformat_id(pkt_reformat);
@@ -591,46 +591,46 @@ static int mlx5_cmd_set_fte(struct mlx5_core_dev *dev,
591591
goto err_out;
592592
}
593593
} else {
594-
reformat_id = fte->action.pkt_reformat->id;
594+
reformat_id = fte->act_dests.action.pkt_reformat->id;
595595
}
596596
}
597597

598598
MLX5_SET(flow_context, in_flow_context, packet_reformat_id, (u32)reformat_id);
599599

600-
if (fte->action.modify_hdr) {
601-
if (fte->action.modify_hdr->owner == MLX5_FLOW_RESOURCE_OWNER_SW) {
600+
if (fte->act_dests.action.modify_hdr) {
601+
if (fte->act_dests.action.modify_hdr->owner == MLX5_FLOW_RESOURCE_OWNER_SW) {
602602
mlx5_core_err(dev, "Can't use SW-owned modify_hdr in FW-owned table\n");
603603
err = -EOPNOTSUPP;
604604
goto err_out;
605605
}
606606

607607
MLX5_SET(flow_context, in_flow_context, modify_header_id,
608-
fte->action.modify_hdr->id);
608+
fte->act_dests.action.modify_hdr->id);
609609
}
610610

611611
MLX5_SET(flow_context, in_flow_context, encrypt_decrypt_type,
612-
fte->action.crypto.type);
612+
fte->act_dests.action.crypto.type);
613613
MLX5_SET(flow_context, in_flow_context, encrypt_decrypt_obj_id,
614-
fte->action.crypto.obj_id);
614+
fte->act_dests.action.crypto.obj_id);
615615

616616
vlan = MLX5_ADDR_OF(flow_context, in_flow_context, push_vlan);
617617

618-
MLX5_SET(vlan, vlan, ethtype, fte->action.vlan[0].ethtype);
619-
MLX5_SET(vlan, vlan, vid, fte->action.vlan[0].vid);
620-
MLX5_SET(vlan, vlan, prio, fte->action.vlan[0].prio);
618+
MLX5_SET(vlan, vlan, ethtype, fte->act_dests.action.vlan[0].ethtype);
619+
MLX5_SET(vlan, vlan, vid, fte->act_dests.action.vlan[0].vid);
620+
MLX5_SET(vlan, vlan, prio, fte->act_dests.action.vlan[0].prio);
621621

622622
vlan = MLX5_ADDR_OF(flow_context, in_flow_context, push_vlan_2);
623623

624-
MLX5_SET(vlan, vlan, ethtype, fte->action.vlan[1].ethtype);
625-
MLX5_SET(vlan, vlan, vid, fte->action.vlan[1].vid);
626-
MLX5_SET(vlan, vlan, prio, fte->action.vlan[1].prio);
624+
MLX5_SET(vlan, vlan, ethtype, fte->act_dests.action.vlan[1].ethtype);
625+
MLX5_SET(vlan, vlan, vid, fte->act_dests.action.vlan[1].vid);
626+
MLX5_SET(vlan, vlan, prio, fte->act_dests.action.vlan[1].prio);
627627

628628
in_match_value = MLX5_ADDR_OF(flow_context, in_flow_context,
629629
match_value);
630630
memcpy(in_match_value, &fte->val, sizeof(fte->val));
631631

632632
in_dests = MLX5_ADDR_OF(flow_context, in_flow_context, destination);
633-
if (fte->action.action & MLX5_FLOW_CONTEXT_ACTION_FWD_DEST) {
633+
if (fte->act_dests.action.action & MLX5_FLOW_CONTEXT_ACTION_FWD_DEST) {
634634
int list_size = 0;
635635

636636
list_for_each_entry(dst, &fte->node.children, node.list) {
@@ -706,7 +706,7 @@ static int mlx5_cmd_set_fte(struct mlx5_core_dev *dev,
706706
list_size);
707707
}
708708

709-
if (fte->action.action & MLX5_FLOW_CONTEXT_ACTION_COUNT) {
709+
if (fte->act_dests.action.action & MLX5_FLOW_CONTEXT_ACTION_COUNT) {
710710
int max_list_size = BIT(MLX5_CAP_FLOWTABLE_TYPE(dev,
711711
log_max_flow_counter,
712712
ft->type));
@@ -731,8 +731,8 @@ static int mlx5_cmd_set_fte(struct mlx5_core_dev *dev,
731731
list_size);
732732
}
733733

734-
if (fte->action.action & MLX5_FLOW_CONTEXT_ACTION_EXECUTE_ASO) {
735-
if (fte->action.exe_aso.type == MLX5_EXE_ASO_FLOW_METER) {
734+
if (fte->act_dests.action.action & MLX5_FLOW_CONTEXT_ACTION_EXECUTE_ASO) {
735+
if (fte->act_dests.action.exe_aso.type == MLX5_EXE_ASO_FLOW_METER) {
736736
mlx5_cmd_set_fte_flow_meter(fte, in_flow_context);
737737
} else {
738738
err = -EOPNOTSUPP;
@@ -1071,7 +1071,7 @@ static int mlx5_cmd_create_match_definer(struct mlx5_flow_root_namespace *ns,
10711071
static u32 mlx5_cmd_get_capabilities(struct mlx5_flow_root_namespace *ns,
10721072
enum fs_flow_table_type ft_type)
10731073
{
1074-
return 0;
1074+
return MLX5_FLOW_STEERING_CAP_DUPLICATE_MATCH;
10751075
}
10761076

10771077
static const struct mlx5_flow_cmds mlx5_flow_cmds = {

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,4 +124,12 @@ const struct mlx5_flow_cmds *mlx5_fs_cmd_get_fw_cmds(void);
124124

125125
int mlx5_fs_cmd_set_l2table_entry_silent(struct mlx5_core_dev *dev, u8 silent_mode);
126126
int mlx5_fs_cmd_set_tx_flow_table_root(struct mlx5_core_dev *dev, u32 ft_id, bool disconnect);
127+
128+
static inline bool mlx5_fs_cmd_is_fw_term_table(struct mlx5_flow_table *ft)
129+
{
130+
if (ft->flags & MLX5_FLOW_TABLE_TERMINATION)
131+
return true;
132+
133+
return false;
134+
}
127135
#endif

0 commit comments

Comments
 (0)