struct ibv_cq *ibv_create_cq(struct ibv_context *context, int cqe, void *cq_context, struct ibv_comp_channel *channel, int comp_vector)
1:struct ibv_context *context -->来源于 ibv_open_device
2:cqe()
后3个参数是可选的,含义见描述。
成功返回一个相应的结构体,失败返回NULL。
ibv_create_cq创建完成队列(CQ)。一个完成队列保存着一个完成队列条目(CQE)。每个队列对(QP)都有一个相关联的发送和接收CQ。一个CQ可以是共享用于发送和接收,以及跨多个qp共享。参数cqe定义了队列的最小大小。队列的实际大小可能大于指定的值。
参数cq_context是一个用户定义的值。如果在CQ创建期间指定,则该值将
在使用完成通道(CC)时,作为ibv_get_cq_event的参数返回。
channel参数用于指定CC。CQ只是一个没有构建的队列
通知机制。当使用轮询范式进行CQ处理时,CC是不必要的。用户只需定期轮询CQ。但是,如果您希望使用挂起范式,则需要CC。CC是一种机制,它允许通知用户CQ上有一个新的CQE。
参数comp_vector用于指定用于信号完成的完成向量事件。它必须是>=0并且< context->num_comp_vectors。
int ibv_destroy_cq(struct ibv_cq *cq)
ibv_destroy_cq释放完成队列(CQ)。如果任何队列对(QP)仍然与指定的CQ相关联,则此命令将失败。
int ibv_resize_cq(struct ibv_cq *cq, int cqe)
ibv_resize_cq调整完成队列(CQ)的大小。参数cqe必须至少是队列中未完成条目的数量。队列的实际大小可能大于指定的值。CQ在调整大小时可能包含(也可能不包含)完整的内容,因此可以在与CQ一起工作时调整大小。