|
@@ -146,7 +146,7 @@ static void free_rd_atomic_resources(struct rxe_qp *qp)
|
|
|
if (qp->resp.resources) {
|
|
|
int i;
|
|
|
|
|
|
- for (i = 0; i < qp->attr.max_rd_atomic; i++) {
|
|
|
+ for (i = 0; i < qp->attr.max_dest_rd_atomic; i++) {
|
|
|
struct resp_res *res = &qp->resp.resources[i];
|
|
|
|
|
|
free_rd_atomic_resource(qp, res);
|
|
@@ -174,7 +174,7 @@ static void cleanup_rd_atomic_resources(struct rxe_qp *qp)
|
|
|
struct resp_res *res;
|
|
|
|
|
|
if (qp->resp.resources) {
|
|
|
- for (i = 0; i < qp->attr.max_rd_atomic; i++) {
|
|
|
+ for (i = 0; i < qp->attr.max_dest_rd_atomic; i++) {
|
|
|
res = &qp->resp.resources[i];
|
|
|
free_rd_atomic_resource(qp, res);
|
|
|
}
|
|
@@ -298,8 +298,8 @@ static int rxe_qp_init_resp(struct rxe_dev *rxe, struct rxe_qp *qp,
|
|
|
|
|
|
wqe_size = rcv_wqe_size(qp->rq.max_sge);
|
|
|
|
|
|
- pr_debug("max_wr = %d, max_sge = %d, wqe_size = %d\n",
|
|
|
- qp->rq.max_wr, qp->rq.max_sge, wqe_size);
|
|
|
+ pr_debug("qp#%d max_wr = %d, max_sge = %d, wqe_size = %d\n",
|
|
|
+ qp_num(qp), qp->rq.max_wr, qp->rq.max_sge, wqe_size);
|
|
|
|
|
|
qp->rq.queue = rxe_queue_init(rxe,
|
|
|
&qp->rq.max_wr,
|
|
@@ -596,14 +596,21 @@ int rxe_qp_from_attr(struct rxe_qp *qp, struct ib_qp_attr *attr, int mask,
|
|
|
if (mask & IB_QP_MAX_QP_RD_ATOMIC) {
|
|
|
int max_rd_atomic = __roundup_pow_of_two(attr->max_rd_atomic);
|
|
|
|
|
|
+ qp->attr.max_rd_atomic = max_rd_atomic;
|
|
|
+ atomic_set(&qp->req.rd_atomic, max_rd_atomic);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (mask & IB_QP_MAX_DEST_RD_ATOMIC) {
|
|
|
+ int max_dest_rd_atomic =
|
|
|
+ __roundup_pow_of_two(attr->max_dest_rd_atomic);
|
|
|
+
|
|
|
+ qp->attr.max_dest_rd_atomic = max_dest_rd_atomic;
|
|
|
+
|
|
|
free_rd_atomic_resources(qp);
|
|
|
|
|
|
- err = alloc_rd_atomic_resources(qp, max_rd_atomic);
|
|
|
+ err = alloc_rd_atomic_resources(qp, max_dest_rd_atomic);
|
|
|
if (err)
|
|
|
return err;
|
|
|
-
|
|
|
- qp->attr.max_rd_atomic = max_rd_atomic;
|
|
|
- atomic_set(&qp->req.rd_atomic, max_rd_atomic);
|
|
|
}
|
|
|
|
|
|
if (mask & IB_QP_CUR_STATE)
|
|
@@ -673,24 +680,27 @@ int rxe_qp_from_attr(struct rxe_qp *qp, struct ib_qp_attr *attr, int mask,
|
|
|
if (mask & IB_QP_RETRY_CNT) {
|
|
|
qp->attr.retry_cnt = attr->retry_cnt;
|
|
|
qp->comp.retry_cnt = attr->retry_cnt;
|
|
|
- pr_debug("set retry count = %d\n", attr->retry_cnt);
|
|
|
+ pr_debug("qp#%d set retry count = %d\n", qp_num(qp),
|
|
|
+ attr->retry_cnt);
|
|
|
}
|
|
|
|
|
|
if (mask & IB_QP_RNR_RETRY) {
|
|
|
qp->attr.rnr_retry = attr->rnr_retry;
|
|
|
qp->comp.rnr_retry = attr->rnr_retry;
|
|
|
- pr_debug("set rnr retry count = %d\n", attr->rnr_retry);
|
|
|
+ pr_debug("qp#%d set rnr retry count = %d\n", qp_num(qp),
|
|
|
+ attr->rnr_retry);
|
|
|
}
|
|
|
|
|
|
if (mask & IB_QP_RQ_PSN) {
|
|
|
qp->attr.rq_psn = (attr->rq_psn & BTH_PSN_MASK);
|
|
|
qp->resp.psn = qp->attr.rq_psn;
|
|
|
- pr_debug("set resp psn = 0x%x\n", qp->resp.psn);
|
|
|
+ pr_debug("qp#%d set resp psn = 0x%x\n", qp_num(qp),
|
|
|
+ qp->resp.psn);
|
|
|
}
|
|
|
|
|
|
if (mask & IB_QP_MIN_RNR_TIMER) {
|
|
|
qp->attr.min_rnr_timer = attr->min_rnr_timer;
|
|
|
- pr_debug("set min rnr timer = 0x%x\n",
|
|
|
+ pr_debug("qp#%d set min rnr timer = 0x%x\n", qp_num(qp),
|
|
|
attr->min_rnr_timer);
|
|
|
}
|
|
|
|
|
@@ -698,12 +708,7 @@ int rxe_qp_from_attr(struct rxe_qp *qp, struct ib_qp_attr *attr, int mask,
|
|
|
qp->attr.sq_psn = (attr->sq_psn & BTH_PSN_MASK);
|
|
|
qp->req.psn = qp->attr.sq_psn;
|
|
|
qp->comp.psn = qp->attr.sq_psn;
|
|
|
- pr_debug("set req psn = 0x%x\n", qp->req.psn);
|
|
|
- }
|
|
|
-
|
|
|
- if (mask & IB_QP_MAX_DEST_RD_ATOMIC) {
|
|
|
- qp->attr.max_dest_rd_atomic =
|
|
|
- __roundup_pow_of_two(attr->max_dest_rd_atomic);
|
|
|
+ pr_debug("qp#%d set req psn = 0x%x\n", qp_num(qp), qp->req.psn);
|
|
|
}
|
|
|
|
|
|
if (mask & IB_QP_PATH_MIG_STATE)
|
|
@@ -717,38 +722,38 @@ int rxe_qp_from_attr(struct rxe_qp *qp, struct ib_qp_attr *attr, int mask,
|
|
|
|
|
|
switch (attr->qp_state) {
|
|
|
case IB_QPS_RESET:
|
|
|
- pr_debug("qp state -> RESET\n");
|
|
|
+ pr_debug("qp#%d state -> RESET\n", qp_num(qp));
|
|
|
rxe_qp_reset(qp);
|
|
|
break;
|
|
|
|
|
|
case IB_QPS_INIT:
|
|
|
- pr_debug("qp state -> INIT\n");
|
|
|
+ pr_debug("qp#%d state -> INIT\n", qp_num(qp));
|
|
|
qp->req.state = QP_STATE_INIT;
|
|
|
qp->resp.state = QP_STATE_INIT;
|
|
|
break;
|
|
|
|
|
|
case IB_QPS_RTR:
|
|
|
- pr_debug("qp state -> RTR\n");
|
|
|
+ pr_debug("qp#%d state -> RTR\n", qp_num(qp));
|
|
|
qp->resp.state = QP_STATE_READY;
|
|
|
break;
|
|
|
|
|
|
case IB_QPS_RTS:
|
|
|
- pr_debug("qp state -> RTS\n");
|
|
|
+ pr_debug("qp#%d state -> RTS\n", qp_num(qp));
|
|
|
qp->req.state = QP_STATE_READY;
|
|
|
break;
|
|
|
|
|
|
case IB_QPS_SQD:
|
|
|
- pr_debug("qp state -> SQD\n");
|
|
|
+ pr_debug("qp#%d state -> SQD\n", qp_num(qp));
|
|
|
rxe_qp_drain(qp);
|
|
|
break;
|
|
|
|
|
|
case IB_QPS_SQE:
|
|
|
- pr_warn("qp state -> SQE !!?\n");
|
|
|
+ pr_warn("qp#%d state -> SQE !!?\n", qp_num(qp));
|
|
|
/* Not possible from modify_qp. */
|
|
|
break;
|
|
|
|
|
|
case IB_QPS_ERR:
|
|
|
- pr_debug("qp state -> ERR\n");
|
|
|
+ pr_debug("qp#%d state -> ERR\n", qp_num(qp));
|
|
|
rxe_qp_error(qp);
|
|
|
break;
|
|
|
}
|