Man page - ibv_create_cq_ex(3)
Packages contas this manual
- ibv_rereg_mr(3)
- mlx5dv_devx_qp_query(3)
- ibv_req_notify_cq(3)
- ibv_destroy_flow_action(3)
- ibv_unimport_mr(3)
- ibv_event_type_str(3)
- mlx5dv_devx_obj_create(3)
- ibv_alloc_pd(3)
- mlx5dv_dr_action_create_flow_meter(3)
- mlx5dv_dr_matcher_destroy(3)
- mlx4dv_set_context_attr(3)
- mlx5dv_dr_action_create_dest_vport(3)
- mlx5dv_map_ah_to_qp(3)
- ibv_get_async_event(3)
- mlx5dv_devx_destroy_eq(3)
- ibv_modify_srq(3)
- ibv_wr_send_inv(3)
- mlx5dv_dci_stream_id_reset(3)
- ibv_alloc_dm(3)
- mlx5dv_dr_rule_destroy(3)
- ibv_destroy_flow(3)
- mlx5dv_dr_action_create_dest_ib_port(3)
- mlx5dv_devx_umem_dereg(3)
- mlx5dv_flow_action_esp(3)
- ibv_destroy_wq(3)
- mlx5dv_devx_get_async_cmd_comp(3)
- ibv_unimport_dm(3)
- mlx5dv_dr_action_create_drop(3)
- ibv_create_ah_from_wc(3)
- mlx5dv_wr_memcpy(3)
- ibv_wr_set_xrc_srqn(3)
- ibv_create_srq_ex(3)
- ibv_query_device_ex(3)
- ibv_query_gid(3)
- mlx5dv_dr_action_create_tag(3)
- ibv_create_wq(3)
- mlx5dv_dr_action_create_default_miss(3)
- ibv_dereg_mr(3)
- ibv_dealloc_pd(3)
- ibv_destroy_ah(3)
- mlx5dv_devx_obj_destroy(3)
- ibv_query_qp(3)
- ibv_rate_to_mbps(3)
- mlx5dv_mkey_check(3)
- mlx5dv_crypto_login(3)
- mlx5dv_vfio_get_events_fd(3)
- mlx5dv_alloc_dm(3)
- mlx5dv_dr_table_destroy(3)
- mlx5dv_sched_leaf_modify(3)
- ibv_import_mr(3)
- mbps_to_ibv_rate(3)
- mlx5dv_wr_set_dc_addr(3)
- mlx5dv_devx_umem_reg(3)
- mlx5dv_free_var(3)
- ibv_modify_wq(3)
- mlx5dv_crypto_logout(3)
- mlx5dv_devx_obj_modify(3)
- ibv_destroy_rwq_ind_table(3)
- mlx5dv_devx_free_msi_vector(3)
- mlx5dv_dr_action_create_push_vlan(3)
- mlx5dv_query_device(3)
- mlx5dv_modify_qp_sched_elem(3)
- ibv_create_cq(3)
- mlx5dv_dr_aso_other_domain_link(3)
- ibv_open_device(3)
- mlx5dv_devx_cq_query(3)
- mlx5dv_wr_set_mkey_layout_interleaved(3)
- mlx5dv_open_device(3)
- mlx5dv_devx_create_eq(3)
- ibv_query_pkey(3)
- mlx5dv_pp_alloc(3)
- hnsdv(7)
- ibv_alloc_mw(3)
- mlx5dv_dump(3)
- hnsdv_is_supported(3)
- mlx5dv_crypto_login_query(3)
- mlx5dv_dr_action_create_dest_root_table(3)
- mlx5dv_devx_srq_modify(3)
- ibv_ack_async_event(3)
- ibv_node_type_str(3)
- ibv_wr_rdma_read(3)
- ibv_wr_send_imm(3)
- ibv_query_gid_ex(3)
- ibv_wr_set_sge(3)
- ibv_close_xrcd(3)
- efadv_query_device(3)
- mlx5dv_dr_action_create_dest_devx_tir(3)
- mlx5dv_query_qp_lag_port(3)
- ibv_get_srq_num(3)
- mlx5dv_devx_alloc_uar(3)
- mlx5dv_devx_destroy_cmd_comp(3)
- ibv_wr_atomic_cmp_swp(3)
- mlx5dv_create_flow_action_packet_reformat(3)
- ibv_init_ah_from_wc(3)
- ibv_query_qp_data_in_order(3)
- mlx4dv(7)
- ibv_post_send(3)
- ibv_fork_init(3)
- ibv_create_ah(3)
- mlx5dv_devx_umem_reg_ex(3)
- mlx5dv_devx_free_uar(3)
- mlx5dv_reg_dmabuf_mr(3)
- ibv_open_qp(3)
- ibv_destroy_comp_channel(3)
- mlx5dv_get_vfio_device_list(3)
- mlx5dv_devx_obj_query(3)
- mlx5dv_devx_get_event(3)
- ibv_dealloc_td(3)
- ibv_create_comp_channel(3)
- ibv_create_srq(3)
- efadv_create_driver_qp(3)
- ibv_create_rwq_ind_table(3)
- mlx5dv_dr_action_destroy(3)
- mlx5dv_crypto_login_query_state(3)
- ibv_wr_flush(3)
- ibv_wr_set_inline_data_list(3)
- ibv_dealloc_mw(3)
- ibv_query_port(3)
- mlx5dv_sched_leaf_create(3)
- ibv_attach_mcast(3)
- efadv_create_qp_ex(3)
- efadv(7)
- ibv_inc_rkey(3)
- mlx5dv_devx_srq_query(3)
- mlx5dv_dr_domain_sync(3)
- mlx5dv_dump_dr_rule(3)
- ibv_create_qp(3)
- ibv_alloc_td(3)
- mlx5dv_dr_action_modify_flow_meter(3)
- ibv_wr_rdma_write_imm(3)
- mlx5dv_create_flow(3)
- ibv_wr_local_inv(3)
- ibv_read_counters(3)
- ibv_ack_cq_events(3)
- ibv_destroy_counters(3)
- ibv_free_device_list(3)
- mlx5dv_dr_action_create_modify_header(3)
- mlx5dv_modify_qp_lag_port(3)
- mlx5dv_qp_cancel_posted_send_wrs(3)
- ibv_poll_cq(3)
- mlx5dv_dr_action_create_dest_array(3)
- mlx5dv_devx_subscribe_devx_event(3)
- mlx5dv_dr_flow(3)
- ibv_memcpy_from_dm(3)
- mlx5dv_wr_mkey_configure(3)
- mlx5dv_create_mkey(3)
- ibv_attach_counters_point_flow(3)
- mlx5dv_devx_create_cmd_comp(3)
- mlx5dv_wr_post(3)
- mlx5dv_devx_wq_query(3)
- ibv_set_ece(3)
- mlx5dv_wr_set_mkey_sig_block(3)
- mlx5dv_dr_table_create(3)
- mlx5dv_dr_aso_other_domain_unlink(3)
- mlx5dv_create_flow_action_modify_header(3)
- mlx5dv_dump_dr_domain(3)
- mlx5dv_devx_destroy_event_channel(3)
- mlx5dv_devx_wq_modify(3)
- ibv_wr_set_sge_list(3)
- mlx5dv_sched_node_modify(3)
- ibv_get_pkey_index(3)
- ibv_post_srq_recv(3)
- ibv_reg_mr(3)
- ibv_wr_bind_mw(3)
- ibv_create_flow(3)
- ibv_get_device_name(3)
- mlx5dv_wr_mr_interleaved(3)
- mlx5dv_wr_set_mkey_access_flags(3)
- ibv_get_device_index(3)
- ibv_wr_complete(3)
- mlx5dv_dr_action_create_dest_table(3)
- mlx5dv_get_clock_info(3)
- ibv_wr_set_inline_data(3)
- ibv_destroy_qp(3)
- mlx5dv_sched_node_destroy(3)
- mlx5dv_wr_mr_list(3)
- mlx5dv_wr_raw_wqe(3)
- mlx5dv_dr_action_create_packet_reformat(3)
- mlx5dv_dek_create(3)
- mlx4dv_query_device(3)
- ibv_detach_mcast(3)
- manadv_init_obj(3)
- ibv_modify_qp(3)
- mlx5dv_get_data_direct_sysfs_path(3)
- mlx5dv_dr_action_modify_aso(3)
- ibv_destroy_cq(3)
- mlx5dv_devx_create_event_channel(3)
- ibv_wr_set_ud_addr(3)
- mlx5dv_sched_leaf_destroy(3)
- mlx5dv_devx_subscribe_devx_event_fd(3)
- mlx5dv_qp_ex_from_ibv_qp_ex(3)
- ibv_create_flow_action(3)
- mlx5dv_devx_general_cmd(3)
- efadv_query_ah(3)
- mlx4dv_init_obj(3)
- mlx5dv_dump_dr_matcher(3)
- mlx5dv_wr_set_mkey_crypto(3)
- mlx5dv_alloc_var(3)
- ibv_close_device(3)
- mlx5dv_dr_action_create_flow_counter(3)
- mlx5dv_dr_rule_create(3)
- ibv_get_device_list(3)
- ibv_create_counters(3)
- mlx5dv_reserved_qpn_dealloc(3)
- mlx5dv_destroy_steering_anchor(3)
- mlx5dv_dr_action_create_flow_sampler(3)
- ibv_query_srq(3)
- mlx5dv_vfio_process_events(3)
- ibv_memcpy_to_dm(3)
- ibv_free_dm(3)
- mlx5dv_sched_node_create(3)
- manadv(7)
- mlx5dv_dr_action_create_dest_ibv_qp(3)
- mlx5dv_devx_obj_query_async(3)
- ibv_alloc_parent_domain(3)
- ibv_unimport_pd(3)
- ibv_wr_send(3)
- mlx5dv_create_qp(3)
- ibv_port_state_str(3)
- mlx5dv_wr_set_dc_addr_stream(3)
- mlx5dv_dr_domain_allow_duplicate_rules(3)
- ibv_query_gid_table(3)
- mlx5dv_devx_ind_tbl_modify(3)
- mlx5dv_dr_matcher_create(3)
- efadv_query_mr(3)
- ibv_is_fork_initialized(3)
- mlx5dv_wr_set_mkey_layout_list(3)
- ibv_query_rt_values_ex(3)
- mlx5dv_reserved_qpn_alloc(3)
- ibv_wr_post(3)
- manadv_set_context_attr(3)
- ibv_resize_cq(3)
- ibv_wr_atomic_fetch_add(3)
- mlx5dv_create_cq(3)
- mult_to_ibv_rate(3)
- ibv_query_ece(3)
- mlx5dv_query_port(3)
- mlx5dv_is_supported(3)
- ibv_destroy_srq(3)
- mlx5dv_dek_destroy(3)
- mlx5dv_crypto_login_create(3)
- ibv_post_srq_ops(3)
- ibv_get_cq_event(3)
- mlx5dv_devx_ind_tbl_query(3)
- ibv_modify_qp_rate_limit(3)
- mlx5dv_create_steering_anchor(3)
- ibv_modify_cq(3)
- mlx5dv_ts_to_ns(3)
- mlx5dv_init_obj(3)
- ibv_import_pd(3)
- mlx5dv(7)
- mlx5dv_modify_qp_udp_sport(3)
- mlx5dv_dr_action_create_pop_vlan(3)
- mlx5dv_create_flow_matcher(3)
- ibv_import_device(3)
- ibv_query_device(3)
- mlx5dv_dm_map_op_addr(3)
- ibv_create_qp_ex(3)
- mlx5dv_crypto_login_destroy(3)
- mlx5dv_dump_dr_table(3)
- mlx5dv_devx_query_eqn(3)
- ibv_create_cq_ex(3)
- ibv_bind_mw(3)
- mlx5dv_devx_qp_modify(3)
- ibv_reg_dm_mr(3)
- ibv_advise_mr(3)
- ibv_wr_start(3)
- mlx5dv_devx_cq_modify(3)
- mlx5dv_dr_action_create_aso(3)
- ibv_wr_abort(3)
- hnsdv_query_device(3)
- mlx5dv_dr_domain_set_reclaim_device_memory(3)
- ibv_post_recv(3)
- ibv_wr_rdma_write(3)
- ibv_open_xrcd(3)
- ibv_rate_to_mult(3)
- mlx5dv_dr_domain_destroy(3)
- ibv_import_dm(3)
- mlx5dv_devx_alloc_msi_vector(3)
- ibv_wr_send_tso(3)
- mlx5dv_dr_matcher_set_layout(3)
- mlx5dv_dr_domain_create(3)
- ibv_get_device_guid(3)
- mlx5dv_destroy_mkey(3)
- ibv_modify_flow_action(3)
- hnsdv_create_qp(3)
- mlx5dv_dek_query(3)
- mlx5dv_pp_free(3)
- ibv_alloc_null_mr(3)
apt-get install libibverbs-dev
Manual
| IBV_CREATE_CQ_EX(3) | Libibverbs Programmer's Manual | IBV_CREATE_CQ_EX(3) |
NAME
ibv_create_cq_ex - create a completion queue (CQ)
SYNOPSIS
#include <infiniband/verbs.h>
struct ibv_cq_ex *ibv_create_cq_ex(struct ibv_context *context,
struct ibv_cq_init_attr_ex *cq_attr);
DESCRIPTION
ibv_create_cq_ex() creates a completion queue (CQ) for RDMA device context context. The argument cq_attr is a pointer to struct ibv_cq_init_attr_ex as defined in <infiniband/verbs.h>.
struct ibv_cq_init_attr_ex {
int cqe; /* Minimum number of entries required for CQ */
void *cq_context; /* Consumer-supplied context returned for completion events */
struct ibv_comp_channel *channel; /* Completion channel where completion events will be queued. May be NULL if completion events will not be used. */
int comp_vector; /* Completion vector used to signal completion events. Must be >= 0 and < context->num_comp_vectors. */
uint64_t wc_flags; /* The wc_flags that should be returned in ibv_poll_cq_ex. Or'ed bit of enum ibv_wc_flags_ex. */
uint32_t comp_mask; /* compatibility mask (extended verb). */
uint32_t flags /* One or more flags from enum ibv_create_cq_attr_flags */
struct ibv_pd *parent_domain; /* Parent domain to be used by this CQ */
};
enum ibv_wc_flags_ex {
IBV_WC_EX_WITH_BYTE_LEN = 1 << 0, /* Require byte len in WC */
IBV_WC_EX_WITH_IMM = 1 << 1, /* Require immediate in WC */
IBV_WC_EX_WITH_QP_NUM = 1 << 2, /* Require QP number in WC */
IBV_WC_EX_WITH_SRC_QP = 1 << 3, /* Require source QP in WC */
IBV_WC_EX_WITH_SLID = 1 << 4, /* Require slid in WC */
IBV_WC_EX_WITH_SL = 1 << 5, /* Require sl in WC */
IBV_WC_EX_WITH_DLID_PATH_BITS = 1 << 6, /* Require dlid path bits in WC */
IBV_WC_EX_WITH_COMPLETION_TIMESTAMP = 1 << 7, /* Require completion device timestamp in WC /*
IBV_WC_EX_WITH_CVLAN = 1 << 8, /* Require VLAN info in WC */
IBV_WC_EX_WITH_FLOW_TAG = 1 << 9, /* Require flow tag in WC */
IBV_WC_EX_WITH_COMPLETION_TIMESTAMP_WALLCLOCK = 1 << 11, /* Require completion wallclock timestamp in WC */
};
enum ibv_cq_init_attr_mask {
IBV_CQ_INIT_ATTR_MASK_FLAGS = 1 << 0,
IBV_CQ_INIT_ATTR_MASK_PD = 1 << 1,
};
enum ibv_create_cq_attr_flags {
IBV_CREATE_CQ_ATTR_SINGLE_THREADED = 1 << 0, /* This CQ is used from a single threaded, thus no locking is required */
IBV_CREATE_CQ_ATTR_IGNORE_OVERRUN = 1 << 1, /* This CQ will not pass to error state if overrun, CQE always will be written to next entry.
* An application must be designed to avoid ever overflowing the CQ, otherwise CQEs might be lost.
*/
};
Polling an extended CQ
In order to poll an extended CQ efficiently, a user could use the following functions.
- Completion iterator functions
-
int ibv_start_poll(struct ibv_cq_ex *cq, struct ibv_poll_cq_attr *attr)
Start polling a batch of work completions. attr is given in order to make this function easily extensible in the future. This function either returns 0 on success or an error code otherwise. When no completions are available on the CQ, ENOENT is returned, but the CQ remains in a valid state. On success, querying the completion's attribute could be done using the query functions described below. If an error code is given, end_poll shouldn't be called.int ibv_next_poll(struct ibv_cq_ex *cq)
This function is called in order to get the next work completion. It has to be called after start_poll and before end_poll are called. This function either returns 0 on success or an error code otherwise. When no completions are available on the CQ, ENOENT is returned, but the CQ remains in a valid state. On success, querying the completion's attribute could be done using the query functions described below. If an error code is given, end_poll should still be called, indicating this is the end of the polled batch.void ibv_end_poll(struct ibv_cq_ex *cq)
This function indicates the end of polling batch of work completions. After calling this function, the user should start a new batch by calling start_poll. - Polling fields in the completion
- Below members and functions are used in order to poll the current
completion. The current completion is the completion which the iterator
points to (start_poll and next_poll advances this iterator). Only fields
that the user requested via wc_flags in ibv_create_cq_ex could be queried.
In addition, some fields are only valid in certain opcodes and status
codes.
uint64_t wr_id - Can be accessed directly from struct ibv_cq_ex.
enum ibv_wc_status - Can be accessed directly from struct ibv_cq_ex.
enum ibv_wc_opcode ibv_wc_read_opcode(struct ibv_cq_ex *cq); Get the opcode from the current completion.
uint32_t ibv_wc_read_vendor_err(struct ibv_cq_ex *cq); Get the vendor error from the current completion.
uint32_t ibv_wc_read_byte_len(struct ibv_cq_ex *cq); Get the payload length from the current completion.
__be32 ibv_wc_read_imm_data(struct ibv_cq_ex *cq); Get the immediate data field from the current completion.
uint32_t ibv_wc_read_invalidated_rkey(struct ibv_cq_ex *cq); Get the rkey invalided by the SEND_INVAL from the current completion.
uint32_t ibv_wc_read_qp_num(struct ibv_cq_ex *cq); Get the QP number field from the current completion.
uint32_t ibv_wc_read_src_qp(struct ibv_cq_ex *cq); Get the source QP number field from the current completion.
unsigned int ibv_wc_read_wc_flags(struct ibv_cq_ex *cq); Get the QP flags field from the current completion.
uint16_t ibv_wc_read_pkey_index(struct ibv_cq_ex *cq); Get the pkey index field from the current completion.
uint32_t ibv_wc_read_slid(struct ibv_cq_ex *cq); Get the slid field from the current completion.
uint8_t ibv_wc_read_sl(struct ibv_cq_ex *cq); Get the sl field from the current completion.
uint8_t ibv_wc_read_dlid_path_bits(struct ibv_cq_ex *cq); Get the dlid_path_bits field from the current completion.
uint64_t ibv_wc_read_completion_ts(struct ibv_cq_ex *cq); Get the completion timestamp from the current completion in HCA clock units.
uint64_t ibv_wc_read_completion_wallclock_ns(struct ibv_cq_ex *cq); Get the completion timestamp from the current completion and convert it from HCA clock units to wall clock nanoseconds.
uint16_t ibv_wc_read_cvlan(struct ibv_cq_ex *cq); Get the CVLAN field from the current completion.
uint32_t ibv_wc_read_flow_tag(struct ibv_cq_ex *cq); Get flow tag from the current completion.
void ibv_wc_read_tm_info(struct ibv_cq_ex *cq, struct ibv_wc_tm_info *tm_info); Get tag matching info from the current completion.
struct ibv_wc_tm_info {
uint64_t tag; /* tag from TMH */ uint32_t priv; /* opaque user data from TMH */
};
RETURN VALUE
ibv_create_cq_ex() returns a pointer to the CQ, or NULL if the request fails.
NOTES
ibv_create_cq_ex() may create a CQ with size greater than or equal to the requested size. Check the cqe attribute in the returned CQ for the actual size.
CQ should be destroyed with ibv_destroy_cq.
SEE ALSO
ibv_create_cq(3), ibv_destroy_cq(3), ibv_resize_cq(3), ibv_req_notify_cq(3), ibv_ack_cq_events(3), ibv_create_qp(3), ibv_alloc_parent_domain(3)
AUTHORS
| 2016-05-08 | libibverbs |