rdma_create_qp()错误:参数无效

时间:2016-11-18 18:24:09

标签: c infiniband rdma

我是rdma编程的新手,我目前正在使用ib动词和rdma cma建立一个简单的客户端/服务器,但已经碰壁了。我的服务器运行并等待连接,但我的客户端从未连接,因为它在rdma_create_qp()失败。我不确定可能需要哪些信息来帮助解决这个问题,但我会根据要求编辑所需的信息。(目前在我的代码中显示的相关信息的数据集)

qp_init_attr.send_cq = cq;
qp_init_attr.recv_cq = cq;
qp_init_attr.qp_type = IBV_QPT_RC;
qp_init_attr.cap.max_send_wr  = 16;
qp_init_attr.cap.max_recv_wr  = 16;
qp_init_attr.cap.max_send_sge = 8;
qp_init_attr.cap.max_recv_sge = 8;
if(rdma_create_qp(cm_id, pd, &qp_init_attr)){
    fprintf(stderr, "Error, rdma_create_qp() failed: %s\n", strerror(errno));
    return -1;
}

2 个答案:

答案 0 :(得分:0)

来自librdmacm(https://github.com/linux-rdma/rdma-core/blob/master/librdmacm/cma.c)的git页面:

在以下情况下你会得到EINVAL:

  1. id-> qp不为NULL(已分配)。
  2. id的上下文与可选的pd。
  3. 的上下文不同
  4. send_cq或receive_cq分配给id,与qp_init_attr中指定的不同。

答案 1 :(得分:0)

请勿使用cm_id调用。假设您在事件rdma_create_qp上调用RDMA_CM_EVENT_ROUTE_RESOLVED,则应使用evt->id,这是您创建的客户端连接的rdma_id。