1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright 2018 6WIND S.A.
3 * Copyright 2018 Mellanox Technologies, Ltd
13 * Not needed by this file; included to work around the lack of off_t
14 * definition for mlx5dv.h with unpatched rdma-core versions.
16 #include <sys/types.h>
18 /* Verbs headers do not support -pedantic. */
20 #pragma GCC diagnostic ignored "-Wpedantic"
22 #include <infiniband/mlx5dv.h>
23 #include <infiniband/verbs.h>
25 #pragma GCC diagnostic error "-Wpedantic"
28 #include <rte_config.h>
30 #include "mlx5_autoconf.h"
31 #include "mlx5_glue.h"
34 mlx5_glue_fork_init(void)
36 return ibv_fork_init();
39 static struct ibv_pd
*
40 mlx5_glue_alloc_pd(struct ibv_context
*context
)
42 return ibv_alloc_pd(context
);
46 mlx5_glue_dealloc_pd(struct ibv_pd
*pd
)
48 return ibv_dealloc_pd(pd
);
51 static struct ibv_device
**
52 mlx5_glue_get_device_list(int *num_devices
)
54 return ibv_get_device_list(num_devices
);
58 mlx5_glue_free_device_list(struct ibv_device
**list
)
60 ibv_free_device_list(list
);
63 static struct ibv_context
*
64 mlx5_glue_open_device(struct ibv_device
*device
)
66 return ibv_open_device(device
);
70 mlx5_glue_close_device(struct ibv_context
*context
)
72 return ibv_close_device(context
);
76 mlx5_glue_query_device(struct ibv_context
*context
,
77 struct ibv_device_attr
*device_attr
)
79 return ibv_query_device(context
, device_attr
);
83 mlx5_glue_query_device_ex(struct ibv_context
*context
,
84 const struct ibv_query_device_ex_input
*input
,
85 struct ibv_device_attr_ex
*attr
)
87 return ibv_query_device_ex(context
, input
, attr
);
91 mlx5_glue_query_port(struct ibv_context
*context
, uint8_t port_num
,
92 struct ibv_port_attr
*port_attr
)
94 return ibv_query_port(context
, port_num
, port_attr
);
97 static struct ibv_comp_channel
*
98 mlx5_glue_create_comp_channel(struct ibv_context
*context
)
100 return ibv_create_comp_channel(context
);
104 mlx5_glue_destroy_comp_channel(struct ibv_comp_channel
*channel
)
106 return ibv_destroy_comp_channel(channel
);
109 static struct ibv_cq
*
110 mlx5_glue_create_cq(struct ibv_context
*context
, int cqe
, void *cq_context
,
111 struct ibv_comp_channel
*channel
, int comp_vector
)
113 return ibv_create_cq(context
, cqe
, cq_context
, channel
, comp_vector
);
117 mlx5_glue_destroy_cq(struct ibv_cq
*cq
)
119 return ibv_destroy_cq(cq
);
123 mlx5_glue_get_cq_event(struct ibv_comp_channel
*channel
, struct ibv_cq
**cq
,
126 return ibv_get_cq_event(channel
, cq
, cq_context
);
130 mlx5_glue_ack_cq_events(struct ibv_cq
*cq
, unsigned int nevents
)
132 ibv_ack_cq_events(cq
, nevents
);
135 static struct ibv_rwq_ind_table
*
136 mlx5_glue_create_rwq_ind_table(struct ibv_context
*context
,
137 struct ibv_rwq_ind_table_init_attr
*init_attr
)
139 return ibv_create_rwq_ind_table(context
, init_attr
);
143 mlx5_glue_destroy_rwq_ind_table(struct ibv_rwq_ind_table
*rwq_ind_table
)
145 return ibv_destroy_rwq_ind_table(rwq_ind_table
);
148 static struct ibv_wq
*
149 mlx5_glue_create_wq(struct ibv_context
*context
,
150 struct ibv_wq_init_attr
*wq_init_attr
)
152 return ibv_create_wq(context
, wq_init_attr
);
156 mlx5_glue_destroy_wq(struct ibv_wq
*wq
)
158 return ibv_destroy_wq(wq
);
161 mlx5_glue_modify_wq(struct ibv_wq
*wq
, struct ibv_wq_attr
*wq_attr
)
163 return ibv_modify_wq(wq
, wq_attr
);
166 static struct ibv_flow
*
167 mlx5_glue_create_flow(struct ibv_qp
*qp
, struct ibv_flow_attr
*flow
)
169 return ibv_create_flow(qp
, flow
);
173 mlx5_glue_destroy_flow(struct ibv_flow
*flow_id
)
175 return ibv_destroy_flow(flow_id
);
179 mlx5_glue_destroy_flow_action(void *action
)
181 #ifdef HAVE_IBV_FLOW_DV_SUPPORT
182 #ifdef HAVE_MLX5DV_DR
183 return mlx5dv_dr_action_destroy(action
);
185 struct mlx5dv_flow_action_attr
*attr
= action
;
187 switch (attr
->type
) {
188 case MLX5DV_FLOW_ACTION_TAG
:
191 res
= ibv_destroy_flow_action(attr
->action
);
203 static struct ibv_qp
*
204 mlx5_glue_create_qp(struct ibv_pd
*pd
, struct ibv_qp_init_attr
*qp_init_attr
)
206 return ibv_create_qp(pd
, qp_init_attr
);
209 static struct ibv_qp
*
210 mlx5_glue_create_qp_ex(struct ibv_context
*context
,
211 struct ibv_qp_init_attr_ex
*qp_init_attr_ex
)
213 return ibv_create_qp_ex(context
, qp_init_attr_ex
);
217 mlx5_glue_destroy_qp(struct ibv_qp
*qp
)
219 return ibv_destroy_qp(qp
);
223 mlx5_glue_modify_qp(struct ibv_qp
*qp
, struct ibv_qp_attr
*attr
, int attr_mask
)
225 return ibv_modify_qp(qp
, attr
, attr_mask
);
228 static struct ibv_mr
*
229 mlx5_glue_reg_mr(struct ibv_pd
*pd
, void *addr
, size_t length
, int access
)
231 return ibv_reg_mr(pd
, addr
, length
, access
);
235 mlx5_glue_dereg_mr(struct ibv_mr
*mr
)
237 return ibv_dereg_mr(mr
);
240 static struct ibv_counter_set
*
241 mlx5_glue_create_counter_set(struct ibv_context
*context
,
242 struct ibv_counter_set_init_attr
*init_attr
)
244 #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V42
249 return ibv_create_counter_set(context
, init_attr
);
254 mlx5_glue_destroy_counter_set(struct ibv_counter_set
*cs
)
256 #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V42
260 return ibv_destroy_counter_set(cs
);
265 mlx5_glue_describe_counter_set(struct ibv_context
*context
,
266 uint16_t counter_set_id
,
267 struct ibv_counter_set_description
*cs_desc
)
269 #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V42
271 (void)counter_set_id
;
275 return ibv_describe_counter_set(context
, counter_set_id
, cs_desc
);
280 mlx5_glue_query_counter_set(struct ibv_query_counter_set_attr
*query_attr
,
281 struct ibv_counter_set_data
*cs_data
)
283 #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V42
288 return ibv_query_counter_set(query_attr
, cs_data
);
292 static struct ibv_counters
*
293 mlx5_glue_create_counters(struct ibv_context
*context
,
294 struct ibv_counters_init_attr
*init_attr
)
296 #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V45
302 return ibv_create_counters(context
, init_attr
);
307 mlx5_glue_destroy_counters(struct ibv_counters
*counters
)
309 #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V45
313 return ibv_destroy_counters(counters
);
318 mlx5_glue_attach_counters(struct ibv_counters
*counters
,
319 struct ibv_counter_attach_attr
*attr
,
320 struct ibv_flow
*flow
)
322 #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V45
328 return ibv_attach_counters_point_flow(counters
, attr
, flow
);
333 mlx5_glue_query_counters(struct ibv_counters
*counters
,
334 uint64_t *counters_value
,
338 #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V45
340 (void)counters_value
;
345 return ibv_read_counters(counters
, counters_value
, ncounters
, flags
);
350 mlx5_glue_ack_async_event(struct ibv_async_event
*event
)
352 ibv_ack_async_event(event
);
356 mlx5_glue_get_async_event(struct ibv_context
*context
,
357 struct ibv_async_event
*event
)
359 return ibv_get_async_event(context
, event
);
363 mlx5_glue_port_state_str(enum ibv_port_state port_state
)
365 return ibv_port_state_str(port_state
);
368 static struct ibv_cq
*
369 mlx5_glue_cq_ex_to_cq(struct ibv_cq_ex
*cq
)
371 return ibv_cq_ex_to_cq(cq
);
375 mlx5_glue_dr_create_flow_action_dest_flow_tbl(void *tbl
)
377 #ifdef HAVE_MLX5DV_DR
378 return mlx5dv_dr_action_create_dest_table(tbl
);
387 mlx5_glue_dr_create_flow_action_dest_vport(void *domain
, uint32_t vport
)
389 #ifdef HAVE_MLX5DV_DR_ESWITCH
390 return mlx5dv_dr_action_create_dest_vport(domain
, vport
);
400 mlx5_glue_dr_create_flow_action_drop(void)
402 #ifdef HAVE_MLX5DV_DR_ESWITCH
403 return mlx5dv_dr_action_create_drop();
411 mlx5_glue_dr_create_flow_tbl(void *domain
, uint32_t level
)
413 #ifdef HAVE_MLX5DV_DR
414 return mlx5dv_dr_table_create(domain
, level
);
424 mlx5_glue_dr_destroy_flow_tbl(void *tbl
)
426 #ifdef HAVE_MLX5DV_DR
427 return mlx5dv_dr_table_destroy(tbl
);
436 mlx5_glue_dr_create_domain(struct ibv_context
*ctx
,
437 enum mlx5dv_dr_domain_type domain
)
439 #ifdef HAVE_MLX5DV_DR
440 return mlx5dv_dr_domain_create(ctx
, domain
);
450 mlx5_glue_dr_destroy_domain(void *domain
)
452 #ifdef HAVE_MLX5DV_DR
453 return mlx5dv_dr_domain_destroy(domain
);
461 static struct ibv_cq_ex
*
462 mlx5_glue_dv_create_cq(struct ibv_context
*context
,
463 struct ibv_cq_init_attr_ex
*cq_attr
,
464 struct mlx5dv_cq_init_attr
*mlx5_cq_attr
)
466 return mlx5dv_create_cq(context
, cq_attr
, mlx5_cq_attr
);
469 static struct ibv_wq
*
470 mlx5_glue_dv_create_wq(struct ibv_context
*context
,
471 struct ibv_wq_init_attr
*wq_attr
,
472 struct mlx5dv_wq_init_attr
*mlx5_wq_attr
)
474 #ifndef HAVE_IBV_DEVICE_STRIDING_RQ_SUPPORT
481 return mlx5dv_create_wq(context
, wq_attr
, mlx5_wq_attr
);
486 mlx5_glue_dv_query_device(struct ibv_context
*ctx
,
487 struct mlx5dv_context
*attrs_out
)
489 return mlx5dv_query_device(ctx
, attrs_out
);
493 mlx5_glue_dv_set_context_attr(struct ibv_context
*ibv_ctx
,
494 enum mlx5dv_set_ctx_attr_type type
, void *attr
)
496 return mlx5dv_set_context_attr(ibv_ctx
, type
, attr
);
500 mlx5_glue_dv_init_obj(struct mlx5dv_obj
*obj
, uint64_t obj_type
)
502 return mlx5dv_init_obj(obj
, obj_type
);
505 static struct ibv_qp
*
506 mlx5_glue_dv_create_qp(struct ibv_context
*context
,
507 struct ibv_qp_init_attr_ex
*qp_init_attr_ex
,
508 struct mlx5dv_qp_init_attr
*dv_qp_init_attr
)
510 #ifdef HAVE_IBV_DEVICE_TUNNEL_SUPPORT
511 return mlx5dv_create_qp(context
, qp_init_attr_ex
, dv_qp_init_attr
);
514 (void)qp_init_attr_ex
;
515 (void)dv_qp_init_attr
;
522 mlx5_glue_dv_create_flow_matcher(struct ibv_context
*context
,
523 struct mlx5dv_flow_matcher_attr
*matcher_attr
,
526 #ifdef HAVE_IBV_FLOW_DV_SUPPORT
527 #ifdef HAVE_MLX5DV_DR
529 return mlx5dv_dr_matcher_create(tbl
, matcher_attr
->priority
,
530 matcher_attr
->match_criteria_enable
,
531 matcher_attr
->match_mask
);
534 return mlx5dv_create_flow_matcher(context
, matcher_attr
);
546 mlx5_glue_dv_create_flow(void *matcher
,
551 #ifdef HAVE_IBV_FLOW_DV_SUPPORT
552 #ifdef HAVE_MLX5DV_DR
553 return mlx5dv_dr_rule_create(matcher
, match_value
, num_actions
,
554 (struct mlx5dv_dr_action
**)actions
);
556 struct mlx5dv_flow_action_attr actions_attr
[8];
560 for (size_t i
= 0; i
< num_actions
; i
++)
562 *((struct mlx5dv_flow_action_attr
*)(actions
[i
]));
563 return mlx5dv_create_flow(matcher
, match_value
,
564 num_actions
, actions_attr
);
576 mlx5_glue_dv_create_flow_action_counter(void *counter_obj
, uint32_t offset
)
578 #ifdef HAVE_IBV_FLOW_DV_SUPPORT
579 #ifdef HAVE_MLX5DV_DR
580 return mlx5dv_dr_action_create_flow_counter(counter_obj
, offset
);
582 struct mlx5dv_flow_action_attr
*action
;
585 action
= malloc(sizeof(*action
));
588 action
->type
= MLX5DV_FLOW_ACTION_COUNTERS_DEVX
;
589 action
->obj
= counter_obj
;
601 mlx5_glue_dv_create_flow_action_dest_ibv_qp(void *qp
)
603 #ifdef HAVE_IBV_FLOW_DV_SUPPORT
604 #ifdef HAVE_MLX5DV_DR
605 return mlx5dv_dr_action_create_dest_ibv_qp(qp
);
607 struct mlx5dv_flow_action_attr
*action
;
609 action
= malloc(sizeof(*action
));
612 action
->type
= MLX5DV_FLOW_ACTION_DEST_IBV_QP
;
624 mlx5_glue_dv_create_flow_action_modify_header
625 (struct ibv_context
*ctx
,
626 enum mlx5dv_flow_table_type ft_type
,
627 void *domain
, uint64_t flags
,
631 #ifdef HAVE_IBV_FLOW_DV_SUPPORT
632 #ifdef HAVE_MLX5DV_DR
635 return mlx5dv_dr_action_create_modify_header(domain
, flags
, actions_sz
,
638 struct mlx5dv_flow_action_attr
*action
;
642 action
= malloc(sizeof(*action
));
645 action
->type
= MLX5DV_FLOW_ACTION_IBV_FLOW_ACTION
;
646 action
->action
= mlx5dv_create_flow_action_modify_header
647 (ctx
, actions_sz
, actions
, ft_type
);
663 mlx5_glue_dv_create_flow_action_packet_reformat
664 (struct ibv_context
*ctx
,
665 enum mlx5dv_flow_action_packet_reformat_type reformat_type
,
666 enum mlx5dv_flow_table_type ft_type
,
667 struct mlx5dv_dr_domain
*domain
,
668 uint32_t flags
, size_t data_sz
, void *data
)
670 #ifdef HAVE_IBV_FLOW_DV_SUPPORT
671 #ifdef HAVE_MLX5DV_DR
674 return mlx5dv_dr_action_create_packet_reformat(domain
, flags
,
675 reformat_type
, data_sz
,
680 struct mlx5dv_flow_action_attr
*action
;
682 action
= malloc(sizeof(*action
));
685 action
->type
= MLX5DV_FLOW_ACTION_IBV_FLOW_ACTION
;
686 action
->action
= mlx5dv_create_flow_action_packet_reformat
687 (ctx
, data_sz
, data
, reformat_type
, ft_type
);
704 mlx5_glue_dv_create_flow_action_tag(uint32_t tag
)
706 #ifdef HAVE_IBV_FLOW_DV_SUPPORT
707 #ifdef HAVE_MLX5DV_DR
708 return mlx5dv_dr_action_create_tag(tag
);
710 struct mlx5dv_flow_action_attr
*action
;
711 action
= malloc(sizeof(*action
));
714 action
->type
= MLX5DV_FLOW_ACTION_TAG
;
715 action
->tag_value
= tag
;
725 mlx5_glue_dv_destroy_flow(void *flow_id
)
727 #ifdef HAVE_MLX5DV_DR
728 return mlx5dv_dr_rule_destroy(flow_id
);
730 return ibv_destroy_flow(flow_id
);
735 mlx5_glue_dv_destroy_flow_matcher(void *matcher
)
737 #ifdef HAVE_IBV_FLOW_DV_SUPPORT
738 #ifdef HAVE_MLX5DV_DR
739 return mlx5dv_dr_matcher_destroy(matcher
);
741 return mlx5dv_destroy_flow_matcher(matcher
);
750 static struct ibv_context
*
751 mlx5_glue_dv_open_device(struct ibv_device
*device
)
753 #ifdef HAVE_IBV_DEVX_OBJ
754 return mlx5dv_open_device(device
,
755 &(struct mlx5dv_context_attr
){
756 .flags
= MLX5DV_CONTEXT_FLAGS_DEVX
,
765 static struct mlx5dv_devx_obj
*
766 mlx5_glue_devx_obj_create(struct ibv_context
*ctx
,
767 const void *in
, size_t inlen
,
768 void *out
, size_t outlen
)
770 #ifdef HAVE_IBV_DEVX_OBJ
771 return mlx5dv_devx_obj_create(ctx
, in
, inlen
, out
, outlen
);
784 mlx5_glue_devx_obj_destroy(struct mlx5dv_devx_obj
*obj
)
786 #ifdef HAVE_IBV_DEVX_OBJ
787 return mlx5dv_devx_obj_destroy(obj
);
795 mlx5_glue_devx_obj_query(struct mlx5dv_devx_obj
*obj
,
796 const void *in
, size_t inlen
,
797 void *out
, size_t outlen
)
799 #ifdef HAVE_IBV_DEVX_OBJ
800 return mlx5dv_devx_obj_query(obj
, in
, inlen
, out
, outlen
);
812 mlx5_glue_devx_obj_modify(struct mlx5dv_devx_obj
*obj
,
813 const void *in
, size_t inlen
,
814 void *out
, size_t outlen
)
816 #ifdef HAVE_IBV_DEVX_OBJ
817 return mlx5dv_devx_obj_modify(obj
, in
, inlen
, out
, outlen
);
829 mlx5_glue_devx_general_cmd(struct ibv_context
*ctx
,
830 const void *in
, size_t inlen
,
831 void *out
, size_t outlen
)
833 #ifdef HAVE_IBV_DEVX_OBJ
834 return mlx5dv_devx_general_cmd(ctx
, in
, inlen
, out
, outlen
);
845 alignas(RTE_CACHE_LINE_SIZE
)
846 const struct mlx5_glue
*mlx5_glue
= &(const struct mlx5_glue
){
847 .version
= MLX5_GLUE_VERSION
,
848 .fork_init
= mlx5_glue_fork_init
,
849 .alloc_pd
= mlx5_glue_alloc_pd
,
850 .dealloc_pd
= mlx5_glue_dealloc_pd
,
851 .get_device_list
= mlx5_glue_get_device_list
,
852 .free_device_list
= mlx5_glue_free_device_list
,
853 .open_device
= mlx5_glue_open_device
,
854 .close_device
= mlx5_glue_close_device
,
855 .query_device
= mlx5_glue_query_device
,
856 .query_device_ex
= mlx5_glue_query_device_ex
,
857 .query_port
= mlx5_glue_query_port
,
858 .create_comp_channel
= mlx5_glue_create_comp_channel
,
859 .destroy_comp_channel
= mlx5_glue_destroy_comp_channel
,
860 .create_cq
= mlx5_glue_create_cq
,
861 .destroy_cq
= mlx5_glue_destroy_cq
,
862 .get_cq_event
= mlx5_glue_get_cq_event
,
863 .ack_cq_events
= mlx5_glue_ack_cq_events
,
864 .create_rwq_ind_table
= mlx5_glue_create_rwq_ind_table
,
865 .destroy_rwq_ind_table
= mlx5_glue_destroy_rwq_ind_table
,
866 .create_wq
= mlx5_glue_create_wq
,
867 .destroy_wq
= mlx5_glue_destroy_wq
,
868 .modify_wq
= mlx5_glue_modify_wq
,
869 .create_flow
= mlx5_glue_create_flow
,
870 .destroy_flow
= mlx5_glue_destroy_flow
,
871 .destroy_flow_action
= mlx5_glue_destroy_flow_action
,
872 .create_qp
= mlx5_glue_create_qp
,
873 .create_qp_ex
= mlx5_glue_create_qp_ex
,
874 .destroy_qp
= mlx5_glue_destroy_qp
,
875 .modify_qp
= mlx5_glue_modify_qp
,
876 .reg_mr
= mlx5_glue_reg_mr
,
877 .dereg_mr
= mlx5_glue_dereg_mr
,
878 .create_counter_set
= mlx5_glue_create_counter_set
,
879 .destroy_counter_set
= mlx5_glue_destroy_counter_set
,
880 .describe_counter_set
= mlx5_glue_describe_counter_set
,
881 .query_counter_set
= mlx5_glue_query_counter_set
,
882 .create_counters
= mlx5_glue_create_counters
,
883 .destroy_counters
= mlx5_glue_destroy_counters
,
884 .attach_counters
= mlx5_glue_attach_counters
,
885 .query_counters
= mlx5_glue_query_counters
,
886 .ack_async_event
= mlx5_glue_ack_async_event
,
887 .get_async_event
= mlx5_glue_get_async_event
,
888 .port_state_str
= mlx5_glue_port_state_str
,
889 .cq_ex_to_cq
= mlx5_glue_cq_ex_to_cq
,
890 .dr_create_flow_action_dest_flow_tbl
=
891 mlx5_glue_dr_create_flow_action_dest_flow_tbl
,
892 .dr_create_flow_action_dest_vport
=
893 mlx5_glue_dr_create_flow_action_dest_vport
,
894 .dr_create_flow_action_drop
=
895 mlx5_glue_dr_create_flow_action_drop
,
896 .dr_create_flow_tbl
= mlx5_glue_dr_create_flow_tbl
,
897 .dr_destroy_flow_tbl
= mlx5_glue_dr_destroy_flow_tbl
,
898 .dr_create_domain
= mlx5_glue_dr_create_domain
,
899 .dr_destroy_domain
= mlx5_glue_dr_destroy_domain
,
900 .dv_create_cq
= mlx5_glue_dv_create_cq
,
901 .dv_create_wq
= mlx5_glue_dv_create_wq
,
902 .dv_query_device
= mlx5_glue_dv_query_device
,
903 .dv_set_context_attr
= mlx5_glue_dv_set_context_attr
,
904 .dv_init_obj
= mlx5_glue_dv_init_obj
,
905 .dv_create_qp
= mlx5_glue_dv_create_qp
,
906 .dv_create_flow_matcher
= mlx5_glue_dv_create_flow_matcher
,
907 .dv_create_flow
= mlx5_glue_dv_create_flow
,
908 .dv_create_flow_action_counter
=
909 mlx5_glue_dv_create_flow_action_counter
,
910 .dv_create_flow_action_dest_ibv_qp
=
911 mlx5_glue_dv_create_flow_action_dest_ibv_qp
,
912 .dv_create_flow_action_modify_header
=
913 mlx5_glue_dv_create_flow_action_modify_header
,
914 .dv_create_flow_action_packet_reformat
=
915 mlx5_glue_dv_create_flow_action_packet_reformat
,
916 .dv_create_flow_action_tag
= mlx5_glue_dv_create_flow_action_tag
,
917 .dv_destroy_flow
= mlx5_glue_dv_destroy_flow
,
918 .dv_destroy_flow_matcher
= mlx5_glue_dv_destroy_flow_matcher
,
919 .dv_open_device
= mlx5_glue_dv_open_device
,
920 .devx_obj_create
= mlx5_glue_devx_obj_create
,
921 .devx_obj_destroy
= mlx5_glue_devx_obj_destroy
,
922 .devx_obj_query
= mlx5_glue_devx_obj_query
,
923 .devx_obj_modify
= mlx5_glue_devx_obj_modify
,
924 .devx_general_cmd
= mlx5_glue_devx_general_cmd
,