ret = ibv_query_device(cma_dev->verbs, &attr);
if (ret) {
printf("CMA: unable to query RDMA device\n");
+ ret = ERR(ret);
goto err3;
}
if (ret)
return ret;
- return id_priv->id.event->status;
+ if (id_priv->id.event->status)
+ ret = ERR(id_priv->id.event->status);
+ return ret;
}
static int rdma_resolve_addr2(struct rdma_cm_id *id, struct sockaddr *src_addr,
ret = ibv_modify_qp(id->qp, &qp_attr, qp_attr_mask);
if (ret)
- return ret;
+ return ERR(ret);
qp_attr.qp_state = IBV_QPS_RTR;
ret = rdma_init_qp_attr(id, &qp_attr, &qp_attr_mask);
if (resp_res != RDMA_MAX_RESP_RES)
qp_attr.max_dest_rd_atomic = resp_res;
- return ibv_modify_qp(id->qp, &qp_attr, qp_attr_mask);
+ return rdma_seterrno(ibv_modify_qp(id->qp, &qp_attr, qp_attr_mask));
}
static int ucma_modify_qp_rts(struct rdma_cm_id *id, uint8_t init_depth)
if (init_depth != RDMA_MAX_INIT_DEPTH)
qp_attr.max_rd_atomic = init_depth;
- return ibv_modify_qp(id->qp, &qp_attr, qp_attr_mask);
+ return rdma_seterrno(ibv_modify_qp(id->qp, &qp_attr, qp_attr_mask));
}
static int ucma_modify_qp_sqd(struct rdma_cm_id *id)
return 0;
qp_attr.qp_state = IBV_QPS_SQD;
- return ibv_modify_qp(id->qp, &qp_attr, IBV_QP_STATE);
+ return rdma_seterrno(ibv_modify_qp(id->qp, &qp_attr, IBV_QP_STATE));
}
static int ucma_modify_qp_err(struct rdma_cm_id *id)
return 0;
qp_attr.qp_state = IBV_QPS_ERR;
- return ibv_modify_qp(id->qp, &qp_attr, IBV_QP_STATE);
+ return rdma_seterrno(ibv_modify_qp(id->qp, &qp_attr, IBV_QP_STATE));
}
static int ucma_find_pkey(struct cma_device *cma_dev, uint8_t port_num,
qp_attr.qp_state = IBV_QPS_INIT;
qp_attr.qp_access_flags = 0;
- return ibv_modify_qp(qp, &qp_attr, IBV_QP_STATE | IBV_QP_ACCESS_FLAGS |
- IBV_QP_PKEY_INDEX | IBV_QP_PORT);
+ ret = ibv_modify_qp(qp, &qp_attr, IBV_QP_STATE | IBV_QP_ACCESS_FLAGS |
+ IBV_QP_PKEY_INDEX | IBV_QP_PORT);
+ return rdma_seterrno(ret);
}
static int ucma_init_conn_qp(struct cma_id_private *id_priv, struct ibv_qp *qp)
if (ret)
return ret;
- return ibv_modify_qp(qp, &qp_attr, qp_attr_mask);
+ return rdma_seterrno(ibv_modify_qp(qp, &qp_attr, qp_attr_mask));
}
static int ucma_init_ud_qp3(struct cma_id_private *id_priv, struct ibv_qp *qp)
ret = ibv_modify_qp(qp, &qp_attr, IBV_QP_STATE | IBV_QP_QKEY |
IBV_QP_PKEY_INDEX | IBV_QP_PORT);
if (ret)
- return ret;
+ return ERR(ret);
qp_attr.qp_state = IBV_QPS_RTR;
ret = ibv_modify_qp(qp, &qp_attr, IBV_QP_STATE);
if (ret)
- return ret;
+ return ERR(ret);
qp_attr.qp_state = IBV_QPS_RTS;
qp_attr.sq_psn = 0;
- return ibv_modify_qp(qp, &qp_attr, IBV_QP_STATE | IBV_QP_SQ_PSN);
+ ret = ibv_modify_qp(qp, &qp_attr, IBV_QP_STATE | IBV_QP_SQ_PSN);
+ return rdma_seterrno(ret);
}
static int ucma_init_ud_qp(struct cma_id_private *id_priv, struct ibv_qp *qp)
ret = ibv_modify_qp(qp, &qp_attr, qp_attr_mask);
if (ret)
- return ret;
+ return ERR(ret);
qp_attr.qp_state = IBV_QPS_RTR;
ret = ibv_modify_qp(qp, &qp_attr, IBV_QP_STATE);
if (ret)
- return ret;
+ return ERR(ret);
qp_attr.qp_state = IBV_QPS_RTS;
qp_attr.sq_psn = 0;
- return ibv_modify_qp(qp, &qp_attr, IBV_QP_STATE | IBV_QP_SQ_PSN);
+ ret = ibv_modify_qp(qp, &qp_attr, IBV_QP_STATE | IBV_QP_SQ_PSN);
+ return rdma_seterrno(ret);
}
static void ucma_destroy_cqs(struct rdma_cm_id *id)
static int ucma_create_cqs(struct rdma_cm_id *id, struct ibv_qp_init_attr *attr)
{
- int ret;
-
if (!attr->recv_cq) {
id->recv_cq_channel = ibv_create_comp_channel(id->verbs);
- if (!id->recv_cq_channel) {
- ret = ERR(ENOMEM);
+ if (!id->recv_cq_channel)
goto err;
- }
id->recv_cq = ibv_create_cq(id->verbs, attr->cap.max_recv_wr,
id, id->recv_cq_channel, 0);
- if (!id->recv_cq) {
- ret = ERR(ENOMEM);
+ if (!id->recv_cq)
goto err;
- }
+
attr->recv_cq = id->recv_cq;
}
if (!attr->send_cq) {
id->send_cq_channel = ibv_create_comp_channel(id->verbs);
- if (!id->send_cq_channel) {
- ret = ERR(ENOMEM);
+ if (!id->send_cq_channel)
goto err;
- }
id->send_cq = ibv_create_cq(id->verbs, attr->cap.max_send_wr,
id, id->send_cq_channel, 0);
- if (!id->send_cq) {
- ret = ERR(ENOMEM);
+ if (!id->send_cq)
goto err;
- }
+
attr->send_cq = id->send_cq;
}
return 0;
err:
ucma_destroy_cqs(id);
- return ret;
+ return ERR(ENOMEM);
}
int rdma_create_qp(struct rdma_cm_id *id, struct ibv_pd *pd,
return 0;
if (!id_priv->id.qp && !param)
- return ERR(EINVAL);
+ goto err;
if (!param)
return 0;
if ((param->responder_resources != RDMA_MAX_RESP_RES) &&
(param->responder_resources > id_priv->cma_dev->max_responder_resources))
- return ERR(EINVAL);
+ goto err;
if ((param->initiator_depth != RDMA_MAX_INIT_DEPTH) &&
(param->initiator_depth > id_priv->cma_dev->max_initiator_depth))
- return ERR(EINVAL);
+ goto err;
return 0;
+err:
+ return ERR(EINVAL);
}
static void ucma_copy_conn_param_to_kern(struct cma_id_private *id_priv,
return ret;
if (event->status) {
- ret = event->status;
+ ret = ERR(event->status);
goto err;
}
if (!evt->id_priv->id.qp)
return 0;
- return ibv_attach_mcast(evt->id_priv->id.qp, &evt->mc->mgid,
- evt->mc->mlid);
+ return rdma_seterrno(ibv_attach_mcast(evt->id_priv->id.qp,
+ &evt->mc->mgid, evt->mc->mlid));
}
static void ucma_copy_conn_event(struct cma_event *event,
if ((sync = (channel == NULL))) {
channel = rdma_create_event_channel();
if (!channel)
- return ERR(ENOMEM);
+ return -1;
}
CMA_CREATE_MSG_CMD_RESP(msg, cmd, resp, UCMA_CMD_MIGRATE_ID, size);