提交 057729cb 编写于 作者: N Naresh Gottumukkala 提交者: Roland Dreier

RDMA/ocrdma: Remove driver QP state machine

Remove QP state machine in ocrdma low-level driver and use on the core
IB stack's instead.
Signed-off-by: NNaresh Gottumukkala <bgottumukkala@emulex.com>
Signed-off-by: NRoland Dreier <roland@purestorage.com>
上级 9c58726b
......@@ -654,7 +654,7 @@ static void ocrdma_process_qpcat_error(struct ocrdma_dev *dev,
if (qp == NULL)
BUG();
ocrdma_qp_state_machine(qp, new_ib_qps, &old_ib_qps);
ocrdma_qp_state_change(qp, new_ib_qps, &old_ib_qps);
}
static void ocrdma_dispatch_ibevent(struct ocrdma_dev *dev,
......@@ -1676,8 +1676,8 @@ void ocrdma_flush_qp(struct ocrdma_qp *qp)
spin_unlock_irqrestore(&qp->dev->flush_q_lock, flags);
}
int ocrdma_qp_state_machine(struct ocrdma_qp *qp, enum ib_qp_state new_ib_state,
enum ib_qp_state *old_ib_state)
int ocrdma_qp_state_change(struct ocrdma_qp *qp, enum ib_qp_state new_ib_state,
enum ib_qp_state *old_ib_state)
{
unsigned long flags;
int status = 0;
......@@ -1694,96 +1694,11 @@ int ocrdma_qp_state_machine(struct ocrdma_qp *qp, enum ib_qp_state new_ib_state,
return 1;
}
switch (qp->state) {
case OCRDMA_QPS_RST:
switch (new_state) {
case OCRDMA_QPS_RST:
case OCRDMA_QPS_INIT:
break;
default:
status = -EINVAL;
break;
};
break;
case OCRDMA_QPS_INIT:
/* qps: INIT->XXX */
switch (new_state) {
case OCRDMA_QPS_INIT:
case OCRDMA_QPS_RTR:
break;
case OCRDMA_QPS_ERR:
ocrdma_flush_qp(qp);
break;
default:
status = -EINVAL;
break;
};
break;
case OCRDMA_QPS_RTR:
/* qps: RTS->XXX */
switch (new_state) {
case OCRDMA_QPS_RTS:
break;
case OCRDMA_QPS_ERR:
ocrdma_flush_qp(qp);
break;
default:
status = -EINVAL;
break;
};
break;
case OCRDMA_QPS_RTS:
/* qps: RTS->XXX */
switch (new_state) {
case OCRDMA_QPS_SQD:
case OCRDMA_QPS_SQE:
break;
case OCRDMA_QPS_ERR:
ocrdma_flush_qp(qp);
break;
default:
status = -EINVAL;
break;
};
break;
case OCRDMA_QPS_SQD:
/* qps: SQD->XXX */
switch (new_state) {
case OCRDMA_QPS_RTS:
case OCRDMA_QPS_SQE:
case OCRDMA_QPS_ERR:
break;
default:
status = -EINVAL;
break;
};
break;
case OCRDMA_QPS_SQE:
switch (new_state) {
case OCRDMA_QPS_RTS:
case OCRDMA_QPS_ERR:
break;
default:
status = -EINVAL;
break;
};
break;
case OCRDMA_QPS_ERR:
/* qps: ERR->XXX */
switch (new_state) {
case OCRDMA_QPS_RST:
break;
default:
status = -EINVAL;
break;
};
break;
default:
status = -EINVAL;
break;
};
if (!status)
qp->state = new_state;
if (new_state == OCRDMA_QPS_ERR)
ocrdma_flush_qp(qp);
qp->state = new_state;
spin_unlock_irqrestore(&qp->q_lock, flags);
return status;
......
......@@ -122,7 +122,7 @@ int ocrdma_mbx_destroy_srq(struct ocrdma_dev *, struct ocrdma_srq *);
int ocrdma_alloc_av(struct ocrdma_dev *, struct ocrdma_ah *);
int ocrdma_free_av(struct ocrdma_dev *, struct ocrdma_ah *);
int ocrdma_qp_state_machine(struct ocrdma_qp *, enum ib_qp_state new_state,
int ocrdma_qp_state_change(struct ocrdma_qp *, enum ib_qp_state new_state,
enum ib_qp_state *old_ib_state);
bool ocrdma_is_qp_in_sq_flushlist(struct ocrdma_cq *, struct ocrdma_qp *);
bool ocrdma_is_qp_in_rq_flushlist(struct ocrdma_cq *, struct ocrdma_qp *);
......
......@@ -1101,7 +1101,7 @@ int _ocrdma_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
qp = get_ocrdma_qp(ibqp);
dev = qp->dev;
if (attr_mask & IB_QP_STATE)
status = ocrdma_qp_state_machine(qp, attr->qp_state, &old_qps);
status = ocrdma_qp_state_change(qp, attr->qp_state, &old_qps);
/* if new and previous states are same hw doesn't need to
* know about it.
*/
......@@ -2106,7 +2106,7 @@ static bool ocrdma_update_err_cqe(struct ib_wc *ibwc, struct ocrdma_cqe *cqe,
ibwc->status = ocrdma_to_ibwc_err(status);
ocrdma_flush_qp(qp);
ocrdma_qp_state_machine(qp, IB_QPS_ERR, NULL);
ocrdma_qp_state_change(qp, IB_QPS_ERR, NULL);
/* if wqe/rqe pending for which cqe needs to be returned,
* trigger inflating it.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册