in interface/infiniband/driver.h [458:555]
static inline void verbs_set_ops(struct verbs_context *vctx,
const struct verbs_context_ops *ops)
{
struct ibv_context_ops* ctx = &vctx->context.ops;
/*
* We retain the function pointer for now, just as 'just-in-case' ABI
* compatibility. If any ever get changed incompatibly they should be
* set to NULL instead.
*/
#define SET_PRIV_OP(ptr, name) \
do { \
if (ops->name) { \
(ptr)->_compat_##name = (void *)ops->name; \
} \
} while (0)
#define SET_OP(ptr, name) \
do { \
if (ops->name) { \
(ptr)->name = ops->name; \
} \
} while (0)
#define SET_OP2(ptr, iname, name) \
do { \
if (ops->name) { \
(ptr)->iname = ops->name; \
} \
} while (0)
SET_OP(vctx, advise_mr);
SET_OP(vctx, alloc_dm);
SET_OP(ctx, alloc_mw);
SET_OP(vctx, alloc_null_mr);
SET_PRIV_OP(ctx, alloc_pd);
SET_OP(vctx, alloc_parent_domain);
SET_OP(vctx, alloc_td);
SET_OP(vctx, attach_counters_point_flow);
SET_OP(vctx, create_counters);
SET_PRIV_OP(ctx, async_event);
SET_PRIV_OP(ctx, attach_mcast);
SET_OP(ctx, bind_mw);
SET_OP(vctx, close_xrcd);
SET_PRIV_OP(ctx, cq_event);
SET_PRIV_OP(ctx, create_ah);
SET_PRIV_OP(ctx, create_cq);
SET_OP2(vctx, ibv_create_flow, create_flow);
SET_OP(vctx, create_flow_action_esp);
SET_PRIV_OP(ctx, create_qp);
SET_OP(vctx, create_qp_ex);
SET_OP(vctx, create_rwq_ind_table);
SET_PRIV_OP(ctx, create_srq);
SET_OP(vctx, create_srq_ex);
SET_OP(vctx, create_wq);
SET_OP(ctx, dealloc_mw);
SET_PRIV_OP(ctx, dealloc_pd);
SET_OP(vctx, dealloc_td);
SET_OP(vctx, destroy_counters);
SET_PRIV_OP(ctx, dereg_mr);
SET_PRIV_OP(ctx, destroy_ah);
SET_PRIV_OP(ctx, destroy_cq);
SET_OP2(vctx, ibv_destroy_flow, destroy_flow);
SET_OP(vctx, destroy_flow_action);
SET_PRIV_OP(ctx, destroy_qp);
SET_OP(vctx, destroy_rwq_ind_table);
SET_PRIV_OP(ctx, destroy_srq);
SET_OP(vctx, destroy_wq);
SET_PRIV_OP(ctx, detach_mcast);
SET_OP(vctx, free_dm);
SET_OP(vctx, get_srq_num);
SET_OP(vctx, modify_cq);
SET_OP(vctx, modify_flow_action_esp);
SET_PRIV_OP(ctx, modify_qp);
SET_OP(vctx, modify_qp_rate_limit);
SET_PRIV_OP(ctx, modify_srq);
SET_OP(vctx, modify_wq);
SET_OP(vctx, open_qp);
SET_OP(vctx, open_xrcd);
SET_OP(ctx, poll_cq);
SET_OP(ctx, post_recv);
SET_OP(ctx, post_send);
SET_OP(vctx, post_srq_ops);
SET_OP(ctx, post_srq_recv);
SET_OP(vctx, query_device_ex);
SET_PRIV_OP(ctx, query_qp);
SET_OP(vctx, query_rt_values);
SET_OP(vctx, read_counters);
SET_PRIV_OP(ctx, query_srq);
SET_OP(vctx, reg_dm_mr);
SET_PRIV_OP(ctx, reg_mr);
SET_OP(ctx, req_notify_cq);
SET_PRIV_OP(ctx, rereg_mr);
SET_PRIV_OP(ctx, resize_cq);
#undef SET_OP
#undef SET_OP2
}