struct ibv_create_qp_resp *resp, size_t resp_size)
{
struct ibv_qp_init_attr_ex attr_ex;
+ int ret;
- memcpy(&attr_ex, attr, sizeof attr);
+ memcpy(&attr_ex, attr, sizeof *attr);
attr_ex.comp_mask = 0;
- return ibv_cmd_create_qp_ex(pd, qp, &attr_ex, cmd, cmd_size, resp, resp_size);
+ ret = ibv_cmd_create_qp_ex(pd, qp, &attr_ex, cmd, cmd_size, resp, resp_size);
+ if (!ret)
+ memcpy(attr, &attr_ex, sizeof *attr);
+
+ return ret;
}
int ibv_cmd_query_qp(struct ibv_qp *qp, struct ibv_qp_attr *attr,
struct ibv_qp_init_attr *qp_init_attr)
{
struct ibv_qp_init_attr_ex qp_init_attr_ex;
+ struct ibv_qp *qp;
- memcpy(&qp_init_attr_ex, qp_init_attr, sizeof qp_init_attr);
+ memcpy(&qp_init_attr_ex, qp_init_attr, sizeof *qp_init_attr);
qp_init_attr_ex.comp_mask = 0;
- return ibv_create_qp_ex(pd, &qp_init_attr_ex);
+ qp = ibv_create_qp_ex(pd, &qp_init_attr_ex);
+ if (qp)
+ memcpy(qp_init_attr, &qp_init_attr_ex, sizeof *qp_init_attr);
+
+ return qp;
}
default_symver(__ibv_create_qp, ibv_create_qp);