rdma_create_qp

分配队列对 (QP)。

语法

#include <rdma/rdma_cma.h>
int rdma_create_qp(struct rdma_cm_id *id, struct ibv_pd *pd, struct ibv_qp_init_attr *qp_init_attr);

描述

rdma_create_qp 函数分配与指定 rdma_cm_id 标识相关联的队列对 (QP) ,并将其转换为发送和接收。

注意:
  • 在运行 rdma_create_qp 函数之前, rdma_cm_id 标识必须与本地 RDMA 设备相关联,并且保护域必须用于同一设备。
  • 分配给 rdma_cm_id 标识的 QP 由 librdmacm 库通过其状态自动转换。 在分配 QP 后, QP 已准备好处理所接收数据的发布。 如果未连接 QP ,那么它已准备好发布发送数据。
  • 如果未指定保护域,那么 - pd 参数为 NULL ,那么将使用缺省保护域来创建 rdma_cm_id 标识。 每个 RDMA 设备分配一个缺省保护域。 初始 QP 属性是使用qp_init_attr 参数指定的。 ibv_qp_init_attr 中的 send_cqrecv_cq 字段是可选的。 如果未指定发送或接收完成队列 (CQ) ,那么 rdma_cm 将为 QP 分配 CQ 以及相应的完成通道。 用户可以使用 rdma_cm_id 结构来访问由 rdma_cm 创建的完成通道和 CQ 数据。 创建的 QP 的实际功能和属性将通过 qp_init_attr 参数返回给用户。

参数

描述
标识 指定要创建的通信标识。
PD 指定 QP 的可选保护域。
qp_初始化属性 指定初始 QP 属性。

返回值

rdma_destroy_event_channel函数成功时返回 0,错误时返回-1。 如果发生错误,那么 errno 指示失败的原因。